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.

Le Deal du moment : -45%
WHIRLPOOL OWFC3C26X – Lave-vaisselle pose libre ...
Voir le deal
339 €

3 participants

    Pathfinding

    Cédric
    Cédric


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

    Pathfinding - Page 3 Empty Re: Pathfinding

    Message  Cédric Lun 23 Mar - 16:49

    Bah que le problème se situe dans l'étape fichiers->Config ou dans Config->TypeUnite, il n'en reste pas moins que c'est ton boulot Very Happy
    Je viens de voir que dans le code pour l'initialisation des TypeUnite (que j'ai copié en dessous), il n'est fait mention nulle part de l'initialisation des coûts de déplacement pour chaque type de terrain... C'est sûrement de là que vient le problème ^^ (ma fonction donnant les coûts de déplacement retourne toujours 1.0f parce qu'elle ne trouve jamais les objets TypeTerrain passés en paramètre)
    Code:
    unite[i] = new TypeUnite(lesCarac.configUnite[j].idUnite);
                    unite[i]->commandant = lesCarac.configUnite[j].commandant;
                    unite[i]->hp = lesCarac.configUnite[j].hp;
                    unite[i]->atq = lesCarac.configUnite[j].atq;
                    unite[i]->def = lesCarac.configUnite[j].def;
                    unite[i]->ptsDeplacement = lesCarac.configUnite[j].pointsDeplacement;
                    unite[i]->portee = lesCarac.configUnite[j].distanceAttaque;
    //      unite[i]->coutDeplacement[foret] = 1.5f;
    //      unite[i]->coutDeplacement[montagne] = 1.5f;
    //      unite[i]->modAtq[foret] = -15; // ATQ -15 en forêt (charge impossible)
    //      unite[i]->modAtq[montagne] = -15; // ATQ -15 en montagne (charge impossible)
    //      unite[i]->modDef[foret] = -5; // DEF -5 en forêt
    //      unite[i]->modDef[montagne] = -5; // DEF -5 en montagne
                    GestionnaireImages::getInstance().chargerImageTypeUnite(*unite[i], lesCarac.configUnite[j].imageUnite);
                    typesUnite.push_back(unite[i]);
    Cédric
    Cédric


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

    Pathfinding - Page 3 Empty Re: Pathfinding

    Message  Cédric Lun 23 Mar - 17:02

    Un petit truc dans le pathfinding dont la correction ne devrait pas prendre plus d'une minute : dans possibilitesDeplacement, le paramètre ptsDeplacementRestant doit être un float et non un int. (pour qu'une unité ayant 5 points de déplacement puisse en faire 3 à 1.5 par ex ^^)
    Quentin
    Quentin


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

    Pathfinding - Page 3 Empty Re: Pathfinding

    Message  Quentin Lun 23 Mar - 17:03

    Cédric a écrit:Bah que le problème se situe dans l'étape fichiers->Config ou dans Config->TypeUnite, il n'en reste pas moins que c'est ton boulot Very Happy
    Je viens de voir que dans le code pour l'initialisation des TypeUnite (que j'ai copié en dessous), il n'est fait mention nulle part de l'initialisation des coûts de déplacement pour chaque type de terrain... C'est sûrement de là que vient le problème ^^ (ma fonction donnant les coûts de déplacement retourne toujours 1.0f parce qu'elle ne trouve jamais les objets TypeTerrain passés en paramètre)
    Code:
    unite[i] = new TypeUnite(lesCarac.configUnite[j].idUnite);
                    unite[i]->commandant = lesCarac.configUnite[j].commandant;
                    unite[i]->hp = lesCarac.configUnite[j].hp;
                    unite[i]->atq = lesCarac.configUnite[j].atq;
                    unite[i]->def = lesCarac.configUnite[j].def;
                    unite[i]->ptsDeplacement = lesCarac.configUnite[j].pointsDeplacement;
                    unite[i]->portee = lesCarac.configUnite[j].distanceAttaque;
    //      unite[i]->coutDeplacement[foret] = 1.5f;
    //      unite[i]->coutDeplacement[montagne] = 1.5f;
    //      unite[i]->modAtq[foret] = -15; // ATQ -15 en forêt (charge impossible)
    //      unite[i]->modAtq[montagne] = -15; // ATQ -15 en montagne (charge impossible)
    //      unite[i]->modDef[foret] = -5; // DEF -5 en forêt
    //      unite[i]->modDef[montagne] = -5; // DEF -5 en montagne
                    GestionnaireImages::getInstance().chargerImageTypeUnite(*unite[i], lesCarac.configUnite[j].imageUnite);
                    typesUnite.push_back(unite[i]);


    ahhhhhhh oué :p j'avais complètement zapé ça, ça fais si longtemps :p
    Je corrige Smile
    avatar
    sebastien


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

    Pathfinding - Page 3 Empty Re: Pathfinding

    Message  sebastien Lun 23 Mar - 17:23

    C'est bien la partie de code que j'avais lu et dont je parlais dans mon post ^^""

    ouai cedric, juste un oubli, ce sera corriger.
    Quentin
    Quentin


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

    Pathfinding - Page 3 Empty Re: Pathfinding

    Message  Quentin Lun 23 Mar - 17:59

    voila, je pense que c'est bon, test et dis moi Smile

    Code:
                if (lesCarac.configUnite[j].idUnite == lesCarac.configScenario[leNumDuScenario].lesIdUnites[i])
                {
                    unite[i] = new TypeUnite(lesCarac.configUnite[j].idUnite);
                    unite[i]->commandant = lesCarac.configUnite[j].commandant;
                    unite[i]->hp = lesCarac.configUnite[j].hp;
                    unite[i]->atq = lesCarac.configUnite[j].atq;
                    unite[i]->def = lesCarac.configUnite[j].def;
                    unite[i]->ptsDeplacement = lesCarac.configUnite[j].pointsDeplacement;
                    unite[i]->portee = lesCarac.configUnite[j].distanceAttaque;

                    for (int k = 0; k < lesCarac.configCarte[indexCarte].nbTerrainUse; k++)
                    {
                        if (terrain[k]->getNom() == "Ch")
                        {
                            unite[i]->coutDeplacement.insert( pair<TypeTerrain*,float>(terrain[k] , lesCarac.configUnite[j].cout_chateau));
                            continue;
                        }
                        if (terrain[k]->getNom() == "Ep")
                        {
                            unite[i]->coutDeplacement.insert( pair<TypeTerrain*,float>(terrain[k] , lesCarac.configUnite[j].cout_eaup));
                            continue;
                        }
                        if (terrain[k]->getNom() == "Fo")
                        {
                            unite[i]->coutDeplacement.insert( pair<TypeTerrain*,float>(terrain[k] , lesCarac.configUnite[j].cout_foret));
                            continue;
                        }
                        if (terrain[k]->getNom() == "Ma")
                        {
                            unite[i]->coutDeplacement.insert( pair<TypeTerrain*,float>(terrain[k] , lesCarac.configUnite[j].cout_marais));
                            continue;
                        }
                        if (terrain[k]->getNom() == "Mt")
                        {
                            unite[i]->coutDeplacement.insert( pair<TypeTerrain*,float>(terrain[k] , lesCarac.configUnite[j].cout_montagne));
                            continue;
                        }
                        if (terrain[k]->getNom() == "Pl")
                        {
                            unite[i]->coutDeplacement.insert( pair<TypeTerrain*,float>(terrain[k] , lesCarac.configUnite[j].cout_plaine));
                            continue;
                        }
                        if (terrain[k]->getNom() == "Pp")
                        {
                            unite[i]->coutDeplacement.insert( pair<TypeTerrain*,float>(terrain[k] , lesCarac.configUnite[j].cout_eaupp));
                            continue;
                        }
                    }

                    GestionnaireImages::getInstance().chargerImageTypeUnite(*unite[i], lesCarac.configUnite[j].imageUnite);
                    typesUnite.push_back(unite[i]);
                }

    j'ai juste r'ajouté la boucle avec tout les if Smile
    Code:
    for (int k = 0; k < lesCarac.configCarte[indexCarte].nbTerrainUse; k++)
    Cédric
    Cédric


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

    Pathfinding - Page 3 Empty Re: Pathfinding

    Message  Cédric Mar 24 Mar - 0:35

    Arf, je reviens à peine d'une mission commando hamburger + fromage, faut que je digère là... Very Happy

    Je te dis ça demain ^^
    Cédric
    Cédric


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

    Pathfinding - Page 3 Empty Re: Pathfinding

    Message  Cédric Dim 29 Mar - 21:31

    Houla, le "demain" a pris du retard à ce que je vois ^^

    Bon... Je vais regarder ça pour de bon cette fois-ci.

    Sinon, nouveau bug : lorsqu'on a à faire à une carte plus large que haute (52x42 dans mon cas), un groupe pour qui x > 42 ne peut pas se déplacer dans les cases pour lesquelles x <= 42. Il s'agit forcément d'une confusion entre hauteur et largeur à un endroit, qui vient du pathfinding je pense, mais je n'en suis pas tout à fait sûr non plus...

    Contenu sponsorisé


    Pathfinding - Page 3 Empty Re: Pathfinding

    Message  Contenu sponsorisé

      Sujets similaires

      -

      La date/heure actuelle est Jeu 2 Mai - 7:56