Bonjour à tous,
Voilà, je débute avec les vecteurs et je rencontre un problème (je pense que ma compréhension de ces conteneurs est erronée...)
J'ai un plateau divisé en cases de tailles égales sur lequel se déplace un personnage.
Je voudrais suivre son parcours afin de contraindre ses mouvements (ex: mon perso à 10 crédits de déplacements c'est à dire que la somme du poids des cases traversées doit être inférieure ou égale à 10), sachant qu'il doit être possible de revenir en arrière.
En première approche, je me suis dis:
Si le personnage change de case:
Si l'indice de la case est dans le vecteur des cases visitées:
Je le retire du vecteur (<=> retour sur ses pas)
//Je verrais plus tard pour le cas des boucles
Sinon
j'ajoute l'indice de cette case dans le vecteur
Finsi
//Cette partie pose problème mais je verrai plus tard...
Je calcul la somme pondérée du poids des cases visitées
Je regarde le poids des cases adjacentes pour établir un vecteur des cases suivantes autorisées.
Finsi
Ce qui s'est traduit par:
1 2 3 4 5 6 7 8 9 10 11 12
| bool Character::updatePath(Cell cellule){
for (std::vector<Cell>::iterator it = Path.begin(); it != Path.end(); )
{
if (it->getNumber() == cellule.getNumber()){
it = Path.erase(it);
return false;
}else
++it;
}
Path.push_back(cellule);
return true;
} |
Qui est appelée à chaque fois que le personnage change de case.
Le problème c'est que le chemin ne se construit pas correctement...
(Et que le vecteur des cases envisageables est foireux, mais bon un problème à la fois...)
Merci d'avance
@+
Seeme
Edit: il est fort possible que mon algo soit complètement bidon mais sur le moment je manquais de temps (note à moi-même: toujours prendre le temps...), je suis en train de voir si on peut faire plus intelligent (et on peut toujours...)
Partager