Foros del Web » Programación para mayores de 30 ;) » C/C++ »

Problema con laberinto de asteriscos

Estas en el tema de Problema con laberinto de asteriscos en el foro de C/C++ en Foros del Web. Hola, muy buenas compañeros, veréis, estoy dándole vueltas a un programa en C , que consiste en hacer un laberinto de asteriscos que se genere ...
  #1 (permalink)  
Antiguo 13/11/2015, 16:26
 
Fecha de Ingreso: noviembre-2015
Mensajes: 3
Antigüedad: 9 años, 1 mes
Puntos: 0
Problema con laberinto de asteriscos

Hola, muy buenas compañeros, veréis, estoy dándole vueltas a un programa en C, que consiste en hacer un laberinto de asteriscos que se genere de manera aleatoria y por el cual se ha de ir avanzando, hasta ahí bien, mi problema llega cuando tengo que detectar los asteriscos para que mi "0" no avance porque un "*" le corta el paso, el programa tiene más matices, pero de momento ese es mi problema, por favor, en principio solo quiero ayuda para replantearme mi planteamiento inicial del programa, seguramente esté haciendo algo mal o debería de enfocarlo de otro modo, no quiero que me lo den hecho, sino no sirve de nada.

El código sobre el que estoy trabajando es este:

Muchas gracias, me está costando empezar en esto de la programación, espero que con el apoyo de los foreros, con esfuerzo y dedicación consiga superarme día a día, gracias!

Código:
#include <stdio.h>
#include <windows.h>



COORD cxy;
#define posicion(x,y) {(cxy.X)= (x);(cxy.Y)= (y); SetConsoleCursorPosition((GetStdHandle(STD_OUTPUT_HANDLE)), (cxy) );}

char m[20][80];
char f=21, c=40;
char letra;

void desplazamiento(){
	
		do{
			letra=getch();
			switch(letra){
				case 119: //w
				posicion(c,f); printf(" ");
				f--;
				posicion(c,f); printf("0");
				break;
				case 100://d
				posicion(c,f); printf(" ");
				c++;
				posicion(c,f); printf("0");
				break;
				case 97://a
				posicion(c,f); printf(" ");
				c--;
				posicion(c,f); printf("0");
				break;
				case 115://s
				posicion(c,f); printf(" ");
				f++;
				posicion(c,f); printf("0");
				break;
		}
			
		}while(f!=1);
	
}

void laberinto(){
	//Genero valores aleatorios del 1 al 100 para todas las posiciones 
	//de mi array bidimensional m 
	
	int i, j;
	for(i=0;i<20;i++){
		for(j=0;j<80;j++){
			m[i][j]=rand()%100;
		}
	}
}

void mostrarlaberinto(){
	//pinto el laberinto diciendo que para cualquier posición
	//del array m donde el valor que se le ha asignado aleatoriamente
	//sea menor que 50, me pinte un espacio en blanco, y el resto de 
	//valores que pinte "*"
	int i, j;
	for (i=0;i<20;i++){
		for(j=0;j<80;j++){
			if(m[i][j]<50){
				printf(" ");
			}else{
				printf("*");
			}
		}
		
	}
	
}

void colisiones(){
	
	
}
	




int main(){
srand(time(NULL));

laberinto();
mostrarlaberinto();
posicion(c,f);printf("0");
colisiones();
desplazamiento();


getch();
return 0;
}
Estoy que no sé si crear una clase para las colisiones, o meter una batería de condiciones en el switch, también contemplo el do dentro de dos for, pero no he sacado nada en claro de momento, estoy algo atascado >__<
  #2 (permalink)  
Antiguo 13/11/2015, 17:50
Avatar de xKuZz  
Fecha de Ingreso: febrero-2015
Ubicación: nullptr
Mensajes: 183
Antigüedad: 9 años, 10 meses
Puntos: 27
Respuesta: Problema con laberinto de asteriscos

Cita:
Estoy que no sé si crear una clase
¿A qué llamas clase en C?

Recomendación: Antes de pararte a escribir código acostúmbrate a tener claro qué es lo que vas a hacer, coge papel y lápiz y a dibujar, te ayudará, sobre todo cuando las cosas sean más complicadas que esta.

En cuanto a tu problema, yo encapsularía la colisión en una función que devuelva un entero. Si tu haces if sobre una expresión que devuelva 0 eso es verdadero si no es falso.

Código C:
Ver original
  1. int puedoMoverme(char direccion)

Siempre que te cueste ver algo intenta abstraerte centrate en un problema más chico. Para que puedas seguir trabajando tú sólo (muy buena actitud, espero verte más por el foro ) y que no te pierdas debes resolver dos cosas.

En la parte de desplazamiento:
  • ¿Cuáles son los requisitos para llamar a puedoMoverme?, es decir ¿dónde debes llamarla?.
  • ¿Qué debo usar para que si algo me devuelve verdadero se ejecute un trozo de código en c cuando compruebo que una expresión sea verdadera?


Recomendación: Divide el problema, en problemas más chicos, asegúrate de que cada trozo pequeño funciona correctamente y al juntarlo todo funcionará perfectamente.

En la parte en la compruebas la colisión:
  • Olvídate del resto del código.
  • Tú sabes qué recibes una dirección y tienes acceso a la posición actual. Devuelve 1 cuando te puedas mover, devuelve 0 si no puedes.
Advertencia: Tu programa podría empezar encima de una estrella, eso debes modificarlo cuando puedas para que no ocurra.
  #3 (permalink)  
Antiguo 14/11/2015, 09:12
Avatar de Andrek  
Fecha de Ingreso: enero-2012
Mensajes: 14
Antigüedad: 12 años, 11 meses
Puntos: 1
Respuesta: Problema con laberinto de asteriscos

Hola amigo acabo de crear un mini juego que posiblemente te ayude, miralo!
http://www.forosdelweb.com/f96/mini-juego-dungeon-1141897/#post4757227

Etiquetas: char, int, laberinto, programa
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 06:16.