El Tesoro de MonteCristo

Tag: Articulos tecnicos

 

El Tesoro de MonteCristo
por Baltasar
 
1. Introducci贸n
Este es un juego de los de g茅nero conversacional. Al jugador se le presenta una
situaci贸n mediante un texto descriptivo, a la vez que 茅l mismo da 贸rdenes como
texto. Las m谩s comunes son moverse al norte, sur, este y oeste, pero en este juego
se permitir谩n tambi茅n empujar y coger, para poder empujar y coger los objetos que
haya en una determinada sala. Las 贸rdenes ser谩n de una sola palabra, y en cada
sala no habr谩 m谩s de un objeto.
 
2. El tesoro de MonteCristo
Todos aquellos que conozcan la obra de Alejandro Dumas, llamada “El Conde de
MoteCristo”, sabr谩n que Edmundo Dant茅s se fug贸 de manera espectacular del
Castillo de If, yendo a parar con el tiempo a la isla desierta de MonteCristo, donde
deb铆a encontrar el tesoro de la familia del cardenal Spada.
El objetivo de este juego es encontrar dicho tesoro en la isla. El jugador
empieza en la localidad n煤mero 0, y el objetivo es llegar hasta la localidad 6
portando el tesoro. Las 煤nicas dificultades son las rocas que hay que empujar en
las localidades 2 y 4, y la llave, que es necesario portar para abrir la puerta
descubierta en la localidad 4.
 
3. Acciones
El juego entiende un conjunto limitado de acciones a realizar por parte del jugador,
que se representan mediante el siguiente enumerado.
 
/** Representa una accion */
typedef enum _Accion {
  Conexion, Fin, Inventario, Coge, Empuja, SinAccion
} Accion;
 
As铆, si ha hecho o intentado hacer cualquier movimiento, la acci贸n del juego
es Conexion, y as铆 sucesivamente.
 
• Conexion: Se ha realizado un movimento, correcto o no.
• Fin: Termina el juego.
• Inventario: Visualiza los objetos portados por el jugador.
• Coge: El jugador pasa a tener en su poder el objeto en la localidad actual.
   S贸lo puede haber un objeto en cada localidad.
• Empuja: El jugador empuja el objeto en la localidad actual.
• SinAccion: No ha sido posible reconocer ninguna acci贸n permitida en la
    cadena de entrada del jugador.
 
4. Movimientos
El juego entiende un conjunto limitado de movimientos a realizar por parte del
jugador, que se representan mediante el siguiente enumerado.
 
/** Representa el movimiento */
typedef enum _Movimiento {
  Norte, Sur, Este, Oeste, SinMovimiento
} Movimiento;
const char StrMovimiento[][10] = {
  "Norte", "Sur", "Este", "Oeste"
};
 
S贸lo es posible moverse en cuatro direcciones: norte (adelante), sur(atr谩s),
este(derecha) y oeste(izquierda). La raz贸n de que los movimientos se representen
de esta manera (mediante los puntos cardinales) es hist贸rica: los primeros juegos
lo hac铆an as铆, y todos los juegos posteriores la mantuvieron.
El vector de cadenas StrMovimiento permitir谩 visualizar un movimiento dado
en cualquier momento que se precise (por ejemplo, para visualizar las salidas).
 
5. Localidades
Las localidades se representan mediante una estructura, y el conjunto de
localidades se carga desde un archivo de texto en un vector. El formato de dicho
archivo se explica en la pr谩ctica de esta unidad did谩ctica.
 
/** Representa localidades */
typedef struct _Localidad {
  char nombre[MaxNombre];
  char desc[MaxDesc];
  int conexiones[MaxConexiones];
} Localidad;
 
La descripci贸n de cada campo es la siguiente:
• nombre: El nombre de la localidad.
• desc: La descripci贸n de la localidad.
• conexiones: Un peque帽o vector de cuatro posiciones para indicar a donde
    es necesario mover el jugador cuando se mueva en dicha direcci贸n. El 铆ndice
    del vector es la direcci贸n, y el contenido el destino. Por ejemplo,
    conexiones[ Norte ] contiene el n煤mero de localidad al que se dirigir谩 el
    jugador en caso de tomar esa direcci贸n, o -1 si con ese movimiento no hay
    salida.
 
6. Objetos
Los objetos se representan mediante una estructura, y el conjunto de objetos se
carga desde un archivo de texto en un vector.
 
/** Representa objetos */
typedef struct _Objeto {
  char nombre[MaxNombre];
  char desc[MaxDesc];
  int numLoc;
  bool empujable;
  bool cogible;
  bool cogido;
  bool empujado;
} Objeto;
 
La descripci贸n de cada campo es la siguiente:
• nombre: El nombre del objeto.
• desc: La descripci贸n de objeto.
• numLoc: La localidad en la que se encuentre el objeto, o -1 si es que est谩
    fuera del juego.
