error logico c

Iniciado por Kenji-chan, 13 Diciembre 2016, 00:15 AM

0 Miembros y 1 Visitante están viendo este tema.

Kenji-chan

hola, necesito ayuda para entender el error de mi código, es un bus caminas versión ms-dos en la funcion comprobar() que se ejecuta en la funcion gameLoop() no me reconoce las coordenadas correctas y me da otro valor.

gracias de antemano.


PD. el codigo esta preparado en mi modo debug para cundo lo ejjecuten sea mas facil de entender


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

int numero;

void gotoxy(int x,int y);
int menu();
void llenarTablero(int tablero[][numero], int num);
void dibujarTablero(int tablero[][numero], int num);
int comprbacion(int tablero[][numero], int corx, int cory);
void gameLoop(int tablero[][numero], int num);
int gameOver(int tablero[][numero], int num);
void borrar(int num);
void comodin(int tablero[][numero], int num, int corx, int cory);

int main(){

   int op;

   do{
       op = menu();

       switch(op){
           case 1:
           numero = 10;
           break;
           case 2:
           numero = 15;
           break;
           case 3:
           numero = 20;
           break;
       }

       if(op != 0){
           int tablero[numero][numero];

           llenarTablero(tablero,numero);
           dibujarTablero(tablero,numero);
           gameLoop(tablero,numero);
       }

   }while(op != 0);

   return 0;
}

void gotoxy(int x,int y){
     HANDLE hcon;
     hcon = GetStdHandle(STD_OUTPUT_HANDLE);
     COORD dwPos;
     dwPos.X = x;
     dwPos.Y= y;
     SetConsoleCursorPosition(hcon,dwPos);
}

int menu(){
   system("cls");
   int op;

    printf("\t\t\tBusca minas versión ms-dos\n\n");

   do{
       printf("1)facil\n");
       printf("2)medio\n");
       printf("3)dificil\n");
       printf("0)salir\n");
       printf("\nOpcion: ");
       scanf("%i", &op);
       if(op<0 || op>3)
           printf("EL numero ingresado es incorecto\n");
   }while(op<0 || op>3);

   return op;
}

void llenarTablero(int tablero[][numero], int num){

   srand(time(NULL));
   int i, j;

   for(i=0; i<num; i++){
       for(j=0; j<num; j++){
               tablero[i][j] = rand()%2;
       }
   }

}

void dibujarTablero(int tablero[][numero], int num){

   int i, j;

   system("cls");

   for(i=0; i<num; i++){
       for(j=0; j<num; j++){
           //printf("%c",35);
           printf("%d",tablero[i][j]);//para hacer debug
       }
       printf("\n");
   }
}

int comprbacion(int tablero[][numero], int corx, int cory){
   if(tablero[corx][cory] == 1){
       gotoxy(25,2);//para hacer debug
       printf("tablrero[%d][%d] = %d", corx, cory, tablero[corx][cory]);//para hacer debug
       gotoxy(0,numero+3);//para hacer debug
       tablero[corx][cory] = 3;
       getch();//para hacer debug
       return 1;
   }
}

void gameLoop(int tablero[][numero], int num){
   int corx, cory, fin, vidas = 3;
   int i, j;

   do{
       borrar(num);
       printf("escriba una cordenado");
       printf("cordenada x: ");
       scanf("%d", &corx);
       printf("cordenada y: ");
       scanf("%d", &cory);

       if(corx>=num || cory>=num){
           borrar(num);
           printf("las cordenadas son incorrectas");
       }else if(comprbacion(tablero, corx, cory) == 1){
           borrar(num);
           printf("As asertado te quedan %d vidas", vidas);
           gotoxy(corx,cory);
           printf("X");
           //sirve para buscar espacios libres vecionos y desbloquearlos
           comodin(tablero, num, corx, cory);

       }else if(comprbacion(tablero, corx, cory) == 0){
           borrar(num);
           vidas--;
           printf("Era una bomba te quedan %d vidas", vidas);
           gotoxy(corx,cory);
           printf("O");
       }
       //fin = gameOver(tablero, num);

       Sleep(2500);
   }while(vidas !=0);
}

