2010-04-20 48 views
2

Je tente d'écrire un jeu en utilisant livewires et pygame où j'ai un chef (seule image que j'ai eu, haha), évitez les rochers qui tombent du ciel. Les roches sont censées tomber dans des endroits aléatoires. Je veux qu'il y ait 1 chute de pierre, puis chaque fois que vous réussissez à esquiver un rocher, 2 autres pierres tombent, jusqu'à ce que vous perdiez. Ce que j'ai jusqu'ici, c'est le chef et 1 rock qui tombe. Cependant, pour une raison ou une autre, si les sprites entrent en collision, ou si la pierre touche le bas de l'écran, le jeu se termine, sans donner un message sur le jeu comme je le lui ai dit. Je suis très confus et je ne peux pas voir ce que j'ai fait. Je sais que je ne l'ai pas codé correctement pour la partie des 2 roches, mais je ne peux même pas l'obtenir légèrement. Aidez-moi! Voici ce que j'ai maintenant:'Dodger' jeu de type

from livewires import games, color 
import random 

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


class Chef(games.Sprite): 

    image = games.load_image("chef.bmp") 

    def __init__(self): 
     super(Chef, self).__init__(image = Chef.image, 
            x = games.mouse.x, 
            bottom = games.screen.height) 

    def update(self): 
     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): 
     for pizza in self.overlapping_sprites: 
      if not self.bottom>games.screen.height: 
       self.end_game() 


class Rock(games.Sprite): 

    def update(self): 
     if self.bottom > games.screen.height: 
       new_rock=Rock(x=random.randrange(games.screen.width), 
           y=10, 
           dy=1) 
       games.screen.add(new_rock) 

    def end_game(self): 
     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) 


def main(): 

    wall_image = games.load_image("wall.jpg", transparent = False) 
    games.screen.background = wall_image 

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

    rock_image=games.load_image("rock.bmp") 
    the_rock=Rock(image=rock_image, 
        x=random.randrange(games.screen.width), 
        y=10, 
        dy=1) 
    games.screen.add(the_rock) 

    games.mouse.is_visible = False 

    games.screen.event_grab = True 
    games.screen.mainloop() 

main() 

Répondre

0

Vous avez déclaré méthode end_game dans Rock class mais vous l'appeler de méthode check_catch de Chef class.

+0

Ok, merci. Mon problème principal est que le jeu se termine une fois que le sprite frappe le fond de l'écran, ce que je ne le dis pas! – Jam

+0

Parce que: def check_catch (auto): pour pizza dans self.overlapping_sprites: sinon self.bottom> jeux.screen.height: self.end_game() – ninMonkey