Calcul de la trajectoire du missile autour des orbites avant le tir

10

Je construis un jeu avec Unity3D. C'est un clone de Gravity Wars . Les tourelles des joueurs et de l'IA se tirent des missiles (en donnant un angle et une variable de puissance), essayant de ne pas planter de missiles sur les planètes. Mais voici ma question: comment faire pour que l'IA calcule la puissance et l'angle avant de tirer son missile, compte tenu de la gravité d'une planète aussi?

Onofrio
la source

Réponses:

5

Un système comme celui-ci, avec plusieurs corps, va être chaotique. Je ne pense pas que vous seriez en mesure de résoudre une équation en temps réel. Le mieux que vous puissiez espérer est de trouver une solution en utilisant un algorithme génétique;

1: produire un certain nombre (par exemple 100) de solutions aléatoires (angle, paires de puissance).

2: simulez ces solutions.

3: si l'un d'entre eux finit par toucher la cible (ou se rapproche suffisamment), c'est fait! sinon continuez.

4: choisissez les 10 meilleures solutions (celles qui finissent le plus près de la cible)

5: à partir de ces 10 solutions, créez 10 enfants pour chacun, en ajustant aléatoirement leur angle et leur puissance.

6: vous avez maintenant 100 nouvelles solutions, revenez à l'étape 2

Vous devrez limiter le nombre d'itérations, au cas où aucune solution ne serait trouvée ou si la recherche prend trop de temps.

Même cette approche n'est pas garantie de trouver une bonne solution car; 1. la solution peut ne pas exister 2. dans un système chaotique, de petites modifications apportées à une solution peuvent avoir un impact énorme sur le résultat

Ken
la source
1

Vous devriez pouvoir simuler un plan sans le dessiner.

Ensuite, vous pourriez dire, simuler 10 tirs, puis prendre le plus proche des 10.

jgallant
la source
0

Étant donné que la trajectoire du missile est basée sur les entrées de Angleet Power, vous devriez pouvoir résoudre (obtenir une réponse exacte ) à partir d'une équation inverse.

Les étapes de base de l'IA (pseudo) sont les suivantes:

  1. Choisissez un Powerniveau aléatoire . Peu importe la valeur exacte (dans une certaine mesure), tant qu'elle se situe dans une plage raisonnable.
  2. Résolvez l'équation (inversée du chemin réel) pour donner l' exact (enfin, aussi près que possible avec des doubles) Angle.
  3. Choisissez un décalage aléatoire (modifiable) du Angle, pour ajuster la « difficulté » de l'IA.
  4. Tirez le missile comme un joueur le ferait (au hasard) Poweret (calculé) Angle.

Vous pouvez bien sûr simplement avoir le tir AI à des niveaux aléatoires pour les deux entrées, ce qui pourrait produire des résultats intéressants ...

Clockwork-Muse
la source
Cette méthode est parfaitement logique lorsque tout ce que vous avez est la gravité vers le bas et un vent constant, mais qu'utilisez-vous pour une "équation pour donner l'exact Angle" lorsque vous avez plusieurs corps gravitationnels dispersés dans votre univers? Leur attraction dépend de votre position actuelle. Certains plans peuvent même ne pas être possibles.
John McDonald,
@John - Si un tir est complètement impossible (en écartant un mauvais choix de puissance d'entrée), il y a un sérieux problème avec votre terrain de jeu. Avec ces types de jeux, n'importe lequel des joueurs devrait être remplaçable par une IA. Certes, les équations deviennent plus compliquées (et avec plusieurs corps, très rapidement), mais cela devrait quand même être possible.
Clockwork-Muse
C'est suffisant. Mais savez-vous ce que vous utiliseriez pour une équation? Je pense que c'est pourquoi cette question a été créée.
John McDonald,
John a raison: ce que je recherche, c'est cette équation.
Onofrio
@Onofrio - Désolé, je n'ai pas les équations pertinentes ... et il semble que vous ayez besoin d'un calcul multivariable pour le faire "correctement".
Clockwork-Muse
0

Que diriez-vous de le rendre réaliste en ne les faisant pas calculer, mais en commençant par une estimation et en les ajustant de manière appropriée?

Quand j'ai joué à Gravity Wars, c'est ce que j'ai fait; commencez par une puissance semi-aléatoire et ajustez en conséquence par incrément. En quelques coups, vous vous rapprochez vraiment.

cendres999
la source