[ Foro de C++ ]

ayuda urgente c++

20-Feb-2019 02:55
jorge luis rendon morales
4 Respuestas

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



20-Feb-2019 16:29
Nacho Cabanes (+83)

¿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.


21-Feb-2019 07:55
jorge luis rendon morales

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?


21-Feb-2019 13:39
Nacho Cabanes (+83)

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


28-Feb-2019 20:48
jorge luis rendon morales

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.)