Seite 1 von 1

Array-Größe definieren

Verfasst: Freitag 25. Januar 2008, 19:24
von DarXun
Hi!

Ich habe folgendes Problem:

Ich programmiere grad ein Spiel mit LibCaca.
Mein Level ist 120x60 groß.
Nun will ich zu Anfang des Levels jede Koordinate auf "None" setzen.

Ich habe folgenden Ansatz:

Einen Zwei-Dimensionalen Array erstellen.
Und mittels 2 Schleifen jede Koordinate auf "None" setzen...
Das könnte etwa so aussehen:

Code: Alles auswählen

x = 0
y = 0
while x <= 120:
    while y <= 60:
        coord[x][y] = "None"
        y += 1
    x += 1
Das Problem an der ganze Sache ist aber, dass ich nicht weiß wie ich einen Zweidimensionalen Array mit einer Größe von [120][60] erstelle...
Oder auch einen Array mit dynamischer Größe.

Habt ihr vllt. eine Idee, wie man so einen Array erzeugen kann, oder wie Ich dieses Problem sonst lösen kann?

Später beim Laden des Levels will ich auf einigen Koordinaten nämlich Wände setzen.
Wenn der Spieler vor diesen Wänden steht und nochmal vor gehen möchte, soll natürlich überprüft werden, ob das überhaupt möglich ist, deswegen auch diese Idee mit dem Zweidimensionalen Array...

Danke schonmal


~DarX

Verfasst: Freitag 25. Januar 2008, 19:30
von EyDu
Ich würde einfach ein Dictionary verwenden:

Code: Alles auswählen

level = {}
for x in range(42):
    for y in range (23):
        level[(x,y)] = None
Wenn du in Schleifen einen Zähler benötigst, solltest du eine for-Schleife verwenden und das nicht per while nachbauen.

"None" ist ein String, was du willst ist sicherlich None (ohne Anführunszeichen wie im meinem Beispiel).

Verfasst: Freitag 25. Januar 2008, 19:41
von DarXun
Dictionaries... gute Idee...
Sollte mich mal bisschen mehr mit nem Tutorial beschäftigen x'D
Bisher hatten wir in der Schule ( Klasse 10) noch recht wenig... nichtmal Schleifen...

Mit dem None... ist eigentlich egal... ;D Ob nurn None oder "None" im Grunde
überprüf ich später ja eh selber ob die Position nun den Wert None ( "None") hat... von daher



Danke... Ich glaub das wär sonst 'ne Schlaflose Nacht geworden >_<

Verfasst: Freitag 25. Januar 2008, 20:12
von BlackJack
So egal ist das nicht weil das Objekt `None` genau als Platzhalter für "Nichts" gedacht ist. Wenn ein Python-Programmierer das sieht, weiss er was gemeint ist, während bei der Zeichenkette "None" erst einmal nicht klar ist, ob da wirklich Zeichenketten gespeichert werden sollen, mit all den Operationen die es darauf gibt, oder ob da jemand nur die Existenz von dem Objekt `None` nicht kannte.

Ansonsten kann man so eine "2D"-Liste auch mit einer "list comprehension" erzeugen:

Code: Alles auswählen

In [304]: breite = 10

In [305]: hoehe = 5

In [306]: feld = [[None] * breite for dummy in xrange(hoehe)]

In [307]: feld
Out[307]:
[[None, None, None, None, None, None, None, None, None, None],
 [None, None, None, None, None, None, None, None, None, None],
 [None, None, None, None, None, None, None, None, None, None],
 [None, None, None, None, None, None, None, None, None, None],
 [None, None, None, None, None, None, None, None, None, None]]
Vorteil gegenüber dem Dictionary ist, dass man ohne Indexe über die Zeilen und dort dann über die einzelnen Elemente iterieren kann.

Verfasst: Freitag 25. Januar 2008, 20:20
von EyDu
BlackJack hat geschrieben:Vorteil gegenüber dem Dictionary ist, dass man ohne Indexe über die Zeilen und dort dann über die einzelnen Elemente iterieren kann.
Nimmt sich aber wahscheinlich beides nichts. In den meisten Fällen würde man wohl eh noch weiter durch eine Klasse abstrahieren, welche dann entsprechende Methoden (iter, iterrow, itercol) bereitstellt.