/
maksud31
/
IT_TOP_PRACTICA
Обзор
Документация
Войти
/
maksud31
/
IT_TOP_PRACTICA
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
master
tests/main.py
216 строк
10 KB
maksud31
загрузка тестирования проекта
25 дек 2025, 14:24
25 дек 2025, 14:24
0305b8c
Код
Авторство
О чём код?
#!/usr/bin/env python3 """ Главный модуль игры "Виселица". """ import os import sys import time try: from file_manager import FileManager from game_logic import HangmanGame from player_manager import PlayerManager from statistics import StatisticsManager from ui import ConsoleUI print("✓ Все модули загружены успешно!") except ImportError as e: print(f"✗ Ошибка импорта: {e}") print("Убедитесь, что в папке есть файлы:") print(" - file_manager.py") print(" - game_logic.py") print(" - player_manager.py") print(" - statistics.py") print(" - ui.py") sys.exit(1) def load_words(): """Загрузка слов из файла.""" try: words_file = 'data/words.txt' if not os.path.exists(words_file): os.makedirs('data', exist_ok=True) default_words = [ "ПРОГРАММА", "КОМПЬЮТЕР", "АЛГОРИТМ", "БАЗАДАННЫХ", "ИНТЕРФЕЙС", "ПРОГРАММИСТ", "РАЗРАБОТКА", "ТЕХНОЛОГИЯ", "ИНФОРМАЦИЯ", "СИСТЕМА", "ПРИЛОЖЕНИЕ", "ФУНКЦИЯ" ] with open(words_file, 'w', encoding='utf-8') as f: for word in default_words: f.write(word + "\n") return default_words with open(words_file, 'r', encoding='utf-8') as f: words = [line.strip().upper() for line in f if line.strip()] if not words: print("Файл words.txt пуст!") return ["ПРОГРАММА", "КОМПЬЮТЕР", "АЛГОРИТМ"] return words except Exception as e: print(f"Ошибка загрузки слов: {e}") return ["ПРОГРАММА", "КОМПЬЮТЕР", "АЛГОРИТМ"] def main(): """Главная функция игры.""" print("=" * 50) print(" ИГРА 'ВИСЕЛИЦА'") print("=" * 50) # Загружаем слова words = load_words() print(f"Загружено {len(words)} слов.") try: # Создаем компоненты игры file_manager = FileManager() player_manager = PlayerManager(file_manager) stats_manager = StatisticsManager(file_manager) ui = ConsoleUI() print("Инициализация завершена!") time.sleep(1) # Главный игровой цикл while True: try: # Показываем главное меню ui.display_main_menu(player_manager.current_player) choice = ui.get_menu_choice() if choice == '1': # Новая игра if not player_manager.current_player: ui.display_error("Сначала зарегистрируйтесь или выберите игрока!") continue # Создаем игру game = HangmanGame(words) result = game.play(ui) # Сохраняем результат if result: file_manager.save_game_result( player_manager.current_player, result['word'], result['result'], result['time_seconds'], result['errors_count'], result['guessed_letters'] ) # Показываем результат if result['result'] == 'win': ui.display_message(f"Поздравляем! Вы угадали слово '{result['word']}' за {result['time_seconds']} секунд!") else: ui.display_message(f"К сожалению, вы проиграли. Загаданное слово: '{result['word']}'") input("\nНажмите Enter для продолжения...") elif choice == '2': # Статистика игрока if not player_manager.current_player: ui.display_error("Сначала зарегистрируйтесь или выберите игрока!") continue stats = stats_manager.get_player_statistics(player_manager.current_player) ui.display_player_statistics(stats) elif choice == '3': # Таблица рекордов while True: ui.display_leaderboard_menu() sort_by = ui.get_menu_choice(['1', '2', '3', '0']) if sort_by == '0': break elif sort_by == '1': leaderboard = stats_manager.get_leaderboard('wins') ui.display_leaderboard(leaderboard, "ТОП-10 ИГРОКОВ (по количеству побед)") break elif sort_by == '2': leaderboard = stats_manager.get_leaderboard('win_rate') ui.display_leaderboard(leaderboard, "ТОП-10 ИГРОКОВ (по проценту побед)") break elif sort_by == '3': leaderboard = stats_manager.get_leaderboard('best_time') ui.display_leaderboard(leaderboard, "ТОП-10 ИГРОКОВ (по лучшему времени)") break elif choice == '4': # Смена игрока ui.clear_screen() print("=" * 50) print(" СМЕНА ИГРОКА") print("=" * 50) print("\n1. Выбрать существующего игрока") print("2. Зарегистрировать нового игрока") print("0. Вернуться в меню") action = input("\nВыберите действие: ").strip() if action == '1': # Выбор существующего игрока players = file_manager.get_all_players() if not players: ui.display_message("Нет зарегистрированных игроков.") else: print("\nСписок игроков:") for i, player in enumerate(players, 1): stats = stats_manager.get_player_statistics(player['name']) print(f"{i}. {player['name']} - Игр: {stats['total_games']}, Побед: {stats['wins']}") name = ui.get_player_name("\nВведите имя игрока: ") if player_manager.select_player(name): ui.display_message(f"Выбран игрок: {name}") else: ui.display_error("Игрок не найден!") input("\nНажмите Enter для продолжения...") elif action == '2': # Регистрация нового игрока name = ui.get_player_name("\nВведите имя для регистрации: ") if player_manager.register_player(name): ui.display_message(f"Игрок {name} успешно зарегистрирован!") else: ui.display_error("Игрок с таким именем уже существует!") input("\nНажмите Enter для продолжения...") elif choice == '5': # Выход ui.clear_screen() print("=" * 50) print(" СПАСИБО ЗА ИГРУ! ДО СВИДАНИЯ!") print("=" * 50) time.sleep(1) break else: ui.display_error("Неверный выбор! Попробуйте снова.") except KeyboardInterrupt: print("\n\nИгра прервана. До свидания!") time.sleep(1) break except Exception as e: ui.display_error(f"Произошла ошибка: {str(e)}") import traceback traceback.print_exc() input("\nНажмите Enter для продолжения...") except Exception as e: print(f"Критическая ошибка при запуске: {e}") input("\nНажмите Enter для выхода...") if __name__ == "__main__": main()