Como devo estruturar meu mecanismo baseado em turnos para permitir flexibilidade para jogadores / IA e observação?

7

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 ...

Reefpirate
fonte
Sim, eu olhei para eles. Um realmente não foi a lugar nenhum. A outra era uma solução usando eventos, mas realmente não abordava os problemas que eu trouxe aqui.
Reefpirate
2
você disse "Agora, já vejo alguns problemas com essa configuração" .. então qual é o problema que você está enfrentando? Você não consegue definir a visualização da câmera? não pode executar animações? ou o que?
Jake
O problema é manipulação da câmera ou implementação dos controladores de curva?
precisa saber é o seguinte

Respostas:

2

Você terá que desacoplar a "câmera" de um jogador. Talvez o GML tenha limitações aqui, mas não tenho experiência nisso. Não há razão para que a posição e a configuração da câmera sejam bloqueadas em um único player. Normalmente, um jogo consiste em um mundo e, às vezes, várias câmeras para renderizar cada quadro para vários jogadores na mesma tela, ou "visões de câmera de segurança" "ou renderizar para vistas de textura etc. O processo de renderizar um quadro a partir de uma única visualização de câmera para uma única área de espaço da tela não precisa estar ligada a nenhum jogador.

Alturis
fonte
1

Enquanto houver jogadores humanos, você pode fazer a câmera centralizar na unidade AI em movimento, se estiver dentro do alcance da visão. Senão, você pode ter uma câmera controlável com mouse / teclado independente das unidades móveis.

Chauer
fonte