TER M1 Jeu de stratégie historique

Vous souhaitez réagir à ce message ? Créez un compte en quelques clics ou connectez-vous pour continuer.
TER M1 Jeu de stratégie historique

Forum du sujet de TER : Algorithme min-max dans les jeux de stratégie historique, pour les étudiants de M1 de Montpellier II 2008-2009.

-29%
Le deal à ne pas rater :
PC portable – MEDION 15,6″ FHD Intel i7 – 16 Go / 512Go (CDAV : ...
499.99 € 699.99 €
Voir le deal

3 participants

    Pathfinding

    avatar
    sebastien


    Messages : 137
    Date d'inscription : 24/01/2009

    Pathfinding - Page 2 Empty Re: Pathfinding

    Message  sebastien Dim 15 Fév - 23:46

    Bah j'y peut rien chui passé en mode berserk de boulot la Sad mais je vais bien devoir m'arrêter vu que a priori je suis au chômage technique.
    Cédric
    Cédric


    Messages : 205
    Date d'inscription : 24/01/2009

    Pathfinding - Page 2 Empty Re: Pathfinding

    Message  Cédric Dim 15 Fév - 23:49

    Si tu tiens à bosser, t'as aussi du Java3D à faire ^^
    avatar
    sebastien


    Messages : 137
    Date d'inscription : 24/01/2009

    Pathfinding - Page 2 Empty Re: Pathfinding

    Message  sebastien Dim 15 Fév - 23:52

    Ouai nan si je me met à faire du java la ça va complètement casser mon combo de c++ Sad je préfère continuer dans ma lancer Razz (puis c'est pas comme si le projet d'ihm m'intéressait énormément ^^)
    Cédric
    Cédric


    Messages : 205
    Date d'inscription : 24/01/2009

    Pathfinding - Page 2 Empty Re: Pathfinding

    Message  Cédric Mer 18 Fév - 14:54

    Il m'a semblé comprendre que tu as fait deux choses :
    - le pathfinding de base, qui te retourne un chemin entre deux points => fonction aStar(...)
    - une variante qui permet d'avoir la liste des cases auxquelles un groupe peut accéder à partir d'une case donnée. Mais pour ça, on fait comment ?

    edit : je pense aussi à un autre truc. Lorsque le moteur de jeu doit dire si un archer peut attaquer à distance ou non, ça passe aussi par le pathfinding, mais ta fonction aStar ne peut pas être utilisée (il faut que toutes les cases coûtent 1.0). Il faudrait donc une variante pour ce cas là. D'ailleurs, il y a l'altitude à prendre aussi en compte. Petit rappel :

    Si on a :
    - Montagne = altitude de 2
    - Plaine = altitude de 0
    - Archer = portée de 5

    Alors :
    - un archer sur une montagne peut atteindre des plaines situées à une distance de 7 au max
    - un archer sur une plaine peut atteindre des montagnes situées à une distance de 3 au max
    avatar
    sebastien


    Messages : 137
    Date d'inscription : 24/01/2009

    Pathfinding - Page 2 Empty Re: Pathfinding

    Message  sebastien Mer 18 Fév - 15:50

    - une variante qui permet d'avoir la liste des cases auxquelles un groupe peut accéder à partir d'une case donnée. Mais pour ça, on fait comment ?



    Pathfinding* pf = new Pathfinding(); //on creer l'objet pf
    type = &(GestionnaireDonnees::getInstance().getPartie().getGroupesJoueur(1)[0]->getTypeUnite()); //(juste pour récupérer un type au hasard, le tout c'est d'avoir un type à donner)
    debut.x=1;//on créer une struct coordonnées pour avoir la position de départ de l'unité
    debut.y=3;

    plop = pf->posibilitesDeplacement(debut,type); //puis l'appelle

    je ferait ça pour les archers (mais au final je vais pas implémenter la moitié des règles de jeu dans le pf ? ^^)
    Cédric
    Cédric


    Messages : 205
    Date d'inscription : 24/01/2009

    Pathfinding - Page 2 Empty Re: Pathfinding

    Message  Cédric Mer 18 Fév - 15:56

    J'ai pas tout compris. Pourquoi une fonction "posibilitesDeplacement" pour des problèmes de portée ?
    Et si tu veux qu'à un moment on passe un type au hazard à ta fonction, ça serait plutôt à la fonction de le faire au début de son code non ?

    (mais au final je vais pas implémenter la moitié des règles de jeu dans le pf ? ^^)
    J'aurais plutôt dit les 3/4... Very Happy
    avatar
    sebastien


    Messages : 137
    Date d'inscription : 24/01/2009

    Pathfinding - Page 2 Empty Re: Pathfinding

    Message  sebastien Mer 18 Fév - 16:00

    sebastien a écrit:- une variante qui permet d'avoir la liste des cases auxquelles un groupe peut accéder à partir d'une case donnée. Mais pour ça, on fait comment ?



    Pathfinding* pf = new Pathfinding(); //on creer l'objet pf
    type = &(GestionnaireDonnees::getInstance().getPartie().getGroupesJoueur(1)[0]->getTypeUnite()); //(juste pour récupérer un type au hasard, le tout c'est d'avoir un type à donner)
    debut.x=1;//on créer une struct coordonnées pour avoir la position de départ de l'unité
    debut.y=3;

    plop = pf->posibilitesDeplacement(debut,type); //puis l'appelle


    comme je l'ai dit la je parle de la fonction qui renvoie la liste des cases ou l'on peut se déplacer.

    et non c'est pas un type au hasard qu'on veux, c'est le type de l'unité dont on cherche le déplacement. si je veux savoir ou peut se déplacer un archer en (3,3) je dois appeler la fonction deplacementPossible((3,3),archer)
    le programme pourrait aller récupérer lui même le type de l'unité présente en (3,3) mais j'ai fait ca comme ca on peut appeler cette méthode même si on a pas réélement d'archer en (3,3) si on a besoin d'une simulation



    edit : pour les portée pour le moment j'ai encore rien fait pour ça. je vais le faire
    Cédric
    Cédric


    Messages : 205
    Date d'inscription : 24/01/2009

    Pathfinding - Page 2 Empty Re: Pathfinding

    Message  Cédric Mer 18 Fév - 16:04

    Je pensais au calcul de la portée, et donc que s'il fallait bidouiller un truc pour passer un type au hasard, il fallait mieux le cacher profondément dans le code Very Happy

    Hem... Enfin bon, ok ^^
    avatar
    sebastien


    Messages : 137
    Date d'inscription : 24/01/2009

    Pathfinding - Page 2 Empty Re: Pathfinding

    Message  sebastien Mer 18 Fév - 18:02

    mais en fait il est ou le pathfinding dans le calcul de la portée ? vu que pour la portée toute les cases sont de poids 1 c'est plus du pathfinding :/
    Cédric
    Cédric


    Messages : 205
    Date d'inscription : 24/01/2009

    Pathfinding - Page 2 Empty Re: Pathfinding

    Message  Cédric Mer 18 Fév - 18:06

    Euuuuh oui, laisse tomber, je le ferai :p (et merde, j'ai raté une occasion de ne rien faire Sad)
    Cédric
    Cédric


    Messages : 205
    Date d'inscription : 24/01/2009

    Pathfinding - Page 2 Empty Re: Pathfinding

    Message  Cédric Ven 13 Mar - 15:14

    T'en es où pour ces deux trucs ?
    Code:
    int calculerDistance(Coordonnees case1, Coordonnees case2) { return 1; }
    vector<Coordonnees> calculerDeplacementsPossibles(Coordonnees coordGroupe, TypeUnite* typeUnite) {return vector<Coordonnees>();};
    Si je laisse les choses comme ça, ça ne va pas être génial Very Happy (et je vais bientôt avoir besoin des vraies fonctions ^^)
    avatar
    sebastien


    Messages : 137
    Date d'inscription : 24/01/2009

    Pathfinding - Page 2 Empty Re: Pathfinding

    Message  sebastien Ven 13 Mar - 17:38

    Bah, les déplacements possible y sont depuis des lustres nan ? la méthode s'appelle posibilitesDeplacement

    calculer distances, heu oublié ça. Je m'y mettrais dès que jai fini l'ihm
    Cédric
    Cédric


    Messages : 205
    Date d'inscription : 24/01/2009

    Pathfinding - Page 2 Empty Re: Pathfinding

    Message  Cédric Ven 13 Mar - 20:51

    Depuis des lustres, mais juste chez toi non ? A moins que j'ai loupé un chapitre Very Happy

    Enfin bon, m'en fous pour le moment, je vais manger pig
    avatar
    sebastien


    Messages : 137
    Date d'inscription : 24/01/2009

    Pathfinding - Page 2 Empty Re: Pathfinding

    Message  sebastien Ven 13 Mar - 22:44

    Si si elle était la... perdue dans les copier coller.... Evil or Very Mad

    Heureusement j'ai une sauvegarde chez moi (vive les dépôts svn quand même Sad )

    http://www.megaupload.com/?d=EGNSLHLZ
    Cédric
    Cédric


    Messages : 205
    Date d'inscription : 24/01/2009

    Pathfinding - Page 2 Empty Re: Pathfinding

    Message  Cédric Dim 15 Mar - 15:50

    Quelques bugs :

    - la fonction aStar se moque totalement de la distance du chemin à parcourir. Une unité avec 5 pts de déplacement peut se déplacer de 20 cases si on le demande.

    - cette même fonction plante régulièrement, au niveau de ce code là :
    Code:
            //on remet le chemin a l'endroit
            vector<Coordonnees>::iterator it;
            it=chemin.end();
            while(it!=chemin.begin())
            {
                chemin.push_back(*it);
                chemin.erase(it);
                it--;
            }
            chemin.push_back(chemin.front());
            chemin.erase(chemin.begin());
    Ça doit être que l'itérateur sort des bornes à un moment. J'ai remplacé ça par :
    Code:
            vector<Coordonnees> cheminInverse;
            cheminInverse.reserve(chemin.size());
            for(int i = chemin.size() - 1; i >= 0; i--)
                cheminInverse.push_back(chemin[i]);
    (au fait, pour le genre de truc que tu as fait, il existe des reverse_iterator :p)

    - la fonction posibilitesDeplacement retourne toujours un vecteur vide, que le groupe en question fasse partie d'un troupeau ou soit isolé.
    avatar
    sebastien


    Messages : 137
    Date d'inscription : 24/01/2009

    Pathfinding - Page 2 Empty Re: Pathfinding

    Message  sebastien Dim 15 Mar - 16:03

    Connaissait pas les reverse ^^

    Pour les déplacements de 20cases me semblait avori tester mais visiblement non

    Pour els possibilités de déplacements, montre moi ac quelles données tu le lance, ça a tjr marché chez moi.
    Cédric
    Cédric


    Messages : 205
    Date d'inscription : 24/01/2009

    Pathfinding - Page 2 Empty Re: Pathfinding

    Message  Cédric Dim 15 Mar - 16:14

    http://xerius.nuxit.net/glouglou/screenshot.jpg

    J'ai testé pour tous les groupes présents ici, et niet :p (casesAccessibles.size() == 0 à la fin, et j'ai vérifié que les paramètres passés en entrée soient les bons).
    J'ai aussi ajouté un groupe totalement séparé des autres pour tester, et pareil :/
    avatar
    sebastien


    Messages : 137
    Date d'inscription : 24/01/2009

    Pathfinding - Page 2 Empty Re: Pathfinding

    Message  sebastien Dim 15 Mar - 16:16

    Tu l'appelle comment la méthode ?
    Cédric
    Cédric


    Messages : 205
    Date d'inscription : 24/01/2009

    Pathfinding - Page 2 Empty Re: Pathfinding

    Message  Cédric Dim 15 Mar - 16:35

    Code:
    std::vector<Coordonnees> Regles::calculerDeplacementsPossibles(Coordonnees& coordGroupe) {

        /* On vérifie que les coordonnées choisies soient celles d'une case utilisable de la carte (cad pas
        située sur la bordure, ni à l'extérieur */
        if(coordGroupe.x <= 0 || coordGroupe.y <= 0 || coordGroupe.x >= partie.getLargeurCarte() - 1 ||
                coordGroupe.y >= partie.getHauteurCarte() - 1)
            return vector<Coordonnees>();

        /* On vérifie qu'il y ait bien un groupe sur la case choisie */
        Groupe* groupe = partie.getGroupe(coordGroupe);
        if(groupe == NULL)
            return vector<Coordonnees>();

        /* On peut enfin lister les déplacements possibles */
        TypeUnite* type = &groupe->getTypeUnite();

        Pathfinding p;
        return p.posibilitesDeplacement(coordGroupe,type);
    }
    avatar
    sebastien


    Messages : 137
    Date d'inscription : 24/01/2009

    Pathfinding - Page 2 Empty Re: Pathfinding

    Message  sebastien Dim 15 Mar - 16:53

    Heu sauf que si j'avais voulu faire ça je l'aurais fait... J'ai justement mis que je vérifie pas qu'il y ai de groupes sur la case sélectionné pour pouvoir lancer des simulations.
    Cédric
    Cédric


    Messages : 205
    Date d'inscription : 24/01/2009

    Pathfinding - Page 2 Empty Re: Pathfinding

    Message  Cédric Dim 15 Mar - 17:07

    Rien n'oblige à se servir de cette fonction pour utiliser la tienne, je ne vois pas où est le problème...
    avatar
    sebastien


    Messages : 137
    Date d'inscription : 24/01/2009

    Pathfinding - Page 2 Empty Re: Pathfinding

    Message  sebastien Dim 22 Mar - 17:08

    http://www.megaupload.com/?d=FISXFDMC


    voici pour la petite correction.


    Sinon :
    - Quentin, j'ai l'impression que tu charge pas les couts de déplacements de chaque terrain dans les unités. Je reçoit toujours 1, et j'ai pas vu de ligne pour les charger dans ta fonction.
    - cedric : on peut cliquer et se déplacer en dehors de la surbrillance.
    Quentin
    Quentin


    Messages : 120
    Date d'inscription : 24/01/2009

    Pathfinding - Page 2 Empty Re: Pathfinding

    Message  Quentin Dim 22 Mar - 19:03

    sebastien a écrit:
    - Quentin, j'ai l'impression que tu charge pas les couts de déplacements de chaque terrain dans les unités. Je reçoit toujours 1, et j'ai pas vu de ligne pour les charger dans ta fonction.

    pourtant dans void Config::lireFichierConfigUnite(const char* filepath) :
    Code:
     if (key == "cout_plaine")
    {
        lesConfig.configUnite[lesConfig.nbUnite].cout_plaine = atof(value.c_str());
        continue;
    }
    if (key == "cout_montagne")
    {
    .....

    j'ai testé et ça marche

    Code:
    cout << "cout marais " << lesCarac.configUnite[2].cout_marais << " " << lesCarac.configUnite[2].idUnite << endl;

    cout marais 1.5 cavalier_leger
    Cédric
    Cédric


    Messages : 205
    Date d'inscription : 24/01/2009

    Pathfinding - Page 2 Empty Re: Pathfinding

    Message  Cédric Lun 23 Mar - 3:50

    Ce que tu testes, c'est "lesCarac", ça ne dit pas que la création des objets "Groupe" se fait correctement au final :p (mais autant c'est ma fonction pour obtenir le coût qui merde Very Happy)
    Quentin
    Quentin


    Messages : 120
    Date d'inscription : 24/01/2009

    Pathfinding - Page 2 Empty Re: Pathfinding

    Message  Quentin Lun 23 Mar - 4:25

    tout ce que je dis, c'est que je charge bien les cout de déplacement sur les terrains. Après voila cheers

    Contenu sponsorisé


    Pathfinding - Page 2 Empty Re: Pathfinding

    Message  Contenu sponsorisé

      Sujets similaires

      -

      La date/heure actuelle est Jeu 2 Mai - 15:52