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;
}
}
}
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 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)
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.
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");
}
}
gracias ya funciona bien ;D