IA Playground
| gus |
Posté le 31 Mar 2008 à 19:48
|
|
![]() Messages : 371 GCPoints : 52046 |
Faire un IA c'est bien beau,mais encore faut-il avoir une situation concrete pour la tester.L'idée de la bibliotheque serait de créer se "terrain de jeux" pour tester les IA.Concretement,pour l'instant ce n'est qu'une idée et c'est pourquoi j'aimerais que des gens connaissant bien les IA me disent de quelles fonctions ils auraient besoins. Langage:C++ Moteur 3d:Ogre Moteur physique:PhysX
Dernière édition le 31 Mar 2008 à 21:10
|
|
| noob4ever |
Posté le 31 Mar 2008 à 19:57
|
|
![]() Messages : 295 GCPoints : 48742 |
Oula... tu es sûr d'avoir bien calculé ton coup ? ça va poser des soucis d'adaptation tout ça.
What did C:/DARTHVADER said to C:/DARTHVADER/LUKESKYWALKER ?
I'm your folder |
|
| Darktib |
Posté le 31 Mar 2008 à 20:30
|
|
![]() Messages : 4017 GCPoints : 347288 |
Ca dépend de ce que tu veux tester... Si c'est IA::Astar (pub pub pub pub pub pub L'idée est bonne, mais il ne faut pas faire 1 test, mais un par catégorie d'ia (pathfinding, decision finding, etc...). Sachant aussi que les ia completes dépendent toujours d'un moteur de jeu, et que celui ci dépend aussi beaucoup du moteur 30, tu aura des difficultés... Sauf pour ce qui ne dépend que des librairies standard. Genre IA::Astar *sort* |
|
| noob4ever |
Posté le 31 Mar 2008 à 20:43
|
|
![]() Messages : 295 GCPoints : 48742 |
Même ceux avec que la SL ça posera soucis, il faut vraiment que ta biblio soit souple !
What did C:/DARTHVADER said to C:/DARTHVADER/LUKESKYWALKER ?
I'm your folder |
|
| Darktib |
Posté le 31 Mar 2008 à 20:59
|
|
![]() Messages : 4017 GCPoints : 347288 |
Avec la STL ca ne posera pas de probleme. D'aileurs en y pensant comme ca, tu aura aussi de temps en temps des problemes de plateforme... Pour info IA::Astar n'utilise que la STL...
Dernière édition le 31 Mar 2008 à 21:00
|
|
| gus |
Posté le 31 Mar 2008 à 21:04
|
|
![]() Messages : 371 GCPoints : 52046 |
La bibliotheque ne seras pas uniquement pour le pathfinding(pas besoins d'un moteur 3d la),mais plutot orianté FPS avec des regles simples.Pour l'instant,les IA seraient omniscientes(c'est a dire qu'elles connaitraient les positions de tout les "joueurs").Se serait plutot pour tester des IA de "groupe"(en effet,quand les IA sont omniscientes,faire jouer 2 IA l'un contre l'autre avec un seul joueurs n'est pas tres interressant). Voila se a quoi j'ai penser que la libraire devrait proposer -Moteur 3d/Physique -une classe Joueur avec la possibilité de se déplacer,tirer,savoir si on peut tirer su quelqu'un ou s'il y a un mur devant,etc -une carte avec des waypoints(sans algo genre A*,sa c'est au IA de s'en occuper),qui peuvent avoir une valeur associé aussi(genre endroit ou on peu se metre a couvert etc) Par contre,je ne sais pas trop comment dire au IA dans quelle zone peuvent leur bot se déplacer sans rentrer dans le mur.J'ai penser a associer a chaque waypoints une "zone ou on peu aller"(genre un carré ou un cercle),mais je ne sait pas si cette idée est vraiment bonne.
Dernière édition le 31 Mar 2008 à 21:07
|
|
| Darktib |
Posté le 31 Mar 2008 à 21:14
|
|
![]() Messages : 4017 GCPoints : 347288 |
Des qu'il y a du déplaccement -> physique et pathfinding^^ Sinon je suis partant pour t'aider. Par contre pas tout de suite (3 tonnes de dst...) |
|
| gus |
Posté le 31 Mar 2008 à 21:17
|
|
![]() Messages : 371 GCPoints : 52046 |
Oui,mais la lib ne gererais que les deplacement entre 2 Waypoint cote a cote,histoire que les IA puissent prendre le chemin qu'elles veulent et pas que le programme essay de passer au milieur des ennemis^^La librairie s'occupe donc des deplacementes entre des waypoints connexe,mais pas entre des waypoints eloignés. Citation :
Toute aide est bienvenue!Mais pour l'instant,il me faut de l'aide surtout pour definire ce que la lib doit faire,pas pour le code(sa sa viendra plus tard). |
|
| gus |
Posté le 01 Avr 2008 à 21:38
|
|
![]() Messages : 371 GCPoints : 52046 |
J'ai un peu réfléchie pour la structure et les fonctions.Pensez vous que c'est bien? La classe Player: Code : class Player getPosition() setPosition() //private? getOrientation() SetOrientation() //private? getName() setName() //private? getTeam() setTeam() //private //============================= //mouvement MoveTo(Vector3) /*evidement,le déplacement n'est pas instantané.Cette fonction doit etre appelé a chaque boucle,sauf si on met une variable qui enregistre la position de l'endroit ou il doit aller,mais je n'en voi pas l'iinteret. L'argument de MoveTo n'est pas un waypoint mais une position*/ bool AimAt(Vector3) /*vise une position,la visé n'est pas instantané,donc il renvoy true si il vise effectivement la position*/ Fire() //tire //============================= //atributs genre la santé,etc getHealth() setHealth() //private? getAimSpeed() setAimSpeed() //private? getMoveSpeed() setMoveSpeed() //private? La classe IA(classe dont les IA doivent hériter): Code : class IA //a méditer.... std::list<Player> Player;//les joueurs controlés par l'IA std::list<Player> Ennemies;//les joueurs ennemis(l'IA est omnisciente) WayPoints//un tableau ou une liste,je sais pas trop de waypoints virtual Play() //fonction appelé a chaque boucle ou l'IA fait ses actions la Class WayPoint(la je sais pas trop,faut que je reflechisse plus) la Class GameEngine: Code : class GameEngine //a méditer Init()//initilialisation physique,graphisme,etc a séparer en plusieurs fonctions //======================== CreatePlayer() DeletePlayer() std::list<Player> pPlayer; // CheckFire() /*verifie si les Players se tirent dessu et enlever de la vie*/ //========================== CreateIA() std::list<IA> pIA; //========================== LoadLevel() //========================= Run()//commence la partie Update()// joue la simulation float TimeStep;
Dernière édition le 01 Avr 2008 à 22:05
|
|
| Darktib |
Posté le 01 Avr 2008 à 21:56
|
|
![]() Messages : 4017 GCPoints : 347288 |
J'ai regardé, le code me parait pas mal (a propos : orientation) a part le fait de mettre les set position en private... Il manque le point player to (x,y,z)... a moins que ce soit le aimat. Pour l'IA, ca se passe en général comme ca: D'abord avec un module de decision making, l'IA determine ou les bots devront aller. Puis ensuite on recherche le path (pathfinding). Ensuite on déplace l'objet. Si jamais certaines condition sont respeectées (genre enemis proche du player, ennemis a le player dans sont FOV, etc...) il arete de se déplacer sur le path et effectue l'action que l'IA lui demandera (en général la baston^^) Niveau pathfinding la librairie sait en général gerer les checkpoints, et si ce n'est pas le cas l'algo pour les trouver n'est pas tres compliqué. |
|
| gus |
Posté le 01 Avr 2008 à 22:04
|
|
![]() Messages : 371 GCPoints : 52046 |
Citation :
Citation :
Ce serait pour éviter d'avoir des IA qui "trichent",mais je ne sait pas encore trop quoi faire. Citation :
Si j'ai bien compris ce que tu veu dire,oui c'est sa. Citation :
Le principe de la libraire est que l'IA a toute les infos dont elle a besoins(waypoints,position des joueurs,etc,sauf les champs de visions,trop chiant a metre pour l'instant^^),et apres elle fait sa vie,les algos qu'elle veu,etc.Il n'y auras pas d'algo d'IA dans la librairie(en tout cas dans un premier temps,peut-etre apres des algos de pathfnding et autre pour aller plus vite),elles ont juste un fonction appelé a chaque frame comme "point d'entrée",et apres elle est libre de faire ce qu'elle veu,path fingding et autre. |
|
| Darktib |
Posté le 01 Avr 2008 à 22:12
|
|
![]() Messages : 4017 GCPoints : 347288 |
Hum Ok... Si les IAs sont bien programmées la triche n'existe pas... Pour le reste de la librairie je vois ce que tu veux dire... Pour les champ de vision j'ai un code en Dbp la dessus (et tres bien fait, c'etait un tuto d'IA^^), il est pas trop difficile a adapter en c++. Faudra que je retrouve ca^^ Apres l'IA, c'est aussi la décision des actions( strategie). Si tu fait de l'aléatoire ca va etre simple... sinon bonjour les maux de tete^^ Et sinon n'hésite pas a me demander de verifier en précision un code (complet) (signifie tu met en ligne tous les fichiers^^), vu que j'ai réussi a installer Ogre...et ca fonctionne^^ |
|
| gus |
Posté le 01 Avr 2008 à 22:23
|
|
![]() Messages : 371 GCPoints : 52046 |
Citation :
Pas con^^,je les laisse donc en public. Citation :
Je pense aussi savoir comment faire,mais tout aide est(seras?)bien venue(faut tenire compte des murs etc,c chiant^^),mais se n'est pas dans le top de mes priorité,sa viendra apres. Citation :
Sa la librairie ne s'en occupe pas,c'est au programmeur,mais bien sur,j'aimerais bien faire un ou 2 ptites démos... Citation :
Etant donner que je compte metre sa sous license GPL ou LGPL(enfin la license que vous voulez pour que sa vous fasse pas ch**r),donc il devrais pas y avoir de problemes! |
|
| Darktib |
Posté le 01 Avr 2008 à 22:30
|
|
![]() Messages : 4017 GCPoints : 347288 |
Le code dbp que j'avais gerait les murs et tout... | |
| gus |
Posté le 01 Avr 2008 à 22:31
|
|
![]() Messages : 371 GCPoints : 52046 |
Bref,moi je vais au pieu,j'ai des interres demains.Je coderais sa jeudi ou vendredi,avant les profs se sont donner rendez-vous pour nous filer un max de controle.... |
|
| Darktib |
Posté le 23 Avr 2008 à 23:19
|
|
![]() Messages : 4017 GCPoints : 347288 |
Y a 5 minutes j'ai retrouvé un plugin open source pour irrlicht (donc en C++) qui gere les fields of view, les murs, etc.... lien: http://irrlicht.sourceforge.net/phpBB2/viewtopic.php?t=25132 J'espere que ca pourra te servir |
|

