Partage
  • Partager sur Facebook
  • Partager sur Twitter

Tetris en projet console c#

    22 octobre 2017 à 19:12:47

    Hello la communauté, 

    je fais actuellement un tetris en projet console sur c#. 

    j'ai une classe Board et une classe Block. 

    la methode ToString de la classe board, me retourne le plateau vide. 

            public override String ToString()
            {
                String s = "";
               
                for (int row = 0; row < rows; row++)
                {
                    for (int col = 0; col < columns; col++)
                    {
                       
                        s += ".";
                    }
                    s += "\n";
                }
    
                return s;
            }
        }

    Voici le test : 

            [TestMethod]
            public void board_is_empty()
            {
                Assert.AreEqual(board.ToString(),
                    "...\n" +
                    "...\n" +
                    "...\n"
                );
            }

    je dois maintenant modifier la methode To string pour que ce test marche : 

          void DropBlock(char c)
           {
               board.Drop(new Block(c));
           }
            [TestMethod]
            public void block_is_falling()
            {
               //  act
               DropBlock('X');
    
                // assert
                Assert.IsTrue(board.IsFallingBlock());
            }
    
            [TestMethod]
            public void block_starts_from_the_top_middle()
            {
            //    // act
                DropBlock('X');
    
              // assert
               Assert.AreEqual(board.ToString(),
                    ".X.\n" +
                    "...\n" +
                    "...\n"
                );
            }

    J'ai donc fait ca : 

            public override String ToString()
            {
                String s = "";
               
                for (int row = 0; row < rows; row++)
                {
                    for (int col = 0; col < columns; col++)
                    {
                       
                        s += ".";
                        if(isFallingBlock == true && row == 0)
                        {
                            s += cube + "." ; 
                        }
                    }
                    s += "\n";
                }
    
                return s;
            }

    le probleme est que ca me retourne : 

    ".X..X..X.\n"
    "...\n"
    "...\n"       alors que je veux le block que sur la première ligne. Pouvez vous m'aider ? 
    merci  

    -
    Edité par deborahLevy 22 octobre 2017 à 19:20:26

    • Partager sur Facebook
    • Partager sur Twitter
      23 octobre 2017 à 10:37:57

      Quelques petites remarques :

      • Dans tes boucles, qu'est ce qui t'as poussé à utiliser l'opérateur "<" pour les conditions de fin? L'opérateur "!=" serait plus logique et sous-entendrait aussi que tu maitrise mieux ton code à l'intérieur de la boucle qu'avec un opérateur de comparaison (i.e. tu sais exactement que i ne peut aller que de 0 à rows, il n'y aura pas de bidouilles faite dans la boucle sur i).
      • En théorie, les tests unitaire peuvent être parallélisés. Ce qui sous-entend qu'ils devraient être indépendant les un des autres. Si l'un de tes tests utilise une variable d'instance de la classe de test, tu transgresses ce principe. Je vois que tu as annoté ton code "Act" & "Assert". C'est justement le rôle de la phase "Arrange" (qui arrive avant les 2 autres) que de définir le périmètre établi initialement par ton TU en fabricant un set de données spécifique pour la phase "Act" qui suivra.
      • Pourquoi tester "isFalling == true"? Un "if" attend une expression qui évaluera à true (vrai) ou false (faux). Or, une variable booléenne répond déjà par nature à ce critère, tu peux te contenter d'écrire "isFalling", sans rien d'autre, ça aura exactement le même effet.
      • Pour ton problème initial, ce que tu veux, c'est "écraser" la définition d'un bloc vide (représenté par ".") par la définition d'un bloc non-vide (représenté par "X") sous condition. Traduction : "Si la position à [row]x[col] est le bloc non-vide alors ajoute un bloc non-vide, sinon, ajoute un bloc vide". Or, ce n'est pas du tout ce que fait ton code. Ton code dit "A la position [row]x[col], ajoute un bloc vide, puis, si [condition], alors, ajoute un bloc non-vide suivi d'un bloc vide".
      • Partager sur Facebook
      • Partager sur Twitter

      Tetris en projet console c#

      × 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