MapNode::MapNode(ofVec2f inValue) { setPos(ofVec2f(inValue.x*50,inValue.y*50)); setCameFrom(ofVec2f(-1, -1)); walkValue = 1; curScore = 9999; visited = false; }
Coor aStar(int xDep, int yDep , int xArr, int yArr, Point list) { int startId,goalId; calculDepartArrivee(list,xDep,yDep,xArr,yArr,&startId,&goalId);/// int danger; int x,y,yr;//varialble d'id pas de coordonées int tentativeGscore,tentativeIsBetter; Point p =NULL; ListeFils f = NULL; Set presqueResultat = NULL; Coor resultat = NULL; Set closedSet = NULL; Set openSet = NULL; addSet(&openSet , startId); Came cameFrom = NULL; Data data = NULL; data = setGscore(startId, 0 ,data); data = setHscore(startId, heuristicCostEstimate(startId,goalId,list),data); data = setFscore(startId, data->g + data->h, data); while (openSet != NULL) { x = lowestFscore(openSet,data); if ( x == goalId) { presqueResultat = reconstruireChemin(cameFrom,startId,goalId); resultat = setToCoor(presqueResultat,list); resultat = simplifierResultat(resultat); addCoor(&resultat,0,xArr,yArr); resultat = inverser(resultat); return resultat; } openSet = removeIdSet(openSet,x); addSet(&closedSet, x); p = sePlacerEn(x,list); for ( f = p->lPt ; f != NULL ; f = f->queue )//pour tout les y voisins de x { y = f->id; yr = y; if ( y > 1000) { y = y-1000; } if ( isInSet(closedSet,y) || p->enable == 0) { continue; } tentativeGscore = getGscore(x,data) + distBetween(x,yr); if ( isInSet(openSet,y) == 0) { addSet(&openSet,y); data = setHscore(y,heuristicCostEstimate(y,goalId,list),data); tentativeIsBetter = 1; } else if (tentativeGscore <= getGscore(y,data)) { tentativeIsBetter = 1; } else { tentativeIsBetter = 0; } if ( tentativeIsBetter == 1) { cameFrom = setCameFrom( y , x , cameFrom); data = setGscore(y,tentativeGscore,data); danger = p->enable; if (danger == 3) danger = 0; else if (danger == 2) danger = 100; else if (danger == 1) danger = 500; data = setFscore(y,getGscore(y,data) + getHscore(y,data) + danger, data); } } } return NULL;// = erreur }