Nonsense

Diseño de un Sistema de Inventario para un RPG

Clasificación

Este es un ejercicio principalmente centrado en el diseño de datos. La dificultad algorítmica es mínima. A cambio, requiere una habilidad intermedia a la hora de buscar estructuras flexibles y cómodas.

Enunciado

En un RPG o aRPG genérico típico, encontramos de forma habitual un componente de variable complejidad con cierta importancia en el juego: el sistema de inventario.

De hecho, un video juego de tipo RPG o aRPG, es un proyecto muy interesante a la hora de estudiar y aprender a programar. No tan preocupado como otros tipos de juegos por detalles más específicos como los gráficos o la interfaz de usuario, este tipo de juegos suele implementar una serie de subsistemas que dan mucho de sí para probar diferentes aproximaciones y aprender.

La idea es implementar un sistema de inventario razonablemente sofisticado pero sin exagerar. De hecho, cada uno puede, opcionalmente, añadir más complejidad al sistema con las ideas o aspectos que se le ocurran.

Como mínimo, el sistema deberá contemplar las necesidades de:

  • Tener diferentes tipos de objetos o ítems en el juego. Por ejemplo: comidas, pociones, armas, ropas, hechizos, tesoros…
  • Mantener un Inventario un contenedor que almacene los ítems que tiene el jugador, con la posibilidad de añadir y quitar ítems del inventario y, lógicamente, de poder ver qué hay en el inventario.
  • Una forma de buscar/seleccionar en el inventario: un ítem concreto o todo un tipo de ítems.
  • Un modo de limitar lo que cabe en el inventario (por peso o volumen o similar).

Algunas otras características opcionales que se pueden plantear si se quiere, pueden ser:

  • La posibilidad de buscar en el inventario ítems por sus características, por ejemplo, “buscar pociones de ataque” o “buscar ropa para el torso” u otras ideas parecidas.
  • Hacer que la limitación de capacidad no sea “global” sino que diferentes tipos de ítem tengan un tratamiento distinto a este respecto o que haya limitaciones separadas por tipo o algún esquema similar. Diferentes juegos eligen diferentes formas de hacerlo, así que cada uno puede elegir lo que más le guste.
  • Dar la posibilidad de equipar ciertos tipos de objeto, como la ropa o las armas. OJO: Esto, según los requerimientos que elijamos, puede añadir una complejidad que puede terminar siendo excesiva para un ejercicio.
  • Hay sistemas de inventario que mantienen cada objeto por separado. Otros tienen objetos agrupables, es decir que podemos tener una cierta cantidad de un mismo ítem. En un caso serán dos o N ítems separados, en otro será un ítem del que tenemos una cantidad de N. Esto puede, o no, tener diferente efecto sobre, por ejemplo, el espacio que ocupa en el inventario u otros aspectos.

Sugerencias

Como digo, se pueden añadir muchas opciones y requerimientos diferentes al sistema. Lo mejor es empezar por lo más básico, los requerimientos mínimos y luego, según nos apetezca, podemos ir añadiendo diferentes opciones o funcionalidades.

Por eso mismo es un ejercicio de diseño de datos interesante, porque nos fuerza bastante a buscar estructuras sencillas y flexibles. Sencillas para que el código que las maneja pueda ser igualmente sencillo, y flexibles para poder construir sobre el sistema las nuevas opciones sin tener que sufrir “rediseños completos” desde cero por algo que nuestro sistema simplemente no puede acomodar.

Haber jugado a algunos juegos de este tipo, sin duda ayuda a entender mejor el problema al que nos enfrentamos. Si no has jugado nunca a ninguno, lo mejor es probar unos cuantos de diferentes estilos para entender mejor las diferencias de cada sistema y lo que ofrece.

Pruebas

Al ser un problema abierto de diseño, no puedo poner unos tests asociados específicos. Pero es buena idea que tú mismo escribas tests que validen cada una de las funcionalidades comentadas más arriba.

Soluciones

Envíame tu solución si quieres que la revise o que te ayude con ella. Las pondremos aquí: Inventario.