Как сделать мини игру на python3?

Нужно написать программу-игру, которая имитирует битву героя и дракона. Информация о ходе битвы должна выводиться в консоль. Программа пишется постепенно, каждый этап добавляет новые функции в ту же программу.

Исходные данные:

dragon = {
    'hp': 2000,       # жизненная энергия, запас здоровья
    'defence': 120,   # защита
    'str': 150,       # сила
    'weapon': 0       # оружие
}


hero = {
    'hp': 1000,
    'defence': 100,
    'str': 120,
    'weapon': 250,
    'shield': 150     # щит
}

Исходные данные можно менять по своему желанию, чтобы проверить разные варианты работы программы.

Общие указания:

Игровой цикл реализуется с помощью бесконечного цикла Сообщения в консоли должны быть максимально информативны. Они могут содержать информацию о количестве HP у дракона и героя, номер хода, кто ходит, кто сколько урона нанёс и т.д.

Можно использовать разделители (строки типа "==============" и дополнительные переносы строк "\n"), чтобы было понятно, когда закончился один ход и начался следующий.

Аккуратное форматирование вывода приветствуется.

Этап 1

На первом этапе нужно написать главный игровой цикл, за который производятся только ходы игрока. Каждый ход игрока выполняется по следующим правилам:

Герой пытается попасть по дракону. Вероятность успеха - 75%

Если герой попал:

  • Урон = сила героя + оружие героя - защита дракона
  • У дракона отнимается здоровье, равное урону
  • Отображается сообщение о нанесённом уроне.

Если герой не попал: - Отображается сообщение о том, что герой не попал - В конце хода вывести сообщение об оставшемся здоровье дракона.

Вероятность можно определять с помощью random-а, например:

if random.random() < 0.6: ...   # 60%
if random.random() < 0.3: ...   # 30%

и т.д.

Главный цикл должен повторять ходы героя до тех пор, пока у дракона не останется 0 хп.

Если у дракона больше нет жизненной энергии: - Показать сообщение, что герой победил - Выйти из цикла.

Для вывода информации о драконе напишите отдельную функцию display_dragon_info(). На первом этапе достаточно выводить его здоровье. Напишите функцию modify_health, которая принимает два аргумента: Персонажа, у которого нужно изменить показатель здоровья Количество жизненной энергии, на которое нужно изменить этот показатель. Внутри себя функция всегда прибавляет этот показатель. Таким образом, если нужно уменьшить показатель здоровья, то в функцию нужно передать отрицательное число. Функция должна следить, чтобы показатель здоровья не стал меньше 0, даже если нанесённый урон больше оставшегося здоровья.

Функция отвечает только за изменение показателей здоровья персонажей и не должна выводить никаких сообщений.

В сообщениях о нанесённом уроне урон должен выводиться без знака минус.

Пример работы функции:

modify_health(dragon, -50)  # нанести 50 ед урона дракону

При выводе сообщения:

"Дракон получил 50 ед. урона"   # без знака минус

Этап 2 На этом этапе нужно добавить ход дракона. Ход дракона выполняется после хода игрока и проверки на то, что дракон ещё живой (hp дракона больше 0). Дракон может с шансом 50/50 выбрать одно из двух действий:

Атаковать:

Урон = сила дракона + оружие дракона - защита героя

Нанесённый урон вычитается из здоровья героя Вывести сообщение о нанесённом уроне

Спать:

Вывести сообщение о том, что дракон проспал свой ход В конце хода вывести сообщение об оставшемся здоровье дракона.

После хода дракона в основном цикле нужно проверять количество оставшегося здоровья у героя.

Если у героя закончилась жизненная энергия: Показать сообщение, что герой проиграл Выйти из цикла.

Можно выводить сообщения о состоянии обоих персонажей: и героя, и дракона, после каждого хода.

Для вывода информации о герое напишите отдельную функцию display_hero_info() Для вывода информации о драконе используйте функцию display_dragon_info() Вынесите ходы дракона и героя в отдельные функции. По желанию вынесите проверку количества HP у персонажа (ещё жив или нет) в отдельную функцию. Используйте функцию modify_health, написанную на 1 этапе, для нанесения урона герою.

Этап 3 Во время хода героя добавьте возможность для игрока выбирать, что герой будет делать:

Атаковать - в этом случае выполняется атака героя, как в 1 этапе. Защищаться Если герой защищается, то значение щита (shield) героя прибавляется к его защите (defence) до конца хода (на 1 ход). В этот ход герой не атакует. После следующего хода дракона герой должен снять щит. Ничего не делать, пропустить ход - герой не атакует и не защищается.

Выбор совершается путём ввода одной из команд: attack, pass, defence.

Для каждого действия напишите отдельную функцию. Для каждого действия выводите сообщение о нём. В функции, отвечающей за ход героя, оставьте только выбор действия и ввод команды. Для реализации защиты напишите функции equip_shield и remove_shield, которые будет добавлять и отнимать у героя количество щита к его защите. Функция equip_shield должна проверить, что щит ещё не надет, чтобы защита героя не прибавлялась бесконечно. Функция remove_shield должна проверить, что щит уже надет, чтобы защита героя не уменьшалась бесконечно. Для проверок добавьте герою ключ has_shield с булевым значением, которое будет переключаться в функции equip_shield на True, а в remove_shield - на False. Вызывайте функцию equip_shield, когда герой защищается. Вызывайте функцию remove_shield после хода дракона. Добавьте вывод защиты героя в функцию display_hero_info.

Этап 4, Этот этап состоит из двух дополнительных заданий.

Общие указания:

Выносите код, описывающий действия дракона и героя, в отдельные функции там, где это целесообразно. Не забывайте про информативные сообщения о действиях героя и дракона и их результатах. Задание 1 Добавьте дракону умение "Огненный шар".

Если дракон не спит и атакует героя, он может с шансом 50% плюнуть в героя огненным шаром вместо обычной атаки. Шар наносит удвоенный урон от силы дракона (без оружия), и поджаривает героя прямо сквозь броню (защиту), но герой может отразить его щитом. Дракон не использует своё оружие, когда выплёвывает шар.

Урон = сила дракона * 2 Если герой защищается в этот ход, то он отражает огненный шар щитом и не получает урона (урон = 0).

Указания:

Выведите сообщение, когда дракон плюётся огненным шаром. Выведите сообщение, когда герой отражает атаку дракона щитом. Задание 2 Добавьте герою действие "выпить зелье".

У героя в рюкзаке завалялись несколько зелий лечения (по умолчанию только 1), которые он может выпить в бою, чтобы подлечиться.

Каждое зелье вылечивает 500 единиц здоровья (изменяйте это число по своему желанию). Использование зелья считается за ход. Герой не может атаковать или защищаться в этот ход. Если зелья кончились, игрок должен выбрать другое действие или пропустить ход (на ваш выбор, оба варианта правильные). Добавьте вывод информации о зельях в функцию display_hero_info.

Указания:

Используйте функцию modify_health для применения зелья здоровья. Храните информацию о количестве и силе зелий в данных героя.


Ответы (0 шт):