如何在pygame中显示GAME OVER屏幕和YOU WIN屏幕

时间:2017-04-16 20:50:14

标签: python pygame

我的GAME OVER屏幕在您的健康状况耗尽时正常运作。使用show_go_screen执行此GAME OVER屏幕。我试图将show_go_screen的方法复制到另一个屏幕的show_winning()函数中。我回到游戏时通过设置你的健康恢复正常来操纵这个节目获胜功能。然而,一旦你进入你的WIN屏幕并返回游戏,你就无法再次进入你的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

1 个答案:

答案 0 :(得分:1)

如果玩家或敌人的生命值低于零,请设置self.playing = False,以便在循环时停止游戏。然后在最外面的while循环中调用游戏实例show_go_screen的{​​{1}}方法。

g

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

g.new()

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