Ayuda con laberinto en una matriz

Iniciado por edotropic, 20 Diciembre 2013, 01:08 AM

0 Miembros y 2 Visitantes están viendo este tema.

edotropic

buenas, ante todo muchas gracias por la ayuda que me daran..

les cuento debo crear una matriz de tamaño M por ejemplo 5x5 en la cual debe estar ingresada con caracteres "a" y "c" en los cuales debo moverme solo por las letras A
en otras palabras la letra c son murallas, ahora cuando estoy en una casilla debo poder moverme arriba abajo izquiera o derecha, estuve tratando de provar unas cosas pero no me funcionaron, haber si me ayudan un poco con el codigo

#include <stdio.h>
#include <stdlib.h> //incluye srand() y rand()
#include <conio.h>
#include <time.h> //incluye time()

char mat[4][4]; //tamaño de la matriz
char letras[]="ac";
int numdeletras=sizeof(letras)/sizeof(letras[0])-1;

int main()
{
   
   
    srand(time(0));//numeros Aleatorios en funcion del tiempo
    for (int i=0;i<4;i++)//para desplazarse por las columnas
    {
        for (int j=0;j<4;j++)//para desplazarse por las filas
        {
            mat[j]=letras[rand()%numdeletras];//Agrega numero aleatorio a la posicion ij de la matriz
            printf("\t%c",mat[j]);//imprime elemento de la matriz en pantalla
        }
      printf("\n\n");//para dejar espacios entre filas.
      printf("\i\j");
    }

   
   
   getche();
}

en el fondo lleno la matriz, pero no se como poder moverme a izquierda derecha etc... agradeso su ayuda

dvigon

#1
NO estoy seguro pero esto quizás te sirva...


#define JUGADOR 2
#define N 4
// donde pone N será el valor de las filas y columnas de la matriz

// Mueve el jugador en la matriz
void Mover_Jugador( char Matriz[N][N], char Tecla, int *Filas, int *Columnas ){

   int F, C, Posicion[N][N];

   for( int i = 0; i < N; i++ )
       for( int j = 0; j < N; j++ )
           Posicion[i][j] = Matriz[i][j];

   F = *Filas;
   C = *Columnas;

   switch( Tecla ){

       case 72: // Movimiento hacia arriba
           if( *Filas > 0 && Matriz[*Filas - 1][*Columnas] != 'c' ){
               ( *Filas )--;
               ( *Puntos ) ++;
               Posicion[F + 1][*Columnas];
           }
           break;

       case 80: // Movimiento hacia abajo
           if( *Filas < N - 1 && Matriz[*Filas + 1][*Columnas] != 'c' ){
               ( *Filas )++;
               ( *Puntos ) ++;
               Posicion[F - 1][*Columnas];
           }
           break;

       case 75: // Movimiento hacia la derecha
           if( *Columnas > 0 && Matriz[*Filas][*Columnas - 1] != 'c' ){
               ( *Columnas )--;
               ( *Puntos ) ++;
               Posicion[F][C + 1];
           }
           break;

       case 77: // Movimiento hacia la izquierda
           if( *Columnas < N - 1 && Matriz[*Filas][*Columnas + 1] != 'c' ){
               ( *Columnas )++;
               ( *Puntos ) ++;
               Posicion[F][C - 1];
           }
           break;

       }

       Matriz[*Filas][*Columnas] = JUGADOR; // JUGADOR se mueve de posicion

}

int main( ){

   int Matriz[N][N];  // Tu matriz
   int Tecla; // Tecla que introduces por pantalla

do{

       Tecla = getch( );

       if( Tecla == -32 || Tecla == 0 ) // Mueve el jugador
           Tecla = getch( );

       Mover_Jugador( Matriz, Tecla, &Filas, &Columnas );

   }while(  AQUÍ TU CONDICIÓN PARA EL FINAL DEL BUCLE );
}


edotropic

la tecla que recibe ahi son las flechas??? .. otra consulta como podria escribir mi condicion.. por que yo diria si la posicion de la matriz es igual a la letra "a" ahi solo entra

dvigon

Sí, la variable Tecla recibe el movimiento que indicas por teclado CON LOS CURSORES.

Ya esta la condición de que no pase a la casilla con valor c
mediante el if por ejemplo de:
        case 80: // Movimiento hacia abajo
            if( *Filas < N - 1 && Matriz[*Filas + 1][*Columnas] != 'c' ){
                ( *Filas )++;
                ( *Puntos ) ++;
                Posicion[F - 1][*Columnas];
            }
            break;

edotropic

mm, dale. lo intentare muchas gracias

leosansan

#5

Antes que nada cuando postees código elige las etiquetas GeSHi y toma la C++ y en medio de las etiquetas Code que aparecen "pegas" tu código. Al no hacerlo de esta manera parte del código no sale correcta, especialmente las matrices.

Igual te puede interesar este tema que trata de laberintos.


Saluditos! ..... !!!!