Ultimate Football Manager

Python
import random
import time
import sys

def play_game():
    print("\n" + "="*50)
    print("⚽️ ДОБРО ПОЖАЛОВАТЬ В ULTIMATE FOOTBALL MANAGER! ⚽️")
    print("="*50)
    print("Правила:\n1. Создай своего Капитана.\n2. Собери команду, укладываясь в БЮДЖЕТ.\n⚠️ ВНИМАНИЕ: Если вы попытаетесь купить игрока, на которого нет денег — ВЫ ПРОИГРАЕТЕ!\n3. Выбери тренера и тактику.\n4. Выиграй Лигу Чемпионов!")
    print("="*50)

    # --- 1. ВЫБОР НАЗВАНИЯ КОМАНДЫ ---
    team_name = input("\nВведите название вашей команды: ").strip()
    if not team_name:
        team_name = "Dream Team"

    # --- 2. СОЗДАНИЕ СОБСТВЕННОГО КАПИТАНА ---
    print("\n✍️ СОЗДАНИЕ КАПИТАНА:")
    captain_name = input("Введите имя вашего Капитана (например, ваше имя): ").strip()
    if not captain_name:
        captain_name = "Игрок"

    positions = [
        "Нападающий", "Левый вингер", "Правый вингер",
        "Левый полузащитник", "Центральный атакующий полузащитник", "Правый полузащитник",
        "Левый защитник", "Центральный защитник", "Второй центральный защитник",
        "Правый защитник", "Вратарь"
    ]

    print("\nНа какой позиции будет играть ваш Капитан?")
    for idx, pos in enumerate(positions):
        print(f"{idx + 1}. {pos}")
    
    while True:
        try:
            cap_pos_choice = int(input(f"Выберите номер позиции (1-11): ").strip())
            if 1 <= cap_pos_choice <= 11:
                captain_pos_idx = cap_pos_choice - 1
                break
            print("❌ Введите число от 1 до 11!")
        except ValueError:
            print("❌ Пожалуйста, введите корректное число.")

    print(f"\n⭐️ Капитан {captain_name} успешно зарегистрирован на позицию: {positions[captain_pos_idx]}!")

    # --- Данные футболистов: [Имя, Цена в млн €, Рейтинг] ---
    word_by_players = [
        # 1. Нападающий
        [{"name": "Эрлинг Холанд", "price": 60, "rating": 91}, {"name": "Роберт Левандовски", "price": 35, "rating": 88}, {"name": "Гарри Кейн", "price": 40, "rating": 89}],
        # 2. Левый вингер
        [{"name": "Килиан Мбаппе", "price": 65, "rating": 92}, {"name": "Винисиус Жуниор", "price": 55, "rating": 89}, {"name": "Хвича Кварацхелия", "price": 35, "rating": 86}],
        # 3. Правый вингер
        [{"name": "Лионель Месси", "price": 45, "rating": 90}, {"name": "Мохамед Салах", "price": 40, "rating": 89}, {"name": "Родриго", "price": 30, "rating": 85}],
        # 4. Левый полузащитник
        [{"name": "Фил Фоден", "price": 35, "rating": 87}, {"name": "Рафаэл Леау", "price": 30, "rating": 86}, {"name": "Кингсли Коман", "price": 20, "rating": 84}],
        # 5. Центральный атакующий полузащитник
        [{"name": "Джуд Беллингем", "price": 55, "rating": 90}, {"name": "Кевин Де Брюйне", "price": 50, "rating": 91}, {"name": "Мартин Эдегор", "price": 35, "rating": 87}],
        # 6. Правый полузащитник
        [{"name": "Букайо Сака", "price": 40, "rating": 88}, {"name": "Бернарду Силва", "price": 35, "rating": 87}, {"name": "Федерико Кьеза", "price": 20, "rating": 84}],
        # 7. Левый защитник
        [{"name": "Альфонсо Дэвис", "price": 30, "rating": 86}, {"name": "Тео Эрнандес", "price": 25, "rating": 85}, {"name": "Эндрю Робертсон", "price": 20, "rating": 84}],
        # 8. Центральный защитник
        [{"name": "Вирджил ван Дейк", "price": 45, "rating": 89}, {"name": "Антонио Рюдигер", "price": 35, "rating": 87}, {"name": "Уильям Салиба", "price": 30, "rating": 86}],
        # 9. Второй центральный защитник
        [{"name": "Рубен Диаш", "price": 40, "rating": 89}, {"name": "Маркиньос", "price": 30, "rating": 86}, {"name": "Алессандро Бастони", "price": 20, "rating": 84}],
        # 10. Правый защитник
        [{"name": "Кайл Уокер", "price": 30, "rating": 85}, {"name": "Ашраф Хакими", "price": 30, "rating": 84}, {"name": "Трент Александер-Арнольд", "price": 25, "rating": 85}],
        # 11. Вратарь
        [{"name": "Тибо Куртуа", "price": 35, "rating": 90}, {"name": "Алиссон Бекер", "price": 30, "rating": 89}, {"name": "Эдерсон", "price": 25, "rating": 88}]
    ]

    # --- 3. ТРАНСФЕРНОЕ ОКНО С БЮДЖЕТОМ ---
    budget = 300  # Стартовый бюджет 300 млн €
    chosen_players = []

    print("\n--- ШАГ 1: ПОКУПКА ИГРОКОВ ---")
    print(f"Ваш трансферный бюджет: 💰 {budget} млн €")

    for i in range(11):
        current_position = positions[i]
        
        # Если это позиция Капитана, он добавляется бесплатно
        if i == captain_pos_idx:
            captain_player = {"name": f"⭐ {captain_name} (К)", "price": 0, "rating": 90}
            chosen_players.append(captain_player)
            print(f"\nПозиция {i+1}: {current_position}")
            print(f"✅ На этой позиции бесплатно играет ваш Капитан {captain_name}!")
            continue

        options = word_by_players[i]
        print(f"\nПозиция {i+1}: {current_position}")
        print(f"Доступные кандидаты:")
        for idx, opt in enumerate(options):
            print(f"  {idx+1}. {opt['name']} | Рейтинг: {opt['rating']} | Цена: {opt['price']} млн €")
        
        while True:
            choice = input(f"Код/Имя игрока (Бюджет: {budget} млн €): ").strip()
            selected_player = None
            
            if choice in ["1", "2", "3"]:
                selected_player = options[int(choice) - 1]
            else:
                for opt in options:
                    if choice.lower() == opt["name"].lower():
                        selected_player = opt
                        break
            
            if not selected_player:
                print("❌ Неверный ввод!")
                continue
                
            # ГЛАВНОЕ ИЗМЕНЕНИЕ: Немедленный проигрыш при нехватке денег
            if selected_player["price"] > budget:
                print("\n" + "!" * 55)
                print("❌ У ВАС НЕ ПОЛУЧИЛОСЬ! КЛУБ ОБЪЯВЛЕН БАНКРОТОМ!")
                print(f"Вы пытались купить {selected_player['name']} за {selected_player['price']} млн €.")
                print(f"Ваш оставшийся бюджет составлял всего {budget} млн €.")
                print("Нарушены правила финансового фэйр-плей. Игра окончена!")
                print("!" * 55)
                time.sleep(2)
                return False  # Завершаем игру неудачей

            # Проверка повторов
            if selected_player["name"] in [p["name"] for p in chosen_players]:
                print(f"⚠️ {selected_player['name']} уже куплен в вашу команду!")
            else:
                chosen_players.append(selected_player)
                budget -= selected_player["price"]
                print(f"✅ {selected_player['name']} успешно куплен за {selected_player['price']} млн €!")
                break

    # --- 4. ВЫБОР ТРЕНЕРА ---
    print("\n--- ШАГ 2: ВЫБОР ГЛАВНОГО ТРЕНЕРА ---")
    print("Каждый тренер дает команде уникальный тактический бонус!")
    print("1. Пеп Гвардиола (+3 к силе атаки)")
    print("2. Карло Анчелотти (+3 к защите и силе вратаря)")
    print("3. Юрген Клопп (+3 к стойкости против травм и красных карточек)")
    
    coaches = ["Пеп Гвардиола", "Карло Анчелотти", "Юрген Клопп"]
    chosen_coach = ""
    while True:
        c_choice = input("Кто возглавит ваш клуб? (1-3): ").strip()
        if c_choice in ["1", "2", "3"]:
            chosen_coach = coaches[int(c_choice) - 1]
            break
        print("❌ Выберите тренера из списка!")

    # Подсчет среднего рейтинга команды
    avg_rating = round(sum(p["rating"] for p in chosen_players) / 11, 1)

    # --- 5. ПРЕЗЕНТАЦИЯ ---
    print("\n" + "="*45)
    print(f"🔥 ПРЕЗЕНТАЦИЯ КЛУБА '{team_name.upper()}' 🔥")
    print(f"Главный тренер: 👔 {chosen_coach}")
    print(f"Средний рейтинг состава: ⭐ {avg_rating}")
    print(f"Остаток бюджета: 💰 {budget} млн €")
    print("-" * 45)
    print("СОСТАВ КОМАНДЫ:")
    for pos, player in zip(positions, chosen_players):
        print(f"• {pos:30} | {player['name']} (★{player['rating']})")
    print("="*45)
    input("\nНажмите Enter, чтобы начать Лигу Чемпионов...")

    # --- 6. ТУРНИР ЛИГИ ЧЕМПИОНОВ ---
    print("\n🏆 ДОБРО ПОЖАЛОВАТЬ В ПЛЕЙ-ОФФ ЛИГИ ЧЕМПИОНОВ! 🏆")
    time.sleep(1)

    opponents = [
        {"name": "Реал Мадрид", "rating": 88},
        {"name": "Бавария", "rating": 86},
        {"name": "Манчестер Сити", "rating": 90}
    ]
    stages = ["1/4 ФИНАЛА", "ПОЛУФИНАЛ", "ФИНАЛ ЛИГИ ЧЕМПИОНОВ"]

    for stage_idx, stage in enumerate(stages):
        opp = opponents[stage_idx]
        print(f"\n⚡️ {stage} ⚡️")
        print(f"Ваш соперник: 🛡️ {opp['name']} (Сила соперника: ⭐ {opp['rating']})")
        print("-" * 50)
        
        # Выбор тактики
        print("Выберите тактику на матч:")
        print("1. ⚔️ Атака (Увеличивает шансы забить, но соперник контратакует)")
        print("2. 🛡️ Защита (Надежная игра сзади, сушит матч, снижает силу соперника)")
        print("3. ⚖️ Сбалансированная (Стабильный контроль)")
        
        while True:
            tactic = input("Ваша тактика (1-3): ").strip()
            if tactic in ["1", "2", "3"]:
                break
            print("❌ Введите 1, 2 или 3.")

        print("\n🎬 МАТЧ НАЧИНАЕТСЯ! ИДЕТ СИМУЛЯЦИЯ... 🎬")
        time.sleep(1.5)

        # Расчет базовой силы сторон
        my_strength = avg_rating
        opp_strength = opp['rating']

        # Влияние тактики
        if tactic == "1":
            my_strength += 2
        elif tactic == "2":
            opp_strength -= 3

        # Влияние тренера
        if chosen_coach == "Пеп Гвардиола" and tactic == "1":
            my_strength += 1.5
        elif chosen_coach == "Карло Анчелотти" and tactic == "2":
            opp_strength -= 1.5

        # Случайные события
        event_roll = random.randint(1, 100)
        unlucky_player = random.choice([p["name"] for p in chosen_players if "К" not in p["name"]])

        if event_roll <= 12:  # Красная карточка
            print(f"🟥 О НЕТ! На 30-й минуте {unlucky_player} получает прямую КРАСНУЮ КАРТОЧКУ!")
            if chosen_coach == "Юрген Клопп":
                print("🧠 Клопп успокаивает команду и перестраивает схему. Потеря силы снижена!")
                my_strength -= 4
            else:
                my_strength -= 7
            time.sleep(1.5)
        elif 13 <= event_roll <= 25:  # Травма
            print(f"🤕 ТРАВМА! На 15-й минуте {unlucky_player} получает тяжелое повреждение и покидает поле!")
            if chosen_coach == "Юрген Клопп":
                print("🧠 Медики Клоппа быстро возвращают игрока в строй! Потеря силы минимальна.")
                my_strength -= 2
            else:
                my_strength -= 4
            time.sleep(1.5)
        elif event_roll >= 90:  # Тактический гений
            print(f"💡 ТАКТИЧЕСКИЙ ГЕНИЙ! Тренер {chosen_coach} нашел слабую зону в защите соперника!")
            my_strength += 3
            time.sleep(1.5)

        # Расчет голов
        diff = my_strength - opp_strength
        my_goals = random.choice([0, 1, 1, 2, 2, 3])
        opp_goals = random.choice([0, 1, 1, 2, 2, 3])

        if diff >= 5:
            my_goals += random.randint(1, 2)
        elif diff >= 2:
            my_goals += 1
        elif diff <= -5:
            opp_goals += random.randint(1, 2)
        elif diff <= -2:
            opp_goals += 1

        # Текстовая трансляция
        scorers = [p["name"] for p in chosen_players if "Вратарь" not in p["name"]]
        gk_name = next(p["name"] for p in chosen_players if "Вратарь" in p["name"] or "вратарь" in p["name"].lower())

        print(f"⏱️ 20' Удар по вашим воротам! Но вратарь {gk_name} совершает отличный сейв!")
        time.sleep(1.5)
        if my_goals > 0:
            print(f"⚽️ 45' ГООООЛ! Великолепный проход, и {random.choice(scorers)} отправляет мяч в сетку!")
            time.sleep(1.5)
        if opp_goals > 0:
            print(f"⏱️ 67' Защита провалилась... {opp['name']} сравнивает счет/выходит вперед!")
            time.sleep(1.5)
        if my_goals > 1:
            print(f"⚽️ 85' ГООООЛ! Невероятный выстрел из-за штрафной совершает {random.choice(scorers)}!")
            time.sleep(1.5)

        print(f"\n🔔 ФИНАЛЬНЫЙ СВИСТОК! Результат матча: {team_name} {my_goals} : {opp_goals} {opp['name']}")

        # --- РЕЗУЛЬТАТ МАТЧА ---
        if my_goals > opp_goals:
            print(f"🎉 Победа! Команда '{team_name}' проходит в следующий этап!")
            if stage == "ФИНАЛ ЛИГИ ЧЕМПИОНОВ":
                break
            input("Нажмите Enter, чтобы продолжить...")
        elif my_goals < opp_goals:
            print(f"💔 ПОРАЖЕНИЕ! Вы вылетели из турнира.")
            return False
        else:
            # Серия пенальти
            print("\n🤝 НИЧЬЯ В ОСНОВНОЕ ВРЕМЯ! Судьба матча решится в серии пенальти!")
            input("Нажмите Enter, чтобы начать серию пенальти...")
            
            win_penalties = play_penalties(team_name, opp['name'], gk_name)
            if not win_penalties:
                return False
            
            if stage == "ФИНАЛ ЛИГИ ЧЕМПИОНОВ":
                break
            input("Нажмите Enter, чтобы продолжить...")

    # --- 7. ТРОФЕЙ ---
    print("\n" + "="*60)
    print("""
                 ___________
                '._==_==_==_.'
                .-\:      /-.
               | (|:.     |) |
                '-|:.     |-'
                  \::.    /
                   '::. .'
                     ) (
                   _.' '._
                  `======`
    """)
    print(f"🏆 ЧЕМПИОНЫ ЕВРОПЫ! Капитан {captain_name} поднимает над головой Кубок!")
    print(f"🏆 Главный тренер {chosen_coach} празднует великую победу!")
    print(f"🏆 Клуб '{team_name}' вписал свое имя в историю золотыми буквами!")
    print("="*60)
    return True

