#include<stdio.h> #include<stdlib.h> #include<time.h> #define N 6 #define M 6
// JUEGO DE LOS BARCOS // JUEGO POR TURNOS // basado en 2 tablas (6x6) // los barcos se marcaran en la tabla con 'B' // los puntos restantes se marcaran con '.' // si se acierta , mostrar por pantalla y cubrir el barco con 'X' // si no se acierta , dejar paso a la maquina // el juego acaba cuando se hayan hundido los barcos del contrario
// LAS COORDENADAS SE INTRODUCEN ASI: 1 2
int**gen_tabla_pc(int**tabla_pc,int**tabla_copia,int*numero); int**gen_tabla_jugador(int**tabla_jugador); void mostrar(int**tabla_pc,int barks,int**tabla_copia,int**tabla_jugador,int aux,int numero); void mostrar2(int**tabla_jugador); void interfaz(int**tabla_pc,int**tabla_jugador,int**,int*,int aux,int numero); void IA(int**tabla_pc,int**tabla_jugador,int,int**,int*aux,int numero); void detecta(int**,int,int**,int,int numero,int**tabla_pc);
int main() { int numero=0; int aux=0; int**tabla_copia; int**tabla_pc; // TABLA DE BARCOS DEL PC int**tabla_1; int**tabla_2; // TABLA DE BARCOS DEL JUGADOR int**tabla_jugador; int i,j,k; int barks=0; // NUMERO DE BARCOS srand(time(NULL)); tabla_copia=(int**)malloc(N*sizeof(int*)); for(i=0;i<N;i++) tabla_copia[i]=(int*)malloc(N*sizeof(int)); for(j=0;j<N;j++) for(k=0;k<M;k++) tabla_copia[j][k]=0;
tabla_pc=gen_tabla_pc(tabla_1,tabla_copia,&numero); //tabla generada (oculta) para el pc tabla_jugador=gen_tabla_jugador(tabla_2); //MI TABLA mostrar(tabla_pc,barks,tabla_copia,tabla_jugador,aux,numero); printf("\n\n==============================================\n\n"); mostrar2(tabla_jugador); interfaz(tabla_pc,tabla_jugador,tabla_copia,&barks,aux,numero); return 0; }
int** gen_tabla_pc(int**tabla_1,int**tabla_copia,int*numero) { int i; int j,k; int number=0; tabla_1=(int**)malloc(N*sizeof(int*)); for(i=0;i<N;i++) tabla_1[i]=(int*)malloc(N*sizeof(int)); for(j=0;j<N;j++) for(k=0;k<M;k++) tabla_1[j][k]=tabla_copia[j][k]=rand()%5; //COPIA DE TABLA_1 int l,o; for(l=0;l<N;l++) for(o=0;o<M;o++) { if(tabla_1[l][o]==1) number++; tabla_1[l][o]='.'; } *numero=number; printf("\t\tNumero de barcos del pc: %d\n\n",number); return tabla_1; }
void mostrar(int**tabla_pc,int barks,int**tabla_copia,int**tabla_jugador,int aux,int numero) { int i,j; int a,b; printf("\t\tBARCOS ENEMIGOS\n\n"); detecta(tabla_copia,barks,tabla_jugador,aux,numero,tabla_pc); for(i=0;i<N;i++) for(j=0;j<M;j++) printf(" %c %s",tabla_pc[i][j],(j==N-1?"\n":" ")); }
void mostrar2(int**tabla_jugador) { int i,j; printf("\t\tBARCOS ALIADOS\n\n"); for(i=0;i<N;i++) for(j=0;j<M;j++) printf(" %c %s",tabla_jugador[i][j],(j==N-1?"\n":" ")); }
int**gen_tabla_jugador(int**tabla_2) { int b; int l; int h; int coor1,coor2; int i; int j,k; tabla_2=(int**)malloc(N*sizeof(int*)); for(i=0;i<N;i++) tabla_2[i]=(int*)malloc(N*sizeof(int)); for(j=0;j<N;j++) for(k=0;k<M;k++) tabla_2[j][k]=rand()%5; int z,x; for(z=0;z<N;z++) for(x=0;x<M;x++) tabla_2[z][x]='.'; printf("\t\tCuantos barcos:"); scanf("%d",&b); for(l=1;l<=b;l++) { printf("Introduce las coordenadas del %d barco: ",l); scanf("%d %d",&coor1,&coor2); tabla_2[coor1][coor2]='B'; } return tabla_2; }
void interfaz(int**tabla_pc,int**tabla_jugador,int**tabla_copia,int*barks,int aux,int numero) { int coor1,coor2; int i,j; int sig; int temporal2; do{ printf("Introduce coordenadas: "); scanf("%d %d",&coor1,&coor2); if( tabla_copia[coor1][coor2]==1) { sig=1; temporal2=1; } else sig=0; *barks=temporal2;
if (sig==1) { tabla_pc[coor1][coor2]='X'; system("clear"); mostrar(tabla_pc,temporal2,tabla_copia,tabla_jugador,aux,numero); detecta(tabla_copia,*barks,tabla_jugador,aux,numero,tabla_pc);
printf("\n\n=================================================\n\n"); printf("HAS ACERTADO, CONTINUA\n"); printf("\n\n=================================================\n\n"); mostrar2(tabla_jugador); }
else if(sig==0) { system("clear"); mostrar(tabla_pc,temporal2,tabla_copia,tabla_jugador,aux,numero); //detecta(tabla_copia,*barks,tabla_jugador,aux,numero,tabla_pc);
printf("\n\n=================================================\n\n"); printf("HAS FALLADO ,TURNO DEL ORDENADOR\n"); printf("\n\n=================================================\n\n"); mostrar2(tabla_jugador); IA(tabla_pc,tabla_jugador,temporal2,tabla_copia,&aux,numero); } }while(sig==1); }
void IA(int**tabla_pc,int**tabla_jugador,int barks,int**tabla_copia,int*aux,int numero) { int i,j; int sig; int alea1,alea2; int temporal; srand(time(NULL)); alea1=rand()%5; // COORDENADA X ALEATORIA alea2=rand()%5; // COORDENADA Y ALEATORIA printf("\t\t TURNO DEL ORDENADOR\n\n"); system("sleep 1.2"); for(i=0;i<N;i++) for(j=0;j<M;j++) { if (tabla_jugador[alea1][alea2]=='B') { sig=1; *aux=1; } else sig=0; } *aux=temporal; if (sig==1) { tabla_jugador[alea1][alea2]='X'; system("clear"); mostrar(tabla_pc,barks,tabla_copia,tabla_jugador,temporal,numero); printf("\n\n=================================================\n\n"); printf("EL PC HA ACERTADO\n"); printf("\n\n=================================================\n\n"); mostrar2(tabla_jugador); system("sleep 1.2"); IA(tabla_pc,tabla_jugador,barks,tabla_copia,&temporal,numero); } else if (sig==0) { system("clear"); mostrar(tabla_pc,barks,tabla_copia,tabla_jugador,temporal,numero); printf("\n\n=================================================\n\n"); printf("EL PC HA FALLADO, TU TURNO\n"); printf("\n\n=================================================\n\n"); mostrar2(tabla_jugador); interfaz(tabla_pc,tabla_jugador,tabla_copia,&barks,temporal,numero);
} }
void detecta(int**tabla_copia,int barks,int**tabla_jugador,int aux,int numero,int**tabla_pc) { int i,j; int num=0; int total=0; for(i=0;i<N;i++) for(j=0;j<M;j++) if( tabla_pc[i][j]=='X') num++; total=numero-num; //printf("\n\t\tNumero de barcoos: %d-%d=%d\n",numero,num,total); printf("\n\t\tNumero de barcos: %d\n",total);
if(total==0) { printf("\t\tHAS GANADO\n\n"); exit(-1); }
int a,b; int num2=0; for(a=0;a<N;a++) for(b=0;b<M;b++) if (tabla_jugador[a][b]=='B') num2++; if(aux==1) num2--; if(num2==0) { printf("\t\tHA GANADO EL PC\n\n"); exit(-1); }
}
|