Nouveau pour créer une IA - par où commencer? [fermé]


58

Je suis nouveau dans la programmation de jeux et j'essaye de faire un jeu spatial de base en 2D de haut en bas avec 2 vaisseaux spatiaux qui s'affrontent. Je me débrouille bien avec le vaisseau spatial contrôlé par l'utilisateur, mais je ne sais même pas comment commencer à programmer une IA. Certaines méthodes / modèles conviennent-ils mieux à cette situation? Où pourrais-je même commencer?


1
Voici mes diapositives sur l'IA du cours que j'ai suivi
Jari Komppa

4
si déclarations. beaucoup d'entre eux.
deceleratedcaviar

Réponses:



27

Si vous développez l'IA pour la première fois, vous n'avez pas à vous soucier d'éléments tels que le modèle d'état, les mathématiques comportementales ou même obtenir un livre sur le sujet.

Vous pouvez littéralement vous en tirer avec quelque chose comme ceci:

if( targetInRange == true )  
{
    FireAtTarget();
}
else if( bulletComingTowardsMe == true )
{
    MoveAwayFromBullet();
}
else
{
    WanderAroundAimlessly();
}

Pour obtenir une bonne intelligence artificielle, le principal aspect consiste à réfléchir aux comportements que vous souhaitez que le personnage adopte et à la manière dont cela peut être réalisé de manière réaliste. Donc, pour un ennemi de base d'un vaisseau spatial, j'imagine que les actions possibles pourraient être les suivantes:

  • Se déplacer
  • Feu
  • Fuyez

Et quand ces actions pourraient-elles se produire?

  • Se déplacer - Rien d'autre à faire
  • Feu - Quand je repère un ennemi
  • Fuir - Quand je suis en mauvaise santé / Quand je prends le feu / etc.

Une fois que vous avez fait cela en raison du faible nombre d '"états" dans lesquels votre personnage peut se trouver, vous pouvez utiliser une simple instruction if comme celle ci-dessus. Je vous recommanderais alors d’examiner les comportements de direction car il s’agit de comportements très simples à mettre en œuvre et pouvant donner lieu à de très beaux mouvements.

Plus d'informations peuvent être trouvées ici: http://www.red3d.com/cwr/steer/
Et je recommanderais certainement le livre de Mat Buckland, Programming Game AI par exemple , en particulier lorsque vous débutez.

Lorsque vous êtes vraiment à l'aise avec ceux-ci, je suggérerais d'examiner l'état et les modèles de stratégie.

Le but est de commencer petit et simple. Ne vous inquiétez pas de tous ces termes que tout le monde parle sans cesse des FSM et des modèles de conception, etc. Tout d’abord, concevez et construisez, puis demandez-vous comment l’améliorer en utilisant des méthodes ou des normes existantes.

J'espère que ça t'as aidé!


@Fuu Salut pour le collaborateur :)
Ray Dey

9

Vous voudrez peut-être consulter OpenSteer et la documentation relative à Steering Behaviors qui l'accompagne. Le code source n'est pas de niveau débutant, mais les concepts qui le sous-tendent devraient vous donner de bonnes idées.


Est-ce que les gens utilisent Opensteer dans les jeux ou est-ce plus pour les simulations?
jle

J'essaye au moins de l'utiliser dans un jeu en développement. Cela fonctionne bien pour moi jusqu'à présent. Je crois que l’auteur en a développé une bonne partie alors qu’il travaillait pour le groupe Playstation de Sony. MobyGames le répertorie au générique de JohnMadden Football et de l’un des jeux Leisure Suit Larry.
AShelly

FreeOrion utilise OpenSteer dans son moteur de combat tactique.
Mike Strobel

1
+1 Pour mentionner opensteer. Si vous voulez voir de très bons exemples de combinaison de comportements très simples pour former quelque chose qui a l’air très très complexe et complexe. Comportements de direction de caisse! Google, "Boids" et regardez quelques utilisations intéressantes. Ce n'est pas calme ce que vous voulez, mais cela vous montrera que la simplicité est
synonyme de

9

Vous voudrez peut-être examiner le modèle de conception de la stratégie . Écrivez essentiellement les mêmes stratégies de base sur le comportement des navires:

  • Se rapprocher de la cible
  • Cible d'attaque
  • Fuir la cible
  • Avancer vers les power-ups
  • Utilisez des power-ups

Ensuite, vous utiliserez la logique (machines à états) pour choisir entre ces stratégies. Par exemple: si les boucliers des navires sont tombés au-dessous de 50%, alors fuyez la cible et avancez vers les bonus / objets de guérison, etc.


1
ainsi, à chaque fois dans la boucle du jeu, il décide laquelle de ces «stratégies» est prioritaire et l'exécute ensuite?
jle

@ jle Assez bien. Ainsi, chacune de vos stratégies sera répartie dans ses propres classes, en gardant votre code organisé.
Bryan Denny

