在Python中为变色程序重复代码

时间:2018-11-03 17:10:52

标签: python function encapsulation

我正在为游戏编写功能,用户可以按键盘上的键,这会将屏幕上绘制的所有对象的颜色更改为该颜色。例如,如果按下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()

不幸的是,这不起作用。我没有收到错误消息,但是当按下其中一个定义的键时,颜色不会改变。我认为这与需要更多输入数据的功能有关,但我不确定。

我将为您提供任何建议。

1 个答案:

答案 0 :(得分:1)

似乎没有将事件传递给set_colour()函数供其使用,然后您的函数不会返回选择的颜色或对该颜色进行任何更改。似乎您的函数只更改了本地colour变量,而不是函数调用范围内的变量。

您可能想更改函数以返回所选的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)