void borrar(int num){
   int i;
   gotoxy(0,num+3);
   for(i=0; i<5; i++){
       printf("                                            \n");
   }
   gotoxy(0,num+3);
}

void comodin(int tablero[][numero], int num, int corx, int cory){
   int i,j;

   for(i=corx; i<num; i++){
       for(j=cory; j<num; j++){
           if(tablero[i][j] == 0)
               j=num;
           else if(tablero[i][j] == 1){
               gotoxy(i,j);
               printf("X");
           }
           getch();//para hacer debug
       }

       for(j=cory; j>0; j--){
           if(tablero[i][j] == 0)
               j=0;
           else if(tablero[i][j] == 1){
               gotoxy(i,j);
               printf("X");
           }
           getch();//para hacer debug
       }

       if(tablero[i][j] == 0)
               i=num;
   }

   for(i=corx; i>0; i--){
       for(j=cory; j>0; j--){
           if(tablero[i][j] == 0)
               j=0;
           else if(tablero[i][j] == 1){
               gotoxy(i,j);
               printf("X");
           }
           getch();//para hacer debug
       }

       for(j=cory; j<num; j++){
           if(tablero[i][j] == 0)
               j=num;
           else if(tablero[i][j] == 1){
               gotoxy(i,j);
               printf("X");
           }
           getch();//para hacer debug
       }

       if(tablero[i][j] == 0)
               i=0;
   }

}

int gameOver(int tablero[][numero], int num){
   int i, j;
   for(i=0; i<num; i++){
       for(j=0; j<num; j++){
           if(tablero[i][j] == 1)
               return 1;
           else
               return 0;
       }
   }
}


engel lex

#1
CitarPD. el codigo esta preparado en mi modo debug para cundo lo ejjecuten sea mas facil de entender

probablemente nadie lo compile... requiere tiempo y trabajo... es recomendable que indiques exactamente donde está el error, que esperas, que resulta...

me imagino que "comprobar()" es "comprbacion(int tablero[][numero], int corx, int cory)" (te falta una o comprobacion) a demás no retorna valor si no entra al if, lo que puede generar resultados inesperados (no asumas que si no escribes el return, return será 0... nunca asúmas en C o C++ que algo vale 0, si no se lo has colocado tu mismo)

El problema con la sociedad actualmente radica en que todos creen que tienen el derecho de tener una opinión, y que esa opinión sea validada por todos, cuando lo correcto es que todos tengan derecho a una opinión, siempre y cuando esa opinión pueda ser ignorada, cuestionada, e incluso ser sujeta a burla, particularmente cuando no tiene sentido alguno.

Kenji-chan

#2
x ejemplo en este caso escrivi en la cordenada 2,0 que es un uno y despus me la da como 0



MOD: Imagen adaptada a lo permitido.

engel lex

tu tablero está girado 90º

lo imprimiste mal

void dibujarTablero(int tablero[][numero], int num){

   int i, j;

   system("cls");

   for(i=0; i<num; i++){
       for(j=0; j<num; j++){
           //printf("%c",35);
           printf("%d",tablero[i][j]);//para hacer debug
       }
       printf("\n");
   }
}




en ese codigo "j" es x (acuerdate que el compilador imprime a la derecha del anterior) cuando j termina, hace un salto de linea y va con el siguiente "i" (y) por consecuencia siempre que uses printf, el ciclo interno es X

siempre es util mentener la uniformidad

void dibujarTablero(int tablero[][numero], int num){

   int x, y;

   system("cls");

   for(y=0; y<num; y++){
       for(x=0; x<num; x++){
           //printf("%c",35);
           printf("%d",tablero[x][y]);//para hacer debug
       }
       printf("\n");
   }
}


El problema con la sociedad actualmente radica en que todos creen que tienen el derecho de tener una opinión, y que esa opinión sea validada por todos, cuando lo correcto es que todos tengan derecho a una opinión, siempre y cuando esa opinión pueda ser ignorada, cuestionada, e incluso ser sujeta a burla, particularmente cuando no tiene sentido alguno.

Kenji-chan

gracias ya funciona bien  ;D