He estado trabajando en un juego de mesa que tiene una cuadrícula hexadecimal como esta placa:
Dado que el tablero nunca cambiará y los espacios en el tablero siempre estarán vinculados a los mismos espacios a su alrededor, ¿debería codificar cada espacio con los valores que necesito? ¿O debería usar varios algoritmos para calcular enlaces y recorridos?
Para ser más específico, mi juego de mesa es un juego de 4 jugadores en el que cada jugador tiene una cuadrícula hexagonal de 5x5x5x5x5x5 (de nuevo, la imagen de arriba). El objetivo es llegar desde la parte inferior de la cuadrícula a la parte superior, con varios obstáculos en el camino, y que cada jugador pueda atacarse desde el borde de su cuadrícula a otros jugadores en función de un multiplicador de rango.
Dado que la cuadrícula de los jugadores nunca cambiará y la distancia de cualquier espacio arbitrario desde el borde de la cuadrícula siempre será la misma, ¿debería simplemente codificar este número en cada uno de los espacios, o aún debería usar un algoritmo de búsqueda de amplitud primero cuando los jugadores están atacando?
La única desventaja que puedo pensar para codificar todo es que voy a codificar 9+ 2 (5 + 6 + 7 + 8) = 61 celdas individuales. ¿Hay algo más que me falta que debería considerar usar algoritmos más complejos?
int numberOfHexagonsInArea(int rows) { int area = 1; while(rows>0) { area += (rows-1)*6; rows--; } return area; }
{X,Y}
, obviamente, puede ir hacia {X-1, Y}
y {X+1, Y}
en la misma fila. En las filas de abajo y arriba puedes ir a {X, Y-1}
y {X, Y+1}
. Finalmente, dependiendo de la uniformidad de Y
, puede ir {X-1, Y-1}
y / {X-1, Y+1}
o {X + 1, Y-1} `y{X+1, Y+1}