Gestionar el inventario de tu juego con variables binarias

Gestionar el inventario de tu juego con variables binarias

Existen muchas maneras de gestionar un inventario para tu juego. Lo más habitual es crear un ‘array’ o una lista con todos sus datos. Pero se podría hacer de una manera más óptima, simplemente mediante una variable numérica, tratándola como si fuese binaria. ¿Como se haría? ¡Sigue leyendo!

El uso de variables binarias cuando programamos

Usar arrays simples sigue siendo una opción, explicadas con un buen ejemplo en el foro oficial de Game Maker Studio. Pero también se podría jugar utilizando variables binarias. YoYo Games ofreció en su blog tecnológico una introducción de cómo se usan. Si dicho post no te aclaró demasiado las cosas, aquí tienes una breve explicación, sin entrar en detalles excesivamente técnicos.

Cómo funciona el sistema binario

Sabemos que el sistema binario funciona con ceros y unos. Para representar los números, los colocamos en un orden específico, de esta manera:

000 = 0
001 = 1
010 = 2
100 = 4

1000000 = 64

Y así, incrementalmente. ¿Cómo representamos el número 5? En binario sería 101. Si nos fijamos, sería la suma del 1 (001) y el 4 (100). Tiene su lógica, ¿no? ^_^

Un ejemplo de uso de variables binarias

Así que, aprovechando las potencias de 2 que nos ofrecen los números binarios, podemos tener una serie de propiedades y características que nos sirvan para infinidad de cosas. Uno de ellas es ejemplificada por YoYo Games con el uso de llaves y puertas.

Tenemos puertas con una variable binaria llamada door_id, y le asignamos en su evento Create (Create event) un número identificativo propio. Ese número siempre debe ser una potencia de 2. Por ejemplo: door_id=1, door_id=2, 4, 8, 16, 32, 64, etc, para cada objeto-puerta diferente.

Ahora tenemos otro objeto llave que puede abrir una o varias puertas. ¿Cómo los asociamos? Creando una variable key_id, dónde su valor sería la suma de todas las door_id que nos interesen. Por ejemplo, si la variable key_id=43, abrirá las puertas con door_id 32, 8, 2, y 1. Y lo mejor de todo, con un valor de 43, solamente abrirá esas puertas exclusivamente. ¿Como se gestionaría? Con una simple condición ‘if’.

Si escribimos:

if( (key_id & door_id) !=0 )  {

Será suficiente para comprobar si está incluida. Como ejemplo, se puede usar en el evento Collision (Collision event) entre los dos objetos.

Inventario con una variable binaria

Y ahora, el ejemplo de tu inventario. ¿Cómo aplicarlo? De una manera muy parecida al ejemplo de las puertas y las llaves. Tendremos múltiples objetos con una id única. Recordemos que deben ser potencia de 2 (1, 2, 4, 8…). Ahora el objeto que contendrá todos los elementos activos, obj_inventory_controller, por ejemplo, o el mismo objeto jugador obj_player, tendrá una variable total_inventory.

Iconos - Inventario

¿Que hacemos al añadir un elemento nuevo? Simplemente sumar el id_inventory al total_inventory. Por ejemplo, si tenemos una espada con id=1, y una pócima con valor 64, inventory valdrá 65. ¿Añadimos otro? Sumamos su valor. ¿Eliminamos o gastamos un elemento? Lo restamos.

¿Queremos mostrar todos los elementos que tenemos? Podemos mostrar todos los elementos posibles, y dejar activos a los que pertenece con un simple if (id_inventory) y dejar inactivos los que no entren en la condición (o no mostrarlos).

De esta manera, con una variable y algunas operaciones sencillas podemos gestionar de una manera completa un inventario. ¡Si tenéis otras sugerencias sobre el uso de variables binarias, son bienvenidas en los comentarios!

David López
Post by

DB&R Technical Director & Game Designer

See more posts by this author