Что нужно сделать
Для одной игры необходимо реализовать механику магии, где при соединении двух элементов получается новый. У нас есть четыре базовых элемента: «Вода», «Воздух», «Огонь», «Земля». Из них как раз и получаются новые: «Шторм», «Пар», «Грязь», «Молния», «Пыль», «Лава».
Вот таблица преобразований:
- Вода + Воздух = Шторм
- Вода + Огонь = Пар
- Вода + Земля = Грязь
- Воздух + Огонь = Молния
- Воздух + Земля = Пыль
- Огонь + Земля = Лава
Напишите программу, которая реализует все эти элементы. Каждый элемент необходимо организовать как отдельный класс. Если результат не определён, то возвращается None.
Примечание: сложение объектов можно реализовывать через магический метод __add__
, вот пример использования:
class Example_1:
def __add__(self, other):
return Example_2()
class Example_2:
answer = 'сложили два класса и вывели'
a = Example_1()
b = Example_2()
c = a + b
print(c.answer)
Дополнительно: придумайте свой элемент (или элементы), а также реализуйте его взаимодействие с остальными элементами.
Что оценивается
- Результат вычислений корректен.
- Модели реализованы в стиле ООП, основной функционал описан в методах классов и в отдельных функциях.
- Переменные, функции и собственные методы классов имеют значащие имена, не
a
,b
,c
,d
.
class Water:
title = '*>Вода<*'
def __add__(self, other):
if isinstance(other, Ground):
return Dirt()
elif isinstance(other, Fire):
return Steam()
elif isinstance(other, Air):
return Storm()
else:
return None
class Ground:
title = '-=Земля=-'
def __add__(self, other):
if isinstance(other, Water):
return Dirt()
elif isinstance(other, Air):
return Dust()
elif isinstance(other, Fire):
return Lava()
else:
return None
class Fire:
title = '\Огонь/'
def __add__(self, other):
if isinstance(other, Ground):
return Lava()
elif isinstance(other, Air):
return Lightning()
elif isinstance(other, Water):
return Steam()
else:
return None
class Air:
title = '~Воздух~'
def __add__(self, other):
if isinstance(other, Fire):
return Lightning()
elif isinstance(other, Ground):
return Dust()
elif isinstance(other, Water):
return Storm()
else:
return None
class Dirt:
title = '|Грязь|'
class Storm:
title = '>>>Шторм<<<'
class Steam:
title = '}Пар{'
class Lightning:
title = 'z-Молния-z'
class Dust:
title = '.:Пыль:.'
class Lava:
title = '^Лава^'
fire = Fire()
air = Air()
magic = air + fire
print(f'''Смешиваем {fire.title} и {air.title}:
И получаем {magic.title}.''')