O Jogo

Halite é um jogo open source desenvolvido por Benjamin Spector and Michael Truell e disponibilizado na página https://2016.halite.io.

Regras

O tabuleiro do jogo é retangular e cada jogador é representado por uma cor. As peças cinzas não pertencem a nenhum jogador. Em cada turno, o jogador pode mover suas peças de forma independente para norte, sul, leste, oeste, ou pode mantê-las estacionadas. As peças no jogo possuem uma força associada, que vai de 0 a 255. Para expandir seu domínio sobre o mapa o jogador deve mover suas peças para regiões adjacentes que possuem peças cinzas (neutras), ou peças de outro jogador. O resultado de um encontro com uma peça neutra é a subtração de suas respectivas forças. Por exemplo, se um jogador mover uma peça de força 50 sobre uma região neutra contendo uma peça de força 30, ele conquistará a região, mas sua peça perderá 30 de força. Em outra situação onde a peça do jogador tenha força 20 e a peça neutra força 35, o resultado do encontro será a destruição da peça do jogador e enfraquecimento da peça neutra, que ficará com 15 pontos de força. Ao movimentar uma peça para uma região adjacente a uma região de outro jogador um combate acontece. A resolução de combates será descrita na próxima seção.

Quando uma peça é movida, ela deixa para trás uma nova peça de força zero, pertencente ao mesmo jogador, dessa forma permitindo a expansão do domínio do jogador no mapa. As peças de jogadores não movimentadas em um turno ganham força, de acordo com o nível de produção do quadrado onde ela se encontra estacionada (peças neutras não ganham força). Em cada jogo o mapa é criado de forma aleatória, mas mantém a propriedade de simetria quanto ao nível de produção dos quadrados.

 

Combate

Quando um jogador move peças para uma região controlada por ele, a força delas é somada. Quando ele move para uma região imediatamente adjacente (desconsiderando diagonais) a uma região controlada por outro jogador, as peças entram em combate. Quando em combate, cada peça tem subtraída de si a força da outra peça envolvida no combate, de forma semelhante ao encontro com uma peça neutra. Por exemplo, quando uma peça A, de força 20, entra em combate com uma peça B, de força 15, a peça B é destruída, deixando sua posição vaga, e a peça A passa a ter força 5. Uma situação especial ocorre quando uma peça de um jogador se move de forma a se tornar adjacente a duas ou mais peças de outro jogador. Nessa situação sua força é subtraída de todas as peças adjacentes do jogador adversário, causando o efeito “overkill”.  Abaixo alguns exemplos das situações mencionadas.

Exemplo onde três peças do mesmo jogador se combinam e somam suas forças.

Exemplo de “overkill”, quando uma peça causa seu dano a todas as peças adjacentes.

Exemplo 2 de “overkill”, quando uma peça causa dano a todas as peças adjacentes.

 

 

 

 

 

 

 

 

 

Término do Jogo

O jogo termina quando um dos eventos seguintes ocorrer:

  • Somente um jogador possui peças no tabuleiro (todos os demais foram eliminados);
  • 10 * sqrt(largura * altura) turnos foram jogados, significando que mapas pequenos possuem menos turnos do que mapas grandes.

No evento do jogo acabar por número de turnos, o placar é determinado pelo território conquistado pelos jogadores.

 

Turnos

Os bots possuem 15 segundos inicias para inicialização e 1 segundo para decidir os movimentos para o próximo turno. Os turnos funcionam da seguinte maneira:

  1. Jogadores recebem o estado do jogo (mapas e mensagens);
  2. O jogo recebe os movimentos decididos pelos bots;
  3. O jogo mata os bots que não responderem a tempo (cuidado!!);
  4. Adiciona força as peças que decidirem ficar estacionadas;
  5. Simultaneamente move (e combina se necessário) todas as peças. A limitação de 255 de força é feita aqui;
  6. Simultaneamente calcula o dano e remove as peças destruídas;
  7. O jogo verifica se algum evento de término de jogo se aplica.