[ Foro de C ]

tengo un problema con un juego de laberinto

30-Nov-2019 18:45
Invitado (novatodec)
1 Respuestas

buenas señores del foro, tengo un problema con mi juego de laberinto , estoy comenzando en esto de la programación ,soy demasiado novato para esto.
mi problema consiste en que me hace el mapa del laberinto , en este caso la matriz
pero el asunto es que cuando me muevo con la flechas por el cmd, el asterisco (que viene siendo lo que esta adentro del laberinto y tiene que recorrerlo), no me respeta los limites ni los obstáculos , en cambio de eso me los borra.
agradecería mucho si me pudieran echar una mano .
este es mi codigo:


#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include "libreria.h"
int fil,col;
void leerpared(char matriz[fil][col]);
void hacerpared( char matriz[fil][col]);
void mover(int x,int y);
void pedirdatos(int fil,int col);
int main(){
	int x=0,y=0,d,b,p;
	
	printf("\t\t-INGRESA UN TAMAÑO-\n\n");
	scanf("%d",&fil);
	d=fil;
	col=d;
	clrscr();
	void pedirdatos();
	char matriz[fil][col];
	hacerpared(matriz);
	leerpared(matriz);
	
	mover(x,y);	
	}
	// para generar los numeros randoms y llenar la matriz con tales numeros
void hacerpared(char matriz[fil][col]){
int i,j,b;
	
	srand(time(0));
	for(i=0;i<fil;i++){
		for(j=0;j<col;j++){
		b=rand()%2;
		if(b==1)                   //para condicionar si es un uno tome la forma de una figura
		matriz[i][j]=219;
		else
		matriz[i][j]=b;
			}
	}	
	}	
	// para que se puede visualizar la matriz generada	
	void leerpared(char matriz[fil][col]){
	int i,j,c;
	 srand(time(0));
		c=rand()%col;
	for(i=0;i<fil;i++){
		for(j=0;j<col;j++){
		if(i==0||i==fil-1||j==0||j==col-1)  //para condicionar los bordes del mapa
		printf("%c",219);
		else
		if(i==fil-2&&j==col-c+1)// para poner la meta
		printf("%c",145);
		else{
	 printf("%c",matriz[i][j]);
		}
		
	}
	printf("\n");
}
}
void mover(int x,int y){
int a;
	srand(time(0));
	a=rand()%fil-1;
	gotoxy(x+1+a,y+1);
	
	printf("*");
	while(1){
		if(kbhit()){
			int tecla = getch();
			if(tecla == ARRIBA){
				gotoxy(x+a+1,y+1);
				printf(" ");
				y--;
				gotoxy(x+a+1,y+1);
				printf("*");
				
				
			}	if(tecla ==ABAJO){
				gotoxy(x+a+1,y+1);
				printf(" ");
				y++;
				gotoxy(x+a+1,y+1);
				printf("*");
			}	if(tecla ==IZQ){
				gotoxy(x+a+1,y+1);
				printf(" ");
				x--;
				gotoxy(x+a+1,y+1);
				printf("*");
			}	if(tecla ==DER){
				gotoxy(x+a+1,y+1);
				printf(" ");
				x++;
				if(x=='1')
				x--;
				gotoxy(x+a+1,y+1);
				printf("*");
			}	if(tecla==ESPACIO){
				}
		}
	}
}


y esta el la libreria llamada "libreria.h":


#include <stdlib.h>

#include<conio.h>	
#include<windows.h>
#include <windows.h>	



#define ARRIBA 72
#define ABAJO 80
#define IZQ 75
#define DER 77
#define ENTER 13
#define ESPACIO 32

void init(){
	
}

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

void clrscr(){
	system("cls");
}


 


02-Dec-2019 13:10
Nacho Cabanes (+61)

No puedo probarlo, porque no sé qué sistema operativo ni compilador usas, pero debes ser tú quien fuerce a que no pueda cambiar de casilla cuando no deba, comprobando si existe una pared o una puerta en la dirección en la que el usuario pida moverse.

Si eso es correcto, pero te borra paredes intermedias quizá sea simplemente porque avances una posición de pantalla, en vez de 2 (para "no pisar" las paredes).

Pero insisto, no puedo opinar mucho más sin probarlo.






(No se puede continuar esta discusión porque tiene más de dos meses de antigüedad. Si tienes dudas parecidas, abre un nuevo hilo.)