7

Puis-je vous suggérer d'acheter le livre Artificial Intelligence for Games de Ian Millington - c'est excellent! :) http://www.ai4g.com/

Le code source est sous licence Github - MIT.

Bien sûr, si vous n'utilisez pas C / C ++, cela pourrait être moins pertinent.

Mais vraiment une introduction géniale au monde de la stupidité / intelligence artificielle.

Les choses dont vous allez avoir besoin sont le pilotage et les machines d'état. Pour commencer.


2

Quelques conseils pratiques si vous optez pour des machines d'état: méfiez-vous du mégastat.

Il est tentant de créer un état "Fuite" qui gère la définition d'une position de fuite, une vitesse d'objectif élevée, le nettoyage de toutes les cibles, etc. Il est préférable d'avoir plusieurs machines à états, chacune gérant un ou plusieurs contrôles de navire - par exemple une machine d'état qui gère la sélection d'une position cible, celle qui gère les armes à feu, etc.

Cela peut sembler stupide, car il faudrait ajouter des états de fuite à chaque machine, mais comme vous êtes limité à une ou deux sorties, vos états sont très petits et ne devraient donc pas poser de problème.

De plus, comme chaque contrôle est maintenant sous contrôle individuel, vous pouvez choisir une position de cible de fuite tout en laissant l'état d'attaque contrôler vos armes. Vous pouvez détruire un ennemi tout en conservant la puissance du moteur en raison d'une fuite de liquide de refroidissement. Vous pouvez vous orienter pour éviter une collision tout en maintenant des contre-mesures. Tout cela serait impossible avec une seule machine à états globale.


2

Mathématiques comportementales pour Game AI

Ajouter ce livre à la liste des points de départ pour l’apprentissage de la programmation de l’IA. En mettant l'accent sur l'observation et la mise en œuvre du comportement plutôt que sur des algorithmes d'application limitée, je pense que cela convient bien à la tâche.


1

Comment créer une IA est une question délicate, car elle comprend plusieurs parties:

  • Vous choisissez une architecture générale / paradigme pour votre IA. Est-ce basé sur des scripts? Utilisera-t-il la planification? Est-ce un simple FSM ou préférez-vous les BT?
  • Ensuite, vous appliquez ces paradigmes avec une implémentation / un ensemble d’outils spécifique.
  • Maintenant, il vous reste des choix de conception de jeu, car vous devez penser aux comportements que votre architecture utilisera.

D'autres affiches suggéraient d'excellents livres et j'adore AI4Games, suggéré par jacmoe, même si c'est assez général (comme beaucoup de livres, ce qui est bien entendu compréhensible).

Bien sûr, chaque type de jeu a ses besoins spécifiques, et les jeux d'arcade / tireurs n'ont pas besoin d'architectures complexes pour prendre en charge un gameplay intéressant. De simples bibliothèques de guidage feront le travail en tant que base de ce comportement, puis vous ajouterez des détails pour différents types d’ennemis (certains tirent périodiquement, certains tirent en prédisant le mouvement du joueur, certains se retournent pour faire face à l’ennemi, d’autres peuvent coordonner leurs attaques, etc.).

  • Je pense que la meilleure façon d’en apprendre davantage sur le codage de jeux (AI) est de regarder le bon code en cours d’exécution. Alors, explorez ohloh.net et github et recherchez les projets FOSS existants!
  • Bien sûr, vous pouvez choisir la partie la plus difficile et jouer à un jeu existant (mais simple). Essayez de faire de l'ingénierie inverse du comportement et pensez "Comment pourrais-je concevoir cela?". Bien sûr, les indices aident toujours, et c'est probablement pourquoi vous avez posé la question à gamedev.SE!
  • Quelque chose entre les deux est aussi de regarder les jeux de tir existants dans les forums de GameMaker! Vous pouvez trouver beaucoup de scripts simples qui feront l'affaire! ;)

1

Pensez à ce que vous faites lorsque vous jouez au jeu. Posez-vous des questions.

  • De quelles informations ai-je besoin pour pouvoir prendre une décision?
  • Quand est-ce que je réagis aux changements?
  • Quels sont mes objectifs "à long terme" dans cette session de jeu en particulier?

Ensuite, je demande à l'IA d'examiner le terrain de jeu et de dresser une liste des actions ou des mouvements possibles que l'IA pourrait effectuer en fonction de ces questions. Je classe et trie ces mouvements avec un "facteur d'intelligence". Ensuite, c’est aussi simple que de choisir et d’exécuter un mouvement / action basé sur une combinaison de hasard et quel que soit le niveau de difficulté choisi par le joueur au début de la partie.

Puis, après 500 millisecondes, je le fais à nouveau.

Il n’a aucune capacité d’apprentissage ou autre chose, mais avec suffisamment d’ajustements, il peut être assez convaincant, ce qui importe vraiment

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.