在python中动态创建变量名?

时间:2017-06-22 00:02:49

标签: python pygame

我的第一个"大" python中的项目我试图使用pygame进行simon says游戏克隆

blink()方法要求我检测实例的颜色(self.color) 并根据它改变颜色。

红色到亮,蓝色到亮蓝色等问题是我当前的代码非常长而且很难看,而且我知道必须有更好的方法来做到这一点。

这是我丑陋的代码:

    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

3 个答案:

答案 0 :(得分:0)

你可以为你的颜色使用二维数组,其中[0] [0]为红色,[0] [1]为亮。在闪烁时,您可以切换第二个维度以获得亮点。

答案 1 :(得分:0)

如果您只想显示明亮的颜色,您可以将颜色值乘以255/150,这不需要if语句,除非是黑色到白色,如果您关心

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

答案 2 :(得分:0)

你有两个选择。在两者中,您应该首先将特定颜色从单独的变量移动到数组或字典中。一旦你这样做,你可以:

  1. 通过选择替代方案在颜色之间切换。
  2. 例如:

     self.colour_name = 'red'
     colour = COLOURS[self.colour_name][is_bright]
    
    1. 不是专门定义每种颜色,而是制作一种使颜色更亮的功能。如果您关心的颜色是否正确,您可以转换为不同的比例,降低亮度并转换回RGB。但如果你只关心明/暗的区别,你可以选择。
    2. 例如:

      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]