elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Rompecabezas de Bitcoin, Medio millón USD en premios


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  problema con el juego de undir la flota
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: problema con el juego de undir la flota  (Leído 2,465 veces)
MessageBoxA

Desconectado Desconectado

Mensajes: 229


ayudame a ayudarte


Ver Perfil WWW
problema con el juego de undir la flota
« en: 22 Julio 2014, 05:04 am »

buenas e estado realizando un proyecto de la universidad y e logrado hacer muchas cosas ahora luego que finalice el proyecto a mi profesor se le ocurrio la idea de hacer que en vez de un barco sea  igual a una sola posicion de la matriz, quiere que sea un barco formado por varias secciones y con sentidos definidos.



aqui el codigo que entregue y quiere q sea el mismo code que modifique pero realmente si me cuesta evaluar con una sola posicion no se como hacer con varias posiciones al mismo tiempo para determinar si esta undido el barco y tambien el colocarlos en el tablero por ser de varias secciones.

Código
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <time.h>
  4. #include <conio.h>
  5. #include <windows.h>
  6.  
  7. // Posiciones: '0'=desocupado | '1'=Hay barco | '2'=Barco destruido
  8.  
  9. void wait(int seconds) // Funcion 'clock' para el tiempo de juego
  10. {
  11.    clock_t endwait;
  12.    endwait = clock() + seconds * CLOCKS_PER_SEC;
  13.    while( clock() < endwait )
  14.    {}
  15. }
  16.  
  17. void imprimir();
  18. void iniciar();
  19.  
  20. int i, j, k, jugador[10][10], oponente[10][10], opcion1, opcion2, puntajejugador=0, puntajeoponente=0; // Variables globales
  21. time_t start,end;
  22. double dif, tiempototal=0;
  23.  
  24. //________________________________________________________________________________________________
  25. void imprimir() // Funcion que imprime el tablero de juego
  26. {  
  27.    printf("\t\t\t\t\t    Tiempo transcurrido= %.1f segundos\n\n", tiempototal);
  28.  
  29.    for(i=1;i<=10;i++) // Imprime tablero del oponente
  30.    {
  31.        printf("\n\t");
  32.        for(j=1;j<=10;j++)
  33.        {
  34.            if(oponente[i][j]==3)
  35.            {
  36.                printf("  #");
  37.            }
  38.            else
  39.            {
  40.                if(oponente[i][j]==2) // Imprime 'X' si vale 2
  41.                {
  42.                    printf("  X");
  43.                }
  44.                else
  45.                {
  46.                    printf("  -");
  47.                }
  48.            }                                    
  49.        }
  50.        if(i==3)
  51.        {
  52.            printf("\tOPONENTE");
  53.        }
  54.        else
  55.        {
  56.            if(i==1)
  57.            {
  58.                printf("\t\t\tPuntaje oponente: %d", puntajeoponente);
  59.            }
  60.        }
  61.    }
  62.  
  63.    printf("\n\n\t ______________________________\n\n");
  64.  
  65.    for(i=1;i<=10;i++) // Imprime el tablero del jugador
  66.    {
  67.        printf("\n\t");
  68.        for(j=1;j<=10;j++)
  69.        {
  70.            if(jugador[i][j]==3)
  71.            {
  72.                printf("  #");
  73.            }
  74.            else
  75.            {
  76.                if(jugador[i][j]==2) // Imprime 'X' si vale 2 || 'O' si vale 1
  77.                {
  78.                    printf("  X");
  79.                }
  80.                else
  81.                {
  82.                    if(jugador[i][j]==1)
  83.                    {
  84.                        printf("  O");
  85.                    }
  86.                    else
  87.                    {
  88.                        printf("  -");
  89.                    }
  90.                }
  91.            }                                    
  92.        }
  93.        if(i==3)
  94.        {
  95.            printf("\tJUGADOR");
  96.        }
  97.        else
  98.        {
  99.            if(i==1)
  100.            {
  101.                printf("\t\t\tPuntaje jugador: %d", puntajejugador);
  102.            }
  103.        }
  104.    }
  105.  
  106.    printf("\n\n");  
  107. }
  108. //_______________________________________________________________________________________________
  109.  
  110. void iniciar() // Rellena con '0' el arreglo y coloca los barcos
  111. {
  112.  
  113.    for(i=1;i<=10;i++) // Llena todo con '0'
  114.    {
  115.        for(j=1;j<=10;j++)
  116.        {
  117.            jugador[i][j]=0;
  118.            oponente[i][j]=0;
  119.        }
  120.    }
  121.  
  122.    printf("\n\n Dame las coordenadas de tus barcos~\n\n");
  123.  
  124.    srand(time(NULL));
  125.    for(k=1;k<=10;k++) // Distribuye los barcos
  126.    {
  127.        imprimir();
  128.  
  129.        i=1+rand()%10; // Distribuye los barcos oponentes
  130.        j=1+rand()%10;
  131.        while(oponente[i][j]==1)
  132.        {
  133.            i=1+rand()%10; j=1+rand()%10;
  134.        }
  135.        oponente[i][j]=1; // La posicion de los barcos valdra 1
  136.  
  137.        printf("\n\tX%d = ", k);
  138.        scanf("%d", &opcion2);
  139.        while(opcion2<1 || opcion2>10)
  140.        {
  141.            printf("    Escoje un valor valido ( 1 a 10 )\n\n\tX%d = ", k);
  142.            scanf("%d", &opcion2);
  143.        }
  144.  
  145.        printf("\n\tY%d = ", k);
  146.        scanf("%d", &opcion1);
  147.        while(opcion1<1 || opcion1>10)
  148.        {
  149.            printf("\n    Escoje un valor valido ( 1 a 10 )\n\n\tY%d = ", k);
  150.            scanf("%d", &opcion1);
  151.        }
  152.  
  153.        if(jugador[opcion1][opcion2]==1)
  154.        {
  155.            printf("\n Ese valor ya existe...");
  156.            getche();
  157.            k=k-1;
  158.        }
  159.        jugador[opcion1][opcion2]=1;
  160.  
  161.        system("cls");
  162.  
  163.    }  
  164.  
  165. }
  166.  
  167. void presentacion()
  168. {
  169. system("color 0B");
  170.  
  171.    printf("\n\n\t    ~BATALLA NAVAL~\n\n\t\t#\n\t\t#|\n\t\t#|#\n\t\t#|##\n\t\t#|###\n\t\t#|####");
  172.    printf("\n\t\t#|#####\n\t\t#|######\n\t#########################\n\t _______________________");
  173.    printf("\n\t  ####/)###############\n\t   ###(/##############\n\t    #################\n\t     ###############");
  174.    printf("\n\n\n\t1- JUGAR\n\n\t2- SALIR\n\n\n\tDame tu opcion:");
  175. }
  176. //_______________________________________________________________________________________________
  177.  
  178. main() // Inicia el programa (main)
  179. {
  180.    int res, auxiliar, probabilidadcpu, destruidosoponente=0, destruidosjugador=0, ganador;
  181.    float dificultadcpu=0.5;
  182.  
  183.    presentacion();
  184.    scanf("%d", &res);
  185.    system("cls");
  186.  
  187.    switch(res)
  188.    { // Eliges la opcion Jugar o Salir
  189.  
  190.       case 1:
  191.       {
  192.           iniciar(); // Llama a la funcion iniciar
  193.           printf("\n\n\n\t\t Preparado?\n\n");
  194.           wait(2);
  195.           printf("\n\t\t AHORA!!!");
  196.           wait(1);
  197.  
  198.           do
  199.           {
  200.               time(&start);
  201.               system("cls"); // Limpia la pantalla
  202.  
  203.               imprimir();
  204.  
  205.               printf(" Es tu turno! Dame la posicion que deseas atacar~\n\n");
  206.               printf("\tX = ");
  207.               scanf("%d", &opcion2);
  208.               while(opcion2<1 || opcion2>10)
  209.               {
  210.                   printf("\n    Escoje un valor valido ( 1 a 10 )\n\n\tX = ");
  211.                   scanf("%d", &opcion2);
  212.               }
  213.  
  214.               printf("\tY = ");
  215.               scanf("%d", &opcion1);
  216.               while(opcion1<1 || opcion1>10)
  217.               {
  218.                   printf("\n    Escoje un valor valido ( 1 a 10 )\n\n\tY = ");
  219.                   scanf("%d", &opcion1);
  220.               }
  221.  
  222.               auxiliar=oponente[opcion1][opcion2];
  223.               oponente[opcion1][opcion2]=3;
  224.               system("cls");
  225.               imprimir();
  226.               oponente[opcion1][opcion2]=auxiliar;                          
  227.  
  228.               if(oponente[opcion1][opcion2]==1)
  229.               {
  230.                   oponente[opcion1][opcion2]=2;
  231.                   destruidosoponente=destruidosoponente+1;
  232.                   puntajejugador=puntajejugador+200;
  233.                   printf("\n Haz acertado!!\n\n");
  234.               }
  235.               else
  236.               {
  237.                   printf("\n Haz fallado...\n\n");
  238.               }
  239.  
  240.               system("PAUSE");
  241.               system("cls");
  242.               if(destruidosoponente==5)
  243.               {
  244.                   printf("\n\n\n\n\t\t\tHAZ GANADO!!");
  245.                   getche();
  246.               }                              


« Última modificación: 22 Julio 2014, 05:11 am por MessageBoxA » En línea

SI LA MATRIX FUERA PERFECTA.... ESTARÍA ESCRITA EN C++
eferion


Desconectado Desconectado

Mensajes: 1.248


Ver Perfil
Re: problema con el juego de undir la flota
« Respuesta #1 en: 22 Julio 2014, 09:18 am »

Necesitas una estructura que te permita almacenar el estado y/o la posición de los barcos:

Código
  1. enum pos
  2. {
  3.  Ninguna,
  4.  Horizontal,
  5.  Vertical
  6. };
  7.  
  8. struct coord
  9. {
  10.  int x;
  11.  int y;
  12. };
  13.  
  14. struct barco
  15. {
  16.  int longitud;
  17.  struct coord coordenadas;
  18.  enum posicion pos;
  19.  int estado;
  20. };

Con esto ya puedes "modelar" cada uno de los barcos. Lo ideal sería tener una instrucción que permitiese crear los barcos. Algo del tipo:

Código
  1. struct barco NuevoBarco( int longitud )
  2. {
  3.  struct barco to_return;
  4.  to_return->longitud = longitud;
  5.  to_return->coordenadas.x = -1; // Para indicar que no esta posicionado
  6.  to_return->coordenadas.y = -1; // Para indicar que no esta posicionado
  7.  to_return->pos = Ninguna;
  8.  to_return->estado = longitud;
  9.  return to_return;
  10. }

En este caso, "estado" almacena la "vida" del barco... si la vida llega a 0, el barco se considera hundido.

Como puedes ver, no uso memoria dinámica para los barcos... no es necesaria.

Una vez tienes la flota creada, lo suyo es posicionarla. Por la cantidad de barcos que hay no se me ocurre una combinación (tampoco voy a buscarla) en la que no se puedan colocar todos los barcos... yo, en primer lugar, crearía los barcos del más grande al más pequeño y, después, intentaría posicionarlos en ese orden.

Una forma de posicionar los barcos pudiera ser: En un bucle, elegir al azar un par de coordenadas  (x,y) y una posición (vertical u horizontal), después compruebas si el barco "entra" en esa posición... y repites el bucle hasta dar con una posición "válida".

Ahora toca inicializar el tablero para borrar la partida anterior si la hubiese.

Una vez has realizado estos pasos el programa está listo para iniciar la partida.

Cada vez que introduces unas coordenadas de disparo puedes hacer los siguientes chequeos:

* Si es una casilla que ya ha sido atacada, se piden nuevas coordenadas
* Se recorre el array de barcos y se comprueba si algún barco se encuentra en la coordenada seleccionada... si es así, actualizas el estado del barco para anotar un "toque". Llegados a este punto, si la vida de 3 barcos es 0, el jugador gana la partida. Si no hay barcos en la coordenada marcada... indicas "agua".

A continuación el prototipo de una función que determine si un barco ha resultado "tocado".

Código
  1. int BarcoTocado( struct barco* barco, struct coord coordDisparo )
  2. {
  3.  if ( barco->pos == Horizontal )
  4.  {
  5.    struct coord coordBarco = barco->coord;
  6.    int i = barco->longitud;
  7.    while ( i > 0 )
  8.    {
  9.      if (coordBarco == coordDisparo )
  10.        return 1;
  11.  
  12.      coordBarco.x++;
  13.      i--;
  14.    }    
  15.  }
  16.  else
  17.  {
  18.    // ...
  19.  }
  20.  
  21.  return 0;
  22. }

Creo que con estas guías debería ser sencillo completar el programa.


En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Israel ataca la flota de ayuda a Gaza y mata al menos a 10 activistas « 1 2 »
Foro Libre
Nanocity 12 5,252 Último mensaje 2 Junio 2010, 00:53 am
por Nanocity
Juego Hundir la Flota Con JAVA
Java
izel 4 9,398 Último mensaje 8 Diciembre 2010, 21:02 pm
por izel
[Source C#] Juego: Hundir la flota v0.3 « 1 2 »
.NET (C#, VB.NET, ASP)
Dryken 12 14,377 Último mensaje 7 Junio 2013, 02:28 am
por Shout
Graban en vídeo una “flota” de ovnis cerca de la Torre Eiffel « 1 2 ... 5 6 »
Foro Libre
El_Andaluz 53 15,259 Último mensaje 5 Noviembre 2014, 19:32 pm
por #!drvy
Problema con Juego de hundir la flota
Programación C/C++
jpvroq 0 2,146 Último mensaje 31 Diciembre 2016, 18:21 pm
por jpvroq
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines