Salut tout le monde,
La lib de pathfinding que je code commence à ressembler à quelque chose (enfin à devenir utilisable)
Pour l'instant il fait :
- Résolution de chemin par l'algo A* dans un graphe 2D (une matrice)
- Coûts de déplacement modifiables (si vous voulez que telle ou telle case soit de l'herbe, sable, bitume ou autre, l'algo en tiendra compte)
A venir (peut etre) :
- Résolution dans un univers 3D ? (je vois l'intéret que pour les simulateurs de vol/spatiaux)
- threads? Ca serait sympa même si pour l'instant je le trouve pas lent.
En gros à utiliser ca donne ça :
#include <yasp.h>
#include <iostream>
int main()
{
// First, we create the graph
yasp::CGraph *world;
world = new yasp::CGraph(20);
// Then, we make some squares unwalkable...
for (int y = 1 ; y < 6 ; y++)
world->getSquare(4,y)->setState(yasp::CSquare::ST_UNWALKABLE);
for (int x = 1 ; x < 4 ; x++)
world->getSquare(x,4)->setState(yasp::CSquare::ST_UNWALKABLE);
// ... and we make some others slow
for (int y = 3 ; y < 8 ; y++)
world->getSquare(2,y)->setMoveCost(40);
// We call the finder and give him the graph...
yasp::CPathFinder aStarFinder(world);
// And we solve it.
yasp::CPath shortestPath = aStarFinder.find(world->getSquare(2,2),world->getSquare(8,8));
std::cout << "Chemin choisi :" << std::endl;
for(int i = 0 ; i < shortestPath.getSize() ; i++ )
std::cout << "X = " << shortestPath.getSquareCoords(i).x << " et Y = " << shortestPath.getSquareCoords(i).y << std::endl;
return 0;
}
Mais bon je sais pas si c'est utilisable partout. Comment vous voudriez que ça se présente pour l'utiliser dans votre projet? L'utilisation de matrice limite peut-être les possibilités?
plouf