Повторение кода в Python для программы изменения цвета - PullRequest
0 голосов
/ 03 ноября 2018

Я писал функцию для игры, в которой пользователь может нажать клавишу на клавиатуре, и это изменило бы цвет всех объектов, нарисованных на экране, на этот цвет. Например, если нажата 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 голосов
/ 03 ноября 2018

Не похоже, что вы передали событие в функцию 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)
...