Está en la página 1de 10

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

h> #define FILAS 10 #define COLUMNAS 10 int colocarBarcosManualmente(int size,int filBarco,int colBarco,int direccion,in t tablero[FILAS][COLUMNAS]); void colocarBarcosAutomaticamente (int tablero[FILAS][COLUMNAS]); void inicializarTablero(int tablero[FILAS][COLUMNAS]); void imprimirTablero(int tablero[FILAS][COLUMNAS]); int comprobacionEspacioParaBarco(int filBarco,int colBarco,int direccion,int siz e,int tablero[FILAS][COLUMNAS]); int comprobarGanador(int tab1[FILAS][COLUMNAS],int tab2[FILAS][COLUMNAS]); int disparoJugador(int tablero1[FILAS][COLUMNAS],int tablero2[FILAS][COLUMNAS]); int disparoCPU(int tablero1[FILAS][COLUMNAS],int tablero2[FILAS][COLUMNAS]); int juegoManual(int tableroa1[FILAS][COLUMNAS],int tablerob1[FILAS][COLUMNAS],in t tableroa2[FILAS][COLUMNAS],int tablerob2[FILAS][COLUMNAS]); int juegoAutomatico(int tableroA1[FILAS][COLUMNAS],int tableroB1[FILAS][COLUMNAS ],int tableroA2[FILAS][COLUMNAS],int tableroB2[FILAS][COLUMNAS], int filBarco, i nt colBarco); int main(int argc, char* argv []) { int tg=4, sm=2; int filBarco; int colBarco; int direccion; int opcion=0; int opcion2=0; int barcoactual=1; int status=1; int disparo=0; int tableroA1[FILAS][COLUMNAS], tableroA2[FILAS][COLUMNAS], tableroB1[FI LAS][COLUMNAS], tableroB2[FILAS][COLUMNAS]; inicializarTablero(tableroA1); inicializarTablero(tableroB1); inicializarTablero(tableroA2); inicializarTablero(tableroB2); //para juego manual int tableroa1[FILAS][COLUMNAS], tablerob1[FILAS][COLUMNAS], tableroa2[FI LAS][COLUMNAS], tablerob2[FILAS][COLUMNAS]; inicializarTablero(tableroa1); inicializarTablero(tablerob1); inicializarTablero(tableroa2); inicializarTablero(tablerob2); //disparo int tablero1[FILAS][COLUMNAS], tablero2[FILAS][COLUMNAS]; tablero1[FILAS][COLUMNAS]; tablero2[FILAS][COLUMNAS]; while(opcion!=3) { system("cls"); printf("Eliga una de las siguientes opciones: \n"); printf("1.- Jugar. (ordenador vs jugador)\n"); printf("2.- Jugar. (ordenador vs ordenador)\n"); printf("3.- Salir.\n"); printf("4.- Jugar\n"); printf("La opcion elegida es "); scanf("%d",&opcion);

