• Jueves 14 de Noviembre de 2024, 16:58

Autor Tema:  Batalla Naval Help!  (Leído 7954 veces)

lestatll

  • Nuevo Miembro
  • *
  • Mensajes: 8
    • Ver Perfil
Batalla Naval Help!
« en: Domingo 2 de Julio de 2006, 16:24 »
0
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]
  • ='0';}

  }
 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]
  • ='0';}

  }
 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]
  • !='X')

     {barcoHuman [y]
  • ='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,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!!!

Geo

  • Miembro de PLATA
  • *****
  • Mensajes: 1011
  • Nacionalidad: mx
    • Ver Perfil
    • http://hsblog.mexchip.com
Re: Batalla Naval Help!
« Respuesta #1 en: Domingo 2 de Julio de 2006, 16:45 »
0
  • Primero, no se hacen tareas, pero si se puede ayudar con dudas puntuales de las mismas.</li>
  • Segundo, ¿puedes decirme porqué el código que muestras es C++?</li>
  • Tercero, ¿conoces la diferencia entre C y C++?</li>
  • Cuarto. ¿De qué materia es esto, lo sabes?</li>
  • Quinto. Ya tienes el programa, no sé de dónde lo sacaste o quién te lo pasó, pero pues ya pon algo de tu parte.</li>
(JuanK me ha contagiado un poco de su humor estos días :D).

Saludos,
JJ (Geo).
La imaginación es el límite.
Hardware & Software | Mexchip

su -

  • Moderador
  • ******
  • Mensajes: 2349
    • Ver Perfil
Re: Batalla Naval Help!
« Respuesta #2 en: Domingo 2 de Julio de 2006, 16:50 »
0
Cita de: "Geo"
  • Primero, no se hacen tareas, pero si se puede ayudar con dudas puntuales de las mismas.</li>
  • Segundo, ¿puedes decirme porqué el código que muestras es C++?</li>
  • Tercero, ¿conoces la diferencia entre C y C++?</li>
  • Cuarto. ¿De qué materia es esto, lo sabes?</li>
  • Quinto. Ya tienes el programa, no sé de dónde lo sacaste o quién te lo pasó, pero pues ya pon algo de tu parte.</li>
(JuanK me ha contagiado un poco de su humor estos días :D).

Saludos,
JJ (Geo).
Ya que empesaste:
  • Si no haces tu tarea porque no sabes, que esperas de la vida? en que terminaras? casado con una cucha adienrada?  :P </li>
  • Si no te gusta, no entendes dedicate a otra cosa. (no lo tomes a mal)</li>
*******PELIGRO LEE ESTO!!*******

There is no place like 127.0.0.1

Conecto luego existo, no conecto luego insisto.

lestatll

  • Nuevo Miembro
  • *
  • Mensajes: 8
    • Ver Perfil
Re: Batalla Naval Help!
« Respuesta #3 en: Domingo 2 de Julio de 2006, 17:30 »
0
No entiendo por qué no compila. Mi duda PUNTUAL es por qué me arroja estos errores:

--------------------Configuration: NAVAL - Win32 Debug--------------------
Compiling...
NAVAL.CPP
C:\Documents and Settings\P C\Configuración local\Temp\wz6d5f\NAVAL.CPP(29) : error C2065: 'delay' : undeclared identifier
C:\Documents and Settings\P C\Configuración local\Temp\wz6d5f\NAVAL.CPP(182) : error C2065: 'randomize' : undeclared identifier
C:\Documents and Settings\P C\Configuración local\Temp\wz6d5f\NAVAL.CPP(189) : error C2065: 'random' : undeclared identifier
Error executing cl.exe.