Algoritmos de direccionamiento de celdas hexagonales.

publicado en: Helvetios, Proyectos | 0

Al iniciar el proyecto Helvetios pensé cómo podría mapear cada celda individualmente, darle una dirección a cada una para cuando diseñase los algoritmos que interaccionan con ellas. Mi idea inicial era numerar las celdas desde el centro hacia el exterior, formando una espiral:

Numeración de celdas en espiral

De esta forma,a la hora de programar los algoritmos de direccionamiento podría crear un array de celdas numeradas. Cada celda de ese array sería una estructura de datos: el color, si hay una pieza encima o no, si tiene algún efecto de iluminación y los números de las celdas vecinas.

Así, al direccionar una celda podría saber cual sería la siguiente celda si me muevo en una dirección determinada.

Además debería diseñar los algoritmos para calcular distancias y rangos. Para por ejemplo, iluminar las celdas de movimiento alrededor de una pieza, o para iluminar una línea de disparo de una pieza. Pensé que estos algoritmos deberían recorrer esta estructura de celdas e ir seleccionando las celdas vecinas adecuadas en base a la dirección de la función deseada. Más o menos lo tenía pensado para en el momento de diseñar la librería de control del tablero definir estas estructuras de datos.

Pero eso era antes de conocer la página de Red Blog Games. En esta genial página se analizan muchas técnicas para gestionar mapas y calcular algoritmos de direccionamiento. Tiene una sección para mapas hexagonales: https://www.redblobgames.com/grids/hexagons/ donde determina 4 tipos de direccionamiento: Offset, Cube, Axial y Doubled. El sistema de coordenadas que elegiría sería el Cube y se ve tal que así:

Sistema de coordenadas Cube

Además define los algoritmos para pasar de un sistema de coordenadas a otro, para calcular distancias, líneas, movimientos, rangos, intersección de rangos, obstáculos, rotaciones, reflejos, anillos, espirales y campos visuales.

Así que ya tengo toda una teoría para poder desarrollar la librería que permita interactuar con el tablero. De esta forma podré crear una serie de estructuras de datos y de funciones con las que programar el algoritmo del juego.

Este algoritmo permitirá en un principio que dos jugadores puedan usar el tablero por turnos. Inicialmente los dos en el mismo tablero pero el objetivo es poder jugar una partida online. También será posible crear una IA contra la que jugar offline, con lo que en algún momento cuando esté el tablero desarrollado, investigaré sobre sistemas de IA aplicados a juegos.

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *