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 à ne pas rater :
Cartes Pokémon : la prochaine extension Pokémon sera EV6.5 Fable ...
Voir le deal

3 participants

    --Le code--

    Cédric
    Cédric


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

    --Le code-- Empty --Le code--

    Message  Cédric Mer 4 Mar - 20:16

    Le voilà :
    http://www.megaupload.com/?d=L4RS4B9Y

    C'est l'assemblage des codes de chacun, avec ce que j'ai fait depuis en plus. Mais c'est toujours en chantier, je poste juste ça parce que Sébastien le veut ^^

    ps : je viens de voir que j'ai complètement oublié de passer mes "{" à la ligne Sad Bon bah, ça sera pour la prochaine fois ^^
    Quentin
    Quentin


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

    --Le code-- Empty Re: --Le code--

    Message  Quentin Jeu 5 Mar - 2:47

    pas grave le formatter de code blocks le fait tout seul Wink
    Quentin
    Quentin


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

    --Le code-- Empty Re: --Le code--

    Message  Quentin Jeu 12 Mar - 22:45

    tu le lance comment le bordel ? en ligne de commande ?
    main(int argc, char** argv, char** env) ????????
    Cédric
    Cédric


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

    --Le code-- Empty Re: --Le code--

    Message  Cédric Ven 13 Mar - 15:09

    Pas besoin, tu peux passer l'argument (ex: Scenario1) dans Code::Blocks (Project > Set program's arguments...). Il faudra changer ça à un moment, mais bon, tant qu'on reste sur l'IDE ça va ^^
    Quentin
    Quentin


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

    --Le code-- Empty Re: --Le code--

    Message  Quentin Sam 14 Mar - 14:49

    ça fait une fenêtre toute noire, c'est normal ?
    Cédric
    Cédric


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

    --Le code-- Empty Re: --Le code--

    Message  Cédric Sam 14 Mar - 15:31

    Oui, j'avais juste fait une fenêtre avec rien dedans pour vérifier que ça ne merdait pas avec SFML ^^
    Cédric
    Cédric


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

    --Le code-- Empty Re: --Le code--

    Message  Cédric Lun 16 Mar - 20:39

    Voilà le code à jour :
    http://xerius.nuxit.net/glouglou/ter-minmax_%282009_03_16%29.rar

    Commandes du jeu :

    1) Valables tout le temps :
    - Entrée => finir le tour
    - Echap => quitter le jeu

    2) Valables quand aucun groupe n'est sélectionné :
    - clic gauche sur une case => sélectionner le groupe sur cette case

    3) Valables quand un groupe a été préalablement sélectionné :
    - clic gauche sur une case vide => déplacement du groupe, si possible
    - clic gauche sur un groupe allié => sélectionner ce groupe à la place du groupe courant
    - clic gauche sur un groupe ennemi => attaquer ce groupe, si possible (l'attaque n'est faite qu'à la fin du tour)
    - clic droit sur un groupe allié => fusionner le groupe sélectionné avec celui-ci (si possible)
    - clic droit sur une case vide collée à celle du groupe sélectionné => diviser ce groupe. La moitié partira sur la case choisie.


    Bon, je préviens maintenant pour éviter le choc : il manque des fonctionnalités, il y a un gros paquet de bugs, et il arrive même au programme de fermer d'un coup. C'est donc pas le top pour jouer, mais c'est suffisant pour tester pas mal de trucs
    Quentin
    Quentin


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

    --Le code-- Empty Re: --Le code--

    Message  Quentin Mar 17 Mar - 18:48

    j'ai une erreur quand je recompile ton truc, c'est normale ?

    Code:
    C:\...\ter-minmax\gui\Fenetre.cpp||In constructor `Fenetre::Fenetre()':|
    C:\...\ter-minmax\gui\Fenetre.cpp|5|error: cannot allocate an object of type `PlateauJeu'|
    C:\...\ter-minmax\gui\Fenetre.cpp|5|error:  because the following virtual functions are abstract:|
    C:\Program Files\CodeBlocks\SFML-1.4\include\SFML\Graphics\Drawable.hpp|341|error:  virtual void sf::Drawable::Render(sf::RenderTarget&) const|
    ||=== Build finished: 3 errors, 1 warnings ===|


    sinon quand je lance l'exe direct sans compiler, j'ai une erreur de point d'entrée de procédure introuvable dans la bibliothèque sfml-graphics.dll

    cheers
    Cédric
    Cédric


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

    --Le code-- Empty Re: --Le code--

    Message  Cédric Mar 17 Mar - 19:33

    Ah ben finalement, j'avais oublié de dire certains trucs Very Happy

    L'erreur à la compilation est due au fait que tu utilises la version 1.4 de SFML, alors que je suis repassé à la version 1.3 (des bugs sont apparus avec la version 1.4, et je n'ai pas réussi à compiler la version patchée sur leur SVN). Avec la version 1.3, normalement ça roule (avec pas mal de warnings, mais ça roule ^^)

    L'erreur au lancement de l'exe, c'est parce que je n'ai pas mis les .dll dans le dossier du projet (elles doivent être présentes dans ter-minmax\bin\Debug et/ou ter-minmax\bin\Release pour que ça se lance bien.

    Apparemment, il faut lancer le programme en passant par Code::Blocks, sans quoi l'appli se ferme aussitôt. Je viens de le remarquer à l'instant, vu que je n'avais utilisé que Code::Blocks jusque là :p
    Quentin
    Quentin


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

    --Le code-- Empty Re: --Le code--

    Message  Quentin Mer 18 Mar - 18:16

    on la chope où la 1.3 ?
    Cédric
    Cédric


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

    --Le code-- Empty Re: --Le code--

    Message  Cédric Mer 18 Mar - 18:51

    Quentin
    Quentin


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

    --Le code-- Empty Re: --Le code--

    Message  Quentin Mer 18 Mar - 20:10

    Pourquoi ça marche avec la 1.3 et pas la 1.4 ? geek
    Cédric
    Cédric


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

    --Le code-- Empty Re: --Le code--

    Message  Cédric Jeu 19 Mar - 14:10

    Un problème au niveau de l'affichage des textes est apparu avec la 1.4, et un autre truc aussi je crois... C'est corrigé dans la dernière version du SVN, mais comme je n'ai pas réussi à la compiler (sans essayer très longtemps...) je suis allé au plus simple Very Happy
    Cédric
    Cédric


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

    --Le code-- Empty Re: --Le code--

    Message  Cédric Lun 23 Mar - 16:35

    http://xerius.nuxit.net/glouglou/ter-minmax_%282009_03_23%29.rar

    Peu de modifications par rapport à la dernière fois, mais je préfère quand même tout envoyer pour qu'on soit sûr d'avoir la même version :
    - intégration de la dernière mise à jour de Sébastien
    - intégration du boulot de Quentin (j'ai remplacé les groupes par des coordonnées, et j'ai copié le code de l'algo de combat)
    - modification (vite fait) de l'image de surbrillance, pour qu'elles soient aussi visibles sur les montagnes

    Comme pour la dernière fois, je n'ai pas copié les dll pour gagner de la place.
    Cédric
    Cédric


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

    --Le code-- Empty Re: --Le code--

    Message  Cédric Lun 30 Mar - 1:25

    Une nouvelle version, avec les dll et tout cette fois-ci :p
    http://xerius.nuxit.net/glouglou/ter-minmax_(2009_03_30).rar

    Mises à jour :
    - le problème de sélection de cases est normalement résolu (sauf celui des cases se trouvant en dehors de la carte)
    - ajout dans la classe Partie d'une méthode getCoord(Groupe&), parce que c'est quand même pas très pratique de devoir chercher les coordonnées "à la main"... Ajout d'une méthode supprimerGroupe(const Coordonnees& pos) aussi dans la foulée, mais ça vous vous en foutez :p
    - j'ai complété le code de Quentin pour prendre en compte ça. Avant :
    Code:
    joueurNum[i].push_back(new Groupe(*unite[k], atoi(lesCarac.configScenario[leNumDuScenario].leScenar[j][3].c_str()), atoi(lesCarac.configScenario[leNumDuScenario].leScenar[j][4].c_str())));
                        partie.groupesParCase[atoi(lesCarac.configScenario[leNumDuScenario].leScenar[j][0].c_str())][atoi(lesCarac.configScenario[leNumDuScenario].leScenar[j][1].c_str())] = joueurNum[i].back();
                        break;
    Après :
    Code:
                        joueurNum[i].push_back(new Groupe(*unite[k], atoi(lesCarac.configScenario[leNumDuScenario].leScenar[j][3].c_str()), atoi(lesCarac.configScenario[leNumDuScenario].leScenar[j][4].c_str())));
                       
                        coordGroupe.x = atoi(lesCarac.configScenario[leNumDuScenario].leScenar[j][0].c_str());
                        coordGroupe.y = atoi(lesCarac.configScenario[leNumDuScenario].leScenar[j][1].c_str());
                       
                        partie.groupesParCase[coordGroupe.x][coordGroupe.y] = joueurNum[i].back();
                        partie.coordGroupes[joueurNum[i].back()] = coordGroupe;
                        break;
    (coordGroupe est déclaré juste avant la tonne de for)

    - un groupe mort au combat disparaît maintenant de la carte comme il faut.
    - nouvelle carte, accessible via le scénario nommé "Scenario1" (l'ancien scénario est toujours présent : "Scenario2")
    - modifications des stats des unités lourdes : le fait qu'elles ne puissent pas aller dans l'eau du tout est assez bof en fait (ça interdit l'usage de cartes comme la nouvelle que je viens de créer)

    Bugs, problèmes, etc :
    - Un clic en dehors de la carte fait toujours planter le programme.
    - Une attaque est acceptée quelque soit le nombre de cases séparant les groupes impliqués
    - Si un groupe se déplace sur une case voisine d'un groupe ennemi, son déplacement doit s'arrêter là. Mais on peut contourner cela en déplaçant ses groupes case par case.
    - La fin de partie n'est pas détectée. Mais c'est pas super important pour le moment
    - Ma classe Partie est une vraie horreur. Pour le moment, elle est inaccessible en écriture au moteur graphique, mais les classes du moteur de jeu peuvent faire tout ce qu'elles veulent dessus, ce qui est un bien pourri. C'est pas comme si ça ne fonctionnait pas, mais bon, il faudra que je gère ça un peu plus sérieusement.
    - les unités de coordonnée x > 42 ne peuvent se déplacer dans des cases de coordonnées x <= 42
    Cédric
    Cédric


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

    --Le code-- Empty Re: --Le code--

    Message  Cédric Ven 1 Mai - 13:42

    Mise à jour :
    http://xerius.nuxit.net/glouglou/ter-minmax2_(2009_05_01).rar

    Ça fait des siècles que tout devrait être mis en place, mais ça ne l'est toujours pas Sad (pas eu trop le temps hier et avant-hier). Il y a quand même quelques changements par rapport à la dernière version :
    - c/c de la dernière version de l'algo de combat
    - petits changements dans l'interface : cliquer en dehors de la carte ne fait plus planter le programme, le zoom/dezoom peut se faire à la molette, et on peut scroller à la souris
    - le principe de stratégie et d'ordres pour les unités n'est pas vraiment en place. Par contre, on peut quand même faire de l'IA au sein de la fonction IA::jouer(). J'ai testé un comportement bidon (toutes les unités se déplacent d'une case vers le haut à chaque tour) qui marche.

    Problèmes :
    - manque de motivation Very Happy
    - il arrive que le programme plante lors à la fermeture, de deux manières différentes. N'étant pas habitué au débogage en C++, ça risque de m'emmerder.
    - L'action de l'IA prend un temps fou alors que c'est tout simple. J'ai du oublier un sleep quelque part je suppose, ou du moins j'espère... ^^

    edit : pour régler ce dernier problème, il suffit de commenter la ligne 16 du fichier gui/MoteurGraphique
    Code:
    fenetre.SetFramerateLimit(25);
    avatar
    sebastien


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

    --Le code-- Empty Re: --Le code--

    Message  sebastien Ven 1 Mai - 16:15

    Si on bourine entrée comme un dingue ca freeze pendant un sacré moment (même après avoir commenté la ligne).
    Si on dézoom comme un dingue on perd de vue le plateau de jeu et on le retrouve plus jamais.
    Cédric
    Cédric


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

    --Le code-- Empty Re: --Le code--

    Message  Cédric Ven 1 Mai - 16:36

    Je sais, mais la flemme :'(
    (en plus pour les freeze, c'est pas si évident que ça à corriger... Faudrait avant tout une architecture moins pourrie ^^)

    Ce qui m'emmerde le plus en fait, c'est les plantages, parce que ça, on ne peut pas le cacher lors de la présentation :p
    avatar
    sebastien


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

    --Le code-- Empty Re: --Le code--

    Message  sebastien Lun 11 Mai - 22:04

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


    dernière version du programme. Les unités se fight en plein milieu de la map quand elles se croisent, et les archers attaquent a distance.
    Test sur le scénario3 comme je l'ai mis la, ca rend plutôt bien je trouve.
    avatar
    sebastien


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

    --Le code-- Empty Re: --Le code--

    Message  sebastien Lun 11 Mai - 22:11

    je viens de voir quentin que le bug arrive aussi sur cette carte.... Sad faudra que tu le trouve ^^'''
    Quentin
    Quentin


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

    --Le code-- Empty Re: --Le code--

    Message  Quentin Mar 12 Mai - 1:47

    voila ça plante plus. ça venait que je fais des test sur mon capitaine ou le capitaine ennemi et que s'y un des deux est mort, ça bug :p

    Bon la ça boucle infini sans rien faire Smile

    http://www.megaupload.com/?d=4KT4RNYX

    il faut passer partie.supprimerGroupe() en public Smile pour que ça compile Smile
    Cédric
    Cédric


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

    --Le code-- Empty Re: --Le code--

    Message  Cédric Mar 12 Mai - 11:57

    Code:

    void AttaqueBerserk::fuir()
    {
       std::deque<Groupe*> mesUnites = partie.getGroupesJoueur(partie.getJoueurActuel());

       Coordonnees fuite;
       fuite.x = partie.getLargeurCarte() / 2;
       fuite.y = partie.getHauteurCarte() - 2;
       SeDeplacer sd(moteurJeu, mesUnites, fuite);
       sd.executer();

       for(int i = 0; i < mesUnites.size(); i++)
       {
          if((partie.getCoord(*mesUnites[i]).x == fuite.x) && (partie.getCoord(*mesUnites[i]).y == fuite.y))
          {
             partie.supprimerGroupe(*mesUnites[i]);
          }
       }
    }

    Euuuuuuuuh... Si une unité atteint sa destination, tu la tue ? Gneuh !? Very Happy
    L'IA n'est pas sensée pouvoir tuer un groupe comme ça, vu qu'un humain n'y est pas autorisé. C'est justement pour empêcher ce genre de "triche" que j'ai mis la méthode supprimerGroupe en private. En plus, c'est quoi l'intérêt ? Je ne suis pas sûr de tout comprendre là :p
    avatar
    sebastien


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

    --Le code-- Empty Re: --Le code--

    Message  sebastien Mar 12 Mai - 12:16

    Nan en fait il a coder la fin de partie dans l'ia pour éviter de planter. Mais c'est super gore Razz
    Donc a toi de le faire cedric ^^
    Cédric
    Cédric


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

    --Le code-- Empty Re: --Le code--

    Message  Cédric Mar 12 Mai - 12:27

    Ahhhhh ok Very Happy

    Ben je suis en train de le faire ^^
    Quentin
    Quentin


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

    --Le code-- Empty Re: --Le code--

    Message  Quentin Mar 12 Mai - 12:36

    en faite, quand ton capitaine est mort, tes unités restantes fui le combat :p quand elle arrive a destination, elle "meurt", c'est pour dire qu'elles sortent de la map Smile

    lol!

    Contenu sponsorisé


    --Le code-- Empty Re: --Le code--

    Message  Contenu sponsorisé


      La date/heure actuelle est Ven 17 Mai - 15:14