我有一个“游戏结束”屏幕,当您的生命值耗尽时,该屏幕会起作用。该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
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
如果玩家或敌人的生命值小于零,请设置
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)
如果你想制作更复杂的场景/状态,我建议使用像这样的有限状态机。它实际上只是一个场景管理器类,允许您在游戏的不同场景/状态之间切换。