Ejemplo n.º 1
0
class GameEvents(GameInterface, EventChecker):
    """
    Считывание, проверка событий во время игровой сессии и запуск персонажей
    Здесь еще частичное управление главного игрока,  в будушем уберу отсюда.
    """
    def __init__(self, game_settings):
        super(GameEvents, self).__init__()
        self.jesus = False
        self.flag = False
        self.game_settings = game_settings
        self.set_frequency_render()
        self.render_details()
        # self.init_music()

    def init_music(self):
        self.music_back = MusicBackground()
        self.music_back.start()

        self.music_kill = MusicKill()
        self.music_win = MusicWin()
        self.music_shoot = MusicShootEnem()

    def set_frequency_render(self):
        self.timer = QBasicTimer()
        self.timer.start(10, self)

    def init_player(self):
        self.stop_game = False
        self.player = Player(self)
        self.old_bullet_enem = None
        self.old_bullet_pl = None

    def init_enemies(self):
        self.enemies = Enemies(self, self.signal, self.game_settings)

    def init_signals(self):
        self.signal = Signals()
        self.signal.closed_signal.connect(self.close_game)
        self.signal.stop_game_singal.connect(self.menu)
        self.signal.restart_signal.connect(self.restart_game)
        self.signal.reverse_bullet_player.connect(self.player.reverse_bullet)

    def init_defenders(self):
        self.defenders = Defenders(self, self.player, self.enemies)

    def render_details(self):
        self.init_player()
        self.init_signals()
        self.init_enemies()
        self.init_values()
        self.init_defenders()

    def init_values(self):
        self.boomm, self.traffic_left, self.traffic_right = False, False, False

    def check_borders(self, direction):
        x = self.player.player_label.x()
        if direction == "left":
            return x > 0
        else:
            return x < 780

    def keyPressEvent(self, QKeyEvent):
        """
        Фиксирование нажатых кнопокж.
        Запуск потока пуль иг   рока.
        """
        if not self.stop_game and not self.flag:
            even_key = QKeyEvent.key()
            if even_key == Qt.Key_Right:
                self.traffic_right = True
            if even_key == Qt.Key_Left:
                self.traffic_left = True
            if even_key == Qt.Key_Space:
                self.jesus = False
                if self.player.bullet_flag:
                    self.signal.reverse_bullet_player.emit(True)
                    self.player.bullet_thread.start()

    def keyReleaseEvent(self, event):
        """Фиксирование отжатых кнопок, во благо плавности"""

        key = event.key()
        if key == Qt.Key_Right and not event.isAutoRepeat(
        ) and self.traffic_right:
            self.traffic_right = False
        if key == Qt.Key_Left and not event.isAutoRepeat(
        ) and self.traffic_left:
            self.traffic_left = False

    def timerEvent(self, event):
        """Движение главного игрока
         Проверка выстрелов в игрока"""

        if not self.stop_game:
            if self.traffic_left:
                self.player.motion_player("left")
            if self.traffic_right:
                self.player.motion_player("right")

        bullet_en = self.enemies.registr_bullet_hit_en(self.player)
        self.game_event(bullet_en)

    def game_event(self, bullet_en):
        if bullet_en != self.old_bullet_enem and bullet_en and self.lives > 0 and not self.jesus:
            self.jesus = True
            self.old_bullet_enem = bullet_en

            self.player.died_thread()
            self.traffic_right, self.traffic_left = False, False
            self.hide_dop_player(self.lives)
            # self.music_kill.start()
            self.count_lives()

        if self.stop_game:
            self.menu(False, False)

        answer, killed_enemies = self.enemies.registr_bullet_hit_pl(
            self.player)
        if answer > 0:
            # self.music_shoot.start()
            self.signal.reverse_bullet_player.emit(False)

            self.count_score(answer)
            self.redrawing_score()

        if killed_enemies:
            self.menu(False, True)

    def kill_threads(self):
        self.defenders.kill_threads()
        self.enemies.kill_threads()

    def menu(self, draw_line, result_game):
        if not self.flag:
            self.flag = True
            self.kill_threads()
            if draw_line:
                self.redrawing_line()
            self.enemies.signal.hide_enemies_signal.emit()
            self.draw_menu(result_game)

    def music_event(self):
        self.music_back.terminate()

    def draw_menu(self, result_game):
        # self.music_event()
        self.close()
        new_win = QuestionsInterface(self, self.signal, self.score,
                                     result_game)
        new_win.show()

    def restart_game(self):
        self.close_game()
        os.system("python start.py")

    def close_game(self):
        self.close()

    def closeEvent(self, event):
        self.close_game()