Estou projetando um jogo de estratégia de combate de frota espacial 3D-6DOF baseado em turnos em rede, que depende muito da personalização de navios. Deixe-me explicar um pouco o jogo, já que você precisa saber um pouco sobre ele para definir a pergunta.
O que eu pretendo é a capacidade de criar sua própria frota de navios com formas personalizadas e módulos anexados (hélices, vigas de trator ...), o que daria vantagens e desvantagens para cada navio, para que você tenha várias distribuições de frota diferentes. Por exemplo, um navio longo com duas hélices ao lado deixaria o navio girar com facilidade naquele avião, navios maiores se moveriam lentamente, a menos que você coloque muitas hélices na parte de trás (gastando mais pontos de "construção" e energia ao se mover, e mova-se rapidamente nessa direção.) Pretendo equilibrar todo o jogo em torno desse recurso.
O jogo giraria em torno de duas fases: ordens e fase de combate. Durante a fase de pedidos, você comanda os diferentes navios. Quando todos os jogadores terminam a fase de pedidos, a fase de combate começa e as ordens do navio são resolvidas em tempo real por algum tempo, então a ação faz uma pausa e há uma nova fase de pedidos.
O problema surge quando penso na entrada do player. Para mover um navio, você precisa ativar ou desativar hélices diferentes, se quiser dirigir, avançar, frear, girar no lugar ... Essas hélices não precisam trabalhar com toda a potência, para que você possa obter mais movimento combinações com menos hélices.
Eu acho que essa abordagem é um pouco chata. O jogador não quer mexer em motores ou qualquer coisa, você só quer MOVER e MATAR. A maneira como pretendo que o jogador dê ordens a esses navios é por destino e rotação , e a IA calcularia a potência correta da hélice para obter esse movimento e rotação. A propulsão não precisa ser a mesma durante todo o cálculo do turno (depois que as ordens foram dadas); portanto, seria legal se os navios reagissem enquanto se moviam, ajustando o poder das hélices de acordo com suas necessidades dinamicamente, mas pode ser muito difícil de implementar e não é realmente necessário para o jogo funcionar.
Em ambos os casos, como essa IA decidirá quais hélices serão ativadas para a melhor (ou pelo menos não pior) trajetória a ser alcançada?
Eu pensei sobre algumas abordagens:
- Aprendendo IA: os tipos de naves aprenderiam sobre seus movimentos por tentativa e erro, ajustando seu comportamento com mais usos e, finalmente, tornando-se "inteligentes". Não quero me envolver TÃO longe na codificação de IA, e acho que pode ser frustrante para o jogador (mesmo que você possa deixá-lo aprender sem jogar).
- Movimento pré-calculado de timestep: Após a criação do navio, TODOS os movimentos possíveis são calculados para cada configuração e potência da hélice por um determinado tempo delta. Memória intensiva, feia, ruim.
- Trajetórias pré-calculadas: o mesmo que acima, mas não para cada tempo delta, mas toda a trajetória, que seria ajustada o máximo possível. Requer uma configuração de hélice fixa para toda a fase de combate e ainda consome muita memória, é feia e ruim.
- Forçar força bruta contínua: a IA verifica continuamente TODAS as configurações possíveis da hélice durante toda a fase de combate, pré-calcula alguns passos de tempo e decide qual é a melhor baseada nisso. Contras: o que é bom agora pode não ser tão bom depois, e é muito intensivo em CPU, feio e ruim também.
- Forçar força bruta: O mesmo que acima, mas apenas forçar força bruta no início da simulação, por isso precisa de configuração constante da hélice durante toda a fase de combate.
- Verificação de ângulo contínuo: Este não é um método de movimento completo, mas talvez uma maneira de descartar configurações de hélices "estúpidas". Dado o vetor normal da hélice atual e o final, você pode aproximar a potência necessária para a hélice com base no ângulo. Você deve fazer isso continuamente durante toda a fase de combate. Eu descobri isso recentemente, então não pensei muito. A priori, ele também tem a desvantagem "o que é bom agora pode não ser tão bom depois", e não se importa com as outras hélices que podem agir juntas para criar uma melhor configuração da hélice.
Eu estou realmente preso aqui. Alguma ideia?