[ Foro de C++ ]

hundir la flota en c++

04-Jun-2019 01:26
Invitado (andres)
0 Respuestas

Hola!
Tengo la estructura de el programa hundir la flota..
Pero me han pedido crear una función para realizar un ataque aéreo especial que haga explotar varias posiciones del tablero enemigo al azar. Esta función puede ser invocada solo una vez durante el juego con un truco, por ejemplo introduciendo la fila "Z" y la columna 99...
Ayuda por favor la necesito lo más pronto posible,..
De ante mano muchas gracias ...


Aquí esta el código fuente del programa Hundir la Flota:

#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
#include <conio.h>
#include <string.h>


/*definimos las filas y columnas*/

#define NF 10
#define NC 10


/*definimos las variables a usar en cada una de las funciones*/


int transformanumero(char num);
int transformaletra(char letra);
void iniciartablero(int m[NF][NC]);
int gameover(int m[NF][NC], int cont);
void colocar(int m[NF][NC]);
void imprimetablero(int m[NF][NC]);
void turnoJugador(int m[NF][NC], int m2[NF][NC]);

void portaaviones(int m[NF][NC]);
void acorazado(int m[NF][NC]);
void submarino(int m[NF][NC]);
void patrullero(int m[NF][NC]);
void soldado(int m[NF][NC]);

/*Se definen las variables a usar, junto con la matriz  */

main()
{
   int findeljuego = 0, cont1 = 0, cont2 = 0;

   int jugador1[NF][NC], jugador2 [NF][NC];

   iniciartablero(jugador1);
   iniciartablero(jugador2);

   printf("Jugador 1, coloca tus barcos:\n");
   colocar(jugador1);


   printf("Jugador 2, coloca tus barcos:\n");
   colocar(jugador2);

/*Se leen los turnos de los jugadores y se indica si a ganado o  ha perdido para ambos jugadores
   Se usara dos colores para distinguir si ha ganado con el ataque o se aha esquivado con el ataque
Despues de terminar con las posiciones del oponwete se saldrá del juego */


   while(findeljuego == 0){

       if(gameover(jugador1, cont1) == 0){

           system("cls");
           printf("Turno, Jugador 1:\n");
           imprimetablero(jugador1);
           turnoJugador(jugador2, jugador1);

           if(gameover(jugador2, cont2)){
               findeljuego = 1;
               system("cls");
               imprimetablero(jugador1);
               system("COLOR 02");
               printf("\n");
               printf("\nHa ganado Jugador 1\n");
           }
       }

       if(gameover(jugador2, cont2) == 0){
           system("cls");
           printf("Turno, Jugador 2:\n");
           imprimetablero(jugador2);
           turnoJugador(jugador1, jugador2);

           if(gameover(jugador1, cont1)){
               findeljuego = 1;
               system("cls");
               imprimetablero(jugador2);
               system("COLOR 02");
               printf("\n");
               printf("\nHa ganado Jugador 2\n");
           }
       }
   }
}

/*********************************************************/

/* Esta funcion va a transformar letras a numeros */
int transformaletra(char letra)
{
   int coordenada;

   if(letra >= 'A' || letra < 'Z'){
       coordenada = letra - 65;
   }

   return(coordenada);
}

int transformanumero(char num)
{
   int coordenada;

   if(num >= '0' || num < '9'){
       coordenada = num - 48;
   }

   return(coordenada);
}

/* Esta funcion va iniciar el tablero desde la posicion 0 */
void iniciartablero(int m[NF][NC]){

for(int i = 0; i < NF; i++){
       for (int j = 0; j < NC; j++){
           m[i][j]= 0;
}
}
}

/* Esta funcion va a detectar el fin del juego */

int gameover(int m[NF][NC], int cont2){

   int res = 0, cont1 = 0;

   for(int i = 0; i < NF; i++){
       for (int j = 0; j < NC; j++){
       if(m[i][j] == 2){
           cont1 += 1;
       }
       
       if(m[i][j] == 2 || m[i][j] == 1){
        cont2++;
}
   }
}

if(cont1 == cont2){
       res = 1;
}

return (res);
}
/* Esta funcion va a realizar la colocacion de cada barco en las posiciones pedidas */
void colocar(int m[NF][NC]){

   int fila, columna2;
   char columna;

   imprimetablero(m);
   portaaviones(m);
   acorazado(m);
   submarino(m);
   patrullero(m);
   soldado(m);


   system("cls");
}

