Exemple #1
0
class Game():
    WHITE = (255, 255, 255)

    def __init__(self):
        pygame.init()
        self.WIDTH = 640
        self.HEIGHT = 480
        self.screen = Screen(self.WIDTH, self.HEIGHT)
        self.screen.caption("Squash game")
        self.clock = pygame.time.Clock()
        self.FPS = 30
        RED = (255, 0, 0)
        START = (randint(0, self.WIDTH - 1), 0)
        self.ball = Ball(self.screen.surface, color=RED, start=START)
        left = self.WIDTH // 2
        top = self.HEIGHT - 50
        self.racket = Racket(self.screen.surface, left=left, top=top)
        xpos = left
        ypos = self.HEIGHT // 2
        YELLOW = (255, 255, 0)
        self.msg_gover = Message( self.screen.surface, 'Game Over!!',\
                                  xpos, ypos, color=YELLOW )
        pygame.key.set_repeat(10, 10)

    def fine(self):
        pygame.quit()
        sys.exit()

    def key_event(self):
        for event in pygame.event.get():
            if event.type == QUIT:
                self.fine()
            elif event.type == KEYDOWN:
                if event.key == K_LEFT and self.racket.left > 0:
                    self.racket.movex(-3)
                elif event.key == K_RIGHT and self.racket.right < self.WIDTH:
                    self.racket.movex(3)

    def hitted(self, racket, ball):
        if racket.colliderect(ball):
            ball.dir = -(90 +
                         (racket.centerx - ball.centerx) / racket.width * 100)

    def boundary(self, ball):
        if not (0 < ball.centerx < self.WIDTH):
            ball.dir = 180 - ball.dir
        if ball.centery < 0:
            ball.dir = -ball.dir
        if self.HEIGHT < ball.centery:
            ball.stop_ball()
            self.msg_gover.display()

    def start(self):
        game_over = False
        while not game_over:
            self.key_event()
            self.screen.fill(Game.WHITE)
            self.ball.draw()
            self.racket.draw()
            self.hitted(self.racket, self.ball)
            self.boundary(self.ball)
            self.ball.movexy()
            pygame.display.update()
            self.clock.tick(self.FPS)