Partage
  • Partager sur Facebook
  • Partager sur Twitter

faire un bastard tetris

quel algorithme pour choisir les blocs ?

Sujet résolu
    24 octobre 2020 à 18:20:14

    Bonjours à tous ! :)

    Comme j'ai fini aujourd'hui de résoudre tous les bugs de mon Tetris, je me suis dit qu j'allais lui rajouter quelques options. Après quelques recherches, je suis tombé sur ce mode : le bastet (ou Bastard Tetris), qui envoie TOUJOURS le SEUL bloc que l'on ne veut PAS:lol:.

    Seulement, je n'arrive pas du tout à coder l'algo qui choisit le bloc à envoyer (en fait il n'y a que ça à faire) !:(

    D'où l'existence de ce sujet, car je n'en ai pas trouvé d'autre parlant de ceci (même en anglais)o_O.

    Je précise simplement que je code en C, avec la bibli SDL2, sous Ubuntu 19.04.

    Merci d'avance,

    Durza42

    • Partager sur Facebook
    • Partager sur Twitter

    La gentillesse est le langage qu'un sourd peut entendre et qu'un aveugle peut voir.

    Il n'y a qu'un seul monde et il est faux, cruel, contradictoire, séduisant et dépourvu de sens. Un monde ainsi constitué est le monde réel. Nous avons besoin de mensonges pour conquérir cette réalité, cette "vérité".

      24 octobre 2020 à 18:39:16

      Bonjour

      On peut zyeuter le code de bastet par exemple …

      long Evaluate(const Well *w, int extralines){
          //computes the score for a final position reached in the well + "extralines" lines cleared
          //high=good for the player
      
          //lines
          long score=100000000*extralines;
      
          //adds a bonus for each "free" dot above the occupied blocks profile
          std::bitset<WellWidth> occupied;
          occupied.reset();
          BOOST_FOREACH(WellLine l,w->_well){
            occupied = occupied & l;
            score+=10000*(WellWidth-occupied.count());
          }
      
          //adds a bonus for lower max height of the occupied blocks
          int height=RealWellHeight;
          BOOST_FOREACH(WellLine l, w->_well){
            if(l.any()) break;
            height--;
          }
          score+= 1000 * (RealWellHeight-height);
          return score;
        }

      Il y a une fonction d'évaluation qui renvoie un score pour une pièce.

      • Partager sur Facebook
      • Partager sur Twitter
        24 octobre 2020 à 18:47:36

        rebonjour,

        "On peut zyeuter le code de bastet par exemple …"

        J'ai bien essayé (d'ailleurs j'ai dégoté un code en C), mais je ne comprend pas la fonction comment il fait pour associer une valeur plus ou moins élevée à un bloc

        selon si le joueur le veut ou pas.

        Or, je ne tiens surtout pas à faire de copier-coller !

        • Partager sur Facebook
        • Partager sur Twitter

        La gentillesse est le langage qu'un sourd peut entendre et qu'un aveugle peut voir.

        Il n'y a qu'un seul monde et il est faux, cruel, contradictoire, séduisant et dépourvu de sens. Un monde ainsi constitué est le monde réel. Nous avons besoin de mensonges pour conquérir cette réalité, cette "vérité".

          24 octobre 2020 à 20:39:52

          Durza 42 a écrit:

          rebonjour,

          "On peut zyeuter le code de bastet par exemple …"

          J'ai bien essayé (d'ailleurs j'ai dégoté un code en C), mais je ne comprend pas la fonction comment il fait pour associer une valeur plus ou moins élevée à un bloc

          selon si le joueur le veut ou pas.

          Or, je ne tiens surtout pas à faire de copier-coller !

          Justement c'est la qualité de cette fonction d'évaluation qui rendre ton moteur plus ou moins démoniaque.

          Une idée simple pour commencer serait : pour toutes les pièces valides, choisir celle qui même la mieux placée augmente le plus la hauteur du tas ; raffiner en prenant en compte le nombre de trous non directement remplissables que cela crée, etc …

          • Partager sur Facebook
          • Partager sur Twitter
            28 octobre 2020 à 16:48:40

            Merci beaucoup white crow, c'est principalement ça que je voulais savoir. Je te tiens au courrant le temps de coder ça !

            • Partager sur Facebook
            • Partager sur Twitter

            La gentillesse est le langage qu'un sourd peut entendre et qu'un aveugle peut voir.

            Il n'y a qu'un seul monde et il est faux, cruel, contradictoire, séduisant et dépourvu de sens. Un monde ainsi constitué est le monde réel. Nous avons besoin de mensonges pour conquérir cette réalité, cette "vérité".

              29 novembre 2020 à 16:52:29

              Bon... après un moi(:o) à faire autre chose, j'ai implémenté tout ça sans problèmes (en fait c'était tout simple, ça m'a pris 45 min et 150 lignes, en mode usine à gaz).

              Le sujet est résolu...

              • Partager sur Facebook
              • Partager sur Twitter

              La gentillesse est le langage qu'un sourd peut entendre et qu'un aveugle peut voir.

              Il n'y a qu'un seul monde et il est faux, cruel, contradictoire, séduisant et dépourvu de sens. Un monde ainsi constitué est le monde réel. Nous avons besoin de mensonges pour conquérir cette réalité, cette "vérité".

              faire un bastard tetris

              × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
              × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
              • Editeur
              • Markdown