All pastes #780519 Raw Edit

alejo

public text v1 · immutable
·published 2007-11-18 16:32 UTC
rendered paste body
#include <stdio.h>
    #include "conio.h"
    #include <stdlib.h>
    
    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;a<xx;a++)
    {
     gotoxy (a,y); cprintf ("Í"); // alt+205 = Í
     gotoxy (a,yy); cprintf ("Í");
    }
    for (b=y+1;b<yy;b++)
    {
     gotoxy (x,y); 
     cprintf ("º"); // alt+186 = º
     gotoxy (xx,yy); 
     cprintf ("º");}
    }
    
    /*Continuaci¢n del men£ principal */
    menu2 ()
    {
         do
         { 
                del (9,36,39);
                gotoxy (36,Cool; 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"); 
                           cprintf (" Especifica el n£mero de columnas de las tablas");
                           cprintf ("(Min. ¯¯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 ("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;y<fila;y++) //imprime las casillas en las que estaban los barcos del enemigo
                 {
                     for (x=0;x<columna;x++)
                     {
                         if (barcoComp [y][x]=='')
                         {
                         textcolor (BLUE);
                         gotoxy ((x*2)+4,y+3); 
                         cprintf ("%c", barcoComp [y][x]);
                         }
                     }
                 }
            getch ();
            gameover ();
            }
            
            //Funci¢n que captura e imprime la matriz del pc //
            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][x]='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][x]!='')
            {barcoComp [y][x]='';}
            } while (barcoComp [y][x]!='');
            }
            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][x]='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,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 ();
            }