[Monkey] Datenfeld definieren und einlesen

Übersicht Andere Programmiersprachen Beginners-Corner

Neue Antwort erstellen

 

Britanny

Betreff: Datenfeld definieren und einlesen

BeitragMi, Apr 30, 2014 16:34
Antworten mit Zitat
Benutzer-Profile anzeigen
Wie kann ich in Monkey eine zwei,- bzw. drei,- dimensionale Matrix definieren und wie kann ich dann Daten aus einem File in diese einlesen *grübel* Es geht wohl nicht so wie unter BlitBasic bzw. Blitz3D oder?

Das Feld soll Tileinformationen enthalten. Also 16/32 bit Felder mit eine (x,y) bzw. (x,y,z) Matrix.

In Blitz3D z.b. ganz einfach Matrix (9,9,9) Aber in Monkey?

DAK

BeitragMi, Apr 30, 2014 19:21
Antworten mit Zitat
Benutzer-Profile anzeigen
Was du brauchst sollte ein Array of Arrays sein.
Hier gibt es eine Beschreibung, wie das geht.
Gewinner der 6. und der 68. BlitzCodeCompo
 

Britanny

Betreff: 2d und 3D Felder in MonkeyX für Iso.Tile-basiertes Spiel

BeitragSo, Mai 04, 2014 11:30
Antworten mit Zitat
Benutzer-Profile anzeigen
Danke DAK. Der link hat mich etwas voran gebracht Smile Jedoch gelingt es nicht größere 2D Felder als eine 2x2 Feld anzusprechen. Mein Vorhaben ein 255x255 großes Feld zu generieren und darin Daten ein und auszulesen funktioniert nicht. Muss ich evtl. die Größe der einzelnen Felder zuvor auch irgendwie definieren?

Code: [AUSKLAPPEN]



Import monkey

Global myarray:=[New Int[255], New Int[255]]

Function Main()
Print("start")
myarray[0][0] = 20
myarray[240][210] = 15559
Print myarray[0][0]
Print myarray[240][210]
Print("end")
End


Bei der Dimensionierung eines 2x2 Feldes funktioniert alles Prima. Aber vergrößere ich das Feld auf 255x255 (bzw. 256x256) gibt der Monkey in HTML5 nur "start" aus. Weiter passiert nichts. Sad

DAK

BeitragSo, Mai 04, 2014 12:00
Antworten mit Zitat
Benutzer-Profile anzeigen
Pass auf, was du hier hast ist kein Multidimensionales Array sondern ein Array of Array.

Das heißt, du hast ein Array in dem Verweise zu Arrays stehen. Bei dem 2x3 Array hast du ein Array mit 2 Arrays mit je 3 Feldern ([[feld1,feld2,feld3] , [feld1,feld2,feld3]])

Was du da definiert hast ist kein 256x256-Array, sondern ein 2x256-Array. Du musst das Root-Array größer machen und dort 256 Unterarrays einhängen.
(Ein Vorteil dieser Methode ist, dass in jeder Zeile eine unterschiedliche Anzahl Felder sein können)

Eine Alternative wäre, dass du ein Array mit der Größe höhe*breite machst. Die einzelnen Zellen sprichst du dann mit array[x + breite*y] an.


Edit: Habe hier noch eine interessante Visualisierung gefunden, mit der man das Konzept von Arrays of Arrays gut veranschaulichen kann: Code: [AUSKLAPPEN]
http://www.pythontutor.com/visualize.html#code=superarray+%3D+%5BNone%5D*4%0A%0Afor+i+in+range(0,4)%3A%0A++++superarray%5Bi%5D+%3D+%5BNone%5D*3%0A%0Asuperarray%5B0%5D%5B2%5D+%3D+%22Hallo+Welt%22%0Aprint(superarray%5B0%5D%5B2%5D)&mode=display&cumulative=false&heapPrimitives=false&drawParentPointers=false&textReferences=false&showOnlyOutputs=false&py=2&curInstr=0

(Die URL ist zu lange um sie in ein normales URL-Tag zu tun...)
Ist zwar für Python, das Konzept ist aber so ähnlich. [None]*3 erstellt ein Array der Größe 3. Das Programm zeigt ein 4x3 Array of Array.
Gewinner der 6. und der 68. BlitzCodeCompo

Neue Antwort erstellen


Übersicht Andere Programmiersprachen Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group