Acabei de começar a criar um mecanismo de estratégia baseada em turnos na linguagem GML do GameMaker ... E eu estava navegando muito bem até que chegou a hora de lidar com o ciclo de turnos e determinar quem está controlando qual jogador, e também como lidar com a câmera e o que é exibido na tela.
Aqui está um resumo da chave principal que está acontecendo no meu loop principal do jogo no momento:
switch (GameState)
{
case BEGIN_TURN:
// Start of turn operations/routines
break;
case MID_TURN:
switch (PControlledBy[Turn])
{
case HUMAN:
switch (MidTurnState)
{
case MT_SELECT:
// No units selected, 'idle' UI state
break;
case MT_MOVE:
// Unit selected and attempting to move
break;
case MT_ATTACK:
break;
}
break;
case COMPUTER:
// AI ROUTINES GO HERE
break;
case OBSERVER:
// OBSERVER ROUTINES GO HERE
break;
}
break;
case END_TURN:
// End of turn routines/operations, and move Turn to next player
break;
}
Agora, já vejo alguns problemas com essa configuração ... Mas não tenho nenhuma idéia de como fazê-la "correta". Turn é uma variável global que armazena qual é a vez do jogador, e os estados BEGIN_TURN e END_TURN fazem todo sentido para mim ... Mas o estado MID_TURN está me deixando desconcertado por causa das coisas que quero que aconteçam aqui:
- Se houver jogadores controlados por humanos, quero que a IA faça suas coisas aqui, mas quero que a câmera siga a IA enquanto faz movimentos na visão do jogador humano.
- Se não houver jogadores controlados por humanos, eu gostaria de poder assistir a duas ou mais IAs no mapa com uma visão de 'observador' divina.
Então, basicamente, estou me perguntando se existem recursos para estruturar um mecanismo de estratégia baseada em turnos? Eu encontrei muitos escritos sobre pathfinding e IA, e todos são ótimos ... Mas quando se trata de lidar com a estrutura do turno e com os estados do jogo, estou tendo problemas para encontrar recursos. Como os estados devem ser divididos para permitir flexibilidade entre os jogadores e os controladores (HUMAN, COMPUTER, OBSERVER)?
Além disso, talvez se eu estiver no caminho certo, eu só precise de uma certa segurança antes de definir mais algumas centenas de linhas de código ...