Título: error logico c
Publicado por: Kenji-chan en 13 Diciembre 2016, 00:15 am
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(){ int op; printf("\t\t\tBusca minas versión ms-dos\n\n"); do{ 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){ 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; for(i=0; i<num; i++){ for(j=0; j<num; j++){ //printf("%c",35); printf("%d",tablero [i ][j ]);//para hacer debug } } } 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"); 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); //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); } //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++){ } 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); } 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); } 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); } 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); } 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; } } }
Título: Re: error logico c
Publicado por: engel lex en 13 Diciembre 2016, 00:22 am
PD. 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 compr obacion) 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)
Título: Re: error logico c
Publicado por: Kenji-chan en 13 Diciembre 2016, 00:38 am
x ejemplo en este caso escrivi en la cordenada 2,0 que es un uno y despus me la da como 0
(https://www.4shared.com/img/68vwM36cce/s25/158f563d798/img) (https://www.4shared.com/photo/68vwM36cce/img.html)
MOD: Imagen adaptada a lo permitido.
Título: Re: error logico c
Publicado por: engel lex en 13 Diciembre 2016, 00:45 am
tu tablero está girado 90º lo imprimiste mal void dibujarTablero(int tablero[][numero], int num){ int i, j; for(i=0; i<num; i++){ for(j=0; j<num; j++){ //printf("%c",35); printf("%d",tablero [i ][j ]);//para hacer debug } } }
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; for(y=0; y<num; y++){ for(x=0; x<num; x++){ //printf("%c",35); printf("%d",tablero [x ][y ]);//para hacer debug } } }
Título: Re: error logico c
Publicado por: Kenji-chan en 13 Diciembre 2016, 00:57 am
gracias ya funciona bien ;D
|