Je développe une IA de jeu de stratégie (pensez: Final Fantasy Tactics), et j'ai du mal à proposer la conception de l'IA. Mon principal problème est de déterminer quelle est la chose optimale à faire.
Permettez-moi d'abord de décrire la priorité de l'action que je voudrais que l'IA prenne:
Tuez l'unité de joueur la plus proche
Remplissez la directive principale (tuez toutes les unités de joueur, tuez l'unité cible, survivez pendant x tours)
- Guérir l'unité alliée / tampon de lancement
Désormais, l'IA peut effectuer les opérations suivantes à son tour:
Déplacer -> {Attaque / Capacité / Objet} (soit attaque ou capacité ou objet)
{Attaque / Capacité / Objet} -> Déplacer
Rapprochez-vous (si les cibles ne sont pas à portée)
- {Attaque / Capacité / Objet} (si le mouvement n'est pas disponible)
Remarques
Les capacités ont différentes gammes / effets / coûts / effets. Chaque unité ai peut choisir entre 5 et 10 capacités. L'IA donnera la priorité à la mise à mort plutôt qu'à la sécurité à moins que sa directive ne soit de survivre pendant x tours. Il ne se soucie pas non plus du coût de la capacité. Alors qu'un joueur peut vouloir sauvegarder un gros sort pour plus tard, l'IA l'utilisera très probablement dès que possible.
Le mouvement se fait sur une grille (hex)
nombre d'unités de joueur: 3-6
nombre d'unités ai: 3-7 ou plus. Probablement max 10.
L'IA et le joueur contrôlent à tour de rôle UNE unité, au lieu de tous en même temps.
La plate-forme est Android (si le programme ne répond pas après un certain temps, il y aura une fenêtre contextuelle disant de forcer la fermeture ou l'attente - ce qui semble vraiment mauvais!).
Maintenant vient les questions:
La meilleure capacité d'utilisation serait évidemment celle qui frappe le plus de cibles pour le plus de dégâts. Mais comme chaque capacité a des portées différentes, je ne saurai pas si elles sont à portée sans explorer chaque endroit possible où je peux me déplacer.
Une solution serait de passer par chaque endroit possible pour se déplacer, de déterminer l'attaque optimale à cet endroit - ce qui me donne une liste de mouvements optimaux pour chaque emplacement. Ensuite, choisissez l' optimal hors de la liste et exécutez-le. Mais cela prendra beaucoup de temps CPU. Y a-t-il une meilleure solution?
Mon idée actuelle est de me rapprocher le plus possible du groupe de personnes le plus proche et le plus grand, et de déterminer l'attaque / la capacité optimale à partir de là. Je pense que ce serait beaucoup moins de travail pour le CPU et permettrait toujours des attaques à large spectre. C'est sous-optimal mais l'IA semblera toujours `` intelligente ''.
Autres notes / questions:
- Suis-je trop réfléchi / trop compliqué? Une meilleure solution? Je suis ouvert à toutes sortes de suggestions
- J'ai jeté un coup d'œil à la question de lancement de sorts , mais elle ne prend pas en compte le mouvement - alors peut-être utiliser cet algo pour chaque emplacement de mouvement possible? La première réponse mentionnait que ce n'était pas génial pour les combats de zone d'effet et de groupe - alors peut-être qu'il faut plus de peaufinage?
- S'il vous plaît , si vous mentionnez un graphique / arbre, laissez - moi savoir essentiellement comment l'utiliser. Par exemple, Node signifie capacité, le niveau correspond aux dégâts, puis recherchez le nœud le plus profond.