Menú

Mostrar Mensajes

Esta sección te permite ver todos los mensajes escritos por este usuario. Ten en cuenta que sólo puedes ver los mensajes escritos en zonas a las que tienes acceso en este momento.

Mostrar Mensajes Menú

Mensajes - carlosm

#1
Bueno ahora que ya tengo todo!
podrías corregirme si algo estoy mal ...

#include <stdio.h>
#include <stdlib.h>
#include <time.h>

Esto en la función principal
   static int ataque=0;
   bool ataqueespecial=false;
   
   Aquila la fila y columnas no deberían ser las matrices que utilizamos?
   if (fila == 'Z' && columna[j] == 99)
   {
   ataqueespecial = true;
   }


/*bucle del juego*/
   if (ataque ==0 && ataqueespecial == true)
   {
   ataqueespecial();
   }
Esta sería la función entonces:
   void ataqueespecial(){
   ataque++;

   srand(time(NULL));
   int columnas = rand() %10;
   rand();
   turnoJugador(jugador1, jugador2);
   }
#2
Hola!
No, fue un trabajo en grupo solo aporte cosas muy simples por el hecho de que soy nuevo en esto y estoy tratando de entender, aun que se me dificulta mucho...
muchas gracias por tu aporte...

Para ser sincero no entiendo muy bien lo que me quieres decir, podrías ayudarme a cambiarlo en esa parte porfavor...
disculpa si te molesto....
#3
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

#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");
}