Giter VIP home page Giter VIP logo

escapist-game's Introduction

Escapist Game 馃幉

El juego ha sido dise帽ado para ser compilado en un entorno de Linux. Para facilitar el proceso de compilaci贸n/enlazado/ejecuci贸n del juego se ha desarrollado un script, m谩s abajo est谩 la gu铆a de su uso. En caso de tener cualquier problema a la hora de compilar o cualquier otro tipo de fallo, ir a la secci贸n de Issues y pinchar en New issue, rellenar el di谩logo con la informaci贸n necesaria y finalmente publicar el fallo.

Notas

  • El archivo solution.goo contiene la soluc贸n del juego. Para usarlo ejecutar: $ ./ctarget -e escapist -c -r < solution.goo.

  • El archivo target.conf es un archivo de configuraci贸n utilizado por el script target, es recomendable no editarlo. En caso de ser eliminado el script dar谩 un error indicando que no se ha encontrado un archivo de configuraci贸n.

  • El directorio meetings/ contiene las actas de reuni贸n y el reparto de trabajo.

  • El archivo CHANGELOG.md, contiene un historial de cambios.

  • El archivo target contine el script encargado de simplificar el proceso de compilaci贸n/enlazado.

  • El archivo data.dat contiene la informaci贸n necesaria para inicializar/cargar el juego.

  • El archivo oculto .clang_complete puede ser ignorado, no ofrece ning煤n tipo de informaci贸n relevante. En general todos los archivos ocultos deber铆an ser ignorados.

  • Los archivos con extensi贸n .goo, son archivos que contienen grabaciones de partidas. Para reproducir estas partidas usar ./target -e goose -c -r data.dat < rec1.goo.

Archivo de configuraci贸n

El archivo de configuraci贸n usa un formato muy simililar al format JSON, lo cual hace que sea mucho m谩s sencillo de configurar. Para definir elementos en el archivo de configuraci贸n se deben usar ciertas nomenclaturas reservadas para cada tipo de definici贸n ...

Tipo Valores
String " "
Number [ -x. , +x. ]
Array Set of any other type
Boolean 1, true / 0, false

Espacios

Atributo Tipo Description Ejemplo
id Number Identificaci贸n del espacio 1
name String Nombre del espacio "East jungle"
links Array [ N, E, S, W, U, D ] [ 3, 2, 5, 1, 3, 5 ]
light Boolean Establece si el espacio est谩 iluminado por defecto on
descrp String Una breve descripci贸n del espacio "Description ..."
ldescrp String Una descripci贸n m谩s detallada del espacio "Detailed description ..."
picture String Dibujo de decoraci贸n del espacio. Usar \n literal para saltos de l铆nea " /_/\ \n( o.o )\n > ^ < "
@s { # space example
	id: 2,
	name: "Jungle 1",
	descrp: "look around, something useful might be here",
	inks: [ 2, -1, 3, -1, -1, -1 ],
	picture: " (  )\n(    )\n  ||"
}

Objetos

Atributo Tipo Description Ejemplo
id Number Identificaci贸n del objeto 1
name String Nombre del objeto "torch"
opens Array Esta tabla debe contener las identificaciones de los enlaces que puede abrir el objeto en cuesti贸n [ 1, 2, 3 ]
location Number Identificaci贸n del espacio en el cual se deber谩 encontrar el objeto inicialmente 2
descrp String Una breve descripci贸n del espacio "Description ..."
ldescrp String Una descripci贸n m谩s detallada del espacio "Detailed description ..."
movable Boolean Establece si el objeto de puede mover o no true
moved Boolean Establece si el objeto se ha movido inicialmente o no false
hidden Boolean Establece si el objeto est谩 oculto true
illuminate Boolean Establece si el objeto es capaz de iluminar o no yes
on Boolean Establece si el objeto est谩 activado o desactivado false
max_uses Number Establece el m谩ximo n煤mero de usos de dicho objeto 5
used Number Establece el n煤mero de usos inicial 0
@o { # object example
	id: 2,
	descrp: "this object can destroy walls",
	location: 2,
	name: "tnt",
	opens: [ 5, 6, 7, 8 ],
	hidden: true
}

Enlaces

Atributo Tipo Description Ejemplo
id Number Identificaci贸n del enlace 1
name String Nombre del enlace "door"
from Number Establece el espacio de partida 3
to Number Establece el espacio de destino 4
state Boolean Establece si el enlace est谩 abierto o cerrado opened
@l { # link example
	id: 2,
	name: "Spawn point",
	from: 2,
	to: 1,
	state: 1
}

