Código
#include <stdio.h> #include <stdlib.h> #include <time.h> #define LARGON 15 #define LARGOA 15 #define LARGOC 7 #define LARGOALI 10 #define CANTJUG 100 typedef struct { char palabra[LARGON]; int largopalabra; }cadena; //estructura tipo cadena para nombre jugador typedef struct { char palabra[LARGOA]; int largopalabra; }cadena2; //otra estructura tipo cadena(2) para apellido jugador typedef struct { char numero[LARGOC]; int largodigito; }digito; //tipo digito para CI jugador typedef struct { int dia; int mes; int año; }fecha; //defino estructura fecha para ser utilizada en la fecha de nacimiento typedef struct { char palabra[LARGOALI]; int largopalabra; }cadena3; //definoi estructura tipo cadena(3) para alias jugador typedef struct { cadena nombre; cadena2 apellido; cadena3 alias; digito cedula; int edad; fecha fechanacimiento; } jugador; // defino estructura jugador para ser utilizada en el arreglo que guarda los jugadores. /*typedef struct{ fecha fecha_partida; char alias1[10]; char alias2[10]; int round_jug1; int round_jug2; }info_partida;*/ //Prototipos void menu(); void reglas(); void fin_juego(); void Elegir_Bosque(); void Iniciar_Bosque(); void Actualizar_Juego(); void Bucle_Juego(); void mover_tirarflecha(int); void inicializo(jugador jugadores[], int pos);//inicializo jugadores void menu();//armo el menu int ingopcion();//ingreso la ocpion del menu int ingNroJugador();//ingreso nro del jugador void alta(jugador jugadores[]);//procedimiento de alta cadena ingresoNombre();// ingreso nombre del jugador cadena2 ingresoApellido();//ingreso apellido del jugador cadena3 ingresoAlias();//ingreso alias del jugador digito ingresoCedula();//ingreso cedula del jugador int calcularEdad();//calculo la Edad del jugador con la fecha de nacimiento fecha ingresoFechanacimiento();//ingreso fecha de nacimiento void baja(jugador jugadores[]);//procedimiento para dar de baja al jugador void modificacion(jugador jugadores[]);//procedimiento para consultar el jugador void muestroNombre(jugador jugadores[],int pos);//muestro el nombre del jugador void muestroApellido(jugador jugadores[],int pos);//muestro el apellido del jugador void muestroCedula(jugador jugadores[],int pos);//muestro la cedula del jugador void muestroEdad(jugador jugadores[],int pos);//muestro la edad del jugador void muestroFechanacimiento(jugador jugadores[],int pos);//muestro la fecha de nacimiento void muestroAlias(jugador jugadores[], int pos);//muestro el alias void Gestionar_jugadores(); void Consultas(); fecha fecha_del_dia(); //Variables globales char bosque6x6[6][6]; char bosque8x8[8][8]; char bosque10x10[10][10]; char bosque14x14[14][14]; char bosque18x18[18][18]; int opcion=0; int tam_bosque=0; int main() { while(opcion!=5) { fecha_del_dia(); menu(); switch(opcion) { case 1: Elegir_Bosque(); break; case 2: reglas(); break; case 3: Gestionar_jugadores(); break; case 4: Consultas(); break; case 5: fin_juego(); break; } } return 0; } void menu() { } fecha fecha_del_dia() { fecha fechadia; return fechadia; } void reglas() //aca muestro las reglas. tiene que poder volver al menu anterior { printf(" Al recibir un flechazo el jugador pierde el round, las partidas se componen de 3 round y las gana el que gane 2 de ellos.\n"); char p; } void fin_juego() { } void Elegir_Bosque() { int elige_bosque; switch(elige_bosque) { case 1: tam_bosque = 6; Iniciar_Bosque(); Bucle_Juego(); break; case 2: tam_bosque = 8; Iniciar_Bosque(); Bucle_Juego(); break; case 3: tam_bosque = 10; Iniciar_Bosque(); Bucle_Juego(); break; case 4: tam_bosque = 14; Iniciar_Bosque(); Bucle_Juego(); break; case 5: tam_bosque = 18; Iniciar_Bosque(); Bucle_Juego(); break; } } //valores iniciales para el bosque void Iniciar_Bosque() { int Xnum=0; int i, j; if(tam_bosque == 6) { for(i = 0; i < tam_bosque;i++) for(j = 0; j < tam_bosque;j++) bosque6x6[i][j] = ' '; bosque6x6[0][0] = '1'; bosque6x6[5][5] = '2'; while(Xnum < tam_bosque/2 ) { if(bosque6x6[i][j] == ' ') { bosque6x6[i][j] = 'X'; Xnum++; } } } else if(tam_bosque == 8) { for(i = 0; i < tam_bosque;i++) for(j = 0; j < tam_bosque;j++) bosque8x8[i][j] = ' '; bosque8x8[0][0] = '1'; bosque8x8[7][7] = '2'; while(Xnum < tam_bosque/2 ) { if(bosque8x8[i][j] == ' ') { bosque8x8[i][j] = 'X'; Xnum++; } } } else if(tam_bosque == 10) { for(i = 0; i < tam_bosque;i++) for(j = 0; j < tam_bosque;j++) bosque10x10[i][j] = ' '; bosque10x10[0][0] = '1'; bosque10x10[9][9] = '2'; while(Xnum < tam_bosque/2 ) { if(bosque10x10[i][j] == ' ') { bosque10x10[i][j] = 'X'; Xnum++; } } } else if(tam_bosque == 14) { for(i = 0; i < tam_bosque;i++) for(j = 0; j < tam_bosque;j++) bosque14x14[i][j] = ' '; bosque14x14[0][0] = '1'; bosque14x14[13][13] = '2'; while(Xnum < tam_bosque/2 ) { if(bosque14x14[i][j] == ' ') { bosque14x14[i][j] = 'X'; Xnum++; } } } else if(tam_bosque == 18) { for(i = 0; i < tam_bosque;i++) for(j = 0; j < tam_bosque;j++) bosque18x18[i][j] = ' '; bosque18x18[0][0] = '1'; bosque18x18[17][17] = '2'; while(Xnum < tam_bosque/2 ) { if(bosque18x18[i][j] == ' ') { bosque18x18[i][j] = 'X'; Xnum++; } } } } //dibuja cuando sea necesario void Actualizar_Juego() { if(tam_bosque == 6) { int i,j; for (j = 0; j < tam_bosque;j++) //filas alfabeticas for (i = 0;i < tam_bosque;i++) //columnas numeradas { for (j = 0;j < tam_bosque;j++) { } } } else if( tam_bosque == 8) { int i,j; for (j = 0;j < tam_bosque;j++) //filas alfabeticas for (i = 0;i < tam_bosque;i++) //columnas numeradas { for (j = 0;j < tam_bosque;j++) { } } } else if( tam_bosque == 10) { int i,j; for (j = 0;j < tam_bosque;j++) //filas alfabeticas for (i = 0;i < tam_bosque;i++) //columnas numeradas { for (j = 0;j < tam_bosque;j++) { } } } else if( tam_bosque == 14) { int i,j; for (j = 0;j < tam_bosque;j++) //filas alfabeticas for (i = 0;i < tam_bosque;i++) //columnas numeradas { for (j = 0;j < tam_bosque;j++) { } } } else if( tam_bosque == 18) { int i,j; for (j = 0;j < tam_bosque;j++) //filas alfabeticas for (i = 0;i < tam_bosque;i++) //columnas numeradas { for (j = 0;j < tam_bosque;j++) { } } } } //jugadas void Bucle_Juego() { int ganador=0; int turno=0; do { while(ganador == 0)//que se repita mientras no haya ningun ganador { Actualizar_Juego(); //Actualiza el juego mover_tirarflecha(turno); //mueve o ataca //Falta comprobar si alguno ya ganó //Cambiando los turnos if(turno == 1) { turno = 2; } else turno = 1; } //cuando se termine el bucle comprueba quien ha ganado if(ganador == 1) { } else if(ganador == 2) ganador++; } while (ganador < 3); //para que pregunte si quiere salir o seguir jugando /*char respuesta; int s=0,n=1; printf("Quiere jugar de nuevo? (s/n): "); scanf(" %c", &respuesta); if (respuesta==s) { } else if (respuesta==n) fin_juego();*/ } void mover_tirarflecha(int turno) { char imagen_jugador; //dibuja 1' o '2' dependiendo del turno if(turno == 1) { imagen_jugador = '1'; } else { imagen_jugador = '2'; } char accion; //moverse int o_i,d_i; //coordenadas origen char o_j,d_j; //coordenadas destino //para saber lo que ha ingresado if(accion == 'm') { //Dependiendo del tamaño del bosque if( tam_bosque == 6) { //para que se mueva 1 solo lugar /*if ((bosque6x6[d_i+1][d_j])&&(bosque6x6[d_i][d_j+1])&&(bosque6x6[d_i-1][d_j])&&(bosque6x6[d_i][d_j-1]))*/ { bosque6x6[o_i][o_j - 97]= ' '; //queda vacio donde estaba bosque6x6[d_i][d_j - 97]= imagen_jugador; //a donde lo mueve mientras esté el espacio vacio } } else if( tam_bosque == 8) { bosque8x8[o_i][o_j - 97]= ' '; bosque8x8[d_i][d_j - 97]= imagen_jugador; } else if( tam_bosque == 10) { bosque10x10[o_i][o_j - 97]= ' '; bosque10x10[d_i][d_j - 97]= imagen_jugador; } else if( tam_bosque == 14) { bosque14x14[o_i][o_j - 97]= ' '; bosque14x14[d_i][d_j - 97]= imagen_jugador; } else if( tam_bosque == 18) { bosque18x18[o_i][o_j - 97]= ' '; bosque18x18[d_i][d_j - 97]= imagen_jugador; } } else if(accion == 't') //para disparar flecha. Se mueven arriba,abajo,izq,derecha { //para el bosque x6 if (tam_bosque==6) { int limite=0, arriba=0, abajo=0, izq=0, derecha=0; int i=d_i; int j=d_j; while((limite<5) && (arriba<6) && (bosque6x6[i][j]!='X'))//para arriba { if (bosque6x6[i][j]!='2') { arriba++; j++; } } while((limite<5) && (abajo<6) && (bosque6x6[i][j]!='X'))//para abajo { if (bosque6x6[i][j]!='2') { abajo++; j--; } } while((limite<5) && (izq<6) && (bosque6x6[i][j]!='X'))//para la izquierda { if (bosque6x6[i][j]!='2') { izq++; i--; } } while((limite<5) && (derecha<6) && (bosque6x6[i][j]!='X'))//para la derecha { if (bosque6x6[i][j]!='2') { derecha++; i++; } } } } else if (accion = 'r') { menu(); } } void Gestionar_jugadores() { jugador jugadores[CANTJUG]; //inicializo todo el arreglo int i; for (i=0; i<CANTJUG;i++) { inicializo(jugadores,i); } int op; op = ingopcion(); while (op!=4) { switch (op) { case 1: alta(jugadores); break; case 2: baja(jugadores); break; case 3: modificacion(jugadores); break; case 4: menu(); break; } } } int ingopcion() { int opcion; do { } while ((opcion < 1) || (opcion > 4)); return (opcion); } void inicializo(jugador jugadores[], int pos) { //inicializo el nombre del jugador int x; for (x=0;x<LARGON;x++) { jugadores[pos].nombre.palabra[x] = ' '; } jugadores[pos].nombre.largopalabra = 0; //inicializo la cedula for (x=0;x<LARGOC;x++) { jugadores[pos].cedula.numero[x] = ' '; } jugadores[pos].edad = 0; jugadores[pos].fechanacimiento.dia = 0; jugadores[pos].fechanacimiento.mes = 0; jugadores[pos].fechanacimiento.año = 0; for(x=0;x<LARGOA;x++) { jugadores[pos].apellido.palabra[x] = ' '; } jugadores[pos].apellido.largopalabra = 0; for(x=0;x<LARGOALI;x++) { jugadores[pos].alias.palabra[x] = ' '; } jugadores[pos].alias.largopalabra = 0; } int ingNroJugador() { int nrojug; do { } while ((nrojug < 1) || (nrojug > CANTJUG)); return (nrojug); } void alta(jugador jugadores[])//problema me sigue pidiendo jugadores en vez de volver al menu { char confirma; int nroJug; nroJug = ingNroJugador(); if (jugadores[nroJug-1].nombre.largopalabra==0) { jugadores[nroJug-1].nombre = ingresoNombre(); jugadores[nroJug-1].apellido = ingresoApellido(); jugadores[nroJug-1].cedula = ingresoCedula(); jugadores[nroJug-1].fechanacimiento = ingresoFechanacimiento(); jugadores[nroJug-1].alias = ingresoAlias(); if (confirma=='N' || confirma == 'n') { inicializo(jugadores,nroJug-1); menu(); } } else { } } cadena ingresoNombre() { cadena nom; int i; i = 0; { i++; } nom.largopalabra = i; return nom; } cadena2 ingresoApellido() { cadena2 ape; int i; i = 0; { i++; } ape.largopalabra = i; return ape; } digito ingresoCedula() { int i=0; digito ced; { i++; } ced.largodigito = i; return ced; } fecha ingresoFechanacimiento() { fecha fechanac; return fechanac; } int calcularEdad() { fecha f = ingresoFechanacimiento(); int edad = 2015 - f.año; return edad; } cadena3 ingresoAlias() { cadena3 ali; int i; i = 0; { i++; } ali.largopalabra = i; return ali; } void baja(jugador jugadores[]) { char confirma; int nroJug; nroJug = ingNroJugador(); if (jugadores[nroJug-1].nombre.largopalabra!=0) { muestroNombre(jugadores, nroJug-1); muestroApellido(jugadores, nroJug-1); muestroCedula(jugadores, nroJug|-1); muestroEdad(jugadores, nroJug-1); muestroFechanacimiento(jugadores,nroJug-1); muestroAlias(jugadores,nroJug-1); if ((confirma == 'S') || (confirma == 's')) { inicializo(jugadores,nroJug-1); } } else { } } void modificacion(jugador jugadores[]) { int nroJug; nroJug = ingNroJugador(); if (jugadores[nroJug-1].nombre.palabra[1]!=' ') { muestroNombre(jugadores, nroJug-1); muestroApellido(jugadores, nroJug-1); muestroCedula(jugadores, nroJug-1); muestroFechanacimiento(jugadores,nroJug-1); muestroEdad(jugadores, nroJug-1); } else { } } void muestroNombre(jugador jugadores[],int pos) { int i; for (i=0;i<jugadores[pos].nombre.largopalabra;i++) { } } void muestroApellido(jugador jugadores[],int pos) { int i; for (i=0;i<jugadores[pos].apellido.largopalabra;i++) { } } void muestroCedula(jugador jugadores[], int pos) { int i; for (i=0;i<jugadores[pos].cedula.largodigito;i++) { } } void muestroFechanacimiento(jugador jugadores[],int pos) { printf ("\nFecha de Nacimiento: %d/%d/%d",jugadores[pos].fechanacimiento.dia,jugadores[pos].fechanacimiento.mes,jugadores[pos].fechanacimiento.año); } void muestroEdad(jugador jugadores[], int pos) { } void muestroAlias(jugador jugadores[], int pos) { int i; for (i=0;i<jugadores[pos].alias.largopalabra;i++) { } } void Consultas(jugador jugadores[], int pos) { int i; char p; int op; op = ingopcion(); while (op!=5) {for(i=1;i<CANTJUG;i++){ switch (op) { case 1://Listado de jugadores for(i=0;i<CANTJUG;i++){ break; case 2: /*listado_partidas;*/ break; case 3: /*listado_partidas_xjugador;*/ break; case 4: /*listado_partidas_xfecha;*/ break; case 5: menu(); break; } } } }