---
# System prepended metadata

title: 'Tecnología de Videojuegos: Toma de contacto con la plantilla'
tags: [Videojuegos]

---

---
tags: Videojuegos
---

# Tecnología de Videojuegos: Toma de contacto con la plantilla

## Tareas iniciales
- Clonar el respositorio con PyCharm.
- Instalar las dependencias del juego en un ambiente virtual, debería de ser un proceso semi-automático.
- Jugar al juego identificando las mecánicas.
  
## Estructura del código fuente
- Comprender la estructura de directorios.
  - Código fuente.
  - Recursos.
- Entender la función de los archivos y directorios ocultos del directorio raíz. Buscar en Google en caso necesario.
  
## Generalidades
- Localizar punto de entrada al juego.
- Localizar las constantes y configuración del juego.
- Entender qué gestiona las dependencias del juego (uso de una biblioteca externa no vista en clase).
- Entender cómo se identifica el directorio raíz del proyecto.
  
## Ciclo de vida del videojuego
- Entender, a grandes rasgos, el proceso de inicialización del juego. La función *load_map()* es especialmente delicada e interesante, así que échala un vistazo por encima y la miraremos con más detenimiento después.
- Identificar qué hace la función *arcade.resources.add_resource_handle()* presente en el archivo *\_\_main\_\_.py*. Busca en la documentación de Arcade, en los apuntes de la asignatura o en el propio código fuente si es necesario.
- Entender cómo se realizan las transiciones entre vistas.
- En la vista del juego hay un modo depuración, encuentra la manera de activarlo. Puedes, por ejemplo, utilizar la búsqueda de texto que te permite cualquier IDE.
- Entender cómo se realizan las transiciones entre mapas.

## Gestión de niveles
- Descarga e instala [Tiled Map Editor](https://www.mapeditor.org/), si no lo tienes hecho.
- Localiza el archivo que almacena el proyecto de Tiled y abrelo con el editor.
- Abre los distintos mapas.
- Identifica las capas que tiene el mapa principal.
- Localiza las capas bloqueantes y no bloqueantes.
- Identifica las formas (*shapes*) que tiene el mapa principal. ¿Para qué sirven?
- Abre el mapa del interior de la casa y repite el proceso.
- Identifica cómo se representan las luces y los objetos que se pueden recoger.

:::info 
Observa cómo tanto las luces como los objetos guardan propiedades que nosotros podemos definir con el editor.
:::

## Integración con editor de niveles
Volvamos a la función *load_map()*, en el archivo *load_game_map.py*:
- Localiza la línea de código en donde se carga el mapa y el tipo de objeto en donde se guarda dicho mapa.
- Entiende, a grandes rasgos, cómo se cargan los NPCs del juego. Ten presente que la información de los NPCs se guarda en un archivo JSON.
- Entiende, a grandes rasgos, cómo se cargan las luces del juego. Observa cómo se accede a las propiedades definidas en el editor, como el color o el radio.
- Identifica el código encargado de crear los muros.

## NPCs
- Localiza las clases que implementan a los NPCs y al personaje del juego.
- Explica la relación entre los NPCs y el archivo JSON que guarda parte de sus propiedades (mira en la función *load_map()* y el contenido de los propios archivos JSON).
- Entiende a grandes rasgos, la implementación de los NPCs y del personaje.

## Mecánicas del juego
- Localiza el código encargado de buscar objetos.
- Entiende cómo se gestiona la colisión entre el personaje y las zonas del mapa que conducen a otro mapa distinto.
- Entiende cómo se gestiona el control del personaje mediante el teclado.

## UI
- Localiza el código encargado de mostrar el inventario.
- Entiende la vista que muestra un menú de usuario.

## Más generalidades
- Entiende, a grades rasgos, los métodos *on_draw()* y *on_update()* de la vista del juego.
