2017-06-22 100 views
0

在Python中我的第一個「大」項目,我試圖讓simon says遊戲的克隆與pygame的在python中動態創建變量名?

()方法需要我來檢測實例是什麼顏色(self.color) 和改變顏色的閃爍基於此。

那麼紅到鮮明,藍到brightblue等問題是,我現在的代碼是非常漫長和醜陋的,我知道必須有一個更好的方式來做到這一點。

這是我的醜陋的代碼:

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

所定義的顏色:

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) 

最後包含此方法的類:

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

對不起,我不明白的問題。這裏有什麼問題?你的目標是什麼? –

回答

0

你可以使用一個2維數組爲您的顏色,其中[0] [0]爲紅色,[0] [1]爲紅色。眨眼之間,您可以切換第二個維度以獲得更好的效果。

0

如果你只是想顯示明亮的顏色,你可以通過255/150乘以你的顏色值,這不需要if語句,除了黑到白的情況下,如果你關心的是

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

你有兩個選擇。在這兩種方法中,您都應該先將單獨變量的特定顏色移動到數組或字典中。一旦你這樣做,你可以:

  1. 通過選擇一個替代品在顏色之間切換。

例如:

self.colour_name = 'red' 
colour = COLOURS[self.colour_name][is_bright] 
  • 代替專門定義每種顏色,使一個函數,使顏色變亮。如果你關心顏色是否正確,你可以轉換成不同的比例,降低亮度並轉換回RGB。但是如果你只關心明亮/黑暗的差異,你可以隨心所欲。
  • 例如:

    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]