Laberinto c++

Iniciado por huerjue, 19 Marzo 2018, 21:21 PM

0 Miembros y 1 Visitante están viendo este tema.

huerjue

buenas tengo estos dos laberintos y se supone que con esa condicion que le puse al while deberia salirse e imprirmirse el otro pero solo se come la x y sigue como si nada en el mismo laberinto esto es lo que llevo, pls help


#include <iostream>
#include <conio.h>
#include <stdio.h>
using namespace std;
void laberinto(int a[10][25],int f,int c){
   int i,j;
   for(i=0;i<f;i++){
   for(j=0;j<c;j++)
      if(a[j]==0) cout<<" ";
         else if(a[j]==1) cout<<"@";
            else if(a[j]==2) cout<<"x";
               else cout<<"X";
                  cout<<endl;
}


}

void laberinto2(int b[15][45],int fi, int co){
   int l,m;
   for(l=0;l<fi;l++){
   for(m=0;m<co;m++)
      if(b[l][m]==0) cout<<" ";
         else if(b[l][m]==1) cout<<"@";
            else if(b[l][m]==2) cout<<"x";
               else cout<<"X";
                  cout<<endl;
}
}
int main(void){

int a[10][25]={
{1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1},
{2,0,0,0,0,1,0,1,1,1,0,0,1,1,1,1,0,0,1,1,0,0,0,0,1},
{1,1,0,1,1,0,0,0,1,1,1,1,1,0,0,1,1,1,1,1,1,0,0,0,1},
{1,1,0,0,1,1,1,1,0,0,0,1,1,1,1,0,0,1,0,1,1,1,0,0,1},
{1,1,0,1,1,0,0,1,1,1,1,0,0,0,1,1,1,1,1,1,0,0,1,0,1},
{1,1,0,0,0,1,1,1,1,0,0,1,1,1,1,1,0,0,0,3,1,1,1,0,1},
{1,0,0,0,1,1,1,1,1,0,0,0,1,1,1,1,1,0,1,1,2,1,0,1,1},
{1,1,1,0,0,1,1,1,0,1,1,1,0,0,1,1,1,0,1,1,1,1,1,1,1},
{1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,1},
{1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,1,0,1,1}
};

int b[15][45]={
{1,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1},
{2,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,1},
{0,1,1,0,1,1,0,0,0,0,1,0,1,0,0,0,1,1,0,1,1,0,1,1,0,0,0,1,1,0,0,1,1,0,0,1,1,1,1,0,0,1,0,0,1},
{0,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,0,0,0,0,0,0,0,0,0,1,0,1,0,1,0,1,0,0,0,0,0,1},
{0,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,0,1,0,0,1,0,1},
{0,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,1},
{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,0,0,1},
{0,0,1,0,0,1,0,0,1,0,0,1,0,1,1,0,1,1,1,0,1,1,1,0,1,1,1,0,1,1,1,0,0,1,1,0,1,0,0,0,1,0,1,0,1},
{0,0,1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1},
{0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,0,0,0,0,1,0,0,3,1},
{0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,0,1,0,1,1,1},                                 
{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,1,1,0,1,0,1,1},
{1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,0,0,1,0,3,1},
{1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,0,1,0,0,1,0,0,1},
{1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,1,0,0,0,0,1}

};

int c[20][60]={
{ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1},
{ 2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1},
{ 0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1},
{ 0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1},
{ 0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1},
{ 0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1},
{ 0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1},
{ 1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1},
{ 1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1},
{ 1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1},
{ 1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1},
{ 1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1},
{ 1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1},
{ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1},
{ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1},
{ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1},
{ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,3},
{ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1},
{ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1},
{ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1}
};


int x=0,y=1;
char opc;
do{
system("cls");
laberinto(a,10,25);
opc=getch();
if(opc=='w'&& a[y-1]
  • !=1){a[y]
  • =0;y--;a[y]
  • =2;}
    if(opc=='s'&& a[y+1]
  • !=1){a[y]
  • =0;y++;a[y]
  • =2;}
    if(opc=='a'&& a[y][x-1]!=1){a[y]
  • =0;x--;a[y]
  • =2;}
    if(opc=='d'&& a[y][x+1]!=1){a[y]
  • =0;x++;a[y]
  • =2;}



    }while(opc=a[6][20] &&opc!='x');



    do{
    system("cls");
    laberinto2(b,15,45);
    opc=getch();
    if(opc=='w'&& b[y-1]
  • !=1){b[y]
  • =0;y--;b[y]
  • =2;}
    if(opc=='s'&& b[y+1]
  • !=1){b[y]
  • =0;y++;b[y]
  • =2;}
    if(opc=='a'&& b[y][x-1]!=1){b[y]
  • =0;x--;b[y]
  • =2;}
    if(opc=='d'&& b[y][x+1]!=1){b[y]
  • =0;x++;b[y]
  • =2;}



    }while(opc=a[0][1] &&opc!='x');
    }




