?>
Контрольная работа #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 этап
Ответы