/*Esta funcion va a mostrar el tablero de ambos jugadores */

void imprimetablero(int m[NF][NC]){

   for(int i = 0; i <= NF; i++){
       if(i == 0){
           printf("  ");
       } else{
           printf("%c ", 'A'+i-1);
       }
   }

   printf("\n");

   for(int i=0; i<NF; i++){
       printf("%d ", i);

       for (int j=0; j<NC; j++){

           if(m[i][j] == 1){
               printf("# ");
           }else if(m[i][j] == 2){
            printf("X ");
}else{
               printf("~ ");
           }
       }
       printf("\n");
   }
}

/*Esta funcion va a hundir la flota del oponete a través de turnos */
void turnoJugador(int m[NF][NC], int m2[NF][NC]){
   char letra, fila;
   int filas, columna;

       do{
do{

       printf("Introduce una fila: ");
       fflush(stdin);
       scanf("%c", &fila);
       fflush(stdin);        
       filas = transformanumero(fila);
       
       }while(filas < 0 || filas > 10);
}while(!isdigit(fila));

       do{
        do{
           printf("Introduce una columna: ");
           fflush(stdin);
           scanf("%c", &letra);
           fflush(stdin);
           letra  = toupper(letra);
           columna = transformaletra(letra);
           }while(columna >= NC || columna < 0);
       }while(isdigit(letra));

       columna = transformaletra(letra);

   if(m[filas][columna] > 0 && m[fila][columna] != 2){
       printf("\nBarco Hundido\n");
       m[filas][columna] = 2;
       system("COLOR 4f");

       if(m2[filas][columna] != 1){
           m2[filas][columna] = 2;
       }
       printf("\nPulsa enter para acabar el turno");
       getch();
       system("COLOR 07");

   }else{

       system("COLOR 30");
       printf("\nAgua\n");
       printf("\nPulsa enter para acabar el turno");
       getch();
       system("COLOR 07");
   }
}

/*Todas estas funciones auxiliares dibujan los barcos que se usaran */


/******************************Barcos y soldado*****************************************************/

void portaaviones(int m[NF][NC]){

   char pos, letra, fila;
   int filas, columna;

printf("Como quieres colocar el porta aviones *****\n");
   do{
       printf("Horizonal (H), Vertical(V): ");
       scanf("%s", &pos);
   }while(toupper(pos) != 'H' && toupper(pos) != 'V' );

   switch(toupper(pos)){
   
   case 'H':
   
       do{
do{

       printf("Introduce una fila: ");
       fflush(stdin);
       scanf("%c", &fila);
       fflush(stdin);        
       filas = transformanumero(fila);
       
       }while(filas < 0 || filas > 10);
}while(!isdigit(fila));

      system("cls");

       printf("Elije 5 columnas para ubicarlo: \n");
       for(int i = 0; i < 5; i++){
       
do{
   do{
       printf("Introduce una columna %d: ", i+1);
       fflush(stdin);
       scanf("%c", &letra);
       fflush(stdin);
       letra  = toupper(letra);
           
       columna = transformaletra(letra);
           
       if(m[filas][columna] == 1){
           printf("\nYa has colocado el barco en la posicion [%d][%c]\n", filas, letra);
           i--;
}

   }while(isdigit(letra));
}while ((columna >= NC) || (columna < 0));


       m[filas][columna] = 1;
       }


       imprimetablero(m);
       getch();
       system("cls");

       break;

   case 'V':

       do{
        do{
       
           printf("En que columna lo quieres colocar: ");
           fflush(stdin);
           scanf("%c", &letra);
           fflush(stdin);
           letra = toupper(letra);
           
           columna = transformaletra(letra);
           
}while(isdigit(letra));
}while ((columna >= NC) || (columna < 0));

       system("cls");

       printf("Elije 5 filas para ubicarlo: \n");
       for(int i = 0; i < 5; i++){
       
           do{
            do{
       printf("Introduce una fila %: ", i+1);
       fflush(stdin);
       scanf("%c", &fila);
       fflush(stdin);        
       filas = transformanumero(fila);
       }while(!isdigit(fila));
           
           if(m[filas][columna] == 1){
            printf("\nYa has colocado el barco en la posicion [%d][%c]\n", filas, letra);
            i--;
}

           }while((filas < 0 && filas > 10) || !isdigit(fila));

           m[filas][columna] = 1;
       }

       imprimetablero(m);
       getch();
       system("cls");

       break;
   }
}

