Partage
  • Partager sur Facebook
  • Partager sur Twitter

[C#] Output inattendu d'un "Jagged Array"

Sujet résolu
    9 août 2018 à 20:50:51

    Bonsoir OC,

    void Update () {
     
            if (Input.GetKeyDown(KeyCode.Z))
            {
                SpawnShape(1);
            }
    
        }
     
    void SpawnShape(int shape)
        {
            int[][,] shapes = new int[7][,] // {x, y}
            {
                new int[,] { {2,1} , {1,2} , {2,2} , {3,2} }, // "T" shape
                new int[,] { {1,1} , {2,1} , {2,2} , {3,2} }, // R "S" shape
                new int[,] { {1,2} , {2,2} , {2,1} , {3,1} }, // L "S" shape
                new int[,] { {1,1} , {1,2} , {1,3} , {2,1} }, // R "L" shape
                new int[,] { {1,2} , {2,2} , {3,2} , {1,1} }, // L "L" shape
                new int[,] { {1,1} , {1,2} , {2,1} , {2,2} }, // Square shape
                new int[,] { {1,1} , {1,2} , {1,3} , {1,4} }  // Line shape
            };
     
            foreach (var coordinates in shapes[shape])
            {
                Debug.Log(coordinates);
            }
           
        }

    En voulant recréer un Tetris sur Unity, je suis en train d'écrire le premier script qui sera en charge d'itérer des objets de par leurs forme. Dans le code, j'ai enregistré les formes des objets sous des coordonnées qui sont elles-mêmes dans un array qui sont eux mêmes dans un array. En exécutant le code foreach, je m'attendais à ce que, à l'output, je retrouve ceci:

    Output: {1,1}
    Output: {2,1}
    Output: {2,2}
    Output: {3,2}

    Cependant, le réel output n'est qu'une séquence des Integers qui composent les couples de coordonnées:

    Output: 1
    Output: 1
    Output: 2
    Output: 1
    Output: 2
    Output: 2
    Output: 3
    Output: 2

    Je pensait avoir compris l'utilisation de cette fonction... mais il se trouve que non. Où me suis-je trompé? Car je ne vois vraiment pas...

    Merci !


    -
    Edité par florentraeymaeckers 9 août 2018 à 20:54:06

    • Partager sur Facebook
    • Partager sur Twitter
      9 août 2018 à 23:05:48

      Le foreach sur un tableau multidimensionnel «aplatit» le tableau donc «étale» ses éléments comme s'il s'agissait d'un tableau unidimensionnel.

      Utilise soit une double boucle classique ou mieux fais toi un objet point/coordonnées (ou au pire un 2-tuple [paire] si >= C#6)

      • Partager sur Facebook
      • Partager sur Twitter
      Censément, quelqu'un de sensé est censé s'exprimer sensément.

      [C#] Output inattendu d'un "Jagged Array"

      × 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