我怎样才能复制一个函数来创建另一个函数,而不复制粘贴它

2024-03-28 10:05:03 发布

您现在位置:Python中文网/ 问答频道 /正文

我编写了一个函数,用于在pygame中显示欢迎屏幕:

def welcome():
exit_game = False
while not exit_game:
    global red,green
    game_window.fill((233,109,102))
    screen_text("welcome to snakes",black,160,240)
    screen_text("press spacebar to play",black,144,260)
    pygame.draw.rect(game_window,red,[76,425,70,32])
    pygame.draw.rect(game_window,green,[355,425,70,32])
    screen_text("PLAY",black,86,432)
    screen_text("QUIT",black,365,432)
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            exit_game = True
        
        if event.type == pygame.MOUSEBUTTONDOWN:
            print(event.button)
            if 425<pygame.mouse.get_pos()[1]<457:
                if 76<pygame.mouse.get_pos()[0]<146 :
                    try:
                        pygame.mixer.music.load(os.path.join(dir,song_num))
                        pygame.mixer.music.set_volume(0.5)
                        pygame.mixer.music.play()
                    except Exception as e:
                        print("could not load the music")
                    game_loop()
                if 355<pygame.mouse.get_pos()[0]<425:
                    exit_game = True
        if 425<pygame.mouse.get_pos()[1]<457:
            if 76<pygame.mouse.get_pos()[0]<146 :
                red = (255,0,0)
            if 355<pygame.mouse.get_pos()[0]<425:
                green = (0,255,0)
        else :
            red = (200,0,0)
            green = (0,200,0)
            pass
        if event.type == pygame.KEYDOWN:
            if event.key == pygame.K_SPACE:
                try:
                    pygame.mixer.music.load(os.path.join(dir,song_num))
                    pygame.mixer.music.set_volume(0.5)
                    pygame.mixer.music.play()
                except Exception as e:
                    print("could not load the music")
                game_loop()
    pygame.display.update()
    clock.tick(60)
pygame.quit()
quit()

之后,我想在用户按下p时创建一个暂停屏幕,在该屏幕中,我复制了上述函数,并对其进行了如下修改

def paused():

while pause:
    global red,green
    game_window.fill((233,109,102))
    screen_text("paused",black,160,240)
    # screen_text("",black,144,260)
    pygame.draw.rect(game_window,red,[76,425,135,32])
    pygame.draw.rect(game_window,green,[355,425,70,32])
    screen_text("CONTINUE",black,86,432)
    screen_text("QUIT",black,365,432)
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            pygame.quit()
            exit()
        if event.type == pygame.MOUSEBUTTONDOWN:
            print(event.button)
            if 425<pygame.mouse.get_pos()[1]<457:
                if 76<pygame.mouse.get_pos()[0]<76+ 135 :
                    try:
                        pygame.mixer.music.unpause()
                    except Exception as e:
                        print("could not load the music")
                    
                    unpause()
                if 355<pygame.mouse.get_pos()[0]<425:
                    pygame.quit()
                    exit()
        if 425<pygame.mouse.get_pos()[1]<457:
            if 76<pygame.mouse.get_pos()[0]<76 + 135:
                red = (255,0,0)
            if 355<pygame.mouse.get_pos()[0]<425:
                green = (0,255,0)
        else :
            red = (200,0,0)
            green = (0,200,0)
            
    pygame.display.update()
    clock.tick(60)

我只想改变一些事情,比如暂停音乐,改变按钮和按键的功能

有没有其他方法可以做到这一点而不是复制它?我可以像在类中一样继承并更改一些代码或添加更多更改吗


Tags: textposeventgamegetifexitmusic
1条回答
网友
1楼 · 发布于 2024-03-28 10:05:03

为要在较大的函数中更改的每件事情设置一个条件参数。可能类似于下面的内容

welcome=1
pause=0

def myfunction(variable=""):
    if welcome:
       print("welcome") # set some buttons/music
       variable=1
       print(variable)
    if pause:
       print("pause") #  set different buttons/music
       variable=2
       print(variable)
     
    if welcome:
       print("do something unique")

相关问题 更多 >