void acorazado(int m[NF][NC]){

   char pos, letra, fila;
   int filas, columna;

printf("Como quieres colocar el acorazado ****\n");
   do{
       printf("Horizonal (H), Vertical(V): ");
       scanf("%s", &pos);
   }while(toupper(pos) != 'H' && toupper(pos) != 'V' );

   switch(toupper(pos)){
   
   case 'H':
   
       do{
do{

       printf("En que fila lo quieres colocar: ");
       fflush(stdin);
       scanf("%c", &fila);
       fflush(stdin);        
       filas = transformanumero(fila);
       
       }while(filas < 0 || filas > 10);
}while(!isdigit(fila));

      system("cls");

       printf("Elije 4 columnas para ubicarlo: \n");
       for(int i = 0; i < 4; i++){
       
       do{
           printf("Introduce una columna: ");
           fflush(stdin);
           scanf("%c", &letra);
           fflush(stdin);
           letra  = toupper(letra);
           
           columna = transformaletra(letra);
           
           if(m[filas][columna] == 1){
            printf("\nYa has colocado el barco en la posicion [%d][%c]\n", filas, letra);
            i--;
}

       }while((isdigit(letra) || columna >= NC || columna < 0));


       m[filas][columna] = 1;
       }


       imprimetablero(m);
       getch();
       system("cls");

       break;

   case 'V':

       do{
        do{
       
           printf("En que columna lo quieres colocar: ");
           fflush(stdin);
           scanf("%c", &letra);
           fflush(stdin);
           letra = toupper(letra);
           
           columna = transformaletra(letra);
           
}while(isdigit(letra));
}while ((columna >= NC) || (columna < 0));

       system("cls");

       printf("Elije 4 filas para ubicarlo: \n");
       for(int i = 0; i < 4; i++){
       
           do{
           
            do{
       printf("Introduce una fila %d: ", i+1);
       fflush(stdin);
       scanf("%c", &fila);
       fflush(stdin);        
       filas = transformanumero(fila);
       }while(!isdigit(fila));
           
           if(m[filas][columna] == 1){
            printf("\nYa has colocado el barco en la posicion [%d][%c]\n", filas, letra);
            i--;
}

           }while(filas < 0 && filas > 10);

           m[filas][columna] = 1;
       }

       imprimetablero(m);
       getch();
       system("cls");

       break;
   }

}

void submarino(int m[NF][NC]){

   char pos, letra, fila;
   int filas, columna;

printf("Como quieres colocar el submarino ***\n");
   do{
       printf("Horizonal (H), Vertical(V): ");
       scanf("%s", &pos);
   }while(toupper(pos) != 'H' && toupper(pos) != 'V' );

   switch(toupper(pos)){
   
   case 'H':
   
       do{
do{

       printf("En que fila lo quieres colocar: ");
       fflush(stdin);
       scanf("%c", &fila);
       fflush(stdin);        
       filas = transformanumero(fila);
       
       }while(filas < 0 || filas > 10);
}while(!isdigit(fila));

      system("cls");

       printf("Elije 3 columnas para ubicarlo: \n");
       for(int i = 0; i < 3; i++){
       
       do{
           printf("Introduce una columna: ");
           fflush(stdin);
           scanf("%c", &letra);
           fflush(stdin);
           letra  = toupper(letra);
           
           columna = transformaletra(letra);
           
           if(m[filas][columna] == 1){
            printf("\nYa has colocado el barco en la posicion [%d][%c]\n", filas, letra);
            i--;
}

       }while(isdigit(letra) || columna >= NC || columna < 0);


       m[filas][columna] = 1;
       }


       imprimetablero(m);
       getch();
       system("cls");

       break;

   case 'V':

       do{
        do{
       
           printf("En que columna lo quieres colocar: ");
           fflush(stdin);
           scanf("%c", &letra);
           fflush(stdin);
           letra = toupper(letra);
           
           columna = transformaletra(letra);
           
}while(isdigit(letra));
}while ((columna >= NC) || (columna < 0));

       system("cls");

       printf("Elije 3 filas para ubicarlo: \n");
       
       for(int i = 0; i < 3; i++){

       
           do{
           
            do{
       printf("Introduce una fila %d: ", i+1);
       fflush(stdin);
       scanf("%c", &fila);
       fflush(stdin);        
       filas = transformanumero(fila);
       }while(!isdigit(fila));
           
           if(m[filas][columna] == 1){
            printf("\nYa has colocado el barco en la posicion [%d][%c]\n", filas, letra);
            i--;
}

           }while(filas < 0 && filas > 10);

           m[filas][columna] = 1;
       }

       imprimetablero(m);
       getch();
       system("cls");

       break;
   }
}

