Загрузка данных


def explain_rules(self):
        """Объяснение правил игры"""
        rules = [
            "Добро пожаловать в викторину-лабиринт!",
            "Правила:",
            "1. Перед тобой будут стены с вопросами",
            "2. Ударь по золотому блоку чтобы получить вопрос",
            "3. Ответь в чат цифрой (1-4)",
            "4. За правильный ответ откроется проход",
            "5. За ошибку теряешь жизнь (всего 3 жизни)",
            "6. Пройди все 10 уровней чтобы победить!",
            "Удачи!"
        ]
        
        for line in rules:
            mc.postToChat(line)
            time.sleep(1)
    
    def build_start_area(self):
        """Построение стартовой площадки"""
        self.player_pos = mc.player.getTilePos()
        x, y, z = self.player_pos.x, self.player_pos.y, self.player_pos.z
        
        # Очистка области
        mc.setBlocks(x-CORRIDOR_WIDTH-1, y-1, z-5, 
                    x+CORRIDOR_WIDTH+1, y+WALL_HEIGHT+1, z+LEVELS*WALL_DISTANCE+10, 
                    AIR_BLOCK)
        
        # Пол
        mc.setBlocks(x-CORRIDOR_WIDTH-1, y-1, z-5, 
                    x+CORRIDOR_WIDTH+1, y-1, z+LEVELS*WALL_DISTANCE+10, 
                    FLOOR_BLOCK)
        
        # Боковые стены
        mc.setBlocks(x-CORRIDOR_WIDTH, y, z-5, 
                    x-CORRIDOR_WIDTH, y+WALL_HEIGHT, z+LEVELS*WALL_DISTANCE+10, 
                    WALL_BLOCK)
        mc.setBlocks(x+CORRIDOR_WIDTH, y, z-5, 
                    x+CORRIDOR_WIDTH, y+WALL_HEIGHT, z+LEVELS*WALL_DISTANCE+10, 
                    WALL_BLOCK)
        
        # Задняя стена (чтобы игрок не мог вернуться)
        mc.setBlocks(x-CORRIDOR_WIDTH, y, z-1, 
                    x+CORRIDOR_WIDTH, y+WALL_HEIGHT, z-1, 
                    WALL_BLOCK)
        
        # Стартовая точка
        mc.setBlock(x, y, z, START_BLOCK)
        
        # Первая стена
        self.build_wall(z + WALL_DISTANCE)
    
    def build_wall(self, wall_z):
        """Построение стены с вопросом"""
        x, y, z = self.player_pos.x, self.player_pos.y, wall_z
        
        # Строим стену
        mc.setBlocks(x-5, y, z, x+5, y+WALL_HEIGHT, z, WALL_BLOCK)
        
        # Железные ворота (закрытый проход)
        self.gate_pos = (x, y, z)
        mc.setBlock(x, y, z, GATE_BLOCK)
        mc.setBlock(x, y+1, z, GATE_BLOCK)

        # Блок вопроса по центру
        mc.setBlock(x, y+1, z, QUESTION_BLOCK)
        
        self.current_wall_pos = z
    
    def ask_question(self):
        """Задать вопрос и проверить ответ"""
        question_data = self.questions[self.current_level % len(self.questions)]
        mc.postToChat(question_data["question"])
        for answer in question_data["answers"]:
            mc.postToChat(answer)
        
        # Ждем ответа
        start_time = time.time()
        
        while time.time() - start_time < 30:
            events = mc.events.pollChatPosts()
            for event in events:
                try:
                    answer = int(event.message)
                    if 1 <= answer <= 4:
                        if answer == question_data["correct"]:
                            praise = random.choice(question_data["praise"])
                            mc.postToChat(praise)
                            return True
                        else:
                            return False
                except ValueError:
                    pass
            time.sleep(0.1)
        
        return False
    
    def open_gate(self):
        """Открыть проход в стене"""
        if self.gate_pos:
            x, y, z = self.gate_pos
            mc.setBlock(x, y, z, AIR_BLOCK)
            mc.setBlock(x, y+1, z, AIR_BLOCK)
            mc.postToChat("Проход открыт! Иди дальше!")
    
    def check_player_progress(self):
        """Проверка прогресса игрока"""
        pos = mc.player.getTilePos()
        
        # Если игрок прошёл через стену
        if self.current_wall_pos and pos.z > self.current_wall_pos:
            self.current_level += 1
            
            if self.current_level >= LEVELS:
                # Финиш
                mc.setBlock(pos.x, pos.y, pos.z + 5, FINISH_BLOCK)
                mc.postToChat("Поздравляем! Ты прошел все уровни!")
                time.sleep(5)
                self.reset_game()
            else:
                # Строим следующую стену
                self.build_wall(pos.z + WALL_DISTANCE)
                mc.postToChat(f"Уровень {self.current_level}! Ответь на вопрос чтобы пройти дальше!")
    
    def reset_game(self):
        """Сброс игры"""
        self.current_level = 0
        self.lives = LIVES
        self.build_start_area()
        mc.postToChat("Игра началась заново!")
    
    def run(self):
        """Основной цикл игры"""
        self.build_start_area()
        self.explain_rules()
        
        while True:
            # Проверяем, ударил ли игрок блок вопроса
            hits = mc.events.pollBlockHits()
            for hit in hits:
                hit_block = mc.getBlock(hit.pos.x, hit.pos.y, hit.pos.z)
                if hit_block == QUESTION_BLOCK:
                    correct = self.ask_question()
                    if correct:
                        self.open_gate()
                    else:
                        self.lives -= 1
                        mc.postToChat(f"Неверно! Осталось {self.lives} жизней.")
                        if self.lives <= 0:
                            mc.postToChat("Игра окончена! Начинаем заново.")
                            time.sleep(3)
                            self.reset_game()
            
            # Проверяем прогресс игрока
            self.check_player_progress()
            
            time.sleep(0.1)

# Запуск игры
if __name__ == "__main__":
    game = LabyrinthGame()
    game.run()