2017-06-22 4 views
0

Für mein erstes „großes“ Projekt in Python versuche ich einen simon says Spiel Klon mit pygame zu machenVariablennamen in Python dynamisch erstellen?

Die Blink() -Methode mich die Farbe zu erkennen erfordert, welche Farbe die Instanz (self.color) und ändern darauf bezogen.

Also rot zu hellrot, blau zu hellblau usw. Das Problem ist, dass mein aktueller Code sehr lang und hässlich ist, und ich weiß, dass es einen besseren Weg dafür geben muss.

Hier ist meine hässliche Code:

def blink(self): 
    if self.color == red: 
     self.color = brightred 
    elif self.color == blue: 
     self.color = brightblue 
    elif self.color == green: 
     self.color = brightgreen 

die definierten Farben:

black = (0,0,0) 
white = (255,255,255) 
red = (150,0,0) 
green = (0,150,0) 
blue = (0,0,150) 
yellow = (150,150,0) 
brightred = (255,0,0) 
brightgreen = (0,255,0) 
brightblue = (0,0,255) 
brightyellow = (255,255,0) 

und schließlich die Klasse die Methode enthält:

class rec: 

    def __init__(self,left,top,size,color): 
     self.left = left 
     self.top = top 
     self.size = size 
     self.color = color 
     self.rect = pygame.Rect(self.left,self.top,self.size,self.size) 
     pygame.draw.rect(d,self.color,self.rect) 
     pygame.display.update() 

    def blink(self): 
     if self.color == red: 
      self.color = brightred 
     elif self.color == blue: 
      self.color = brightblue 
     elif self.color == green: 
      self.color = brightgreen 
     elif self.color == yellow: 
      self.color = brightyellow 
     pygame.draw.rect(d,self.color,self.rect) 
     pygame.display.update() # Not finished 
+2

Sorry, ich verstehe die Frage nicht. Was ist das Problem hier? Was ist dein Ziel? –

Antwort

0

Könnten Sie verwenden, um einen 2-dimensionalen Array für Ihre Farben, wobei [0] [0] rot und [0] [1] leuchtend ist. Wenn Sie blinken, können Sie einfach die zweite Dimension wechseln, um die Helligkeit zu ändern.

0

Wenn Sie nur die helle Farbe zeigen möchten, können Sie Ihre Farbwerte von 255/150, multiplizieren, die keine if-Anweisungen erfordert, außer für den Fall von Schwarz zu Weiß, wenn Sie über das

def blink(self): 
    self.color = map(lambda c: c*(255/150), self.color) 
0

Pflege Du hast zwei Möglichkeiten. In beiden Fällen sollten Sie mit dem Verschieben der spezifischen Farben aus separaten Variablen in ein Array oder ein Wörterbuch beginnen. Sobald Sie das tun, können Sie:

  1. Zwischen den Farben wechseln, indem Sie eine Alternative auswählen.

Zum Beispiel:

self.colour_name = 'red' 
colour = COLOURS[self.colour_name][is_bright] 
  1. Statt speziell jede Farbe zu definieren, eine Funktion machen, die die Farbe heller macht. Wenn Sie Wert auf die richtige Farbe legen, können Sie eine andere Skalierung wählen, die Helligkeit reduzieren und zurück in RGB konvertieren. Aber wenn dir nur der Hell-Dunkel-Unterschied wichtig ist, könntest du mitgehen.

Zum Beispiel:

def make_bright(colour): 
    return tuple(x*2 for x in colour) 

... 

if is_bright: 
    colour = make_bright(COLOURS[self.colour_name]) 
else: 
    colour = COLOURS[self.colour_name] 
Verwandte Themen