Probleme mit Dictionaries wie's scheint
Verfasst: Dienstag 28. Dezember 2010, 17:59
Hallo mal wieder,
habe da ein Problem mit einem Dictionary wie es scheint... Bastele gerade an einem Kartengenrator, der Karten zeichnet mit Pygame. Nun habe ich eine Methode, die die Bilder des Tileset als Dictionary zurückgibt. Wenn ich dies printe:
...ist also alles da wie es scheint. Nun habe ich eine Funktion, die mit 3 anderen Funktionen die ganze Karte baut, so dass man zuschauen kann:
die Funktionen an sich scheinen zu funktionieren. Wenn ich aber nun die Karte bauen will und genau vor der Fehlermeldung das Dictionary tileset abfange und printe, passiert Folgendes:
der Fehler passiert also in der Funktion ecke_bauen. Hier diese Funktion:
...und das verstehe ich einfach nicht... was soll denn das? Er hat ja erst den Wert des Keys "ecke1" ausgegeben; warum soll dieses Bild jetzt nicht mehr existieren..?!
Weiss jemand Rat? Hab' ich was übersehen..?
Vielen Dank für Eure Hilfe,
Henry
habe da ein Problem mit einem Dictionary wie es scheint... Bastele gerade an einem Kartengenrator, der Karten zeichnet mit Pygame. Nun habe ich eine Methode, die die Bilder des Tileset als Dictionary zurückgibt. Wenn ich dies printe:
Code: Alles auswählen
{'ecke9': <Surface(48x48x32 SW)>, 'ecke7': <Surface(48x48x32 SW)>, 'ecke3': <Surface(48x48x32 SW)>, 'eckel': <Surface(48x48x32 SW)>, 'kreuzung': <Surface(48x48x32 SW)>, 'horizontal': <Surface(48x48x32 SW)>, 'vertikal': <Surface(48x48x32 SW)>}
...ist also alles da wie es scheint. Nun habe ich eine Funktion, die mit 3 anderen Funktionen die ganze Karte baut, so dass man zuschauen kann:
Code: Alles auswählen
def karte_bauen():
"Zeichnet die gesamte Karte mit start_und_ziel_bauen, verbinden und ecke_bauen. "
start_und_ziel_bauen()
ecken_zu_bauen = len(wegpos) - 2
ecken_gebaut = 0
while ecken_gebaut < ecken_zu_bauen:
ecke_bauen(wegpos[ecken_gebaut], wegpos[ecken_gebaut + 1], wegpos[ecken_gebaut + 2])
ecken_gebaut += 1
wegpunkte_zu_verbinden = len(wegpos) - 1
wegpunkte_verbunden = 0
while wegpunkte_verbunden < wegpunkte_zu_verbinden:
verbinden(wegpos[wegpunkte_verbunden], wegpos[wegpunkte_verbunden + 1])
wegpunkte_verbunden += 1
Code: Alles auswählen
{'ecke9': <Surface(48x48x32 SW)>, 'ecke7': <Surface(48x48x32 SW)>, 'ecke3': <Surface(48x48x32 SW)>, 'eckel': <Surface(48x48x32 SW)>, 'kreuzung': <Surface(48x48x32 SW)>, 'horizontal': <Surface(48x48x32 SW)>, 'vertikal': <Surface(48x48x32 SW)>}
Traceback (most recent call last):
File "C:\Python25\My Progs\pygames\td_map_generator_nih.py", line 291, in <module>
karte_bauen()
File "C:\Python25\My Progs\pygames\td_map_generator_nih.py", line 275, in karte_bauen
ecke_bauen(wegpos[ecken_gebaut], wegpos[ecken_gebaut + 1], wegpos[ecken_gebaut + 2])
File "C:\Python25\My Progs\pygames\td_map_generator_nih.py", line 236, in ecke_bauen
ecke = tileset["ecke1"]
KeyError: 'ecke1'
Code: Alles auswählen
def ecke_bauen(pos_a, pos_b, pos_c):
"Ermittelt den Ecken-Typ (int) der Ecke zwischen tile_a und tile_c und baut die Ecke an der Position tile_b"
global pos_verbaut
if pos_a[0] > pos_c[0] and pos_a[1] > pos_c[1]:
if pos_a[1] > pos_b[1]:
ecke = tileset["ecke9"]
else:
ecke = tileset["ecke1"]
elif pos_a[0] > pos_c[0] and pos_a[1] < pos_c[1]:
if pos_a[0] > pos_b[0]:
ecke = tileset["ecke7"]
else:
ecke = tileset["ecke3"]
elif pos_a[0] < pos_c[0] and pos_a[1] > pos_c[1]:
if pos_a[0] < pos_b[0]:
ecke = tileset["ecke3"]
else:
ecke = tileset["ecke7"]
elif pos_a[0] < pos_c[0] and pos_a[1] < pos_c[1]:
if pos_a[1] < pos_b[1]:
ecke = tileset["ecke1"]
else:
ecke = tileset["ecke9"]
else:
print "Eckentyp nicht vorhanden! tile_a / tile_b - Pos ist falsch!"
bildschirm.blit(ecke, pos_b)
pygame.display.flip()
pygame.time.delay(500)
pos_verbaut.append(pos_b)
Weiss jemand Rat? Hab' ich was übersehen..?
Vielen Dank für Eure Hilfe,
Henry