Eu tenho que implementar o jogo AI for Abalone e estou me perguntando qual é a melhor maneira de representar a lógica do tabuleiro usando Java sem desperdiçar muitos recursos em todas as rotinas de verificação e atualização envolvidas.
É melhor usar várias listas? Uma matriz de objetos Cell? Alguma sugestão?
java
design
artificial-intelligence
Asgard
fonte
fonte
Respostas:
1) como a placa possui um tamanho fixo que você fornecerá de qualquer maneira para uma IA, você pode representá-la como uma matriz unidimensional com o número certo de células, em que cada célula representa um espaço no borda. Mapear essa matriz unidimensional para a tela para apresentação pode ser um pouco estranho, mas é um problema que você só precisa resolver uma vez.
O mesmo se aplica à validação de movimentos; você pode criar uma matriz de adjacência que informa quais células são adjacentes a outras ou criar uma lógica para determinar a adjacência. De qualquer maneira, seria um custo único.
2) Observe que toda grade hexadecimal também é uma grade de dois eixos, exceto que os eixos são 60 ou 120 graus um do outro, em vez de 90 graus como grades onde X e Y são perpendiculares. (Os antigos jogos de tabuleiro com blocos hexagonais usavam esse truque para rotular os hexágonos 1, 2, 3 em uma direção e AA, BB, CC na outra direção, distorcida.)
Examinei o código-fonte para implementações em computador de jogos de tabuleiro que usam (2), e eles forneceram rotinas como "encontre uma linha entre hexágonos" ou "encontre a distância entre hexágonos". Isso foi há muito tempo, então os detalhes são perdidos no tempo, mas eu lembro que não foi muito difícil.
(Era mais matemática inteira do que coisas pitagóricas.;))
fonte