# --- СЕРИЯ ПЕНАЛЬТИ ---
def play_penalties(team_name, opp_name, gk_name):
    print("\n" + "⚽️" * 15)
    print("      СЕРИЯ ПЕНАЛЬТИ      ")
    print("" + "⚽️" * 15)
    
    my_score = 0
    opp_score = 0
    
    for r in range(1, 6):
        print(f"\n--- РАУНД {r} ---")
        
        # Наш удар
        print("Куда направить удар?")
        print("1. В левый угол\n2. По центру\n3. В правый угол")
        while True:
            shot = input("Ваш выбор (1-3): ").strip()
            if shot in ["1", "2", "3"]:
                break
            print("❌ Введите число 1, 2 или 3!")
            
        opp_gk_dir = str(random.randint(1, 3))
        if shot != opp_gk_dir:
            my_score += 1
            print("⚽️ ГООООЛ! Мяч в сетке!")
        else:
            print("❌ ВРАТАРЬ ОТБИЛ! Отличный сейв соперника.")
            
        time.sleep(1)
        
        # Защита ворот
        print(f"\nСоперник бьет! Куда прыгнет вратарь {gk_name}?")
        print("1. В левый угол\n2. Остаться по центру\n3. В правый угол")
        while True:
            dive = input("Ваш выбор (1-3): ").strip()
            if dive in ["1", "2", "3"]:
                break
            print("❌ Введите число 1, 2 или 3!")
            
        opp_shot_dir = str(random.randint(1, 3))
        if opp_shot_dir != dive:
            opp_score += 1
            print("⚽️ Гол... Мяч в сетке ворот.")
        else:
            print(f"❌ СЕЙВ!!! {gk_name} угадал направление и спас команду!")
            
        print(f"Текущий счет в серии: {team_name} {my_score} : {opp_score} {opp_name}")
        time.sleep(1)

    # До первого промаха
    round_num = 5
    while my_score == opp_score:
        round_num += 1
        print(f"\n--- РАУНД ДО ПЕРВОГО ПРОМАХА ({round_num}) ---")
        
        # Наш удар
        print("Наш удар! (1-3): ")
        while True:
            shot = input().strip()
            if shot in ["1", "2", "3"]: break
        opp_gk_dir = str(random.randint(1, 3))
        my_goal = shot != opp_gk_dir
        if my_goal:
            print("⚽️ ГОЛ!")
        else:
            print("❌ СЕЙВ вратаря!")
            
        # Удар соперника
        print(f"Вратарь {gk_name} готовится к прыжку! (1-3): ")
        while True:
            dive = input().strip()
            if dive in ["1", "2", "3"]: break
        opp_shot_dir = str(random.randint(1, 3))
        opp_goal = opp_shot_dir != dive
        if opp_goal:
            print("⚽️ Гол...")
        else:
            print(f"❌ СЕЙВ {gk_name}!")
            
        if my_goal and not opp_goal:
            my_score += 1
            break
        elif not my_goal and opp_goal:
            opp_score += 1
            break
        else:
            print("Снова ничья в раунде! Серия продолжается...")
            time.sleep(1)

    if my_score > opp_score:
        print(f"\n🎉 Команда {team_name} выиграла серию пенальти!")
        return True
    else:
        print(f"\n😢 Вы проиграли серию пенальти...")
        return False

