不使用继承进行鲁班打大龙的操作
# 封装/继承/多态
from random import randint
class Hero(object):
def __init__(self, name, blood, strength):
self.name = name
self.blood = blood
self.strength = strength
def take_damage(self, monster):
"""承受攻击"""
damage = randint(monster.strength-5, monster.strength+5)
self.blood -= damage
print(f'{self.name}你正在被{monster.name}攻击, 受到{damage}点伤害, 还剩{self.blood}滴血')
if self.blood <=0:
print(f"{self.name}你被杀死了, 胜败乃兵家常事!")
return True
else:
return False
class Monster(object):
def __init__(self, name, blood, strength):
self.name = name
self.blood = blood
self.strength = strength
def take_damage(self, hero):
"""承受攻击"""
damage = randint(hero.strength - 5, hero.strength + 5)
self.blood -= damage
print(f'{self.name}你正在被{hero.name}攻击, 受到{damage}点伤害, 还剩{self.blood}滴血')
if self.blood <= 0:
print(f"{self.name}你被杀死了, 胜败乃兵家常事!")
return True
else:
return False
if __name__ == '__main__':
hero = Hero("小鲁班", 200, 100)
monster = Monster("暴君", 1000, 25)
while True:
is_monster_died = monster.take_damage(hero)
if is_monster_died:
break
is_hero_died =hero.take_damage(monster)
if is_hero_died:
break
class Vector(object):
def __init__(self, lst):
## __value 属性私有化
self.__value = lst[:]
def __len__(self):
"""返回向量的长度"""
return len(self.__value)
def __getitem__(self, index):
"""支持下标访问"""
return self.__value[index]
def __add__(self, another):
# 断言
assert len(self) == len(another), "Error , 两个向量长度必须相等"
return Vector([a+b for a, b in zip(self, another)])
def __sub__(self, another):
assert len(self) == len(another), "Error , 两个向量长度必须相等"
return Vector([a - b for a, b in zip(self, another)])
def __str__(self):
return "({})".format(", ".join(str(e) for e in self.__value))
if __name__ == '__main__':
v1 = Vector([1, 2, 3, 5])
v2 = Vector([1, 2, 3, 5])
###
print(v1)
ls = [12, 34]
print(len(ls))
print(len(v1))
print(ls[0])
print(v1[0])
print(v1[1])
print("-"*20)
print(v1 + v2)
print(v1 - v2)
本文介绍了一种不使用继承的策略,详细阐述了如何通过面向对象的方式让小鲁班在游戏对战中独立操作打大龙,避免了继承带来的复杂性。代码实例展示了如何封装英雄和怪物的行为,实现了战斗逻辑的灵活设计。

被折叠的 条评论
为什么被折叠?



