我的第一个"大" 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
答案 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)
你有两个选择。在两者中,您应该首先将特定颜色从单独的变量移动到数组或字典中。一旦你这样做,你可以:
例如:
self.colour_name = 'red'
colour = COLOURS[self.colour_name][is_bright]
例如:
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]