Mayday!! Help!! Necesito con suma urgencia hacer una batalla naval en C. Yo ya tengo el código en C++, pero el que tengo es demasiado complicado. Lo único que me pidieron es una batalla naval usuario contra máquina en una matriz de 10 X 10 con 4 barcos de 1, 3 barcos de 2, 2 barcos de 3 y una barco de 4
El código que tengo incluye presentación, menúes, créditos... cosas que no tengo idea cómo sacar. Además de Cpp. lo tengo que llevar a C.
Por favor, de este trabajo depende si recurso o no la materia!! S.O.S!!!
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
#include <dos.h>
void presentacion ();
void marco (int,int,int,int);
void menu ();
menu2 ();
void game ();
void tablaComp ();
void tablaHuman ();
void bomba ();
void bombaVS ();
void gameover ();
void guias (int);
void del (int,int,int);
char barcoComp [10][12], barcoHuman [10][12]; //variables globales de las matrices de los barquitos
int fila=4, columna=5, opc, nivel=1, flotaC, flotaH, ciclo=0;
main () //funcion principal del programa
{clrscr ();
presentacion ();
menu ();
clrscr ();
marco (28,6,61,12);
textcolor (GREEN);
gotoxy (30,8); cprintf ("Has elegido salir del programa");
gotoxy (30,9); cprintf ("Gracias por usar este Software");
gotoxy (35,10); cprintf ("(Sodi Dan Herrera)");
delay (4000);
return 0;
}
/***** Funci¢n que hace la presentaci¢n del juego: cr‚ditos *****/
void presentacion ()
{marco (9,5,76,14);
textcolor (CYAN);
gotoxy (32,7); cprintf ("Juego de Batalla Naval");
gotoxy (19,8); cprintf ("Creado por en mayo del 2004");
textcolor (LIGHTRED); gotoxy (30,8); cprintf ("\"t|-|œ 9(_)’|\\|6()\"");
textcolor (CYAN);
gotoxy (18,9); cprintf ("Estudiante de Ingenier¡a en Desarrollo de Software");
gotoxy (11,10); cprintf ("Orgullosamente acapulque¤o!! (¨porqu‚ ser lo de los barquitos?)");
gotoxy (14,11); cprintf ("Dedicado especialmente a una fan tica de los barquitos...");
textcolor (MAGENTA);
gotoxy (30,12); cprintf ("para mi querida MARIE!!");
getch ();
}
/***** 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;
textcolor (BLUE + BLINK);
gotoxy (x,y); cprintf ("É"); //alt+201
gotoxy (xx,y); cprintf ("»"); //alt+187
gotoxy (x,yy); cprintf ("È"); //alt+200
gotoxy (xx,yy); cprintf ("¼"); //alt+188
for (a=x+1;a<xx;a++)
{gotoxy (a,y); cprintf ("Í"); // alt+205 = Í
gotoxy (a,yy); cprintf ("Í");}
for (b=y+1;b<yy;b++)
{gotoxy (x,B); cprintf ("º"); // alt+186 = º
gotoxy (xx,B); cprintf ("º");}
}
/*****
Funci¢n que muestra un menu que permite ir directamente a jugar
con las configuraciones por default, configurar las propiedades del juego
o en su caso salir del programa.
*****/
void menu ()
{textcolor (MAGENTA);
clrscr ();
gotoxy (30,2); printf ("<<< Batalla Naval >>>");
textcolor (LIGHTBLUE);
gotoxy (12,8); cprintf ("Seleccione una opci¢n:");
gotoxy (15,9); cprintf ("0. Salir...");
gotoxy (15,10); cprintf ("1. A jugar!!");
gotoxy (15,11); cprintf ("2. Dimensi¢n de las tablas de los jugadores");
if (nivel==1) {gotoxy (15,12); cprintf ("3. Nivel del juego: FACIL");}
if (nivel==2) {gotoxy (15,12); cprintf ("3. Nivel del juego: MEDIO");}
if (nivel==3) {gotoxy (15,12); cprintf ("3. Nivel del juego: EXPERTO");}
menu2 ();
}
/***** Continuaci¢n del men£ principal *****/
menu2 ()
{do
{del (9,36,39);
gotoxy (36,8); scanf ("%d", &opc);
if (opc==1)
{if (nivel==1) {flotaC=columna*fila/4;}
else {flotaC=columna*fila/3;}
game ();}
else
if (opc==2)
{textcolor (RED);
gotoxy (15,11); cprintf ("2. DIMENSION DE LAS TABLAS DE LOS JUGADORES");
textcolor (MAGENTA);
gotoxy (15,12); cprintf (" Especifica el n£mero de columnas de las tablas");
gotoxy (23,13); cprintf ("(M¡n. ¯¯5 Max. ¯¯12):");
do
{del (13,48,50);
gotoxy (48,13); scanf ("%d", &columna);
if (columna<5 || columna>12)
{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 ("Especifica el n£mero de filas de las tablas");
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 (marinerito)");
gotoxy (23,15); cprintf ("2. Medio (comandante)");
gotoxy (23,16); cprintf ("3. Experto (capit n)");
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,18); 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,18); cprintf ("Barcos enemigos restantes: %d", flotaC);}
else {gotoxy (15,18); cprintf ("Barcos enemigos restantes: %d", flotaC);}
} while (flotaC>0 && flotaH>0);
for (y=0;y<fila;y++) //imprime las casillas en las que estaban los barcos del enemigo
{for (x=0;x<columna;x++)
{if (barcoComp [y]
{textcolor (BLUE);
gotoxy ((x*2)+4,y+3); cprintf ("%c", barcoComp [y]
}
}
getch ();
gameover ();
}
/***** Funci¢n que captura e imprime la tabla de la computadora *****/
void tablaComp ()
{randomize ();
int cont, x, y;
for (y=0;y<fila;y++) //llena la matriz con cualquier valor
{for (x=0;x<columna;x++) {barcoComp [y]
}
for (cont=flotaC; cont>0; 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]
{barcoComp [y]
} while (barcoComp [y]
}
textcolor (CYAN);
for (x=0;x<columna;x++) //imprime la matriz en pantalla
{for (y=0;y<fila;y++) {gotoxy ((x*2)+4,y+3); cprintf ("%s", y%2 ? "(" : ")");}
}
guias (1); // numeros guias de la tabla de la PC
}
/***** Funci¢n que captura e imprime la tabla del usuario *****/
void tablaHuman ()
{int x, y, cont;
for (y=0;y<fila;y++) //llena la matriz con cualquier valor
{for (x=0;x<columna;x++) {barcoHuman [y]
}
textcolor (CYAN);
for (x=0;x<columna;x++) //imprime la matriz en pantalla
{for (y=0;y<fila;y++) {gotoxy ((x*2)+34,y+3); cprintf ("%s", y%2 ? "(" : ")");}
}
guias (31); // numeros guias de la tabla del usuario
for (cont=0; cont<flotaH; cont++)
{do
{textcolor (MAGENTA);
if (flotaH-cont>9) {gotoxy (15,17); cprintf ("Barcos restantes: %d", flotaH-cont);}
else {gotoxy (15,17); cprintf ("Barcos restantes: %d", flotaH-cont);}
gotoxy (20,18); cprintf ("Introduzca las coordenadas de su %d§ barco:", cont+1);
gotoxy (25,19); cprintf ("Eje Y (horizontal):");
do
{del (19,45,48);
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,48); 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]
{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]
{barcoHuman [y]
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,18); cprintf ("Barcos enemigos restantes: %d", flotaC);}
else {gotoxy (15,18); 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,8); cprintf ("Nivel de Dificultad: FACIL");}
else
if (nivel==2) {gotoxy (25,8); cprintf ("Nivel de Dificultad: MEDIO");}
else {gotoxy (25,8); cprintf ("Nivel de Dificultad: EXPERTO");}
if (flotaC==0 && flotaH==0)
{textcolor (RED);
gotoxy (17,9); cprintf ("No est s tan fregado, mi amigo. Empataste!!");
}
else
if (flotaC==0)
{if (nivel!=3)
{gotoxy (20,12); cprintf ("Has derrotado a la flota enemiga...");}
else
{textcolor (WHITE+BLINK);
gotoxy (20,12); cprintf ("Lo lograste. Eres todo un Popeye!!");}
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 (LIGHTGRAY);
gotoxy (10,12); cprintf ("Changos!! sabes?? creo que deber¡as dormir m s seguido...");
}
getch ();
getch ();
menu ();
}
/***** Funci¢n que imprime gu¡as (coordenadas) para localizar los barcos *****/
void guias (int x)
{int a,y;
textcolor (WHITE);
for (a=1;a<=columna;a++) //impresi¢n eje X
{gotoxy (a*2+x+1,1); cprintf ("%d", a);}
for (a=1;a<=columna;a++) //impresi¢n eje X
{gotoxy (a*2+x+1,2); cprintf ("");} //alt + 31
for (y=1;y<=fila;y++) //impresi¢n eje y
{gotoxy (x,y+2); cprintf ("%d", y);}
}
/***** La estrictamente necesaria funci¢n que elimina l¡neas *****/
void del (int y,int x,int xx)
{int a;
for (a=x;a<=xx;a++) {gotoxy (a,y); printf (" ");}
}
Muchas gracias!!!