hundir la flota enemiga de un solo ataque

Foro para los que usan Dev-C++.
Responder
Mensaje
Autor
carlosm
Mensajes: 1
Registrado: 03/06/2019 3:19 pm

hundir la flota enemiga de un solo ataque

#1 Mensaje por carlosm » 03/06/2019 3:40 pm

Hola!
En el siguiente juego de Hundir la flota me han pedido realizar una función que realice 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 todo el juego con un truco, por ejemplo introduciendo la fila "Z" y la columna 99..
Ayuda porfa..

Código: Seleccionar todo

#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[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[j] == 2){
               cont1 += 1;
           }
           
           if(m[j] == 2 || m[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[j] == 1){
                printf("# ");
            }else if(m[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("elige 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("elige 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("elige 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("elige 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("elige 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("elige 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("elige 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("elige 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");
}
Última edición por mollok el 05/06/2019 8:23 am, editado 1 vez en total.
Razón: Los códigos deben ir entre etiquetas 'code', botón </>

Responder

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 2 invitados