switch (opcion) { case 1: system("cls"); printf("Eliga una de las siguientes opciones: \n"); printf("1.- Colocar los barcos manualmente\n"); printf("2.- colocar los barcos automaticamente\n"); printf("3.- Volver al menu principal\n"); printf("La opcion elegida es "); scanf("%d",&opcion2); break; case 2:// juego automatico juegoAutomatico(tableroA1,tableroB1,tableroA2,tableroB2,filBarco ,colBarco); break; case 3: printf(" Gracias por jugar, hasta pronto"); //system("cls"); //exit(0); break; case 4: juegoManual(tableroa1,tablerob1,tableroa2,tablerob2); //disparoJugador(tablero1,tablero2); //disparoCPU (tablero1, tablero2); break; } if (opcion2==1) { do { colocarBarcosAutomaticamente(tableroB1); while(status!=0) { system("cls"); printf("Introduzca la fila: \n"); scanf("%d",&filBarco); printf("Introduzca la columna: \n"); scanf("%d",&colBarco); printf("Introduzca la direccion\n1 -> Ab ajo \n2 -> Derecha\n3 -> Arriba \n4 -> Izquierda \n"); scanf("%d",&direccion); filBarco-=1;colBarco-=1; if (barcoactual<5) { int size=1; tg=tg-1; printf("Tiene %d tragaminas\n", tg); status=colocarBarcosManualmente( size,filBarco,colBarco,direccion,tableroA1); } else if (barcoactual>4 && barcoactual<7) { int size=2;

sm=sm-1; printf("Tiene %d submarinos\n", sm); status=colocarBarcosManualmente( size,filBarco,colBarco,direccion,tableroA1); } else if (barcoactual==7) { int size=3; status=colocarBarcosManualmente( size,filBarco,colBarco,direccion,tableroA1); } } if (status==1) printf("Nothing"); else { barcoactual++; status=1; imprimirTablero(tableroA1); system("PAUSE"); } }while(barcoactual<8); system("cls"); imprimirTablero(tableroA1); system("PAUSE"); } else if(opcion2==2) { colocarBarcosAutomaticamente(tableroA1); colocarBarcosAutomaticamente(tableroB1); } else if(opcion2==3) { printf("Volviendo al menu anterior.\n"); } } return 0; } int juegoManual(int tableroa1[FILAS][COLUMNAS],int tablerob1[FILAS][COLUMNAS],in t tableroa2[FILAS][COLUMNAS],int tablerob2[FILAS][COLUMNAS]) { int victory=0; int turno=2; while (victory==0) { turno=turno%2; switch(turno) { case (0) : disparoJugador(tablerob1,tableroa2); break;

case (1) : disparoJugador(tableroa1,tablerob2); } imprimirTablero(tableroa2); turno++; victory=comprobarGanador(tableroa2,tablerob2); } if (victory==1) { printf("Player 1 wins\n"); } else { printf("Player 2 wins\n"); } return 0; } int juegoAutomatico(int tableroA1[FILAS][COLUMNAS],int tableroB1[FILAS][COLUMNAS ],int tableroA2[FILAS][COLUMNAS],int tableroB2[FILAS][COLUMNAS], int filBarco, i nt colBarco) { int victory=0; int turno=2; FILE *parchivo; colocarBarcosAutomaticamente(tableroB1); colocarBarcosAutomaticamente(tableroB2); parchivo=fopen("barcos.txt","w"); while (victory==0) { turno=turno%2; switch(turno) { case (0) : disparoCPU(tableroA2,tableroB1); fprintf(parchivo,"fila y columna del disparo (%d ,%d)\n", filBarco,colBarco); fprintf(parchivo, "Agua\n"); break; case (1) : disparoCPU(tableroA1,tableroB2); fprintf(parchivo,"fila y columna del disparo (%d ,%d)\n", filBarco,colBarco); fprintf(parchivo, "Agua\n"); break; } imprimirTablero(tableroA2); imprimirTablero(tableroB2); turno++; victory=comprobarGanador(tableroA2,tableroB2); }

if (victory==1) { printf("CPU 1 wins\n"); fprintf(parchivo,"CPU 1 wins"); system("PAUSE"); exit(0); } else { printf("CPU 2 wins\n"); fprintf(parchivo,"CPU 2 wins"); system("PAUSE"); exit(0); } fprintf(parchivo,"----Ganador----"); fclose(parchivo); return 0; }

int disparoJugador(int tablero1[FILAS][COLUMNAS],int tablero2[FILAS][COLUMNAS]) { // el tablero 2, es el de mostrar, el 1, es donde estan los barcos. Cada uno tie ne que ser de un jugador distinto para que tenga sentido----> hay k dispara 2 ve ces en agua para que la marque como tal pero no al disparar al barco int i, j; printf("indique la fila del disparo: \n"); scanf("%d", &i); printf("indique la columna del disparo: \n"); scanf("%d", &j); if (tablero1[i][j]==0) { printf("agua,intente de nuevo.\n"); tablero2[i][j]=5; } else { printf("Tocado.Buen disparo.\n"); tablero2[i][j]=9; } return 0; } int disparoCPU(int tablero1[FILAS][COLUMNAS],int tablero2[FILAS][COLUMNAS]) // disparo aleatorio para el juego automatico, al igual que colocar barcos autom aticamente usamos un srand, para que no hubiera tenido fin podriamos haber intro ducido en el codigo el time(NULL) y asi no dispararia nunca en la misma posicion { int i, j; i=rand()%(9+1); j=rand()%(9+1); if (tablero1[i][j]==0) { printf("agua, indique otras coordenadas.\n"); tablero2[i][j]=5; } else

{ printf("Tocado, siga disparando.\n"); tablero2[i][j]=9; } return 0; } void inicializarTablero (int tablero[FILAS][COLUMNAS]) // inicializa el tablero con todas las posiciones a 0 { char i,j; for (i=0;i<FILAS;i++) for(j=0;j<COLUMNAS;j++) tablero[i][j]=0; } void imprimirTablero (int tablero[FILAS][COLUMNAS]) // imprime el tablero del juego, dependiendo de como le pasemos los argumentos i mprimira uno u otro( el de los barcos o el de los disparos) { int i,j, cont=0; printf (" 1 2 3 4 5 6 7 8 9 10\n\n"); for (i=0;i<FILAS;i++) { cont=cont+1; printf (" %2d|", cont); for (j=0;j<COLUMNAS;j++) printf(" %d",tablero[i][j]); printf("\n"); } } int comprobacionEspacioParaBarco(int filBarco,int colBarco,int direccion,int siz e,int tablero[FILAS][COLUMNAS]) // esta funcion esta diseada para comprobar el espacio,en este caso comprueba el espacio en las 4 direcciones para que la funcion de colocarlos manualmente tenga la opcion de colocarlos en 4 direcciones( abajo izquierda, derecha y arriba), e n cambio en la automatica solo los coloca horizontales o verticales { int i; int entra=1; switch(direccion) { case 1: if (filBarco+size-1<10) {entra=0;} break; case 2: if (colBarco+size-1<10) {entra=0;} break; case 3: if (filBarco-size+1>=0) {entra=0;} break; case 4: if (colBarco-size+1>=0) {entra=0;} break; } if (entra==1) { printf("Coordenadas erroneas.\n"); return 1; } else { int a=filBarco; int b=colBarco; for (i=filBarco; i<(filBarco+size); i++)

