Tengo que implementar la IA para el juego Abalone y me pregunto cuál es la mejor manera de representar la lógica del tablero usando Java sin desperdiciar demasiados recursos en todas las rutinas de verificación y actualizaciones involucradas.
¿Es mejor usar varias listas? ¿Una matriz de objetos celulares? ¿Cualquier sugerencia?
java
design
artificial-intelligence
Asgard
fuente
fuente
Respuestas:
1) dado que el tablero tiene un tamaño fijo que de todos modos va a alimentar a una IA, podría representarlo como una matriz unidimensional con el número correcto de celdas, donde cada celda representa un espacio en el tablero. Asignar esa matriz unidimensional a la pantalla para la presentación puede ser un poco extraño, pero es un problema que solo tiene que resolver una vez.
Lo mismo se aplicaría a los movimientos de validación; puede crear una matriz de adyacencia que indique qué celdas están adyacentes a otras, o crear una lógica para determinar la adyacencia. De cualquier manera, sería un costo único.
2) Observe que cada cuadrícula hexadecimal también es una cuadrícula de dos ejes, excepto que los ejes están a 60 o 120 grados de distancia entre sí, en lugar de 90 grados como las cuadrículas donde X e Y son perpendiculares. (Los antiguos juegos de tablero de fichas hexagonales utilizaron este truco para etiquetar los hexágonos 1, 2, 3 en una dirección, y AA, BB, CC en la otra dirección, sesgada).
Observé el código fuente de las implementaciones informáticas de juegos de mesa que usan (2), y proporcionaron rutinas como "encontrar una línea entre hexes" o "encontrar la distancia entre hexes". Eso fue hace mucho tiempo, por lo que los detalles se pierden en el tiempo, pero recuerdo que no fue demasiado difícil.
(Eran más matemáticas enteras que las cosas pitagóricas;)
fuente