2017-06-22 98 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]