{ if (tablero[a][b]!=0) { printf("error3\n"); return 1; } } a=filBarco; for (i=colBarco;i<(b+size); i++) { if (tablero[a][b]!=0) { printf("error2\n"); return 1; } } printf("ok\n"); return 0; } return 0; } int comprobacionEspacioParaBarco2(int filBarco,int colBarco,int direccion,int si ze,int tablero[FILAS][COLUMNAS]) // funcion igual a la colocada anteriormente, creada por motivos de funcionalida d y facilidad { int i; int entra=1; switch(direccion) { case 1: if (filBarco+size-1<10) {entra=0;} break; case 2: if (colBarco+size-1<10) {entra=0;} break; case 3: if (filBarco-size+1>=0) {entra=0;} break; case 4: if (colBarco-size+1>=0) {entra=0;} break; } if (entra==1) { return 1; } else { int a=filBarco; int b=colBarco; for (i=filBarco; i<(filBarco+size); i++) { if (tablero[a][b]!=0) { return 1; } } a=filBarco; for (i=colBarco;i<(b+size); i++) { if (tablero[a][b]!=0) {

return 1; } } return 0; } return 0; } int colocarBarcosManualmente(int size,int filBarco,int colBarco,int direccion,in t tablero[FILAS][COLUMNAS]) // etaa funcion nos pedira la fila columna y direccion de cada barco para coloca rlos en el tablero de forma manual junto con el codigo del case 1 del menu 2, lo s barcos se pueden colocar en 4 direccion a eleccion del jugador, a diferencia d e la automatica que solo los coloca en 2 direcciones(horizontal y vertical) { int a=filBarco; int b=colBarco; if (comprobacionEspacioParaBarco(filBarco,colBarco,direccion,size,tabler o)==0) { int i; for(i=0; i<size; i++) { tablero[a][b]=size; switch(direccion) { case 1: a++; break; case 2: b++; break; case 3: a--; break; case 4: b--; break; } } return 0; } else { return 1; } return 0; } int comprobarGanador(int tab1[FILAS][COLUMNAS], int tab2[FILAS][COLUMNAS]) // para comprobar el ganador le pasaremos los dos tableros y definimos una varia ble para cada tablero(X e Y) que al llegar a 11 nos indicara el ganador del jueg o, esta funcion se puede usar indistitamente para manual o automatico { int i,j,x=0,y=0; for (i=0;i<FILAS;i++) { for(j=0;j<COLUMNAS;j++) { if (tab1[i][j]!=0) { x++; } if (tab2[i][j]!=0) { y++; }

} } if (x==11) { return 1; } else if (y==11) { return 2; } return 0; } void colocarBarcosAutomaticamente(int tablero[FILAS][COLUMNAS]) // utilizando un srand colocaremos los barcos de forma automatica y aleatoria en la matriz indicandole en cada caso el tamaan del barco, solo los coloca en 2 dir ecciones a diferencia que la manual { int colBarco, filBarco; int pieza=0; int orientacion; //0=Horizontal, 1=Vertical while(pieza<4) { filBarco=rand()%(9+1); colBarco=rand()%(9+1); if(comprobacionEspacioParaBarco2(filBarco,colBarco,1,0,tablero)==0) { tablero[filBarco][colBarco]=1; pieza++; } } pieza= 0; while (pieza<2) { filBarco=rand()%(9+1); colBarco=rand()%(9+1); orientacion=rand()%2; if(comprobacionEspacioParaBarco2(filBarco,colBarco,2,orientacion,tablero)==0) { tablero[filBarco][colBarco]=2; if (orientacion ==0) tablero[filBarco][colBarco+1]=2; else tablero[filBarco+1][colBarco]=2; pieza++; } } pieza=0; while (pieza<1) { filBarco=rand()%(9+1); colBarco=rand()%(9+1); orientacion=rand()%2; if(comprobacionEspacioParaBarco2(filBarco,colBarco,3,orientacion,tablero)==0) { tablero[filBarco][colBarco]=3; if (orientacion ==0)

{ tablero[filBarco][colBarco+1]=3; tablero[filBarco][colBarco+2]=3; } else { tablero[filBarco+1][colBarco]=3; tablero[filBarco+2][colBarco]=3; } pieza++; } } }

También podría gustarte