Ayuda urgente con juego simple en C

Iniciado por nelson72527, 28 Septiembre 2013, 15:17 PM

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

nelson72527

Buen dia amigos quisiera saber si alguno de ustedes me podria ayudar con un ejercicio en C es un juego muy simple, se los agradeceria en el alma si alguien me puede ayudar, veran soy un poco nuevo en esto y necesito entender este para poder hacer otros. Yo uso Borland Builder 6 y librerias simples como conio.h stdio.h, uso rand(). El enunciado es el siguiente:

Un Robot se encuentra atrapado en una habitación rectangular, la cual tiene hasta dos objetos atravesados en lugares aleatorios y una única puerta de salida, la cual aparece de manera aleatoria en la habitación al comenzar la simulación, el robot que es dejado en cualquier lugar de la habitación pide ayuda a su operador humano para salir, este utilizando el teclado numérico, le introduce de forma consecutiva una serie de instrucciones (movimientos) que el robot va almacenando en su memoria interna de 20 casillas, estos movimientos pueden ser derecha (D), izquierda (I), arriba (A), abajo (B) , cada instrucción representa un único movimiento, luego al presionar la tecla (R) run, el robot ejecuta su rutina de instrucciones, dejando atrás sus huellas, al culminar la rutina el robot debe informar si la ayuda recibida por el usuario fue efectiva (llego a la salida) o no (se estrelló o no llego a la salida).

Tu tarea es desarrollar una aplicación que permita simular la ejecución de las tareas por parte del robot, y que cumpla con los siguientes requerimientos:
1. La habitación es una matriz de 15 x 15.
2. El robot y la puerta ocupan una celda cada uno.
3. Un obstáculo ocupa dos celdas y el otro tres.
4. El usuario utilizará el teclado para introducir todas las instrucciones. Máximo 20 instrucciones.
5. Se debe validar que el robot no se salga de los bordes de la habitación, así como validar cuando se encuentre con un obstáculo. Si el robot choca termina la simulación.
6. Al presionar la tecla R el robot debe ejecutar las instrucciones, se debe visualizar en pantalla el movimiento, y las huellas estarán representadas por un guion ( - )
7. Al terminar de ejecutar las instrucciones el robot debe indicar el resultado de la misma.
8. El programa debe contar con un menú de usuario, que permita:
a. Ejecutar cuantas simulaciones desee el usuario.
b. Salir

Muchas gracias!

eferion

Me remito a las reglas del foro... en este foro no se hacen ejercicios... se ayuda en aquellas partes en las que te quedes atascado.

Hacer tareas desde cero es algo que cuesta dinero.

Un saludo.

nelson72527

Pues amigo yo llevo esto, ando haciendolo pero aqui hasta aqui he podido hacer:

//---------------------------------------------------------------------------
#include<stdio.h>
#include<conio.h>
#define n 15

void cargarmatriz(int mat1[n][n]);

int mat1[n][n],i,j,k;
char resp;


void main()
{
        cargarmatriz(mat1);



}//void main

void cargarmatriz(int mat1[n][n])
{       int auxi,auxj,k=0;

        do
        {
        //srand(time(0));
        printf("  ");

        for(i=0;i<n;i++)
        {       for(j=0;j<n;j++)
                {       mat1[j]=0;}
        }

        for(k=0;k<n;k++)
        {       auxi=rand()%n;
                auxj=rand()%n;

                if(k==0)
                        mat1[auxi][auxj]=1;
                else if(k==1)
                        mat1[auxi][auxj]=9;
                else if(k==2)
                {       mat1[auxi][auxj]=5;
                        mat1[auxi+1][auxj]=5;
                }
                else if(k==3)
                {       mat1[auxi][auxj]=5;
                        mat1[auxi+1][auxj]=5;
                        mat1[auxi+2][auxj]=5;
                }
         }

         for(i=0;i<n;i++)
         {       for(j=0;j<n;j++)
                        printf(" %i",mat1[j]);
                 printf("\n   ");
         }

         getch();
         clrscr();
         resp=toupper(getche());
         }while(resp!='S');
         getch();
}// void cargarmatriz
//---------------------------------------------------------------------------

eferion

Consejos:

* No uses variables globales... dificultan la lectura del código y pueden causar problemas.

* Las constantes, mejor en mayúsculas.

* Formatea el código en el foro ( el combo que dice GeSHi... elige c o cpp según proceda)

* Elige nombres para las variables que den una idea de cual es su función... para funciones for vale i,j,k... pero lo de auxi, auxj, mat es otro cantar.

* Deberías subdividir un poco más el código...

Dudas:

Que narices se supone que hace este código??


for(k=0;k<n;k++)
        {       auxi=rand()%n;
                auxj=rand()%n;

                if(k==0)
                        mat1[auxi][auxj]=1;
                else if(k==1)
                        mat1[auxi][auxj]=9;
                else if(k==2)
                {       mat1[auxi][auxj]=5;
                        mat1[auxi+1][auxj]=5;
                }
                else if(k==3)
                {       mat1[auxi][auxj]=5;
                        mat1[auxi+1][auxj]=5;
                        mat1[auxi+2][auxj]=5;
                }
         }


Si la idea es poner los obstáculos... que son dos, no entiendo la secuencia que pones ahí... para empezar tienes que poner dos obstáculos, luego el bucle debería ir de 0 a 1, no de 0 a 14... además estás obligando por fuerza a que los obstáculos estén en horizontal.

A ver, tu partes de una matriz de 15x15 en la que todos sus elementos, inicialmente, valen 0... quizás sería más sencillo que la matriz fuese de tipo char... para poder representar caracteres directamente. Así, por ejemplo:

* La matriz aparece inicializada al principio con caracteres de espacio ' '
* Los obstáculos se pueden representar con una 'O', de obstáculo, aunque puedes mirar entre los caracteres ASCII a ver si alguno de los disponibles te gusta más.
* La estela del robot la puedes marcar con una 'X'

Con esto, comprobar si el robot choca contra un obstáculo es tan sencillo como comprobar si las coordenadas a las que se va a mover el robot están etiquetadas con el carácter del obstáculo. Comprobar si el robot choca contra los muros es tan simple como comparar las coordenadas a las que se va a mover el robot con los límites de la matriz... si alguno de los valores es -1 o 15 te has chocado.

A la hora de imprimir la matriz te bastan con ir recorriendo la matriz e imprimir los caracteres que se encuentren en la coordenada correspondiente.

Aún así insisto, no has expuesto ninguna duda y no creo que nadie te vaya a resolver el ejercicio así por las buenas.