Jugador

Atributo Tipo Description Ejemplo
id Number Identificaci贸n del jugador 1
name String Nombre del jugador "Pepito"
location Number Establece el espacio en el que se encontrar谩 inicialmente el jugador 3
bag Array Establece el inventario inicial del jugador [ "torch", "tnt" ]
@p { # player example
	id: 1,
	name: "Minguito",
	location: 1,
	bag: [ "torch" ]
}

Doxygen

Para que Doxygen funcione correctamente se deben seguir ciertas instrucciones a la hora de comentar. Procurar hacer toda la documentaci贸n en ingl茅s.

M贸dulos

  • Todos los m贸dulos deben de comenzar con un comentario de encabezado b谩sico.
  • Incluir este encabezado en todos los archivos tanto en los archivos .c y .h.
  • En vez de poner todos los participantes en el encabezado del m贸dulo, la etiqueta @author puede ser omitida, y a帽adir mejor un autor por funci贸n.
/**
* @brief Short module description
*
* Detailed information about the module ...
*
* @file File name
* @author Authors
* @version Last version
* @date Last modification date
*/

Macros

  • Para comentar una macro usar /*!< @brief Macro description */.
#define MAX_BOXES 100 /*!< @brief Maximum number of boxes */

Funciones

  • Por cada par谩metro que reciba la funci贸n se debe a帽adir la etiqueta @param, no se deben hacer ning煤n tipo de abreviaciones, de ser as铆 Doxygen no ser谩 capaz de parsear correctamente los comentarios.
  • Si por un casual un par谩metro tuviese m谩s de un tipo de definici贸n, por ejemplo {const char*}, la palabra const deber谩 ser omitida en el comentario.
  • Si una funci贸n no devuelve nada no es necesario a帽adir la etiqueta @retval.
/**
* @brief Sets up a new command and stores it inside a private array
* @author Javier Romera
* @param {Cid} id - Command identification
* @param {char*} b_name - The base name of the command
* @param {char*} s_name - The short name of the command
* @param {cmd_fn} fn - Command callback function
*/
void cmd_set( Cid id, const char* b_name, const char *s_name, cmd_fn fn );
/**
* @brief Reserves memory to alloc a certain quantity of pixels
* @param {int} __len - The quantity of pixels to be allocted
* @retval {Ui_pix**} - Returns a pointer which points to other pixels pointers
*/
Ui_pix **alloc_pixs( int __len );

Estructuras

  • En las estructuras se debe comentar cada campo e incluir adem谩s una breve descripci贸n.
/*!
* @brief Main UI structure
*/
struct _Ui {
  Ui_screen scr; /*!< @brief Screen */
  Ui_box *boxes[ MAX_BOXES ]; /*!< @brief Boxes */
  Ui_pix **__pixs; /*!< @brief Pixels buffer */
  int __len; /*!< @brief Number of pixels */
  char __frm[ FRM_LEN ]; /*!< @brief Temporary format */
};
  • Es importante dejar un salto de l铆nea extra entre la descripci贸n abreviada y la detallada.
/*!
* @brief Main UI screen structure
*
* This is a long description of the screen structure,
* which stores data related with a screen, like the screen width,
* screen height, etc ...
*/
struct _Ui_screen {
  int w; /*!< @brief Width */
  int h; /*!< @brief Height */
};

Enumeraciones

  • Las enumeraciones se comentan de forma similar a las estrucutas.
  • Para comentar un dato usar /*!< Value description */.
/*!
* @brief Text formats
*/
typedef enum {
  S_DEFAULT=0, /*!< Resets text format */
  S_BOLD=1,  /*!< Bold text */
  S_DIM=2,  /*!< Small text */
  S_UNDERLINED=4,  /*!< Underlined text */
  S_BLINK=5,  /*!< Blink text */
  S_REVERSE=7,  /*!< Reversed text format */
  S_HIDDEN=9  /*!< Hidden text */
} Format;

Makefile

Hacer una limpieza completa y despu茅s generar todos los ejecutables:

$ make

Generar el ejecutable del juego:

$ make goose

Generar el ejecutable que testea el m贸dulo set:

$ make set_tb

Hacer una limpieza completa:

$ make clean

Para generar el paquete de distribuci贸n:

$ make dist

Target script

$ ./target [-e <env>] [options] ...

-e, --env - establece el entorno con el que se va a trabajar, en este caso un entorno ser铆a por ejemplo [goose], si no se especifica ning煤n entorno, el script usar谩 el primero que est茅 definido en el archivo de configuraci贸n. Si el entorno especificado no se encuentra en el archivo de configuraci贸n se saltar谩n todos las acciones solicitadas para dicho entorno y se pasar谩 al siguiente (en el caso de que se hayan solicitado acciones para varios entornos)

