练习题4
某公司要开发新游戏,请用面向对象的思想,设计游戏中的蛇怪和蜈蚣精
设定
- 蛇怪类:
属性包括:怪物名字,生命值,攻击力
方法包括:攻击,移动(曲线移动),补血(当生命值<10时,可以补加20生命值) - 蜈蚣精类:
属性包括:怪物名字,生命值,攻击力
方法包括:攻击,移动(飞行移动)
要求 - 分析蛇怪和蜈蚣精的公共成员,提取出父类—怪物类
- 利用继承机制,实现蛇怪类和蜈蚣精类
- 攻击方法,描述攻击状态。内容包括怪物名字,生命值,攻击力
- 编写测试类,分别测试蛇怪和蜈蚣精的对象及相关方法
- 定义名为mon的包存怪物类,蛇怪类,蜈蚣精类和测试类
from abc import abstractmethod
class Monster:
def init(self, name, hp, atk):
self.__name = name
self.__hp = hp
self.__atk = atk
def set_name(self, name):
self.__name = name
def get_name(self):
return self.__name
def set_hp(self, hp):
self.__hp = hp
def get_hp(self):
return self.__hp
def set_atk(self, atk):
self.__atk = atk
def get_atk(self):
return self.__atk
def attack(self):
return f'怪物{self.__name}展开攻击'
@abstractmethod
def move(self):
pass
@abstractmethod
def show(self):
pass
class Snake(Monster):
def move(self):
return '我是蛇怪,我走S型路线'
def re_blood(self):
# 生命值加20
self.set_hp(self.get_hp() + 20)
print(f'实施大蛇补血术。。。。。,当前生命值是:{self.get_hp()}')
def show(self):
print(self.attack())
print(f'当前生命值是:{self.get_hp()}')
print(f'攻击力是:{self.get_atk()}')
self.re_blood()
print(self.move())
class WuGong(Monster):
def move(self):
return '我是蜈蚣精,御风飞行'
def show(self):
print(self.attack())
print(f'当前生命值是:{self.get_hp()}')
print(f'攻击力是:{self.get_atk()}')
print(self.move())
if name == 'main':
# 创建一个蛇怪
# name, hp, atk
s1 = Snake('蛇怪甲', 5, 20)
s1.show()
print('========================')
w1 = WuGong('蜈蚣乙', 60, 15)
w1.show()