2017-04-16 15 views
1

健康が枯渇したときに機能するGAME OVER画面があります。このGAME OVER画面はshow_go_screenで実行されます。私はshow_go_screenのメソッドを他の画面のshow_winning()関数に複製しようとしました。ゲームに戻ったときにあなたの健康を正常に戻して、このショーで勝利した機能を組み立てました。しかし、いったんあなたに勝って画面に戻ってゲームに戻ったら、もう一度あなたに勝つことはできません。私はあなたのプレイヤーシールドのコードを以下に含みます(GAME OVER/YOUWINイベントがいつ発生するかを決定します)。show_go_screen(GAME OVER用)とshow_winning()メソッド用のメソッドも含まれています。 YOU WIN画面の場合)。誰かが私のコードを修正して、望ましい結果を得る方法を教えてもらえますか?GAME OVER画面とYOU WIN画面をパイゲームで表示する方法

ここ
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 
+0

コードを投稿しないでください。代わりに[mcve]を作成してください。それは、読んで理解し、テストし、検証するのが容易になり、問題を見つけようとしている人々にとってより簡単になるので、質問を他の人にとってより有益にするでしょう。 –

答えて

1

プレイヤーや敵がゼロ未満の健康を持っている場合は、ゲームのwhileループを停止するself.playing = Falseを設定します。次に、ゲームインスタンスgshow_go_screenメソッドが最も外側のwhileループで呼び出されます。 show_go_screen方法で

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

、(私はグローバルBACKGROUND_IMGとFONTオブジェクトを作成した)背景画像とテキストをブリット、ディスプレイを反転し、ユーザーかどうかをチェックするイベントループで別のwhileループを開始終了したい、または続行したいユーザーが終了する場合は、self.runningFalseに設定して、外側の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を使用することをお勧めします。実際にはシーンマネージャのクラスで、ゲームのさまざまなシーン/状態を切り替えることができます。

関連する問題