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.
-
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 scripttarget
, 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
.
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 |
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 ||"
}
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
}
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
}
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" ]
}
Para que Doxygen funcione correctamente se deben seguir ciertas instrucciones a la hora de comentar. Procurar hacer toda la documentaci贸n en ingl茅s.
- 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
*/
- Para comentar una macro usar
/*!< @brief Macro description */
.
#define MAX_BOXES 100 /*!< @brief Maximum number of boxes */
- 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 palabraconst
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 );
- 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 */
};
- 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;
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 [-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.
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
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 |