esken576
31.08.2021 05:27

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

Нажмите на рекламу ниже и сразу увидите ответ
Популярные вопросы:
Ответ:
Кириджа114
19.04.2022 03:58

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

Нет, если программа была откомпилирована на компьютере с процессором, имеющим такую же систему команд и в операционной системе (ОС), формат исполняемых программ которой, совместим с форматом для ОС данной машины.

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

Да, если операционная система предназначена для процессоров с совместимой системой команд.

3. Для запуска программы, код которой был написан на интерпретируемом языке, на компьютере должен быть установлен интерпретатор этого языка.

Да.

4. Код программы, написанный на языке, который компилируется в байт код виртуальной машины, достаточно скомпилировать однажды, чтобы программу можно было запускать на любой операционной системе, где есть соответствующая виртуальная машина.

Да, именно так переносят между компьютерами так называемые portable приложения, в которых есть как компилируемый, так и интерпретируемый код.

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

Да, любой интерпретатор сам осуществляет, если это необходимо, компиляцию в байт-код.

6. Скомпилировать программу на C++ для некоторой архитектуры X можно только на компьютере с архитектурой X.

Нет, существуют так называемые кросс-платформенные компиляторы, позволяющие получать выполняемые коды для машин другой архитектуры. Кроме того, язык С++ является многоплатформенным; это позволяет компилировать написанные на нем программы на любой платформе, где имеется нужный компилятор. При написании кода нужно иметь в виду межплатформенные соглашения, например, нельзя использовать в программе обращания к библиотекам конкретной операционной системы.

0,0(0 оценок)
Ответ:
mneo98
30.10.2021 02:29

Дерево Фенвика для массива A можно себе представлять так, как изображено на прикрепленном рисунке. В вершине, помеченной числом i, хранится сумма A[i] и всех элементов массива A с индексами, которые записаны в левом поддереве вершины i. Например, Fenwick[11] = A[8] + A[9] + A[10] + A[11]. Дерево Фенвика устроено так, чтобы в каждой вершине Fenwick[n] хранилась сумма отрезка массива от некоторого F(n) до n, нужно сообразить, чему равно F(n). F(n) получается, если идти по дереву в левые поддеревья, пока не наткнёмся на лист, он помечен чётным числом. Если двоичная запись числа n оканчивается на k единиц, то в F(n) эти k единиц заменены на нули.


Пусть нужно вычислить сумму префикса A[0..n], например, n = 9. Глядя на дерево, можно сообразить, что эта сумма равна (A[0] + A[1] + ... + A[7]) + (A[8] + A[9)) = Fenwick[7] + Fenwick[9]. В такой сумме обязательно есть Fenwick[n]: A[0] + A[1] + ... + A[n] = (A[0] + ... + A[F(n) - 1]) + (A[F(n)] + ... + A[n]) = (A[0] + ... + A[F(n) - 1]) + Fenwick[n]. Сумму в скобках тоже можно представить в виде суммы Fenwick[...].


Обновление значения A[n] приводит к обновлению некоторых Fenwick[k], а именно, Fenwick[n], и затем всех вершин-родителей, для которых текущая вершина является левым потомком. Например, чтобы обновить A[9], придется обновить Fenwick[9] и Fenwick[11]. Посчитано, что если текущая вершина имеет номер k, то следующая имеет номер k | (k + 1), и так далее, пока не кончатся вершины.


Высота дерева O(log n), так что операции нахождения суммы и обновления элементов работают за O(log n).


Можете мне объяснить как работает дерево фенвика? написать его я могу, однако так и не разобрался по
0,0(0 оценок)
Полный доступ
Позволит учиться лучше и быстрее. Неограниченный доступ к базе и ответам от экспертов и ai-bota Оформи подписку
logo
Начни делиться знаниями
Вход Регистрация
Что ты хочешь узнать?
Спроси ai-бота