srWhiteSkull

Cómo pasar de un laberinto a otro?

huerjue

Si exacto como paso de un laberinto al otro

srWhiteSkull

Si supieras lo ambiguo de tú respuesta. Te refieres a cambiar de laberinto una vez llegas a la salida? Intenta ser explícito de lo contrario me aburriré intentando sonsacarte lo que quieres hacer  :huh:

Serapis

#4
Debes cruzar por la puerta, asumo que es el valor 3, luego de llegar a su cordenada, es cuando debes dibujar el nuevo laberinto y reposicionar  al 'jugador' (en la casilla 'home', que asumo es la 2).

Mejor que usar diferentes arrays (imagina 40 laberintos), es reusar el mismo, para ello, lee los laberintos de fichero. Si no quieres liarte con ficheros, entonces salta a una rutina, donde mediante un switch, copias el contenido del array 'b','c','d', etc.. al array 'a' que es el que manejas en el bucle principal.

En fichero, al comienzo tienes una cabecera:

estructura file
   entero numLaberintos
   dataLabs lista(numlaberintos)
fin estructura

estructura dataLabs
   entero posicion
   entero x
   entero y
fin estructura


Primero cuantos laberintos almacena el fichero, luego por cada laberinto, la posición de comienzo de lectura del laberinto, y el par X,Y indicando el tamaño del laberinto (que se usan para calcular los bytes-caracteres a leer).
Podrías incluso añadir por cada laberinto, las posiciones de las casillas 'entrada' y 'salida', de cada laberinto, limitando así (la lectura del) el laberinto a solo dos valores (0-1), pudiendo de ese modo alojar en un solo byte 8 casillas, en vez de solo 1.

A continuación de la cabecera, cada laberinto uno detrás de otro, un tocho de bytes seguidos.

p.d.:
Si los laberintos están interconectados (en vez de ir al siguiente), por ejemplo porque tienen varias puertas, guarda en la cabecera, no solo la posición de cada puerta, sino tambén el índice del laberinto al que se accede desde dicha puerta.

huerjue

Exacto cambiar de laberinto una vez llegue a la salida

huerjue

o sea debo cruzar por la puerta, que es el valor 3, luego de llegar a su cordenada, es cuando debo dibujar el nuevo laberinto y reposicionar  al 'jugador' en la casilla 'home', que es la 2

srWhiteSkull

Mete los tres arrays en un array de punteros denominado niveles y con una variable denominada nivel la incrementas o seleccionas el nivel. Ejemplo :

   int a[] = { 1,2,3 };
   int b[] = { 4,5,6 };
   int c[] = { 7,8,9 };

   int * niveles[] = { &a[0], &b[0], &c[0] };
   unsigned char nivel = 0;

   cout << niveles[nivel][0] << endl; // accedemos al primer nivel (a) y leemos su primer elemento (1)

   nivel++; // pasamos nivel

   cout << niveles[nivel][0] << endl; // accedemos al segundo nivel (b) y leemos su primer elemento (4)

Serapis

Si... esa es la idea.

Fíjate que hay un laberinto con más de una puerta de salida... he contado 3 en el del medio (int b[15][45]={... 3 ... 3 ...3

...si no hay más laberintos, usa una puerta para acceder a cada uno d elos 3 presentados... lógicamente la que lleva de nuevo a ese mismo, que sea una puerta (salida) alejada de la entrada...

Relee, de nuevo todo mi mensaje, lo edité luego, para hacer alguna aclaración más...