Array-Größe definieren

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
DarXun
User
Beiträge: 21
Registriert: Montag 21. Januar 2008, 00:44

Freitag 25. Januar 2008, 19:24

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
EyDu
User
Beiträge: 4871
Registriert: Donnerstag 20. Juli 2006, 23:06
Wohnort: Berlin

Freitag 25. Januar 2008, 19:30

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).
DarXun
User
Beiträge: 21
Registriert: Montag 21. Januar 2008, 00:44

Freitag 25. Januar 2008, 19:41

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 >_<
BlackJack

Freitag 25. Januar 2008, 20:12

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.
EyDu
User
Beiträge: 4871
Registriert: Donnerstag 20. Juli 2006, 23:06
Wohnort: Berlin

Freitag 25. Januar 2008, 20:20

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.
Antworten