-c, --comp - compila un entorno.

-r, --run - ejecuta el archivo ejecutable generado para dicho entorno. Tambi茅n acepta argumentos adicionales que ser谩n pasados al ejecutable.

--clean - limpia los archivos objeto y ejecutables generados en un entorno.

-m, --cmem - hacer chequeo de memoria con valgrind.

-d, --dist - genera un archivo comprimido para ser distribuido. Cuando se ejecuta la instrucci贸n -d, --dist el script buscar谩 un archivo llamado CHANGELOG, si encuentra una definici贸n de versi贸n dentro de 茅ste (por ejemplo v1.0.0), actualizar谩 el archivo ASCII_VERSION y generar谩 un nombre con la fecha y la versi贸n en caso de encontrarla.

Ejemplos de uso

Para compilar, por ejemplo, el entorno [goose]:

$ ./target -e goose -c

Para ejecutarlo:

$ ./target -e goose -r

Para limpiarlo:

$ ./target -e goose --clean

Si se desea hacer todo de una vez, (limpiar -> compilar -> ejecutar):

$ ./target -e goose --clean -c -r

Si se desea chequear el uso de la memoria:

$ ./target -e goose -m

Si se desea pasar argumentos adicionales al ejecutar el ejecutable:

$ ./target -e goose -r arg1 arg2 arg3 ...

Si se desea compilar varios entornos de una vez:

$ ./target -e goose -c -e set_tb -c ...

Si se desea distrubuir el entorno goose:

$ ./target -e goose -d

target.conf

NOTA: se puden establecer configuraciones comunes a los entornos, es decir, si se desea utilizar una configuraci贸n b谩sica a todos los entornos utilizar el entorno [GLOBAL], un ejemplo de archivo de configuraci贸n ser铆a el siguiente:

[GLOBAL]
SRCDIR="./src" # source dir
INCDIR="./inc" # inlcude dir
OBJDIR="./obj" # object dir
CFLAGS=[ -Wall, -ansi, -pedantic ] # compilation flags
VGR_FLAGS="--leak-check=full -v" # valgrind flags

[set_tb]
TARGET="./set_tb_main"
SRCS=[ set, set_tb ]
# this env is sharing global configuration

[die_tb]
TARGET="./die_tb_main"
SRCS=[ die, die_tb ]
SRCDIR="./src2"
# this env is sharing global configuration
# object dir is overwritten and this
# environment will use ".src2/" as the default source dir.

[link_tb]
TARGET="./link_tb_main"
SRCS=[ link, link_tb ]
# this env is sharing global configuration

Para definnir un entorno en el archivo de configuraci贸n, debe usar la siguiente nomenclatura [<env_name>] donde <env_name> es el nombre del entorno.

PAR脕METRO DESCRIPCI脫N
TARGET nombre del ejecutable
TARGET_ARGS argumentos por defecto que se pasar谩n al ejecutable
DISTDIR directorio de distribuci贸n, en el cual se guardar谩n los archivos de distribuci贸n.
OBJDIR directorio donde se guardar谩n los archivos objeto
SRCDIR el directorio donde se encuentran los recursos del ejecutable *.c
INCDIR el directorio donde se encuentran los encabezados *.h
SRCS el nombre de los m煤dulos que se necesitan para generar el ejecutable
LDFLAGS par谩metros que se deben de tener en cuenta a la hora de enlazar
CFLAGS par谩metros que se deben de tener en cuenta a la hora de compilar
ASCII_TITLE archivo que contiene un t铆tulo con decoraci贸n ASCII
ASCII_VERSION archivo que contiene una versi贸n con decoraci贸n ASCII
CLOG archivo que contiene el historial de cambios

escapist-game's People

Contributors

lromeraj avatar

Watchers

James Cloos avatar  avatar

escapist-game's Issues

Documentaci贸n de c贸digo

Reparto

  • Gonzalo: reader.c, reader.h, log.c, log.h, die.c, die.h
  • Javier: cmd.c, cmd.h, ui.c, ui.h, g_engine.c, g_engine.h
  • 脕lvaro: game.c, game.h, space.c, space.h, set.c, set.h
  • Miguel: player.c, player.h, object.c, object.h, types.h

Leer la parte de Doxygen - https://github.com/lromeraj/goose-game

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    馃枛 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 馃搳馃搱馃帀

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google 鉂わ笍 Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.