Контрольная работа #2
Вам нужно написать программу-игру, которая имитирует битву героя и дракона. Информация о ходе битвы должна выводиться в консоль. Программа пишется постепенно, каждый этап добавляет новые функции в ту же программу. Задание считается выполненным на 100%, если выполнены условия всех уровней (кроме бонуса). Бонус засчитывается, только если решены остальные этапы, поэтому добейтесь сначала работо основного кода, а потом беритесь за бонусы, если время осталось. Все указания на этапах являются обязательными.
Исходные данные:
dragon = {
'hp': 2000, # жизненная энергия, запас здоровья
'defence': 120, # защита
'str': 150, # сила
'weapon': 0 # оружие
}
hero = {
'hp': 1000,
'defence': 100,
'str': 120,
'weapon': 250,
'shield': 150 # щит
}
Исходные данные можно менять по своему желанию, чтобы проверить разные варианты работы программы. При проверке значения также могут и будут меняться (!).
Общие указания:
Игровой цикл реализуется с бесконечного цикла
Сообщения в консоли должны быть максимально информативны. Они могут содержать информацию о количестве HP у дракона и героя, номер хода, кто ходит, кто сколько урона нанёс и т.д.
Можно использовать разделители (строки типа "" и дополнительные переносы строк "\n"), чтобы было понятно, когда закончился один ход и начался следующий.
Аккуратное форматирование вывода приветствуется.
Этап 1
На первом этапе вам достаточно написать главный игровой цикл, за который производятся только ходы игрока. Каждый ход игрока выполняется по следующим правилам:
Герой пытается попасть по дракону. Вероятность успеха - 75%
Если герой попал:
Урон = сила героя + оружие героя - защита дракона
У дракона отнимается здоровье, равное урону
Отображается сообщение о нанесённом уроне.
Если герой не попал:
Отображается сообщение о том, что герой не попал
В конце хода вывести сообщение об оставшемся здоровье дракона.
Вероятность можно определять с а, например:
if random.random() < 0.6: ... # 60%
if random.random() < 0.3: ... # 30%
Или так:
if random.randint(1, 100) <= 60: ... # 60%
if random.randint(1, 100) <= 30: ... # 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 этапе, для нанесения урона герою.
В конце этого этапа главный цикл может выглядеть примерно так:
while True:
hero_turn() # ход героя
# если дракон умер: break
dragon_turn() # ход дракона
# если герой умер: break
нужен только 2 этап