[ Foro de C++ ]
necesito solucionar el siguiente programa en c++ tengo el código y lo que debo hacer , es un laberinto de un videojuego y le quiero agregar ciertos animales y obstáculos
este es el archivo.h
#ifndef LABERINTO_H
#define LABERINTO_H
#include<cstdlib>
#include<cmath>
#include<iostream>
using namespace std;
class Laberinto
{
private:
int numeroFilas;
int numeroColumnas;
int numeroTesoros;
int numeroGnomos;
int numeroDragones;
double porcentajeCasillasVacias;
int **tablero;
int casillasVacias;
int filaEntrada;
int filaSalida;
public:
Laberinto(int numeroFilas, int numeroColumnas, int numeroTesoros, int numeroGnomos, int numeroDragones, double porcentajeCasillasVacias);
~Laberinto();
void fabricarCamino();
void imprimir();
protected:
/**
Retorna el número de casillas que ocupó el camino trazado
*/
int trazaLineaRecta(int filaInicial, int columnaInicial, int filaFinal, int columnaFinal);
void buscarCasillaAlAzar(int &fila, int &columna, int contenido);
void ponerEnCasillaVaciaAlAzar(int contenido);
};
#endif
este es el archivo.cpp y donde nesecito mas ayuda
#include "Laberinto.h"
Laberinto::Laberinto(int numeroFilas, int numeroColumnas, int numeroTesoros, int numeroGnomos, int numeroDragones, double porcentajeCasillasVacias)
{
this->numeroFilas = numeroFilas;
this->numeroColumnas = numeroColumnas;
this->numeroTesoros = numeroTesoros;
this->numeroGnomos = numeroGnomos;
this->numeroDragones = numeroDragones;
this->porcentajeCasillasVacias = porcentajeCasillasVacias;
tablero = new int*[numeroFilas];
for(int fila=0; fila<numeroFilas; fila++)
{
tablero[fila] = new int[numeroColumnas];
for(int columna=0; columna<numeroColumnas; columna++)
tablero[fila][columna] = 1; // Llena todo el laberinto con paredes
}
casillasVacias = 0;
filaEntrada = rand() % numeroFilas;
tablero[filaEntrada][0] = 5; // Pone la entrada
filaSalida = rand() % numeroFilas;
tablero[filaSalida][numeroColumnas-1] = 6; // Pone la salida
}
Laberinto::~Laberinto()
{
for(int fila=0; fila<numeroFilas; fila++)
delete tablero[fila];
delete [] tablero;
}
void Laberinto::fabricarCamino()
{
// Hacer el camino de salida:
casillasVacias += trazaLineaRecta(filaEntrada, 0, filaSalida, numeroColumnas-1);
// Hacer caminos al azar:
// Poner los Tesoros al azar , en estas resaltadas por el doble slash necesito ayuda, no lo necesito pues con gratificador ni nada , solo poner los obstáculos al programa
// Poner los Gnomos al azar
// Poner los Dragones al azar, cerca de la salida
}
int Laberinto::trazaLineaRecta(int filaInicial, int columnaInicial, int filaFinal, int columnaFinal)
{
int contarVacias = 0;
return contarVacias;
}
void Laberinto::imprimir()
{
for(int columna=0; columna<numeroColumnas+2; columna++)
cout << "X";
cout << endl;
for(int fila=0; fila<numeroFilas; fila++)
{
cout << "X";
for(int columna=0; columna<numeroColumnas; columna++)
if(tablero[fila][columna] == 0)
cout << " ";
else
cout << tablero[fila][columna];
cout << "X" << endl;
}
for(int columna=0; columna<numeroColumnas+2; columna++)
cout << "X";
cout << endl;
}
void Laberinto::buscarCasillaAlAzar(int &fila, int &columna, int contenido)
{
do
{
fila = rand() % numeroFilas;
columna = rand() % numeroColumnas;
}
while(tablero[fila][columna] != contenido);
}
void Laberinto::ponerEnCasillaVaciaAlAzar(int contenido)
{
int fila, columna;
buscarCasillaAlAzar(fila, columna, 0);
tablero[fila][columna] = contenido;
}
gracias por su ayuda
¿Qué es lo que no sabes hacer? Parte del esqueleto lo tienes hecho ya, al final del constructor: deberás generar posiciones al azar, y en esas posiciones guardar algo que no sea un 1 (pared) ni un 0 (pasillo), sino un 2, por ejemplo, para tener cierto tipo de animal, o un 3 para otro tipo distinto, o así sucesivamente.
Poner obstáculos es un poco más complicado, porque tienes que llevar cuidado de que no lleguen a bloquear el camino por completo, o el juego no tendrá solución.
no se como hacer la parte de generar aleatoria mente los nomos , ni los dragones cerca de la salida , me cuesta bastante el planteamiento e intentado hacerlo y no me sale , el programa , el código no lo puedo completar las lineas en doble hastg hechas como comentarios , me podrías dar una mano?
Insisto, tienes una idea al final del constructor. Podría ser algo como:
int filaD = rand() % numeroFilas;
int colD = rand() % numeroColumnas;
tablero[filaD][colD] = 2; // Dragón, por ejemplo
si , listo con los dragones y nomos , esta bien , por que se crean al azar pero que pasa con lo de que deben estar cerca siempre de la salida , si se cumple ? , me gustari apara entender bien , que me devolvieras el programa con la parte de nomos y dragones ya metida en el codigo , para añadirlo inmediatamente , este es un proyecto que nesecito entregar en 3 dias y la verdad pues trbaaje mucho para hacer todo , pero no se que parte de esto no entiendo , tengo dificultades , si por fa puedieras hacer eso ya daria el proyecto por terminado , mi parte era contruir el generador como tal , pero esta aprte la ignore totalmente , me ayudo a hacerla un compañero y la dejo asi , cancelo el proyecto y loq ueiro temrinar , ya lo del nomo por ejemplo lo tneog claro , pero el resto de puntos que faltan en doble hastag los que estan marcdos asi( //) son 4 , nesecito de verdad ayuda solo con esa parte
(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.)