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

问题描述 投票:0回答:1

我有一个“游戏结束”屏幕,当您的生命值耗尽时,该屏幕会起作用。该GAME OVER 屏幕是通过show_go_screen 执行的。我尝试将 show_go_screen 的方法复制到另一个屏幕的 show_ Winning() 函数中。我通过在返回游戏时将你的健康状况恢复正常来操纵这个表演获胜功能。然而,一旦您进入 YOU WIN 屏幕并返回游戏,您将无法再次进入 YOU WIN 屏幕。我在下面包含了我的玩家盾牌的代码(它确定何时有 GAME OVER/YOUWIN 事件) 我还包含了 show_go_screen 的方法(用于 GAME OVER)和 show_writing() 方法的代码(即用于“你赢了”屏幕)。如果有人可以告诉我如何最好地修改我的代码以获得所需的结果。

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
python pygame
1个回答
2
投票

如果玩家或敌人的生命值小于零,请设置

self.playing = False
以停止游戏的 while 循环。然后在最外层的 while 循环中调用游戏实例
show_go_screen
g
方法。

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)

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

© www.soinside.com 2019 - 2024. All rights reserved.