Calcular a trajetória dos mísseis em torno das órbitas antes de disparar


10

Estou construindo um jogo com o Unity3D. É um clone de Gravity Wars . As torres de jogadores e de IA disparam mísseis um contra o outro (fornecendo variáveis ​​de ângulo e potência), tentando não colidir com mísseis nos planetas. Mas aqui está a minha pergunta: como faço para a IA calcular força e ângulo antes de disparar seu míssil, considerando também a gravidade de um planeta?

Respostas:


5

Um sistema como esse, com vários corpos, será caótico. Eu não acho que você seria capaz de resolver uma equação em tempo real. O melhor que você pode esperar é encontrar uma solução usando um algoritmo genético;

1: produza um número (por exemplo, 100) de soluções aleatórias (ângulo, pares de potências).

2: simule essas soluções.

3: se houver, acabe atingindo o alvo (ou chegando suficientemente perto), Concluído! caso contrário, continue.

4: escolha as 10 melhores soluções (aquelas que acabam mais próximas do alvo)

5: dessas 10 soluções, crie 10 filhos para cada um, ajustando aleatoriamente seu ângulo e poder.

6: agora você tem 100 novas soluções, retornou à etapa 2

Você precisará limitar o número de iterações, caso não exista uma solução ou esteja demorando muito para pesquisar.

Mesmo essa abordagem não é garantida para encontrar uma boa solução porque; 1. a solução pode não existir 2. em um sistema caótico, pequenas alterações em uma solução podem ter um enorme impacto no resultado


1

Você deve poder simular uma foto, sem desenhá-la.

Então você pode dizer, simular 10 fotos e, em seguida, tirar a mais próxima das 10.


0

Dado que a trajetória do míssil é baseada nas entradas de Anglee Power, você deve ser capaz de resolver (obter uma resposta exata ) a partir de uma equação inversa.

As etapas básicas da AI (psuedo) são as seguintes:

  1. Escolha um Powernível aleatório . Não importa qual é o valor exato (até certo ponto), desde que esteja dentro de um intervalo razoável.
  2. Resolva a equação (invertida do caminho real) para fornecer a exata (bem, o mais próximo possível com dobras) Angle.
  3. Escolha um deslocamento aleatório (modificável) de Angle, para ajustar a ' dificuldade ' da IA.
  4. Dispare o míssil como um jogador faria, no (aleatório) Powere (calculado) Angle.

É claro que você poderia apenas ter o disparo da IA ​​em níveis aleatórios para ambas as entradas, o que poderia produzir alguns resultados interessantes ...


Esse método faz todo o sentido quando tudo o que você tem é a gravidade diretamente para baixo e um vento constante, mas o que você usa para uma "equação para dar o exato Angle" quando você tem vários corpos gravitacionais espalhados pelo seu universo? A atração deles depende da sua posição atual. Algumas fotos podem até não ser possíveis.
John McDonald

@ John - Se um tiro é completamente impossível (descontando uma má escolha de potência de entrada), há um problema sério no seu campo de jogo. Com esses tipos de jogos, qualquer um dos jogadores deve ser substituído por uma IA. É verdade que as equações ficam mais complicadas (e com vários corpos, muito rapidamente), mas ainda devem ser possíveis.
Clockwork-Muse

Justo. Mas você sabe o que usaria para uma equação? Eu acho que é por isso que essa pergunta foi criada.
John McDonald

John está certo: o que estou procurando é essa equação.
Onofrio 25/11

@ Onofrio - Desculpe, não tenho as equações relevantes ... e parece que você precisa de cálculo multivariável para fazer isso 'corretamente'.
Clockwork-Muse

0

Que tal torná-lo realista por não tê-los calculado, mas começando com um palpite e ajustando-o adequadamente?

Quando joguei Gravity Wars, foi o que fiz; comece com uma potência semi-aleatória e ajuste de acordo com um incremento. Dentro de algumas fotos, você chega muito perto.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.