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