|
Buscar en Wikipedia |
|
 |
|
Programa para jugar a los barcos, llevando puntuaciones.
#include <stdio.h> #include <conio.h> #include <string.h> #include <stdlib.h> #define FILASTOTAL 8 //Filas del tablero #define COLUMNASTOTAL 8 //Columnas del tablero #define INTENTOSMAXIMOS 32 //Numero de intentos #define BARCOSTOTAL 5 //numero de barcos totales struct tipopuntuacion{ //Estructura que define la puntuaciÛn char nombre[25]; int puntos; }; char tablabarcos[FILASTOTAL][COLUMNASTOTAL]; //Array que contiene la configuraciÛn del tablero char tablaintentos[FILASTOTAL][COLUMNASTOTAL]; //Array que contiene los intentos del usuario int contador; //Contador de intentos int estado; //Indica si un barco ha sido hundiodo o ha sido agua void pensarbarcos(); //FunciÛn que piensa los barcos al azar void inicializar(); //FunciÛn que pone inicializa los array void verbarcos(); //FunciÛn que muestra el estado de la partida void vertablero(); //FunciÛn que muestra la configuraciÛn del tablero una vez terminado el juego void aceptarbarcos(); //FunciÛn para que el usuario meta la fila y la columna void comprobar(int,int); //FunciÛn que comprueba si ha sido hundido o agua void ganar(); //FunciÛn que visualiza un grafico si se gana void perder(); //FunciÛn que muestra un grafico diferente al anterior si se pierde void bienvenida(); //FunciÛn que muestra un gr·fico de bienvenida void despedida(); //Funcion que muestra el grafico de despedida int fcomppunt(const void *pelem1,const void *pelem2); //FunciÛn de comparaciÛn para el ranking de puntos int contarreg(FILE *); //FunciÛn quecuenta los registros que hay en el fichero main(){ struct tipopuntuacion punt,puntuaciones[100]; int intentos, cuentaatras, puntos,registros,contadoreg,contadorcolor; char confirmacion; FILE *pfich; pfich=fopen("PUNTUACION.DAT","a+"); //abrimos el fichero de puntuaciones confirmacion='s'; bienvenida(); while(confirmacion=='s' || confirmacion=='S'){ //mientras que la confirmaciÛn sea 's' se sigue jugando. estado=2; //inicializaciÛn de las variables necesarias. intentos=0; contador=0; puntos=0; contadorcolor=0; cuentaatras=INTENTOSMAXIMOS; clrscr(); randomize(); inicializar(); //inicializamos los array pensarbarcos(); //ponemos los barcos while(contador<BARCOSTOTAL && intentos<INTENTOSMAXIMOS){ //mientras que no se hayan encontrado los barcos y no se hayan superado los intentos se sigue jugando verbarcos(); //Visualizamo el estado del tablero if (estado==0){ //Comprobamos el esado si es = a 0 es agua y sino hemos hundido un barco textcolor(9); //con textcolor lo que hacemos es cambiar el color de texto puntos=puntos-1; //si es agua quitamos 3 puntos cprintf(" Agua"); //visualizamos si es agua o no }else{ if (estado==1){ textcolor(12); puntos=puntos+15; //Si se ha hundido un barco sumamos 15 puntos cprintf(" Hundido"); }
} textcolor(14); cprintf(" Te quedan %i intentos. Y %i barcos por encontrar.",cuentaatras, BARCOSTOTAL-contador); //mensaje de los intentos y barcos printf("\n\n"); //que quedan por hundir aceptarbarcos(); //pedimos que meta un barco intentos++; //aumentamos el contaodr de intentos cuentaatras--; //Disminuimos es 1 a la cuenta atras clrscr(); }
if (estado==0){ //CondiciÛn que suma o resta la ultima accion antes de salir del while anterior puntos=puntos-1; }else{ if (estado==1){ puntos=puntos+15; } }
if(intentos<INTENTOSMAXIMOS){ //condiciÛn que identifica si hemos ganado o perdido puntos=puntos+50; ganar(); //si hemos ganado nos muestra el grafico de ganador }else{ if(puntos<0){ puntos=0; } perder(); //si hemos perdido nos muestra el grafico de perdedor vertablero(); //nos muestra como estaban colocados los barcos }
printf("\n\n");
contadoreg=0; //inicializamos el contador de regitros a 0 fseek(pfich,0,2); //colocamos el puntaro al final del fichero printf("Dame un nombre: "); gets(punt.nombre); //aceptamos un nombre punt.puntos=puntos; //metemos los puntos en la estructura fwrite(&punt,sizeof(struct tipopuntuacion),1,pfich);//escribimos en el fichero
registros=contarreg(pfich); //contaamos los registros mediante la funciÛn contarreg fseek(pfich,0,0); //colocamos el puntero al inicio del fichero fread(puntuaciones,sizeof(struct tipopuntuacion),registros,pfich);//leemos los registros y lo metemos en un array de estructuras qsort(puntuaciones,registros,sizeof(struct tipopuntuacion),fcomppunt); //ordenamos el array en orden descendente clrscr(); textcolor(10); cprintf("--------------------------------------------------------------------------------"); printf("\n"); cprintf(" TABLA DE PUNTUACIONES "); printf("\n"); cprintf("--------------------------------------------------------------------------------"); printf("\n\n"); cprintf(" Usuario Puntos "); printf("\n"); cprintf("********************************************************************************"); printf("\n");
while(contadoreg<registros){ //Visualizamos las puntuaciones if(contadorcolor%2!=0){ textcolor(14); }else{ textcolor(23); } printf("\n\t");
cprintf("%25s",puntuaciones[contadoreg].nombre); printf("\t");
cprintf("%4i",puntuaciones[contadoreg].puntos); contadoreg++; contadorcolor++; } textcolor(14); printf("\n"); cprintf("Volver a Jugar: "); confirmacion=getche(); } despedida(); getche(); }
void aceptarbarcos(){ //Funcion para que el usaurios introduzca los barcos int fila,columna; //Variables necesarias
do{ //no sale del bucle mientras que no sea un numero comprendido entre 1 y las filas del tablero printf("Dame una fila: "); scanf("%i",&fila); fflush(stdin); }while(fila<1||fila>FILASTOTAL); do{ //no sale del bucle mientras que no sea un numero comprendido entre 1 y las columnas del tablero printf("Dame una columna: "); scanf("%i",&columna); fflush(stdin); }while(columna<1||columna>COLUMNASTOTAL); if(tablaintentos[fila-1][columna-1]=='t'){ //si las coorenadas ya estan metidas volvemos a pedir coorenadas printf("Inserta una coordenada que no estÈ en el tablero: \n"); aceptarbarcos(); }else{ tablaintentos[fila-1][columna-1]='t'; comprobar(fila,columna); //comprobamos si lo que ha introducido el usuario es agua o no }
}
void comprobar(int fila,int columna){ if(tablabarcos[fila-1][columna-1]=='b'){ //si lo que hemos introducido es igual a b es que hemos hundido un barco estado=1; //poemos el estado a 1 contador++; //aumentadmos el contador de hundidos }else{ estado=0; //sino ponemos estado en 0 } }
void inicializar(){ //iniciaciÛn de los arrays static int j=0,k=0; for(j=0;j<8;j++){ for(k=0;k<8;k++){ tablabarcos[j][k]='~'; } } for(j=0;j<8;j++){ for(k=0;k<8;k++){ tablaintentos[j][k]=' '; } } }
void pensarbarcos(){ //colocaciÛn de barcos int i=0, numerofila=0, numerocolumna=0; numerofila=random(FILASTOTAL); //seleccion al azar de una fila numerocolumna=random(COLUMNASTOTAL); //seleccion al azar de una columna while(i<BARCOSTOTAL){ //mientras que i sea menor que los barcos a poner //CondiciÛn que verifica que el barco no se coloca pegado a otro if(tablabarcos[numerofila][numerocolumna]!='b' && tablabarcos[numerofila-1][numerocolumna]!='b' && tablabarcos[numerofila+1][numerocolumna]!='b' && tablabarcos[numerofila][numerocolumna+1]!='b' && tablabarcos[numerofila][numerocolumna-1]!='b' && tablabarcos[numerofila+1][numerocolumna+1]!='b' && tablabarcos[numerofila+1][numerocolumna-1]!='b' && tablabarcos[numerofila-1][numerocolumna+1]!='b' && tablabarcos[numerofila-1][numerocolumna-1]!='b'){ tablabarcos[numerofila][numerocolumna]='b'; i++; } numerofila=random(FILASTOTAL); numerocolumna=random(COLUMNASTOTAL); }
}
void verbarcos(){ //FunciÛn que construye el tablero para ver los barcos static int i,j=0,k=0; textcolor(14); cprintf("Tiene que encontrar %i barcos de longitud 1 dando el numero de fila y de columna.",BARCOSTOTAL); printf("\n"); printf("\t\t ---------------------------------\n"); printf("\t\t |"); for(i=0;i<COLUMNASTOTAL;i++){ textcolor(10); cprintf(" %i",i+1); printf(" |"); } printf("\n"); printf("\t\t-------------------------------------\n");
for(j=0;j<FILASTOTAL;j++){ printf("\t\t| "); textcolor(10); cprintf("%i ",j+1); printf("|"); for(k=0;k<COLUMNASTOTAL;k++){ if(tablaintentos[j][k]!=' '){ if(tablabarcos[j][k]=='b'){ textcolor(12); }else{ textcolor(9); } cprintf(" %c ",tablabarcos[j][k]); printf("|"); }else{ printf(" |"); } } printf("\n") ; printf("\t\t-------------------------------------\n"); } } void vertablero(){ static int i,j=0,k=0; //FunciÛn que nos muestra la configuraciÛn del tablero clrscr(); textcolor(10); cprintf(" La configuracion del tablero es: "); printf("\n\n"); printf("\t\t ---------------------------------\n"); printf("\t\t |"); for(i=0;i<COLUMNASTOTAL;i++){ textcolor(10); cprintf(" %i",i+1); printf(" |"); } printf("\n"); printf("\t\t-------------------------------------\n");
for(j=0;j<FILASTOTAL;j++){ printf("\t\t| "); textcolor(10); cprintf("%i ",j+1); printf("|"); for(k=0;k<COLUMNASTOTAL;k++){
if(tablabarcos[j][k]=='b'){ textcolor(12); }else{ textcolor(9); } cprintf(" %c ",tablabarcos[j][k]); printf("|"); } printf("\n") ; printf("\t\t-------------------------------------\n"); } printf("Pulse una tecla para continuar"); getche();
}
int contarreg(FILE *pfich){ //Funcion para contar los registros int bytes; fseek(pfich,0,2); bytes=ftell(pfich); return bytes/sizeof(struct tipopuntuacion); }
int fcomppunt(const void *pelem1,const void *pelem2){ //Funcion de comparacion struct tipopuntuacion punt1,punt2; punt1=*(struct tipopuntuacion *)pelem1; punt2=*(struct tipopuntuacion *)pelem2; return punt2.puntos-punt1.puntos;
} //Funcion si se gana void ganar(){ printf("\t\t |\\\n"); printf("\t\t | \\\n"); printf("\t\t | \\\n"); printf("\t\t | \\\n"); printf("\t\t | \\\n"); printf("\t\t | \\\n"); printf("\t\t | /\n"); printf("\t\t | /\n"); printf("\t\t | /\n"); printf("\t\t | /\n"); printf("\t\t | /\n"); printf("\t\t |/\n"); printf("\t\t |\n"); printf("\t\t |\n"); printf("\t\t\\-------------------------------------------/\n"); printf("\t\t \\-----------------------------------------/\n"); printf("\t\t \\---------------------------------------/\n"); printf("\t\t \\-------------------------------------/\n"); printf("\t\t \\-----------------------------------/ \n "); printf("\t\t\t|-----------------------|\n"); printf("\t\t\t| Enhorabuena ha ganado |\n"); printf("\t\t\t|-----------------------|\n");
} void perder(){ //Funcion si e pierde printf("\t\t |\\\n"); printf("\t\t | \\\n"); printf("\t\t | \\\n"); printf("\t\t | \\\n"); printf("\t\t | \\\n"); printf("\t\t /| | /\n"); printf("\t\t / | | /\n"); printf("\t\t /--| | / |\\ \n"); printf("\t\t /---| | / |-\\ \n"); printf("\t\t /----| |/ |--\\ \n"); printf("\t\t |----| | |---\\ \n"); printf("\t\t |----| | |----\\ \n\n\n "); printf("\t\t\t |-----------------------|\n"); printf("\t\t\t | Ha perdido. |\n"); printf("\t\t\t |-----------------------|\n"); printf("\n\n\n"); printf("Presione una tecla para ver la condiguracion del tablero."); getche();
}
void bienvenida(){ //grafico de bienvenida textcolor(10); printf("\n"); cprintf(" |---------------------------------------------------------------|"); printf("\n"); cprintf(" | |"); printf("\n"); cprintf(" | * * * * ** * **** ***** **** |"); printf("\n"); cprintf(" | * * * * * * * * * * * * |"); printf("\n"); cprintf(" | ***** * * * * * * * * * * |"); printf("\n"); cprintf(" | * * * * * * * * * * * * |"); printf("\n"); cprintf(" | * * ***** * ** **** ***** * * |"); printf("\n"); cprintf(" | |"); printf("\n"); cprintf(" | * ***** |"); printf("\n"); cprintf(" | * * * |"); printf("\n"); cprintf(" | * ***** |"); printf("\n"); cprintf(" | * * * |"); printf("\n"); cprintf(" | ***** * * |"); printf("\n"); cprintf(" | |"); printf("\n"); cprintf(" | ***** * ***** ***** ***** |"); printf("\n"); cprintf(" | * * * * * * * |"); printf("\n"); cprintf(" | *** * * * * ***** |"); printf("\n"); cprintf(" | * * * * * * * |"); printf("\n"); cprintf(" | * ***** ***** * * * |"); printf("\n"); cprintf(" | |"); printf("\n"); cprintf(" |---------------------------------------------------------------|"); printf("\n\n"); cprintf("Autor: Aitor Lechuga Saenz. Pulse cualquier letra para continuar."); getche();
}
void despedida(){ //Gr·fico de despedida textcolor(10); clrscr(); printf("\n"); cprintf(" |---------------------------------------------------------------|"); printf("\n"); cprintf(" | |"); printf("\n"); cprintf(" | ***** **** ***** ***** ***** ***** **** |"); printf("\n"); cprintf(" | * * * * * * * * * * |"); printf("\n"); cprintf(" | * ** **** ***** * * ***** *** |"); printf("\n"); cprintf(" | * * * * * * * * * * * |"); printf("\n"); cprintf(" | **** * * * * ***** ***** * * *** |"); printf("\n"); cprintf(" | |"); printf("\n"); cprintf(" | **** ***** **** |"); printf("\n"); cprintf(" | * * * * * * |"); printf("\n"); cprintf(" | **** * * **** |"); printf("\n"); cprintf(" | * * * * * |"); printf("\n"); cprintf(" | * ***** * * |"); printf("\n"); cprintf(" | |"); printf("\n"); cprintf(" | ***** * * ***** ***** **** |"); printf("\n"); cprintf(" | * * * * * * * * |"); printf("\n"); cprintf(" | ** * * * * ** ***** **** |"); printf("\n"); cprintf(" | * * * * * * * * * * |"); printf("\n"); cprintf(" | **** ***** **** * * * * |"); printf("\n"); cprintf(" | |"); printf("\n"); cprintf(" |---------------------------------------------------------------|"); printf("\n\n"); }
|
|