• empujable: Si el objeto debe responder a la acci贸n empuja.
• cogible: Si el objeto debe responder a la acci贸n coge.
• cogido: Si el objeto ha sido cogido y lo tiene el jugador.
• empujado: Si el objeto ya ha sido empujado.
 
7. Funciones
Las funciones m谩s importantes en el juego son las siguientes:
 
unsigned int cargaLocalidades(const char fichero[], Localidad locs[]);
• Carga las localidades de un archivo de texto
• fichero El fichero del que cargar las localidades
• locs El vector de localidades a rellenar
• El num. de localidades cargadas.
 
unsigned int cargaObjetos(const char fichero[], Objeto objs[]);
• Carga los objetos de un archivo de texto con un formato dado
• fichero El fichero del que cargar los objetos
• locs El vector de objetos a rellenar
• El num. de objetos cargados.
 
void pideEntrada(char entrada[]);
• Pide una orden al jugador.
 
Movimiento extraeMovimiento(const char entrada[]);
• Busca un movimiento en la entrada del jugador
• El movimiento, si lo hay, SinMovimiento en otro caso
 
Accion extraeAccion(const char entrada[]);
• Busca una accion en la entrada del jugador
• La accion, si lo hay, SinAccion en otro caso
 
int tomaMovimiento(Localidad locs[], unsigned int numLoc, Movimiento mov);
• Devuelve la loc segun la conexion dada por mov en una loc
• locs El vector de localidades
• numLoc El num. de la loc
• mov El movimiento a comprobar.
• El indice de la loc de destino, o -1 si no hay.
 
void hazDesc(Localidad locs[], Objeto objs[], unsigned int numObjs, unsigned int
numLoc);
• Muestra por pantalla la desc. de una localidad
• locs El vector de localidades
• objs El vector de objetos
• numObjs El total de objetos
• numLoc El num. de localidad a describir.
 
Accion hazAccion(Localidad locs[], Objeto objs[], unsigned int numLocs, unsigned int
numObjs, unsigned int numLoc, Accion accion);
• Comprueba la acc. a llevar a cabo y muestra por pantalla el
resultado.
• locs El vector de localidades
• objs El vector de objetos
• numLocs El total de locs
• numObjs El total de objetos
• La misma accion pasado si fue exitosa, SinAccion en otro caso.
 
Accion hazRespuesta(Localidad locs[], Objeto objs[], unsigned int numLocs, unsigned
int numObjs, unsigned int numLoc, Accion accion);
• Muestra por pantalla una respuesta detallada a la accion
realizada. Debe ser llamada tras hazAccion().
• locs El vector de localidades
• objs El vector de objetos
• numLocs El total de locs
• numObjs El total de objetos
• accion La nueva accion (solo para terminar la aventura)
 
void listaObjetos(Objeto objs[], unsigned int numObjs, int numLoc);
• Lista por pantalla los objetos presentes en la localidad actual.
• objs El vector de objetos
• numObjs El total de objetos
• numLoc La localidad en la que buscar objetos.
 
void listaSalidas(Localidad locs[], unsigned int numLoc);
• Lista por pantalla las salidas disponibles.
• locs El vector de localidades
• numLoc La localidad actual.
 
int buscaObjEnLoc(Objeto objs[], unsigned int numObjs, unsigned int numLoc);
• Busca un objeto por su localidad
• objs El vector de objetos
• numObjs El num. total de objetos
• numLoc El num. de localidad donde puede haber un obj.
• El num. de objeto si encontrado, -1 en otro caso.
 
int buscaObj(Objeto objs[], unsigned int numObjs, const char nombre[]);
• Busca un objeto por su nombre
• objs El vector de objetos
• numObjs El num. total de objetos
• nombre El nombre del objeto
• El num. de objeto si encontrado, -1 en otro caso.
 
void hazPresentacion();
• Informa al jugador
 
8. Para saber m谩s...
Referencias bibliogr谩ficas:
1. Kernighan & Ritchie (1995). Lenguaje de Programacion C. Prentice Hall.
ISBN 978-9688802052
• Referencias web:
1. Club de aventuras AD:
鈼 http://www.caad.es/
2. Wikipedia:

鈼 http://es.wikipedia.org/wiki/Aventura_conversacional
鈼 http://es.wikipedia.org/wiki/C_(lenguaje_de_programaci%C3%B3n)
 
3. Est谩ndar Internacional ISO/IEC 9899:TC3:
鈼 http://www.open-std.org/JTC1/SC22/WG14/www/docs/n1256.pdf
 

(c)1998-2019 CAAD

Todos los contenidos de esta web son propiedad de CAAD. Las colaboraciones son propiedad de sus respectivos autores.