【问题标题】:How to display GAME OVER screen and YOU WIN screen in pygame [duplicate]如何在pygame中显示GAME OVER屏幕和YOU WIN屏幕[重复]
【发布时间】:2017-09-12 12:16:27
【问题描述】:

我有一个 GAME OVER 屏幕,当您的生命值耗尽时该屏幕仍在运行。这个 GAME OVER 屏幕使用 show_go_screen 执行。我试图将 show_go_screen 的方法复制到另一个屏幕的 show_winning() 函数中。我通过在回到游戏时将你的健康恢复正常来操纵这个节目获胜功能。但是,一旦您进入 YOU WIN 屏幕并返回游戏,您将无法再次进入 YOU WIN 屏幕。我在下面包含了我的玩家盾牌的代码(确定何时有 GAME OVER/YOUWIN 事件)我还包含了 show_go_screen 的方法(用于 GAME OVER)和 show_winning() 方法的代码(即为您赢了屏幕)。如果有人能告诉我如何最好地修改我的代码以获得所需的结果。

if TrumpHits:
            self.trump.shield -= 25
        if self.trump.shield <= 0:
            self.show_winning()
            self.winning = True
      if hits:
             self.player.shield -= 20
        if flyby:
             self.player.shield -= 30
        if self.player.shield <= 0:
            self.playing = False

这里是 show_go_screen() 和 show_winning() 方法

 def show_go_screen(self):
        # game over/continue
        if not self.running:
            return

        bg = pg.image.load("GAMEOVERslimeCOVERAGE.png")
        self.screen.blit(bg,(0,0))



        self.draw_text("Press space bar to play again", 22, WHITE, WIDTH / 2, HEIGHT * 7 / 8)
 HEIGHT / 2 + 40)


        pg.display.flip()
        waiting = True
        while waiting:
            self.clock.tick(FPS)
            for event in pg.event.get():
                if event.type == pg.QUIT:
                    waiting = False
                    self.running = False
                if event.type == pg.KEYDOWN:
                   if event.key == pg.K_SPACE:
                      waiting = False

                      self.PlayMusic()

    def show_winning(self):
        # game over/continue
        if self.winning:
            return

        bg = pg.image.load("TRUMPyouwin3d.png")
        self.screen.blit(bg,(0,0))



        self.draw_text("Press any key to play again", 22, WHITE, WIDTH / 2, HEIGHT * 7 / 8)


        pg.display.flip()

        waiting = True
        while waiting:
            self.clock.tick(FPS)
            for event in pg.event.get():
                if event.type == pg.QUIT:
                    waiting = False
                    self.running = False
                if event.type == pg.KEYDOWN:
                   if event.key == pg.K_SPACE:
                      waiting = False

                      self.PlayMusic()
                      self.player.shield = 100
                      self.trump.shield = 100


    def wait_for_key(self):
        waiting = True
        while waiting:
            self.clock.tick(FPS)
            for event in pg.event.get():
                if event.type == pg.QUIT:
                    waiting = False
                    self.running = False
                if event.type == pg.KEYUP:
                    waiting = False

【问题讨论】:

  • 不要发布你的代码;改为创建minimal reproducible example。这将使问题对其他人更有益,因为它变得更易于阅读、理解、测试/验证,并且也使试图找出问题的人更容易。

标签: python pygame


【解决方案1】:

如果玩家或敌人的生命值小于零,请设置self.playing = False 以停止游戏的while 循环。然后在最外层的while循环中调用游戏实例gshow_go_screen方法。

while g.running:
    g.new()
    g.show_go_screen()

show_go_screen 方法中,对背景图像和文本进行blit(我在全局范围内创建了BACKGROUND_IMG 和FONT 对象),翻转显示并启动另一个带有事件循环的while 循环,您可以在其中检查用户是否想要退出或继续。如果用户退出,您将self.running 设置为False,这样外部的while 循环也会停止,因为它的条件是while g.running:。如果按下空格,您可以从这个 show_go_screen 方法返回,外部 while 循环调用 g.new() 重置游戏。

def show_go_screen(self):
    self.screen.blit(BACKGROUND_IMG, (0, 0))
    text_surface = FONT.render("Press space bar to play again", True, WHITE)
    self.screen.blit(text_surface, (WIDTH / 2, HEIGHT * 7 / 8))
    pg.display.flip()
    done = False
    while not done:
        for event in pg.event.get():
            if event.type == pg.QUIT:
                self.running = False
                done = True
            if event.type == pg.KEYDOWN:
                if event.key == pg.K_SPACE:
                    done = True

        self.clock.tick(FPS)

如果你想制作更复杂的场景/状态,我建议使用finite state machine like this。它实际上只是一个场景管理器类,它允许您在游戏的不同场景/状态之间切换。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-02-16
    • 2018-05-18
    • 1970-01-01
    • 1970-01-01
    • 2020-04-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多