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
Código (c) [Seleccionar]
#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;
}