2、定义一个三国人物的类,实现简单的三国杀小游戏,要求包括 1)私有属性,“角色总数” 2) 构造方法,初始化属性有“角色名”,“技能名称”,“生命值”,“攻击力”,可自定义增加其他的属性; 3)公有方法,实现攻击某个角色并造成伤害,接收1个参数target(被攻击的角色),并打印相关信息, 要求结合异常处理来判断生命值是否耗尽,伤害值可依据“攻击力”随机生成也可直接使用“攻击力”属性; 4)创建3个实例对象,结合循环与选择结构所学内容,实现3个实例对象之间随机地进行互相攻击,打印出相关过程,并输出最终获胜者 3、继承类并进行扩展: 1)继承2中的三国人物类; 2)增加属性:人物所属“阵营” 3)改写或增加一个方法:实现A阵营的人物对B阵营人物造成伤害的总值到达一定程度时,随机选择A阵营人物的生命值恢复部分; 4)创建实例:创建4-6个人物实例(包括至少2个阵营,每个阵营至少2位人物),使用循环实现实例之间的相互攻击,打印出相关过程,并输出最终获胜者。 用python写第3个题
时间: 2024-04-02 15:35:59 浏览: 86
好的,我可以为您提供Python代码来解决这个问题。以下是我的代码实现:
```
import random
class ThreeKingdoms:
__total_roles = 0
def __init__(self, name, skill, hp, attack, **kwargs):
self.name = name
self.skill = skill
self.hp = hp
self.attack = attack
for k, v in kwargs.items():
setattr(self, k, v)
ThreeKingdoms.__total_roles += 1
def attack_target(self, target):
try:
damage = random.randint(1, self.attack)
target.hp -= damage
print(f"{self.name}使用了{self.skill}技能,攻击了{target.name},造成了{damage}点伤害。")
if target.hp <= 0:
target.hp = 0
print(f"{target.name}已经阵亡!")
ThreeKingdoms.__total_roles -= 1
except AttributeError:
print("角色已经阵亡,无法继续攻击!")
@classmethod
def get_total_roles(cls):
return cls.__total_roles
def __str__(self):
return f"{self.name}({self.hp}/{self.attack})"
class ThreeKingdomsEx(ThreeKingdoms):
def __init__(self, name, skill, hp, attack, camp, **kwargs):
super().__init__(name, skill, hp, attack, **kwargs)
self.camp = camp
self.total_damage = 0
def attack_target(self, target):
super().attack_target(target)
if isinstance(target, ThreeKingdomsEx) and self.camp != target.camp:
self.total_damage += damage
if self.total_damage >= 20:
for role in kwargs['camp_roles']:
role.hp += random.randint(1, 10)
self.total_damage = 0
roles = [
ThreeKingdoms("张飞", "狂骨之威", 100, 20),
ThreeKingdoms("关羽", "青龙偃月", 120, 18),
ThreeKingdoms("赵云", "龙胆", 110, 22),
ThreeKingdomsEx("曹操", "奸雄", 90, 25, "魏", camp_roles=[ThreeKingdoms("许褚", "裸衣斧", 100, 20), ThreeKingdoms("张辽", "突袭", 110, 18)]),
ThreeKingdomsEx("刘备", "仁德", 100, 20, "蜀", camp_roles=[ThreeKingdoms("关平", "龙吟", 110, 18), ThreeKingdoms("诸葛亮", "火攻", 80, 25)]),
ThreeKingdomsEx("孙权", "制衡", 95, 23, "吴", camp_roles=[ThreeKingdoms("周瑜", "火烧连营", 110, 18), ThreeKingdoms("吕蒙", "克己复礼", 100, 20)])
]
while ThreeKingdoms.get_total_roles() > 1:
attacker = random.choice(roles)
target = random.choice(roles)
while target == attacker or target.hp == 0:
target = random.choice(roles)
attacker.attack_target(target)
print(f"最终获胜者是{roles[0]}。")
```
这个代码实现了一个简单的三国杀小游戏,其中包括了一个三国人物类,以及一个继承自三国人物类的扩展类。在主程序中,我们创建了一些角色实例,然后使用循环和随机选择的方式模拟了三国杀的攻击过程,最后输出了最终获胜者。
希望这个代码对您有所帮助,如果您有其他问题或疑问,请随时向我提问。
阅读全文