Крипер — единственный моб, который тратит себя целиком. Он подходит, шипит и наносит урон всему вокруг, а сам после этого перестаёт существовать. Никаких особых правил для его здоровья не нужно: он живёт по тем же законам, что и всё в мире.
Взять Entity из главы 4 и написать Creeper(Entity):
explode(target, power) — наносит цели урон, после чего крипер теряет всё своё здоровье;- работает только через методы
take_damage и heal, к полю hp напрямую не обращается; __str__ → "Крипер: 60/100 (взрывоопасен)".
Важно. В решение нужно включить и код задач 4 этого набора: проверки обращаются к нему напрямую.
Структура программы
Отправляется целая программа. Ниже — то, что в ней должно быть объявлено: имена классов, их родители и сигнатуры методов. Имена менять нельзя, проверки обращаются именно к ним.
class Creeper(Entity):
def explode(self, target, power):
...
def __str__(self):
...
Как проверяется
Проверяющая программа дописывает к твоему коду блок проверок и выполняет всё вместе. Задача засчитывается, если ни одна проверка не сработала и программа ничего не напечатала — отладочную печать перед отправкой убери.
Примеры проверок
#!requires Entity: is_alive, take_damage, heal, __str__
#!requires Creeper: explode, __str__
# подготовка
boom = Creeper("Крипер", 100)
player = Entity("Стив", 100)
boom.take_damage(40)
# проверка
assert boom.hp == 60
#!requires Entity: is_alive, take_damage, heal, __str__
#!requires Creeper: explode, __str__
# подготовка
boom = Creeper("Крипер", 100)
player = Entity("Стив", 100)
boom.take_damage(40)
# проверка
assert str(boom) == "Крипер: 60/100 (взрывоопасен)"
Строки #!requires — служебные: по ним система убеждается, что классы и методы действительно объявлены, а не подставлены обходным путём.
Вопрос: в Creeper нет ни слова про максимум здоровья и про ноль. Почему после взрыва получается ровно 0, а лечение игрока упирается в 100?
---
| № | Входные данные | Выходные данные |
|
1
|
#!requires Entity: is_alive, take_damage, heal, __str__
#!requires Creeper: explode, __str__
# подготовка
boom = Creeper("Крипер", 100)
player = Entity("Стив", 100)
boom.take_damage(40)
# проверка
assert boom.hp == 60
|
|
|
2
|
#!requires Entity: is_alive, take_damage, heal, __str__
#!requires Creeper: explode, __str__
# подготовка
boom = Creeper("Крипер", 100)
player = Entity("Стив", 100)
boom.take_damage(40)
# проверка
assert str(boom) == "Крипер: 60/100 (взрывоопасен)"
|
|