# --- Главный цикл ---
while True:
    success = play_game()
    if not success:
        print("\n💥 ИГРА ОКОНЧЕНА! ВЫ ПРОИГРАЛИ! 💥")
    else:
        print("\n🏆 ПОЗДРАВЛЯЕМ С ВЕЛИКОЙ ПОБЕДОЙ! 🏆")
        
    retry = input("Хотите сыграть еще раз? (да/нет): ").strip().lower()
    if retry not in ["да", "y", "yes"]:
        print("Спасибо за игру! До встречи в футбольном симуляторе!")
        sys.exit()
Feedback wanted
DeBohpodastAlgoBomb DeBohpodast
Sign in to react
1
Uploaded Jun 7, 2026

Интерактивный текстовый симулятор футбольного менеджера на Python. Соберите свою команду мечты, управляйте бюджетом, создайте своего игрока и приведите клуб к победе в Лиге Чемпионов! 👤 Автор проекта / Ruslan

Feedback

Sign in to leave feedback

Published feedback

Robby
InimitableRobby
Updated Jun 7, 2026

Проект 'Ultimate Football Manager' предлагает увлекательную механическую основу, позволяя пользователю создавать своего капитана и управлять командой в процессе выбора и покупки игроков.

Andrei, твоя идея сделать текстовый симулятор футбольного менеджера очень интересна и показывает, как программирование может создавать игровую атмосферу!