コード例 #1
0
ファイル: main.py プロジェクト: Qwerty10291/pygame_project
class Main:
    def __init__(self, display, fps):  # передаем игровое окно и FPS
        self.display = display
        self.resolution = display.get_size()
        self.FPS = fps
        self.speed = 0
        self.status = 'main_menu'  # отслеживаем текущее положение

        # загружаем очки
        self.key = 'qwerty1029'
        with open('data/score.txt') as f:
            self.scores = int(f.readline())

        # создание Главного меню
        self.main_menu = Main_Menu(
            self.resolution[0], self.resolution[1], {
                'Новая игра': self.new_game,
                'Об игре': self.game_info,
                'Авторы': self.authors,
                'Выход': self.exit
            }, self.resolution[0] // 100 * 5, self.scores)
        # создание Игрового меню
        self.game_menu = Game_Menu(self.resolution[0], self.resolution[1], {
            'Продолжить': self.resume,
            'Назад': self.back
        }, self.resolution[0] // 100 * 5)

        # создание меню авторов
        self.authors_menu = Authors(self.resolution[0], self.resolution[1])
        # создание меню об игре
        self.game_info_menu = GameInfo(self.resolution[0], self.resolution[1])

        self.SPEEDUPEVENT = pygame.USEREVENT + 1
        self.GAMEOVEREVENT = pygame.USEREVENT + 2
        self.keys = 0
        self.keydown = 0

    def new_game(self):  # начало игры
        self.game = Game(self.display, self.resolution[0], self.resolution[1],
                         self.keys, self.keydown)
        channel.play(game_music[0])
        channel.queue(game_music[1])
        pygame.time.set_timer(self.SPEEDUPEVENT, 400)
        self.status = 'game'

    def back(self):
        self.status = 'main_menu'

    def resume(self):
        self.status = 'game'

    def authors(self):
        self.status = 'authors'

    def game_info(self):
        self.status = 'game_info'

    def exit(self):
        exit()

    def event_handler(self, events):  # перехватчик событий
        self.keys = pygame.key.get_pressed()
        for i in events:
            if i.type == pygame.QUIT:
                self.exit()

            self.keyboard_handler(self.keys, i)

            if i.type == self.SPEEDUPEVENT and self.status == 'game':  # ускорение игры
                self.game.speed_up()
                if self.game.speed > 70:
                    self.game.speed = 70
                    pygame.time.set_timer(pygame.USEREVENT + 1,
                                          0)  # перестаем ускорять игру

            if i.type == self.GAMEOVEREVENT:  # выход из игры
                self.status = 'main_menu'
                channel.play(menu_music[0])
                channel.queue(menu_music[1])
                if self.game.score // 10 > self.scores:
                    with open('data/score.txt', 'w') as w:
                        w.write(str(int(self.game.score // 10)))
                    self.scores = int(self.game.score // 10)
                    self.main_menu.update_scores(self.scores)

    def keyboard_handler(self, keys,
                         event):  # переход от игрового меню к игре и обратно
        if keys[pygame.K_h]:
            channel.set_volume(channel.get_volume() + 0.01)

        if keys[pygame.K_l]:
            channel.set_volume(channel.get_volume() - 0.01)

        if keys[pygame.K_ESCAPE] and (self.status == 'authors'
                                      or self.status == 'game_info'):
            self.status = 'main_menu'

        if not (keys[pygame.K_ESCAPE] and 'game' in self.status
                and event.type == pygame.KEYDOWN):
            return
        else:
            self.keydown = True

        self.status = 'game_menu' if self.status == 'game' else 'game'

    def draw(self):  # отрисовка в зависимости от текущего положения
        self.display.fill((0, 0, 0))
        if self.status == 'main_menu':
            self.display.blit(self.main_menu.render(), (0, 0))
            pygame.display.update()

        if self.status == 'game_menu':
            self.game.road.draw_road(self.speed)
            players.draw(self.display)
            cars.draw(self.display)
            rockets.draw(self.display)
            self.display.blit(self.game_menu.render(), (0, 0))
            pygame.display.update()

        if self.status == 'authors':
            self.display.blit(self.authors_menu.render(), (0, 0))
            pygame.display.update()

        if self.status == 'game_info':
            self.display.blit(self.game_info_menu.render(), (0, 0))
            pygame.display.update()

        if self.status == 'game':
            self.game.render(self.keys, self.keydown)
            pygame.display.update()
            self.game.check()
            self.keydown = 0