Example #1
0
class Game:
    def __init__(self):
        self.wins = 0
        self.init_new_game()

    def init_new_game(self):
        pygame.init()
        pygame.font.init()
        pygame.display.set_caption('Catch The Monster!')
        self.screen = pygame.display.set_mode((width, height))
        self.clock = pygame.time.Clock()
        self.winning_sound = pygame.mixer.Sound('sounds/win.wav')
        self.losing_sound = pygame.mixer.Sound('sounds/lose.wav')
        self.game_music = pygame.mixer.Sound('sounds/music.wav')
        self.hero = Hero('images/hero.png', 255, 235)
        self.monster = Monster('images/monster.png',
                               random.randint(20, width - 20),
                               random.randint(20, height - 20))
        self.create_goblins()
        self.background_image = pygame.image.load(
            'images/background.png').convert_alpha()
        self.wins += 1
        self.game_over = False

    def create_goblins(self):
        self.goblins = []
        for i in range(0, self.wins + 1):
            self.goblins.append(
                Goblin('images/goblin.png', random.randint(20, width - 20),
                       random.randint(20, height - 20)))

    def start(self):
        self.game_music.play()
        while not self.game_over:
            self.monster.return_to_screen(width, height)
            for event in pygame.event.get():
                self.handle_event(event)

            self.monster.move_and_loop(width, height)
            self.monster.determine_new_direction()
            self.hero.move_position()
            self.hero.confine_to_bushes(width, height, 62, 32)

            if not self.monster.dead and self.hero.collision(32, self.monster):
                self.winning_sound.play()
                self.monster.dead = True
                print("collision!")

            # Game display
            self.screen.blit(self.background_image, (0, 0))
            # self.hero.render(self.screen)
            if not self.monster.dead:
                self.monster.render(self.screen)
            else:
                font = pygame.font.Font(None, 32)
                text = font.render('You win! Press ENTER to play again.', True,
                                   (0, 0, 0))
                self.screen.blit(text, (60, 230))

            for goblin in self.goblins:
                goblin.move_and_loop(width, height)
                goblin.determine_new_direction()
                goblin.render(self.screen)
                if self.hero.collision(32, goblin):
                    self.hero.dead = True
                    self.losing_sound.play()
                if not self.hero.dead:
                    self.hero.render(self.screen)
                else:
                    goblin.offscreen_goblin()
                    self.monster.offscreen_monster()
                    self.monster.alive_and_move = False
                    font = pygame.font.Font(None, 32)
                    text = font.render('You lose! Press ENTER to play again.',
                                       True, (0, 0, 0))
                    self.screen.blit(text, (60, 230))

            self.clock.tick(60)
            pygame.display.update()

        pygame.quit()

    def handle_event(self, event):
        KEY_UP = 273
        KEY_DOWN = 274
        KEY_LEFT = 276
        KEY_RIGHT = 275

        if event.type == pygame.KEYDOWN:
            if event.key == KEY_DOWN:
                self.hero.key_direction_y = 4
            elif event.key == KEY_UP:
                self.hero.key_direction_y = -4
            if event.key == KEY_LEFT:
                self.hero.key_direction_x = -4
            elif event.key == KEY_RIGHT:
                self.hero.key_direction_x = 4
            elif event.key == pygame.K_RETURN:
                # self.wins += 1
                self.init_new_game()

        elif event.type == pygame.KEYUP:
            if event.key == KEY_DOWN:
                self.hero.key_direction_y = 0
            elif event.key == KEY_UP:
                self.hero.key_direction_y = 0
            if event.key == KEY_LEFT:
                self.hero.key_direction_x = 0
            elif event.key == KEY_RIGHT:
                self.hero.key_direction_x = 0

        if event.type == pygame.QUIT:
            self.game_over = True