Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/300.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Python中为颜色更改程序重复代码_Python_Function_Encapsulation - Fatal编程技术网

在Python中为颜色更改程序重复代码

在Python中为颜色更改程序重复代码,python,function,encapsulation,Python,Function,Encapsulation,我正在为一个游戏编写一个功能,用户可以按键盘上的一个键,这会将屏幕上绘制的所有对象的颜色更改为该颜色。例如,如果按下g,则所有内容都变为绿色 为此,我可以写: while True: while start==True: clock.tick(30) for event in pygame.event.get(): if event.type == QUIT: pygame.quit()

我正在为一个游戏编写一个功能,用户可以按键盘上的一个键,这会将屏幕上绘制的所有对象的颜色更改为该颜色。例如,如果按下
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()
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
随后在程序中,我可以在代码中的几个不同点上多次调用该函数,如下所示:

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()
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
不幸的是,这不起作用。我没有收到错误消息,但按下其中一个已定义的键时颜色不会改变。我认为这与需要更多输入数据的函数有关,但我不确定


如果您能提供任何建议,我将不胜感激。

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

您可能希望更改函数以返回所选的
颜色
,并将事件作为如下参数传入:

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()
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)

您只需将您的
set_color
函数替换为我给出的代码,然后按照我显示的方式调用该函数。只要把代码的位置改成我给你的。