Listing kürzen

Hier werden alle anderen GUI-Toolkits sowie Spezial-Toolkits wie Spiele-Engines behandelt.
Antworten
Volker Schulte
User
Beiträge: 20
Registriert: Sonntag 8. Februar 2009, 10:23
Wohnort: Lüdenscheid

Hallo zusammen,

ich möchte mein Listing kürzen.
Als Beispiel folgender Text:

Code: Alles auswählen

                if self.figur_rot_sprites.has(Spr):
                    if self.spieler.Spielerfarbe()==0:
                        self.figur_rot_sprites.remove(Spr)
                        GleicheFarbe=True
                if self.figur_gelb_sprites.has(Spr):
                    if self.spieler.Spielerfarbe()==1:
                        self.figur_gelb_sprites.remove(Spr)
                        GleicheFarbe=True
                if self.figur_gruen_sprites.has(Spr):
                    if self.spieler.Spielerfarbe()==2:
                        self.figur_gruen_sprites.remove(Spr)
                        GleicheFarbe=True
                if self.figur_blau_sprites.has(Spr):
                    if self.spieler.Spielerfarbe()==3:
                        self.figur_blau_sprites.remove(Spr)
                        GleicheFarbe=True
Achtung! Leider habe ich es nicht erreichen können, dass der Text versetzt dargestellt wird.

Folgendes habe ich mir gedacht und ausprobiert:
die Texte "self.figur_rot_sprites", "self.figur_gelb_sprites" usw. in eine Liste zu schreiben, welche in eine neue Methode geschrieben wird.
Diese Methode gibt die Liste durch z.B. <return liste_sprites> zurück.
In einer Schleife rufe ich die einzelnen Bereiche aus der Liste ab durch liste_sprites[sprite], wobei sprite jeweils um 1 erhöht wird.
Durch Hinzufügen von z.B. + ".has(Spr)" oder + ".remove(Spr)" wird die entsprechende Zeile ergänzt.
Die Spielerfarbe kann durch eine Zählervariable erhöht werden.

Leider funktioniert diese Art der Programmierung nicht.

Es kommt eine Fehlermeldung, die aussagt, dass eine Verbindung einer Gruppe mit einem String nicht funktioniert.

Gibt es eine Möglichkeit diese Zeilen mit Hilfe einer Schleife und einer zusätzlichen Methode zu verkürzen.

Die Methode würde ich an anderen Stellen auch einsetzen können.

Gruss Volker

Edit (BlackJack): Quelltext in Code-Tags gesetzt.
BlackJack

@Volker Schulte: Mal vorausgesetzt die Spielerfarbe liegt immer zwischen 0 und 3, dann sollte man 1. die Abfrage auf die Farbe vorziehen, weil die sicher schneller ist als der `has()`-Aufruf und 2. kann man dann einfach die Farbe als Index zur Auswahl des richtigen "Sprites"-Objektes benutzen:

Code: Alles auswählen

                sprites = (self.figur_rot_sprites,
                           self.figur_gelb_sprites,
                           self.figur_gruen_sprites,
                           self.figur_blau_sprites)[self.spieler.farbe]
                if sprites.has(spr):
                    sprites.remove(spr)
                    gleiche_farbe = True
Ansonsten ist es immer praktisch, wenn Du bei Problemen mit Quelltext den problematischen Quelltext und die Komplette Fehlermeldung zeigst. Aus Deiner Beschreibung kann man nur erahnen was Du vielleicht gemacht hast (und es klingt nicht besonder "pythonisch") und die Fehlermeldung ist auch eigenartig. Was ist eine Gruppe?
Volker Schulte
User
Beiträge: 20
Registriert: Sonntag 8. Februar 2009, 10:23
Wohnort: Lüdenscheid

Hallo BlackJack,

vielen Dank für die schnelle Hilfe.
Ist ja toll, wie kurz Du den Quellcode geschrieben hast.
Ich bin noch Anfänger in Python und Pygame und schreibe derzeit das erste Game.

Ich hoffe, ich werde rechtzeitig das Wichtigste dazulernen.

Übrigens, hast Du die Zeilen des Quellcodes formatiert? Bei meiner Vorschau waren alle Zeilen links angeordnet.

Gruß Volker.
Benutzeravatar
Rebecca
User
Beiträge: 1662
Registriert: Freitag 3. Februar 2006, 12:28
Wohnort: DN, Heimat: HB
Kontaktdaten:

Offizielles Python-Tutorial (Deutsche Version)

Urheberrecht, Datenschutz, Informationsfreiheit: Piratenpartei
Antworten