2016-07-29 6 views
0

私は、私が試しているゲームを持っており、毎回100、200、300などになる度にレベルを上げようとしています。スコアが数百に達するとレベルが上がります

は、ここに私の関数であり、それはおそらく、私は機能が__init__()にあったことを発見@redunderthebedに

感謝を行うことを忘れています非常にシンプルなもので、それは、if文になっていなかったこと。そこでレベルをifループに変更しました。だから私はmain()メソッドに移しましたが、スコアが100になるとまだループには入りません。if私はここで間違って何をしていますか?

# Pizza Panic 
# Player must catch falling pizzas before they hit the ground 


from livewires import games, color 
from random import randrange 


games.init(screen_width=640, screen_height=480, fps=50) 


class Pan(games.Sprite): 
    """ A pan controlled by player to catch falling pizzas """ 
    image = games.load_image("pan.bmp") 

    def __init__(self): 
     """ Initialize the pan object and create Text object for score """ 
     super(Pan, self).__init__(image=Pan.image, 
            x=games.mouse.x, 
            bottom=games.screen.height) 
     self.score = games.Text(value=0, size=25, color=color.black, 
           top=5, right=games.screen.width - 10) 
     games.screen.add(self.score) 

     self.level = 0 

    def update(self): 
     """ move to mouse x position """ 
     self.x = games.mouse.x 

     if self.left < 0: 
      self.left = 0 

     if self.right > games.screen.width: 
      self.right = games.screen.width 

     self.check_catch() 

    def check_catch(self): 
     """ Check if catch pizzas """ 
     for pizza in self.overlapping_sprites: 
      self.score.value += 10 
      self.score.right = games.screen.width - 10 
      pizza.handle_caught() 


class Pizza(games.Sprite): 
    """ a pizza which falls to the ground """ 
    image = games.load_image("pizza.bmp") 
    speed = 1 

    def __init__(self, x, y=90): 
     """ Initialize a pizza object """ 
     super(Pizza, self).__init__(image=Pizza.image, 
            x=x, y=y, 
            dy=Pizza.speed) 

    def update(self): 
     """ Check if bottom edge has reached screen bottom """ 
     if self.bottom > games.screen.height: 
      self.end_game() 
      self.destroy() 

    def handle_caught(self): 
     """ Destroy self if caught """ 
     self.destroy() 

    def end_game(self): 
     """ End the game """ 
     end_message = games.Message(value="Game Over", 
            size=90, 
            color=color.red, 
            x=games.screen.width/2, 
            y=games.screen.height/2, 
            lifetime=5 * games.screen.fps, 
            after_death=games.screen.quit) 
     games.screen.add(end_message) 


class Chef(games.Sprite): 
    """ A chef which moves left and right, dropping pizzas """ 
    image = games.load_image("chef.bmp") 

    def __init__(self, y=55, speed=2, odds_change=200): 
     """ Initialize the chef object """ 
     super(Chef, self).__init__(image=Chef.image, 
            x=games.screen.width/2, 
            y=y, 
            dx=speed) 
     self.odds_change = odds_change 
     self.time_til_drop = 0 

    def update(self): 
     """ Determine if direction needs to be reversed """ 
     if self.left < 0 or self.right > games.screen.width: 
      self.dx = -self.dx 
     elif randrange(self.odds_change) == 0: 
      self.dx = -self.dx 

     self.check_drop() 

    def check_drop(self): 
     """ Decrease countdown or drop pizza and reset countdown """ 

     if self.time_til_drop > 0: 
      self.time_til_drop -= 1 
     else: 
      new_pizza = Pizza(x=self.x) 
      games.screen.add(new_pizza) 

      # set buffer to approx 30% of pizza height, regardless of pizza 
      # speed 
      self.time_til_drop = int(new_pizza.height * 1.3/Pizza.speed) + 1 


def main(): 
    """ Play the game """ 
    wall_image = games.load_image("wall.jpg", transparent=False) 
    games.screen.background = wall_image 

    the_chef = Chef() 
    games.screen.add(the_chef) 

    the_pan = Pan() 
    games.screen.add(the_pan) 
    score = the_pan.score.value 
    if score % 100 == 0: 
     the_pan.level += 1 
     the_pan.level_msg = games.Message(value="LEVEL {}" 
              .format(the_pan.level), 
              size=90, 
              color=color.red, 
              x=games.screen.width/2, 
              y=games.screen.height/2, 
              lifetime=5 * games.screen.fps, 
              after_death=None) 
     games.screen.add(the_pan.level_msg) 
     pizza = Pizza(x=0) 
     pizza.speed += 1 
    else: 
     print("not getting into the if statement") 

    games.mouse.is_visible = False 
    games.screen.event_grab = True 
    games.screen.mainloop() 


# start it up 
main() 
+0

、どのくらいの頻度これは呼ばれているのですか?あなたのプレーヤーのスコアが変わったときにifステートメントに到達していることは確かですか? – redunderthebed

+0

表示問題を修正したら、レベルアップチェックを行う関数の呼び出しの間に現在のスコアが進まない場合には、事前スコア変数を使用することを検討することができます。 Init.scoreを0に初期化する。(スコア - prior.score)> = 100)、trueならprior.score + = 100、self.level + = 1、更新表示。 (ループを使用すると、スコアが200以上進んだ場合が処理されます)。 – rcgldr

+0

これは良い質問です。私はそれがそこに着くと思ったが、明らかにそれがメッセージを見ていない理由ではないかもしれない。私はそれを他の場所に移動しようとします。 – DarthOpto

答えて

1

私はLivewiresのための任意の実際のドキュメントを見つけることができませんでしたが、私はあなたのコードに基づいて言おう(と、それは何をやっていると仮定して)あなたがここにあなたのレベルチェックを入れる必要があるんだ:

def update(self): 
    """ move to mouse x position """ 
    self.x = games.mouse.x 

    if self.left < 0: 
     self.left = 0 

    if self.right > games.screen.width: 
     self.right = games.screen.width 

    self.check_catch() 
    self.check_level() 

これはinit関数のように見えるかもしれcheck_level()

def check_level(self): 
    if not self.score.value % 100: 
     self.level += 1 
     self.level_msg = games.Message(value="LEVEL {}" 
             .format(the_pan.level), 
             size=90, 
             color=color.red, 
             x=games.screen.width/2, 
             y=games.screen.height/2, 
             lifetime=5 * games.screen.fps, 
             after_death=None) 
    games.screen.add(the_pan.level_msg) 
+0

ありがとう、私はそれにショットを与えます – DarthOpto

+0

これは、並べ替えの作品です。レベルは常に更新されます。たとえば、メッセージが消えたときには、私はレベル317になりました。ゲームが始まるとすぐに、レベルアップしていました。それは自分のクラスでスコアを持つ方が良いでしょうか? – DarthOpto

+0

更新メソッドはすべてのフレームで呼び出されるので、代わりにスコアを更新するときにcheck_levelを呼び出すことができます。そうすれば、スコアごとに1回だけ実行されます。 – redunderthebed

関連する問題