Verständisfrage bei einem mehrdimensionalen Array (mit drei Dimensionen)

Davicito

Erfahrenes Mitglied
Hallo Leute,
ich brauch mal wieder ein Rat von Euch.

und zwar habe ich ein 2D-Array deklariert, welches eine LevelMatrix beinhaltet für mein Spiel, zum Zeichnen meiner Boden Platten und für meine Kollisionsabfrage.

Code:
int LevelMatrix[13][15] = {{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
	                       {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
	                       {0,0,0,0,0,1,1,1,1,1,1,0,0,0,0},
                           {0,0,0,0,0,1,0,0,1,1,1,0,0,0,0},
                           {0,0,0,0,0,1,0,0,1,1,1,1,1,0,0},
                           {1,1,1,1,1,1,0,0,0,0,0,1,1,1,1},
                           {0,0,0,0,1,1,1,0,0,0,0,1,1,3,1},
                           {0,0,0,0,1,1,1,0,0,0,0,0,1,1,1},
                           {0,0,0,0,0,0,1,0,0,1,1,0,0,0,0},
                           {0,0,0,0,0,0,1,1,1,1,1,0,0,0,0},
                           {0,0,0,0,0,0,1,1,1,1,1,0,0,0,0},
                           {0,0,0,0,0,0,0,1,1,1,0,0,0,0,0},
                           {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}};

Nun möchte ich aber noch mehrere Levels hinzufügen. und da habe ich gedacht ich erweitere meine LevelMatrix um eine weitere Dimension so, das ich - sagen wir mal in der 3. Dim. = 0 das erste level zuweise und 3. Dim = 1 das zweite und soweiter...

Siehe wie folgt:

Code:
int  LevelMatrix[n] [13][15] ; 
 LevelMatrix[0] [13][15] = {{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
	                        {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
	                        {0,0,0,0,0,1,1,1,1,1,1,0,0,0,0},
                            {0,0,0,0,0,1,0,0,1,1,1,0,0,0,0},
                            {0,0,0,0,0,1,0,0,1,1,1,1,1,0,0},
                            {1,1,1,1,1,1,0,0,0,0,0,1,1,1,1},
                            {0,0,0,0,1,1,1,0,0,0,0,1,1,3,1},
                            {0,0,0,0,1,1,1,0,0,0,0,0,1,1,1},
                            {0,0,0,0,0,0,1,0,0,1,1,0,0,0,0},
                            {0,0,0,0,0,0,1,1,1,1,1,0,0,0,0},
                            {0,0,0,0,0,0,1,1,1,1,1,0,0,0,0},
                            {0,0,0,0,0,0,0,1,1,1,0,0,0,0,0},
                            {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}}; 

LevelMatrix[1] [13][15] =   {{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
                             {0,1,1,0,0,1,0,0,1,1,1,0,0,0,0},
                             {0,1,1,1,1,1,0,0,1,1,1,1,1,0,0},
                             {1,1,1,1,1,1,1,1,1,1,1,1,1,1,1},
                             {0,0,0,0,1,1,1,1,1,1,1,1,1,3,1},
                             {0,0,0,0,1,1,1,1,1,1,1,1,1,1,1},
                             {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
                             {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
                             {0,0,0,0,0,0,1,1,1,1,1,0,0,0,0},
                             {0,0,0,0,0,0,0,1,1,1,0,0,0,0,0},
                             {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}};

Aber irgendwie klappt das alles nicht!

Hat iorgend Jemand einen Ratschlag für mich, was ich falsch mache?

Vielen Dank im Vorraus.
 
Zuletzt bearbeitet:
Deine Deklaration ist falsch, sofern n nicht als konstanter Integer angegeben ist.
Außerdem kannst du die Inhalte mit den geschweiften Klammern nur direkt bei der Deklaration angeben, nicht mehr bei der Definition.
Deklaration=Angeben, dass es diese Variable gibt
Definition=Angeben der Werte
Und bei Angabe der Werte mithilfe der geschweiften Klammern ist es eine Deklaration inkl. Definition.

Folgendes klappt (getestet!)
C++:
int  LevelMatrix[][13][15] = {
                                  {
                                    {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
                                    {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
                                    {0,0,0,0,0,1,1,1,1,1,1,0,0,0,0},
                                    {0,0,0,0,0,1,0,0,1,1,1,0,0,0,0},
                                    {0,0,0,0,0,1,0,0,1,1,1,1,1,0,0},
                                    {1,1,1,1,1,1,0,0,0,0,0,1,1,1,1},
                                    {0,0,0,0,1,1,1,0,0,0,0,1,1,3,1},
                                    {0,0,0,0,1,1,1,0,0,0,0,0,1,1,1},
                                    {0,0,0,0,0,0,1,0,0,1,1,0,0,0,0},
                                    {0,0,0,0,0,0,1,1,1,1,1,0,0,0,0},
                                    {0,0,0,0,0,0,1,1,1,1,1,0,0,0,0},
                                    {0,0,0,0,0,0,0,1,1,1,0,0,0,0,0},
                                    {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}
                                  }
                                };
In das erste eckige Klammerpaar (1. Zeile) habe ich nichts geschrieben, somit ist die Anzahl der Levelmatrizen variabel.
 
Ok. Aber wenn ich jetzt mehrere Level hinzufügen möchte muss ich doch etwas in die leere geschweifte Klammer angeben. Damit ich weis in welchem Feld ich meine Levels zuweise, bzw. wenn ich meine Levels laden möchte.

Gruß
 
Nein, einfach einen neuen Block hinzufügen:
C++:
int  LevelMatrix[][13][15] = { /* Array mit Leven */
                                  /* LEVEL 1: Array mit Matrix */ 
                                  {
                                    {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}, /* Array mit einzelnen Werten */
                                    {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
                                    {0,0,0,0,0,1,1,1,1,1,1,0,0,0,0},
                                    {0,0,0,0,0,1,0,0,1,1,1,0,0,0,0},
                                    {0,0,0,0,0,1,0,0,1,1,1,1,1,0,0},
                                    {1,1,1,1,1,1,0,0,0,0,0,1,1,1,1},
                                    {0,0,0,0,1,1,1,0,0,0,0,1,1,3,1},
                                    {0,0,0,0,1,1,1,0,0,0,0,0,1,1,1},
                                    {0,0,0,0,0,0,1,0,0,1,1,0,0,0,0},
                                    {0,0,0,0,0,0,1,1,1,1,1,0,0,0,0},
                                    {0,0,0,0,0,0,1,1,1,1,1,0,0,0,0},
                                    {0,0,0,0,0,0,0,1,1,1,0,0,0,0,0},
                                    {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}
                                  },
                                  /* LEVEL 2 */  
                                  {
                                    {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
                                    {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
                                    {0,0,0,0,0,1,1,1,1,1,1,0,0,0,0},
                                    {0,0,0,0,0,1,0,0,1,1,1,0,0,0,0},
                                    {0,0,0,0,0,1,0,0,1,1,1,1,1,0,0},
                                    {1,1,1,1,1,1,0,0,0,0,0,1,1,1,1},
                                    {0,0,0,0,1,1,1,0,0,0,0,1,1,3,1},
                                    {0,0,0,0,1,1,1,0,0,0,0,0,1,1,1},
                                    {0,0,0,0,0,0,1,0,0,1,1,0,0,0,0},
                                    {0,0,0,0,0,0,1,1,1,1,1,0,0,0,0},
                                    {0,0,0,0,0,0,1,1,1,1,1,0,0,0,0},
                                    {0,0,0,0,0,0,0,1,1,1,0,0,0,0,0},
                                    {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}
                                  }
                                };
 
Zuletzt bearbeitet:
Es wäre so schön um wahr zu sein, aber er bringt mir in Zeile 19 mehrere Syntaxfehler. Z.B.
. error C2059: Syntaxfehler: '}'
. error C2143: Syntaxfehler: Es fehlt ';' vor '{'
. error C2143: Syntaxfehler: Es fehlt '}' vor '{'
. error C2447: '{': Funktionsheader fehlt - Parameterliste im alten Stil?
. IntelliSense: Es wurde eine "}" erwartet.

Ist etwas falsch am Code****

Code:
int  LevelMatrix[][13][15] = { /* Array mit Leven */
                                  /* LEVEL 1: Array mit Matrix */ 
                                  {
                                    {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}, /* Array mit einzelnen Werten */
                                    {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
                                    {0,0,0,0,0,1,1,1,1,1,1,0,0,0,0},
                                    {0,0,0,0,0,1,0,0,1,1,1,0,0,0,0},
                                    {0,0,0,0,0,1,0,0,1,1,1,1,1,0,0},
                                    {1,1,1,1,1,1,0,0,0,0,0,1,1,1,1},
                                    {0,0,0,0,1,1,1,0,0,0,0,1,1,3,1},
                                    {0,0,0,0,1,1,1,0,0,0,0,0,1,1,1},
                                    {0,0,0,0,0,0,1,0,0,1,1,0,0,0,0},
                                    {0,0,0,0,0,0,1,1,1,1,1,0,0,0,0},
                                    {0,0,0,0,0,0,1,1,1,1,1,0,0,0,0},
                                    {0,0,0,0,0,0,0,1,1,1,0,0,0,0,0},
                                    {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}
                                  }
                                  /* LEVEL 2 */  
                                  {
                                    {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
                                    {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
                                    {0,0,0,0,0,1,1,1,1,1,1,0,0,0,0},
                                    {0,0,0,0,0,1,0,0,1,1,1,0,0,0,0},
                                    {0,0,0,0,0,1,0,0,1,1,1,1,1,0,0},
                                    {1,1,1,1,1,1,0,0,0,0,0,1,1,1,1},
                                    {0,0,0,0,1,1,1,0,0,0,0,1,1,3,1},
                                    {0,0,0,0,1,1,1,0,0,0,0,0,1,1,1},
                                    {0,0,0,0,0,0,1,0,0,1,1,0,0,0,0},
                                    {0,0,0,0,0,0,1,1,1,1,1,0,0,0,0},
                                    {0,0,0,0,0,0,1,1,1,1,1,0,0,0,0},
                                    {0,0,0,0,0,0,0,1,1,1,0,0,0,0,0},
                                    {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}
                                  }
                                };
 
Es fehlt nur ein , (Komma). Er trennt dann Level 1 von Level2:


Array[][13][15] = {{/*Level1*/},{/*Level2*/}}
 
Na das: ,

C++:
int  LevelMatrix[][13][15] =
                                {
                                  {
                                    {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}, /* Array mit einzelnen Werten */
                                    {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
                                    {0,0,0,0,0,1,1,1,1,1,1,0,0,0,0},
                                    {0,0,0,0,0,1,0,0,1,1,1,0,0,0,0},
                                    {0,0,0,0,0,1,0,0,1,1,1,1,1,0,0},
                                    {1,1,1,1,1,1,0,0,0,0,0,1,1,1,1},
                                    {0,0,0,0,1,1,1,0,0,0,0,1,1,3,1},
                                    {0,0,0,0,1,1,1,0,0,0,0,0,1,1,1},
                                    {0,0,0,0,0,0,1,0,0,1,1,0,0,0,0},
                                    {0,0,0,0,0,0,1,1,1,1,1,0,0,0,0},
                                    {0,0,0,0,0,0,1,1,1,1,1,0,0,0,0},
                                    {0,0,0,0,0,0,0,1,1,1,0,0,0,0,0},
                                    {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}
                                  },
                                  {
                                    {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
                                    {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
                                    {0,0,0,0,0,1,1,1,1,1,1,0,0,0,0},
                                    {0,0,0,0,0,1,0,0,1,1,1,0,0,0,0},
                                    {0,0,0,0,0,1,0,0,1,1,1,1,1,0,0},
                                    {1,1,1,1,1,1,0,0,0,0,0,1,1,1,1},
                                    {0,0,0,0,1,1,1,0,0,0,0,1,1,3,1},
                                    {0,0,0,0,1,1,1,0,0,0,0,0,1,1,1},
                                    {0,0,0,0,0,0,1,0,0,1,1,0,0,0,0},
                                    {0,0,0,0,0,0,1,1,1,1,1,0,0,0,0},
                                    {0,0,0,0,0,0,1,1,1,1,1,0,0,0,0},
                                    {0,0,0,0,0,0,0,1,1,1,0,0,0,0,0},
                                    {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}
                                  }
                                };
 
Oh Misst, es hat geklappt ^^.
Hatte bisher nicht viel mit derartigen merdimensionalen Arrays zu tun gehabt - was die Syntax von Konstantenzuweisungen an geht.

Habt vielen dank!!
 
Zurück