Duda Sobre Problema En Función While(Para creación de serpientes y escaleras)

Iniciado por greenpark, 2 Junio 2017, 00:27 AM

0 Miembros y 1 Visitante están viendo este tema.

greenpark

Buenas tengo una duda, estoy trabajando con la creacion de el juego serpientes y escaleras en C, y a la hora de crear dichas serpientes y escaleras se me crea un bucle con el While, donde el programa se ejecuta algunas veces y otras no se ejecuta

#include <stdio.h>
#include <stdlib.h>
#include <time.h>

void ingresar();
void imprimir();
void constructor();
int turnojugador();

int dado1,dado2;
char jugador1='X',PC='O'; 

typedef struct modeloserpiente {
       int cabeza_X,cabeza_Y, cola_X,cola_Y;
}serpiente;
typedef struct modeloescalera {
        int inicio_X,inicio_Y, final_X,final_Y;
}escalera;

typedef struct modelo_casilla{
   char letra;
   int numero;
}casilla;

casilla matriz[10][10] = {0};

escalera escaleras[5]={0};
serpiente serpientes[5]={0};     


//Carga dentro de la matriz las serpientes y escalera generados al azar, no genera salida(no devuelve nada)//
void constructor(){
printf("\n");
     int i,j,k,aux,bandera,e;
     for(i=0;i<6;i++)
     {
        serpientes[i].cabeza_Y = (rand() % 9);
        serpientes[i].cabeza_X = (rand() % 8) +1;
        serpientes[i].cola_Y =   (rand() % 9);
        matriz[serpientes[i].cabeza_X][serpientes[i].cabeza_Y].letra = 'S';
        do
        {
          serpientes[i].cola_X = (rand() % 9); printf("\n");
          if(serpientes[i].cola_X > serpientes[i].cabeza_X)
          {
            break;
          }
        }while(1);
      matriz[serpientes[i].cola_X][serpientes[i].cola_Y].letra = 's';
     }
    for(i=0;i<5;i++)
{
escaleras[i].final_X = (rand() % 9);
escaleras[i].inicio_Y = (rand() % 9);
escaleras[i].final_Y = (rand() % 9);
matriz[escaleras[i].inicio_X][escaleras[i].inicio_Y].letra = 'E';
do
{
escaleras[i].inicio_X= (rand() % 9); printf("\n");
if(escaleras[i].inicio_X < escaleras[i].final_X)
{
printf("\n");
break;
}
}while(1);

matriz[escaleras[i].final_X][escaleras[i].final_Y].letra = 'e';
}
printf("\n");
}

//Cargamos dentro de la matriz los numeros de casillas correspondiente a un trablero de juego//
void ingresar(){
int i,j;
int aux;

aux=101;
for (i=0; i<10 ; i++){
for (j=0; j<10; j++){
switch (i){
case 0: {
(matriz[i][j]).numero= 100-j;
break;
}
case 1: {
(matriz[i][j]).numero = 81+j;
break;
}
case 2: {
(matriz[i][j]).numero= 80-j;
break;
}
case 3: {
(matriz[i][j]).numero= 61+j;
break;
}
case 4: {
(matriz[i][j]).numero=60-j;
break;
}
case 5: {
(matriz[i][j]).numero= 41+j;
break;
}
case 6: {
                     (matriz[i][j]).numero= 40-j;
break;
}
case 7: {
(matriz[i][j]).numero= 21+j;
break;
}
case 8: {
    (matriz[i][j]).numero= 20-j;
break;
}
case 9: {
(matriz[i][j]).numero= 1+j;
break;
}
}

}
}
}

//Imprimimos el tablero de juego considerando si cada casilla posee una ficha,escalera,serpiente, imprimiendolo o en caso contrario imprimiendo el numero//
void imprimir(){
     int i,j;
     for (i=0; i<10; i++) {
         for (j=0; j<10; j++) {
          if(matriz[i][j].letra == 'Z'||matriz[i][j].letra == 'X' || matriz[i][j].letra == 'O' || matriz[i][j].letra == 'S' || matriz[i][j].letra == 'E' || matriz[i][j].letra == 's' || matriz[i][j].letra == 'e')
          {
             printf("%3c",matriz[i][j].letra);
           }   
           else
           {
             printf("%3d",matriz[i][j].numero);
           }
         }
         printf("\n");
}     
     
}

//Esta funcion pregunta al usuario si quiere seguir jugando o rendirse//
//En caso de querer rendirse queda registrado para salir del juego//
//En caso de seguir jugando se generara numeros para los dados y se movera la ficha la cantidad de casillas indicada por los dados//
int turnojugador()
{
  srand(time(NULL));
  printf("\nAhora le toca al jugador lanzar sus dados!\n");
  int seleccion,aux,bandera;
  do
  {
    printf("\nSeleccione una opcion de las siguientes:\n1-)Lanzar los dados.\n2-)Salir Del Juego. \n3-)Acerca De: \nSu eleccion es: ");
    aux=scanf("%d",&seleccion);
    fflush(stdin);
    if(aux==1 && seleccion ==1 ||seleccion == 2 )
    {
      printf("Gracias Por Jugar Nuestro Juego \n ");
   break;
    }
    else
    {
     printf("Resena\n Serpientes y escaleras es un antiguo juego\n de tablero indio, considerado \n actualmente como un clasico a nivel\n mundial. Se juega entre dos o mas \n personas en un tablero numerado y \n dividido en casilleros, que posee ademas \n un numero determinado de serpientes y \n escaleras que conectan, cada una, dos \n casilleros numerados. El movimiento se \n determina en la actualidad por un dado \n  cuyos valores estan \n comprendidos entre 1 y 6.\n\n Objetivo\n\n El objetivo del juego es lograr que la ficha\n del jugador llegue desde el inicio: \n casillero inferior izquierdo, hasta el final:\n casillero superior izquierdo, ayudado por\n las escaleras y evitando las serpientes\n \n\n Reglas\n\n 1-Tirar los dados y moverse \n 2-Deslizarse hacia abajo si sale serpientes \n 3-Subirse hacia arriba si sale escaleras \n 4-Caer Exactamente en 100 para ganar");    }
  }while(1);
  if(seleccion==2)
  {
    return 2;
  }
  dado1=(rand() % 6)+1;
  dado2=(rand() % 6)+1;
  printf("\nEn su primer dado obtuvo:%d\nEn su segundo dado optuvo:%d \n",dado1,dado2);
  printf("\nUsted se movera %d casillas.",dado1+dado2);
  int i,j,k;
  int fila_nueva,columna_nueva;
  for(i=0;i<10;i++)
  {
     for(j=0;j<10;j++)
     {
       if(matriz[i][j].letra=='X' || matriz[i][j].letra=='Z')
       {
         
       }
     }
  }
}

// Para finalizar el juego
int finalizarJuego(int jug1, int jug2, int x, int y)
{
if(jug1>=100)
{
        jug1=100;
        printf("\n");
        printf("Jugador 1 es el Ganador",x,y);
        printf("\n");
    }
    else
{
        jug2=100;
        printf("\n");
        printf("Jugador 2 es el Ganador ",y,x);
        printf("\n");
    }
    return 0;
}

int main() {

srand(time(NULL));     
printf("\nBienvenido al juego\n");
ingresar();
constructor();
    imprimir();
matriz[9][0].letra = 'Z';
turnojugador();
return 0;
}