IA Playground

gus Message lu Posté le 31 Mar 2008 à 19:48 Bulle
Avatar de gus
Explorateur

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 Message lu Posté le 31 Mar 2008 à 19:57 Bulle
Avatar de noob4ever
Explorateur

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 Message lu Posté le 31 Mar 2008 à 20:30 Bulle
Avatar de Darktib
Membre Ultime

Messages : 4017
GCPoints : 347288
Ca dépend de ce que tu veux tester... Si c'est IA::Astar (pub pub pub pub pub pub :proud: :proud: ) soit tu utilise la dll de la 0.9a, soit tu attend quelques mois la 1.0^^

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 Message lu Posté le 31 Mar 2008 à 20:43 Bulle
Avatar de noob4ever
Explorateur

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 Message lu Posté le 31 Mar 2008 à 20:59 Bulle
Avatar de Darktib
Membre Ultime

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 Message lu Posté le 31 Mar 2008 à 21:04 Bulle
Avatar de gus
Explorateur

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 Message lu Posté le 31 Mar 2008 à 21:14 Bulle
Avatar de Darktib
Membre Ultime

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 Message lu Posté le 31 Mar 2008 à 21:17 Bulle
Avatar de gus
Explorateur

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 :

Sinon je suis partant pour t'aider. Par contre pas tout de suite (3 tonnes de dst...)


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 Message lu Posté le 01 Avr 2008 à 21:38 Bulle
Avatar de gus
Explorateur

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 Message lu Posté le 01 Avr 2008 à 21:56 Bulle
Avatar de Darktib
Membre Ultime

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 Message lu Posté le 01 Avr 2008 à 22:04 Bulle
Avatar de gus
Explorateur

Messages : 371
GCPoints : 52046

Citation :

(a propos : orientation)


:embarassed: je vais corriger sa.

Citation :

a part le fait de mettre les set position en private...


Ce serait pour éviter d'avoir des IA qui "trichent",mais je ne sait pas encore trop quoi faire.


Citation :

Il manque le point player to (x,y,z)... a moins que ce soit le aimat.


Si j'ai bien compris ce que tu veu dire,oui c'est sa.


Citation :

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é.



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 Message lu Posté le 01 Avr 2008 à 22:12 Bulle
Avatar de Darktib
Membre Ultime

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 Message lu Posté le 01 Avr 2008 à 22:23 Bulle
Avatar de gus
Explorateur

Messages : 371
GCPoints : 52046

Citation :

Si les IAs sont bien programmées la triche n'existe pas...


Pas con^^,je les laisse donc en public.

Citation :

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^^


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 :


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^^


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 :


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^^



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 Message lu Posté le 01 Avr 2008 à 22:30 Bulle
Avatar de Darktib
Membre Ultime

Messages : 4017
GCPoints : 347288
Le code dbp que j'avais gerait les murs et tout...
gus Message lu Posté le 01 Avr 2008 à 22:31 Bulle
Avatar de gus
Explorateur

Messages : 371
GCPoints : 52046
:grin: :grin: sa m'eviteras du bouleau!
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 Message lu Posté le 23 Avr 2008 à 23:19 Bulle
Avatar de Darktib
Membre Ultime

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
Répondre
GameCorp - Site d'apprentissage et d'entraide à la création de jeux vidéo.
XHTML Valid 1.1 - Page générée en 0.0451 secondes