void patrullero(int m[NF][NC]){

   char pos, letra, fila;
   int filas, columna;

printf("Como quieres colocar al patrullero **\n");
   do{
       printf("Horizonal (H), Vertical(V): ");
       scanf("%s", &pos);
   }while(toupper(pos) != 'H' && toupper(pos) != 'V' );

   switch(toupper(pos)){
   
   case 'H':
   
       do{
do{

       printf("En que fila lo quieres colocar: ");
       fflush(stdin);
       scanf("%c", &fila);
       fflush(stdin);        
       filas = transformanumero(fila);
       
       }while(filas < 0 || filas > 10);
}while(!isdigit(fila));

      system("cls");

       printf("Elije 2 columnas para ubicarlo: \n");
       for(int i = 0; i < 2; i++){
       
       do{
           printf("Introduce una columna: ");
           fflush(stdin);
           scanf("%c", &letra);
           fflush(stdin);
           letra  = toupper(letra);
           
           columna = transformaletra(letra);
           
           if(m[filas][columna] == 1){
            printf("\nYa has colocado el barco en la posicion [%d][%c]\n", filas, letra);
            i--;
}

       }while(isdigit(letra) || columna >= NC || columna < 0);


       m[filas][columna] = 1;
       }


       imprimetablero(m);
       getch();
       system("cls");

       break;

   case 'V':

       do{
        do{
       
           printf("En que columna lo quieres colocar: ");
           fflush(stdin);
           scanf("%c", &letra);
           fflush(stdin);
           letra = toupper(letra);
           
           columna = transformaletra(letra);
           
}while(isdigit(letra));
}while ((columna >= NC) || (columna < 0));

       system("cls");

       printf("Elije 2 filas para ubicarlo: \n");
       for(int i = 0; i < 2; i++){
       
           do{
           
            do{
       printf("Introduce una fila %d: ", i+1);
       fflush(stdin);
       scanf("%c", &fila);
       fflush(stdin);        
       filas = transformanumero(fila);
       }while(!isdigit(fila));
           
           if(m[filas][columna] == 1){
            printf("\nYa has colocado el barco en la posicion [%d][%c]\n", filas, letra);
            i--;
}

           }while(filas < 0 && filas > 10);

           m[filas][columna] = 1;
       }

       imprimetablero(m);
       getch();
       system("cls");

       break;
   }
}

void soldado(int m[NF][NC]){

   char pos, letra, fila;
   int filas, columna, flag;

do{
flag = 0;

printf("Como quieres colocar donde quieres colocar al soldado *\n");

       do{
        do{
       
           printf("En que columna lo quieres colocar: ");
           fflush(stdin);
           scanf("%c", &letra);
           fflush(stdin);
           letra = toupper(letra);
           
           columna = transformaletra(letra);
           
}while(isdigit(letra));
}while ((columna >= NC) || (columna < 0));

       do{
do{

       printf("En que fila lo quieres colocar: ");
       fflush(stdin);
       scanf("%c", &fila);
       fflush(stdin);        
       filas = transformanumero(fila);
       
       }while(filas < 0 || filas > 10);
}while(!isdigit(fila));

   if(m[filas][columna] == 1){
       printf("\nNo puedes colocar al soldado sobre un barco en la posicion [%d][%c]\n", filas, letra);
       flag = 1;
}

}while(flag != 0);


   m[filas][columna] = 1;

   imprimetablero(m);
   getch();
   system("cls");
}




(No se puede continuar esta discusión porque tiene más de dos meses de antigüedad. Si tienes dudas parecidas, abre un nuevo hilo.)