#include #include "conio.h" #include void marco (int,int,int,int); void menu (); void menu2 (); void game (); void tablaComp (); void tablaHuman (); void bomba (); void bombaVS (); void gameover (); void guias (int); void del (int,int,int); /*Tamaño de matrices*/ char barcopc [10][12], barcoHuman [10][12]; int fila=4, columna=5, opc, nivel=1, flotaC, flotaH, ciclo=0; int main () { void clrscr (); void presentacion (); menu (); clrscr (); cprintf ("Has elegido salir del programa"); cprintf ("Gracias por elegir este programa"); return 0; } /*Funci¢n que imprime un marco de cualquier dimensi¢n que parpadea*/ void marco (int x,int y,int xx,int yy) { int a,b; gotoxy (x,y); cprintf ("@"); //alt+64 gotoxy (xx,y); cprintf ("»"); //alt+187 gotoxy (x,yy); cprintf ("È"); //alt+200 gotoxy (xx,yy); cprintf ("¼"); //alt+188 for (a=x+1;a12) { textcolor (YELLOW); gotoxy (15,14); cprintf ("El numero permitido de columnas est entre 5 y 12");} } while (columna<5 || columna>12); del (14,15,65); textcolor (MAGENTA); gotoxy (20,15); cprintf ("Digita el numero de filas del tablero"); gotoxy (23,16); cprintf ("(M¡n. ¯¯4 Max. ¯¯10):"); do { del (16,48,50); gotoxy (48,16); scanf ("%d", &fila); if (fila<4 || fila>10) { textcolor (YELLOW); gotoxy (15,17); cprintf ("El numero permitido de filas est entre 4 y 10");} } while (fila<4 || fila>10); del (17,15,63); menu (); } else if (opc==3) { do { textcolor (RED); gotoxy (15,12); cprintf ("3. NIVEL DEL JUEGO:"); textcolor (MAGENTA); gotoxy (20,13); cprintf ("Selecciona el nivel de juego:"); gotoxy (23,14); cprintf ("1. F cil"); gotoxy (23,15); cprintf ("2. Medio"); gotoxy (23,16); cprintf ("3. Experto"); del (13,50,53); gotoxy (50,13); scanf ("%d", &nivel); } while (nivel!=1 && nivel!=2 && nivel!=3); menu (); } else if (opc==0) {return 0; } else { gotoxy (20,1Cool; printf ("Esa no es una opci¢n v lida, intente de nuevo..."); } } while (opc!=1 && opc!=2 && opc!=3 && opc!=0); return 0; } } } /*Funci¢n que ejecuta las dem s funciones del juego*/ void game () { int x,y; clrscr (); if (nivel==1) { flotaH=flotaC; } if (nivel==2) { flotaH=flotaC-flotaC/4; } if (nivel==3) { flotaH=flotaC; flotaC=flotaH-flotaH/4; } tablaComp (); tablaHuman (); do { bomba (); if (flotaH>0) { bombaVS (); textcolor (CYAN); } if (flotaH>9) { gotoxy (15,17); cprintf ("Barcos Usuario: %d", flotaH); } else {gotoxy (15,17); cprintf ("Barcos Usuario: %d", flotaH); } if (flotaC>9) { gotoxy (15,1Cool; cprintf ("Barcos enemigos restantes: %d", flotaC); } else { gotoxy (15,1Cool; cprintf ("Barcos enemigos restantes: %d", flotaC);} } while (flotaC>0 && flotaH>0); for (y=0;y0; cont--) {do //coloca los barcos de acuerdo al nivel y las dimensiones de la matriz {x=random (columna); //el numero de columnas es el rango del eje X y=random (fila); //el numero de filas es el rango del eje Y if (barcoComp [y][x]!='') {barcoComp [y][x]='';} } while (barcoComp [y][x]!=''); } textcolor (CYAN); for (x=0;x9) {gotoxy (15,17); cprintf ("Barcos restantes: %d", flotaH-cont);} else {gotoxy (15,17); cprintf ("Barcos restantes: %d", flotaH-cont);} gotoxy (20,1Cool; cprintf ("Introduzca las coordenadas de su %d§ barco:", cont+1); gotoxy (25,19); cprintf ("Eje Y (horizontal):"); do {del (19,45,4Cool; gotoxy (45,19); scanf ("%d", &y); del (20,20,54); if (y<=0 || y>fila) {textcolor (YELLOW); gotoxy (20,20); cprintf ("El valor debe estar entre 1 y %d", fila);} } while (y<=0 || y>fila); textcolor (MAGENTA); gotoxy (25,21); cprintf ("Eje X (vertical):"); do {del (21,43,46); gotoxy (43,21); scanf ("%d", &x); del (22,20,54); if (x<=0 || x>columna) {textcolor (YELLOW); gotoxy (20,22); cprintf ("El valor debe estar entre 1 y %d", columna);} } while (x<=0 || x>columna); if (barcoHuman [y-1][x-1]=='') {textcolor (GREEN); gotoxy (20,23); cprintf ("Intentas poner un barco sobre otro barco!!"); delay (1500); del (23,20,70);} textcolor (LIGHTBLUE + BLINK); } while (barcoHuman [y-1][x-1]==''); gotoxy ((x*2)+32,y+2); cprintf (""); //imprime en pantalla la ubicacion del barco barcoHuman[y-1][x-1]='';} //coloca el barco en matriz del (19,45,4Cool; del (17,15,34); del (18,20,63); del (19,25,45); del (21,25,47); } /***** Funci¢n de la jugada del computador, tira una bomba en una (x,y) posici¢n al azar *****/ void bomba () {int x, y, cont=1; ciclo=0; if (nivel==3) {cont=0;} //aumenta la dificultad en el 3§ nivel (la PC intenta 2 veces si falla) delay (1000); //Una breve pausa para ver el tiro de la computadora for (cont; cont<2; cont++) {do {textcolor (CYAN); x=random (columna); //columna es el rango del eje X y=random (fila); //fila es el rango del eje Y if (barcoHuman [y][x]=='') {flotaH--; textcolor (YELLOW + BLINK); gotoxy (25,23); cprintf ("Acaban de hundir un barco tuyo!!"); delay (3000); textcolor (RED); del (23,25,57); cont=2;} //ya hundido un barco del usuario, se hace falsa la condicion FOR if (barcoHuman [y][x]!='X') {barcoHuman [y][x]='X'; ciclo=1;} //ya hecha la jugada, se hace falsa la condicion WHILE } while (ciclo!=1); //no se permite una repetici¢n de jugada (si ya se hizo en tal posici¢n) } gotoxy ((x*2)+34,y+3); cprintf ("X"); textcolor (CYAN); if (flotaH>9) {gotoxy (15,17); cprintf ("Barcos Usuario: %d", flotaH);} else {gotoxy (15,17); cprintf ("Barcos Usuario: %d", flotaH);} if (flotaC>9) {gotoxy (15,1Cool; cprintf ("Barcos enemigos restantes: %d", flotaC);} else {gotoxy (15,1Cool; cprintf ("Barcos enemigos restantes: %d", flotaC);} } /***** Funci¢n de la jugada del usuario *****/ void bombaVS () {int x,y; textcolor (CYAN); gotoxy (20,20); cprintf ("Introduce las coordenadas de tu lanzamiento"); gotoxy (20,21); cprintf ("Eje Y: Eje X:"); ciclo=0; do {do {gotoxy (27,21); scanf ("%d", &y); del (22,20,62); if (y<=0 || y>fila) {textcolor (GREEN); gotoxy (20,22); cprintf ("El valor debe estar entre 1 y %d", fila);} } while (y<=0 || y>fila); textcolor (CYAN); gotoxy (20,21); cprintf ("Eje Y: %d Eje X:", y); do {gotoxy (37,21); scanf ("%d", &x); del (22,20,52); if (x<=0 || x>columna) {textcolor (GREEN); gotoxy (20,22); cprintf ("El valor debe estar entre 1 y %d", columna);} } while (x<=0 || x>columna); textcolor (CYAN); gotoxy (20,21); cprintf ("Eje Y: Eje X: "); if (barcoComp [y-1][x-1]=='') {flotaC--; gotoxy (20,23); cprintf ("Eres genial!! Uno menos"); delay (1500); del (23,20,43); textcolor (RED);} if (barcoComp [y-1][x-1]=='0' || barcoComp [y-1][x-1]=='') {barcoComp [y-1][x-1]='X'; ciclo=1;} //ya hecha la jugada se hace falsa la condici¢n else {gotoxy (20,22); cprintf ("Ahi ya bombardeaste. Intenta en otro lado");} } while (ciclo!=1); gotoxy ((x*2)+2,y+2); cprintf ("X"); } /**** Funci¢n que imprime el nivel, ganador, y las estad¡sticas finales ****/ void gameover () {clrscr (); marco (15,6,62,11); textcolor (LIGHTRED+BLINK); if (nivel==1) {gotoxy (25,Cool; cprintf ("Nivel de Dificultad: PRINCIPIANTE");} else if (nivel==2) {gotoxy (25,Cool; cprintf ("Nivel de Dificultad: MEDIO");} else {gotoxy (25,Cool; cprintf ("Nivel de Dificultad: EXPERTO");} if (flotaC==0 && flotaH==0) { textcolor (RED); gotoxy (17,9); cprintf ("Has tenido un empate"); } else if (flotaC==0) {if (nivel!=3) {gotoxy (20,12); cprintf ("Has vencido la flota enemiga");} else {textcolor (WHITE+BLINK); gotoxy (20,12); cprintf ("Felicitaciones");} textcolor (LIGHTRED+BLINK); gotoxy (25,9); cprintf ("Tus barcos restantes: %d", flotaH);} if (flotaH==0) {textcolor (LIGHTRED+BLINK); gotoxy (25,9); cprintf ("Barcos enemigos restantes: %d", flotaC); textcolor (black); gotoxy (10,12); cprintf ("Lo siento...!!"); } getch (); getch (); menu (); }