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
Sign in to react
Интерактивный текстовый симулятор футбольного менеджера на Python. Соберите свою команду мечты, управляйте бюджетом, создайте своего игрока и приведите клуб к победе в Лиге Чемпионов! 👤 Автор проекта / Ruslan
Feedback
Published feedback
InimitableRobby
Updated Jun 7, 2026Проект 'Ultimate Football Manager' предлагает увлекательную механическую основу, позволяя пользователю создавать своего капитана и управлять командой в процессе выбора и покупки игроков.
Andrei, твоя идея сделать текстовый симулятор футбольного менеджера очень интересна и показывает, как программирование может создавать игровую атмосферу!