Probleme mit Dictionaries wie's scheint

Hier werden alle anderen GUI-Toolkits sowie Spezial-Toolkits wie Spiele-Engines behandelt.
Antworten
Benutzeravatar
Don Polettone
User
Beiträge: 115
Registriert: Dienstag 23. November 2010, 20:26
Wohnort: Schweiz

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:

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
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:

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'
der Fehler passiert also in der Funktion ecke_bauen. Hier diese Funktion:

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)
...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
Ich code, also bin ich.
Benutzeravatar
gkuhl
User
Beiträge: 600
Registriert: Dienstag 25. November 2008, 18:03
Wohnort: Hong Kong

"l" und "1" sehen sich manchmal verdammt ähnlich :)
Benutzeravatar
Don Polettone
User
Beiträge: 115
Registriert: Dienstag 23. November 2010, 20:26
Wohnort: Schweiz

das gibt's ja nicht...

ist ja Hammer. Und Du hast das einfach auf Anhieb gesehen..?

Vielleicht sollte ich doch wieder meinen PC-Monitor anhängen anstelle mir alles auf meinen Breitbild - Plasma anzeigen zu lassen :-) (oder halt noch näher an den TV :shock: )

Danke, voll cool


Henry
Ich code, also bin ich.
Benutzeravatar
cofi
Python-Forum Veteran
Beiträge: 4432
Registriert: Sonntag 30. März 2008, 04:16
Wohnort: RGFybXN0YWR0

Option 3: Anderen Font nutzen.
Option 4: Bessere Namen nutzen.
Antworten