为换色程序重复 Python 中的代码
Repeating Code in Python for Colour Changing Program
我正在为一款游戏编写一个功能,用户可以按下键盘上的一个键,然后将屏幕上绘制的所有对象的颜色更改为该颜色。例如,如果按下 g
,一切都会变成绿色。
为此,我可以写:
while True:
while start==True:
clock.tick(30)
for event in pygame.event.get():
if event.type == QUIT:
pygame.quit()
sys.exit()
if event.type == pygame.KEYDOWN:
if event.key == K_SPACE:
start =False
match_start=time.time()
if event.key==K_w:
colour=white
elif event.key==K_g:
colour=green
elif event.key==K_y:
colour=yellow
elif event.key==K_b:
colour=blue
elif event.key==K_r:
colour=red
elif event.key==K_p:
colour=purple
此代码运行良好。但是,我需要稍后编写完全相同的代码。为了避免重复,我考虑使用这样的函数封装代码:
def set_colour():
if event.key==K_w:
colour=white
elif event.key==K_g:
colour=green
elif event.key==K_y:
colour=yellow
elif event.key==K_b:
colour=blue
elif event.key==K_r:
colour=red
elif event.key==K_p:
colour=purple
然后在程序的后面我可以在代码中的几个不同点多次调用该函数,如下所示:
while True:
while start==True:
clock.tick(30)
for event in pygame.event.get():
if event.type ==QUIT:
pygame.quit()
sys.exit()
if event.type == pygame.KEYDOWN:
if event.key ==K_SPACE:
start =False
match_start=time.time()
set_colour()
不幸的是,这不起作用。我没有收到错误消息,但按下其中一个定义的键时颜色没有改变。我认为这与需要更多输入数据的功能有关,但我不确定。
如果您能提供任何建议,我将不胜感激。
您似乎没有将事件传递给 set_colour()
函数供其使用,然后您的函数没有 return 返回所选颜色或对其执行任何操作为了改变颜色。看起来您的函数只是更改了局部 colour
变量,而不是函数调用范围内的变量。
您可能想要将函数更改为 return 所选择的 colour
并将事件作为参数传入,如下所示:
def set_colour(event):
colour = None # Make sure colour is initialized
if event.key == K_w:
colour = white
elif event.key == K_g:
colour = green
elif event.key == K_y:
colour = yellow
elif event.key == K_b:
colour = blue
elif event.key == K_r:
colour = red
elif event.key == K_p:
colour = purple
return colour
然后在您调用此函数的代码中这样做:
colour = set_colour(event)
我正在为一款游戏编写一个功能,用户可以按下键盘上的一个键,然后将屏幕上绘制的所有对象的颜色更改为该颜色。例如,如果按下 g
,一切都会变成绿色。
为此,我可以写:
while True:
while start==True:
clock.tick(30)
for event in pygame.event.get():
if event.type == QUIT:
pygame.quit()
sys.exit()
if event.type == pygame.KEYDOWN:
if event.key == K_SPACE:
start =False
match_start=time.time()
if event.key==K_w:
colour=white
elif event.key==K_g:
colour=green
elif event.key==K_y:
colour=yellow
elif event.key==K_b:
colour=blue
elif event.key==K_r:
colour=red
elif event.key==K_p:
colour=purple
此代码运行良好。但是,我需要稍后编写完全相同的代码。为了避免重复,我考虑使用这样的函数封装代码:
def set_colour():
if event.key==K_w:
colour=white
elif event.key==K_g:
colour=green
elif event.key==K_y:
colour=yellow
elif event.key==K_b:
colour=blue
elif event.key==K_r:
colour=red
elif event.key==K_p:
colour=purple
然后在程序的后面我可以在代码中的几个不同点多次调用该函数,如下所示:
while True:
while start==True:
clock.tick(30)
for event in pygame.event.get():
if event.type ==QUIT:
pygame.quit()
sys.exit()
if event.type == pygame.KEYDOWN:
if event.key ==K_SPACE:
start =False
match_start=time.time()
set_colour()
不幸的是,这不起作用。我没有收到错误消息,但按下其中一个定义的键时颜色没有改变。我认为这与需要更多输入数据的功能有关,但我不确定。
如果您能提供任何建议,我将不胜感激。
您似乎没有将事件传递给 set_colour()
函数供其使用,然后您的函数没有 return 返回所选颜色或对其执行任何操作为了改变颜色。看起来您的函数只是更改了局部 colour
变量,而不是函数调用范围内的变量。
您可能想要将函数更改为 return 所选择的 colour
并将事件作为参数传入,如下所示:
def set_colour(event):
colour = None # Make sure colour is initialized
if event.key == K_w:
colour = white
elif event.key == K_g:
colour = green
elif event.key == K_y:
colour = yellow
elif event.key == K_b:
colour = blue
elif event.key == K_r:
colour = red
elif event.key == K_p:
colour = purple
return colour
然后在您调用此函数的代码中这样做:
colour = set_colour(event)