• Martes 16 de Abril de 2024, 19:29

Autor Tema:  Hundir la Flota en C, error de ultima hora! Importante!  (Leído 2477 veces)

Virusvicio

  • Nuevo Miembro
  • *
  • Mensajes: 1
    • Ver Perfil
Hundir la Flota en C, error de ultima hora! Importante!
« en: Lunes 4 de Febrero de 2013, 00:28 »
0
Hola buenas, llevo tiempo leyendo el foro desde que empece con la programación. Tengo un problema con mi trabajo de programación, aun después de muchos quebraderos de cabeza tengo el programa casi terminado y me gustaría que me ayudaseis a encontrar dos fallos que pueden estropearme el trabajo, ya que yo llevo tres días ya volviéndome loco y no encuentro solución alguna.

He aquí el código:
http://pastie.org/6035384#152


Mis problemas son:
1- Al imprimir el panel de barcos del jugador 2 el programa se cuelga y deja de responder (Funcion: void tablero2())
2- Al jugar la partida después de un turno el juego sale al menú principal.

Si podéis ayudarme con esos dos puntos os lo agradecería eternamente, gracias  :angel:

ProfesorX

  • Moderador
  • ******
  • Mensajes: 796
  • Nacionalidad: mx
    • Ver Perfil
Re:Hundir la Flota en C, error de ultima hora! Importante!
« Respuesta #1 en: Martes 5 de Febrero de 2013, 22:03 »
0
Hola Virusvicio, bienvenido al foro.

Bueno, revise tu codigo, y tratare de darte una respuesta que espero te satisfaga.

1. Respecto al primer problema, en la funcion tablero2(), tienes un error en uno de los printf, utilizas %s en lugar de %c, entonces la funcion esta esperando una cadena, cuando en realidad tu valor es un caracter.

Basicamente la linea:
Código: [Seleccionar]
printf(" F1  %s   |   %s  |   %s  |   %c  |   %c  |   %c  |   %c  |   %c  |   %c  |   %c  |\n",
reg.barcosj2[1][1],reg.barcosj2[1][2],reg.barcosj2[1][3],reg.barcosj2[1][4],reg.barcosj2[1][5],
reg.barcosj2[1][6],reg.barcosj2[1][7],reg.barcosj2[1][8],reg.barcosj2[1][9],reg.barcosj2[1][10]);

deberia ser:

Código: [Seleccionar]
printf(" F1  %c   |   %c  |   %c  |   %c  |   %c  |   %c  |   %c  |   %c  |   %c  |   %c  |\n",
reg.barcosj2[1][1],reg.barcosj2[1][2],reg.barcosj2[1][3],reg.barcosj2[1][4],reg.barcosj2[1][5],
reg.barcosj2[1][6],reg.barcosj2[1][7],reg.barcosj2[1][8],reg.barcosj2[1][9],reg.barcosj2[1][10]);

2. Respecto a tu segunda pregunta, me fue dificil seguir la logica de tu programa, ya que me parece que estas haciendo mucha redundancia, ademas, no me queda muy claro cual es la variable que utilizas para indicar que el juego se gano, y quien lo gano, pero creo que necesitarias hacer algo mas o menos asi en la opcion de jugar:

Código: [Seleccionar]
                case 3:
                    printf("Quien quiere empezar? 1/2:\n");
                    scanf("%d",&x);
                    do
                    {
                        if(x==1)
                        {
                            jugarj1();
                            jugarj2();
                        }
                        if(x==2)
                        {
                            jugarj2();
                            jugarj1();
                        }
                    }
                    while (ganar != 1);
                    break;

Aunque es probable que tengas que modificar un poco la manera en lo estas haciendo para que funcione.

Finalmente, descubri otro error en tu codigo, que quizas tambien sea el responsable de porque no obtienes un ganador.

En la funcion compganar() tienes un ; al final de los if, eso hace que la condicion del if quede vacia, y el codigo debajo del if siempre se ejecutara.

Especificamente pienso que

Código: [Seleccionar]
    for(i=0;i<11;i++)
    {
        for(j=0;j<11;j++)
        {
            if(reg.barcosj1[i][j]=='O'||reg.barcosj1[i][j]=='S');
            gj2=1;
            if(reg.barcosj2[i][j]=='O'||reg.barcosj2[i][j]=='S');
            gj1=1;
        }
    }

Deberia ser:

Código: [Seleccionar]
    for(i=0;i<11;i++)
    {
        for(j=0;j<11;j++)
        {
            if(reg.barcosj1[i][j]=='O'||reg.barcosj1[i][j]=='S')
                gj2=1;
            if(reg.barcosj2[i][j]=='O'||reg.barcosj2[i][j]=='S')
                gj1=1;
        }
    }

Aunque como dije, me cuesta ver tu logica y quizas yo este equivocado.

Al final te recomiendo que utilices el depurador de tu compilador, y que coloques puntos de interrpcion en las partes criticas de tu programa, para que puedas seguir paso a paso la ejecucion, y de esa forma veas si sigues la logica que te habias propuesto conseguir o si por el contrario, esta equivocada.

Saludos :)

NOTA:
==================================================================
Este foro es para ayudar, aprender, compartir... usenlo para eso,
NO SE RESUELVEN DUDAS POR MENSAJE PRIVADO Y MENOS POR CORREO
==================================================================

Crab

  • Nuevo Miembro
  • *
  • Mensajes: 1
    • Ver Perfil
Re:Hundir la Flota en C, error de ultima hora! Importante!
« Respuesta #2 en: Domingo 10 de Febrero de 2013, 16:58 »
0
Buenas #1 , yo hice ese juego el año pasado y tengo el código a mano ya que se lo pase a un amigo y lo comparto contigo y el foro que no cuesta nada:

http://pastebin.com/xNRyGueN

Aunque te aviso que use la libreria Conio.h, para hacerlo "bonito" y por eso no es compilable por todo el mundo (lo siento). Ahora bien, para el algoritmo y tal funciona al 100%, con algunos bugs que no he arreglado...

Pero bueno, el juego es jugable, la maquina pone los barcos en pantalla y el jugador es el que ha de eliminar los barcos, sin savestates ni nada, es muy simple pero quizás te resulte útil.