IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Intelligence artificielle Discussion :

IA pour les ennemis d'un FPS


Sujet :

Intelligence artificielle

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    74
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 74
    Points : 80
    Points
    80
    Par défaut IA pour les ennemis d'un FPS
    Bonjour,

    J'aimerais avoir des idées sur la façon de développer une IA simulant un joueur de FPS.

    Présentation rapide du FPS

    Il s'agit d'un simple FPS : [ame="http://www.youtube.com/watch?v=YkF4SXLsI2A"]YouTube - Mon premier FPS[/ame]

    La carte est créée à partir d'un BMP en 2D. Chaque pixel noir et un mur.



    La carte peut être vue comme un ensemble de cases.

    Se protéger

    Le "joueur" doit être capable de se protéger. Il doit éviter d'être dans le champs de vision des autres joueurs. S'il est vu directement, il est en danger. Il est d'autant plus en danger qu'il n'est vu par des adversaires. Lorsqu'il est en danger, il doit se déplacer vers les cases qui ne sont dans aucun champs de vision.

    Je pense que le plus simple est de calculer pour chacune des cases le nombre de fois qu'elle est vue. Une case vue 5 fois est beaucoup plus dangereuse qu'une case 0.

    Il est moins dangereux de longer les murs que de traverser la carte au milieux d'un champs. Peut-être d'un calcule statistique pourrait déterminer la dangerosité de certaines cases de la carte. Celui-ci ferait ressortir qu'il est moins dangereux de longer les murs et peut-être d'autres choses qui ne nous sont pas forcément évident.

    Les cases sont également moins dangereuse lorsque d'autre membre de l'équipe sont proche. Peut-être qu'il pourrait être intéressant de gérer un "sentiment de sécurité".

    Tuer

    Le joueur doit être en mesure de tuer. Il doit pouvoir prendre la décision de tirer mais sans s'acharner en envoyant 100 balles par secondes seulement lorsqu'il est sur de viser. Les tirs doivent être plus ou moins espacé et pas toujours certains.

    Rechercher des ennemis

    Cette partie est sans doute celle sur laquelle j'ai le moins d'idées. Comment faire en sorte que les "joueurs artificiellement intelligent" puisse chercher les ennemies ? Faut-il que le joueur ait le sentiment d'être en sécurité pour rechercher des ennemis ? Comment concilier la recherche des adversaires avec la protection de soit même en évitant les ennemis ?

    Sentiment de sécurité

    Le joueur se sent en sécurité lorsque son équipe et proche et lorsque ça fait longtemps qu'il pense ne pas avoir été dans le champs de vision d'un adversaire depuis un moment.


    Comme vous pouvez le voir, j'ai encore de nombreux points à éclaircir. Peut-être même que j'en ai oublié. C'est pourquoi j’attends avec impatience un retour d'expérience qui pourra m'aider et me guider avant de me lancer.

    Merci de m'avoir lu.


    David.

  2. #2
    Expert éminent sénior
    Avatar de Mat.M
    Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2006
    Messages
    8 361
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2006
    Messages : 8 361
    Points : 20 381
    Points
    20 381
    Par défaut
    Citation Envoyé par Davidlouiz Voir le message
    Cette partie est sans doute celle sur laquelle j'ai le moins d'idées. Comment faire en sorte que les "joueurs artificiellement intelligent" puisse chercher les ennemies ? d.
    je n'arrive vraiment pas à comprendre tes interrogations ; dans un FPS le comportement du joueur est entièrement tributaire des réactions, des réflexes du joueur.
    Si tu joues à Quake par exemple et que tu décides de tirer alors le personnage que tu incarnes avec vue à la première personne va tirer.

    Tu nous parlerais de l'IA des ennemies Ok.

    Et puis un FPS c'est pointu d'un point de vue optimisation ; il faut utiliser un BSP comme dans Quake pour afficher les murs.
    A moins que tu n'utilises Irrlicht par exemple.

  3. #3
    Membre émérite
    Avatar de Franck Dernoncourt
    Homme Profil pro
    PhD student in AI @ MIT
    Inscrit en
    Avril 2010
    Messages
    894
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : PhD student in AI @ MIT
    Secteur : Enseignement

    Informations forums :
    Inscription : Avril 2010
    Messages : 894
    Points : 2 464
    Points
    2 464
    Par défaut
    Citation Envoyé par Mat.M
    Tu nous parlerais de l'IA des ennemies Ok.
    Davidlouiz parle de l'IA des ennemis.

  4. #4
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    74
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 74
    Points : 80
    Points
    80
    Par défaut
    Citation Envoyé par Mat.M
    un FPS c'est pointu d'un point de vue optimisation
    Mon sujet ne porte pas sur l'optimisation. Tu parlais de l'optimisation de quoi ? De l'IA des "joueurs artificiellement intelligent" ?

    Citation Envoyé par Mat.M
    il faut utiliser un BSP comme dans Quake pour afficher les murs.
    Le sujet ne porte pas sur le format de ma scène. J'ai choisi d'utiliser un BMP pour me contenter de paint comme éditeur de map. Le rendu fonctionne parfaitement, je n'ai pas l'intension de changer. C'est mon premier vrai jeu, je vise la simplicité. (en savoir plus sur la création de la map)

    Citation Envoyé par Mat.M
    A moins que tu n'utilises Irrlicht par exemple.
    J'utilise OpenGL. Cela n'intervient pas dans la façon de gérer l'IA des "joueurs artificiellement intelligent."

    Pour compléter mon sujet, j'ajoute que ces fameux "joueurs" contrôlé par intelligence artificielle doivent se comporter "comme de vrais joueurs" ; sauf qu'au lieu d'être contrôlé par un humain, ils sont contrôlé par une IA.

    Les entrées et les sorties de sont pas les même. Un humain a, en entré le son et l'image et a pour sortie la souris et le clavier. Pour l'IA, j'aimerais que ce soit assez similaire, mais sans les périphériques. C'est à dire que le personnage appellera une méthode Personnage::avancer(angle, distance) non par suite à une action du joueur mais suite à une décision de l'IA. Par contre, pour ce qui est de la représentation "visuelle" de la scène du point de vue de l'IA, je ne peux pas me permettre relire l'écran et de l'analyser. J'ai besoin d'une analyse simple et d'une prise de décision cohérente et suffisamment semblable à un humain.

    J'espère avoir éclairci un peu mon sujet de départ et qu'on pourra m'apporter des idées.

    Merci.

  5. #5
    Membre émérite
    Avatar de Franck Dernoncourt
    Homme Profil pro
    PhD student in AI @ MIT
    Inscrit en
    Avril 2010
    Messages
    894
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : PhD student in AI @ MIT
    Secteur : Enseignement

    Informations forums :
    Inscription : Avril 2010
    Messages : 894
    Points : 2 464
    Points
    2 464
    Par défaut
    ces fameux "joueurs" contrôlé par intelligence artificielle doivent se comporter "comme de vrais joueurs" ; sauf qu'au lieu d'être contrôlé par un humain, ils sont contrôlé par une IA.
    Donc en résumé, ce thread porte sur la conception de l'IA d'un bot de FPS, dont la contrainte principale est d'imiter le style de jeu d'un joueur humain.

  6. #6
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    74
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 74
    Points : 80
    Points
    80
    Par défaut
    Oui, c'est ça.

  7. #7
    Expert éminent sénior
    Avatar de Mat.M
    Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2006
    Messages
    8 361
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2006
    Messages : 8 361
    Points : 20 381
    Points
    20 381
    Par défaut
    Citation Envoyé par Davidlouiz Voir le message
    Les entrées et les sorties de sont pas les même. Un humain a, en entré le son et l'image et a pour sortie la souris et le clavier. Pour l'IA, j'aimerais que ce soit assez similaire, mais sans les périphériques. C'est à dire que le personnage appellera une méthode Personnage::avancer(angle, distance) non par suite à une action du joueur mais suite à une décision de l'IA. Par contre, pour ce qui est de la représentation "visuelle" de la scène du point de vue de l'IA, je ne peux pas me permettre relire l'écran et de l'analyser. J'ai besoin d'une analyse simple et d'une prise de décision cohérente et suffisamment semblable à un humain.

    J'espère avoir éclairci un peu mon sujet de départ et qu'on pourra m'apporter des idées.

    Merci.
    on comprend mieux maintenant
    eh bien il y a les techniques "classiques" par exemple les machines à état non finies ( Non Finite State Machine) ou bien finies, les automates déterministes
    http://fr.wikipedia.org/wiki/Automate_fini
    tu peux acheter le livre de Matt Buckland sur l'IA des jeux (en anglais) mais il est un peu ardu à comprendre parfois.

    Sinon pour faire simple les ennemis donc les personnages qui ne sont pas le joueur ( Non Player Characters en anglais) peuvent avoir différents états comme avancer ,tirer , regarder dans les directions.
    Tu peux faire une "pile" des états avec des messages : Msg_ennemi_tire, msg_ennemi_avance etc..
    ensuite au programme de les interpréter.
    Tu peux faire une classe de base entité et faire hériter ton joueur de cette classe et y adjoindre des méthodes abstraites ou non ; ainsi que de faire hériter la classe perso ennemi.

    Pour que tes ennemis détectent le joueur c.a.d. toi eh bien la technique à 2 sous consiste à détecter si ton personnage et un des joueurs est compris en dessous d'une certaine distance d que tu calcules avec le thérorême de pythagore ( racine carré des différences des 2 positions des entités)
    Ensuite si l'ennemi voit que tu est à une certaine distance d inférieure à un seuil modulable selon le niveau du jeu ton personnage va avancer vers le joueur et tirer.
    Pour le tir tu peux calculer et déterminer s'il faut tirer selon le champs de vision ; l'ennemi peut balayer l'espace en 2 et déterminer si toi le joueur est inclus dans ce champs de vision ( avec des calculs de trigo mais ça risque de coûter en temps processeur)

    Pour les techniques d'optimisation je parlais du rendu des murs et de la scène.

  8. #8
    Expert éminent sénior
    Avatar de Mat.M
    Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2006
    Messages
    8 361
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2006
    Messages : 8 361
    Points : 20 381
    Points
    20 381
    Par défaut
    Citation Envoyé par Franck Dernoncourt Voir le message
    Donc en résumé, ce thread porte sur la conception de l'IA d'un bot de FPS, dont la contrainte principale est d'imiter le style de jeu d'un joueur humain.
    eh bien on peut faire cela simplement ; avec une classe de joueur qui suit le joueur principal , donc faire une classe héritée de la classe de base.
    La classe de base aura une méthode qui déterminera le chemin à parcourir pour toute entité en utilisant des algorithmes de pathfinding.
    Ceci pour éviter les obstacles.
    Et selon les positions du joueur principal, les joueurs associés se déplaceront en fonction de ça

  9. #9
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    74
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 74
    Points : 80
    Points
    80
    Par défaut
    Mat.M, j'ai le sentiment de ne pas réussir à me faire comprendre. Ma demande est pourtant simple et bien résumée par Franck.

    Pour les techniques d'optimisation je parlais du rendu des murs et de la scène.
    Le rendu de la scène ne pose aucun problème de performance. J'utilise une liste d'affichage, c'est mentionné sous le titre "Création de la liste d'affichage" dans le tutoriel de création de la carte.

    Je n'ai pas saisi ton explication avec la "pile". Tu ne voulais pas parler d'une énumération par hasard ? Si ton explication concernait le codage de l'application, je saurais me débrouiller. Je n'ai pas compris aussi pourquoi tu me parle de déterminisme. Ce jeu est destiné à fonctionner sur PC, je suis donc contraint aux possibilités offerte par les système d'exploitation. Mon problème porte sur l'algorithme de l'IA des "joueurs" qui ne sont pas des humains. Par ailleurs, il n'y a pas véritablement de problème concernant le contournement d'obstacle. Les collisions sont gérés dans ma méthode Personnage::deplacer(), il n'est plus possible, pour les personnages, de passer au travers d'un mur. (voir Gestion des collisions)

    Pour que tes ennemis détectent le joueur c.a.d. toi eh bien la technique à 2 sous consiste à détecter si ton personnage et un des joueurs est compris en dessous d'une certaine distance d que tu calcules avec le thérorême de pythagore ( racine carré des différences des 2 positions des entités)
    Ensuite si l'ennemi voit que tu est à une certaine distance d inférieure à un seuil modulable selon le niveau du jeu ton personnage va avancer vers le joueur et tirer.
    Merci pour cette possibilité. Mais je veux que ces "faux joueurs" ne soit pas des kamikazes. Ils doivent être confondu avec les vrais joueurs. D’ailleurs dans un match à 4 contre 4, chacune des équipes peuvent être constituée de deux vrais joueurs et deux faux joueurs. Ce serait dommage d'avoir un kamikaze dans l'équipe. Je veux que le joueur sache se protéger derrière un obstacle, tirer, se rapprocher des ses coéquipiers et aller à la recherche des ses adversaires. Comme un vrai joueur en fait. Je considèrerais que l'IA sera bien faite si ces critères sont respectés. Il sera alors théoriquement possible de laisser jouer ces fameux joueurs artificiels entre eux.

    A mon avis ce n'est pas une chose aussi facile à réaliser que tu ne le laisse paraître.

  10. #10
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    30
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 30
    Points : 31
    Points
    31
    Par défaut
    Pour les déplacements, tu dois pouvoir faire un système de comportement basé sur le principe du steering.
    Grosso-modo, tu codes plusieurs comportements, comme la fuite (s'éloigner d'un point particulier), la poursuite (se rapporcher d'un point), l'évitement, etc.
    Ces comportements, à partir des paramètres donnés, renvoie un vecteur de déplacement. Tu les composes ensuite selon les cas de figure pour avoir un comportement global cohérent.
    Par exemple, si l'ia a un joueur dans son champ de vision, tu appliques le comportement de poursuite sur le point du joueur. Si l'ia a sa vie basse, elle va plutot fuire.
    Pour ca, il te faut un système de perception qui te donne le type d'objet percu ("obstacle", "mur", "joueur ennemi|ami", "pack de vie",...) et la position. C'est un peu de géométrie.

    Ton truc de sentiment de sécurité me semble plus compliqué et pas trop adapté. Déjà, savoir combien de personnes regardent un coin de la carte ressemble à de l'omniscience assez malvenue, qui induira des comportements inacceptables (eviter une embuscade alors que du point de vue du joueur, rien ne justifie de l'éviter). Pour reprendre le même principe, utilise plutot le nombre d'ennemis perçus pour choisir le comportement à adopter (suivre ou fuire).

    La recherche des ennemis est en fait un comportement assez simple à atteindre : l'IA suit une direction au hasard (voire wandering), change régulièrement et évite les murs. Ca donne un comportement assez convaincant en général.

    Ensuite pour ce qui est de tirer, tu peux créer des comportements du même genre que ceux cité précédemment, mais utilisés pour influer sur l'orientation du joueur plus que sur sa position. On code généralement des comportements pour "regarder dans la direction du déplacement", "suivre un point du regard", éventuellement "regarder autour". Tu peux déclencher le tir lorsque l'angle entre le vecteur du regard et le vecteur de l'IA à l'objectif est inférieur à un certain seul de précision.

  11. #11
    Membre expérimenté Avatar de davcha
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    1 258
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 1 258
    Points : 1 539
    Points
    1 539
    Par défaut
    A lire. Plus particulièrement le chapitre 10 sur Pengi et la 4e partie sur l'écorésolution.

Discussions similaires

  1. FormatFloat pour les entiers !?
    Par Lung dans le forum Langage
    Réponses: 5
    Dernier message: 10/04/2003, 15h20
  2. [Kylix] cherche composants pour les sockets
    Par coriolis dans le forum EDI
    Réponses: 1
    Dernier message: 09/04/2003, 10h18
  3. Probleme pour les insertion au format etranger
    Par Sandrine75 dans le forum XMLRAD
    Réponses: 5
    Dernier message: 19/03/2003, 10h55
  4. Réponses: 2
    Dernier message: 08/10/2002, 18h26
  5. Une petite aide pour les API ?
    Par Yop dans le forum Windows
    Réponses: 2
    Dernier message: 04/04/2002, 21h45

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo