Python面向对象-10.案例:打敌人
应用:打敌人
1. 人类
- 属性
- 姓名
- 血量
- 持有的枪
- 方法
- 安子弹
- 安弹夹
- 拿枪(持有抢)
- 开枪
2. 子弹类
- 属性
- 杀伤力
- 方法
- 伤害敌人(让敌人掉血)
3. 弹夹类
- 属性
- 容量(子弹存储的最大值)
- 当前保存的子弹
- 方法
- 保存子弹(安装子弹的时候)
- 弹出子弹(开枪的时候)
4. 枪类
- 属性
- 弹夹(默认没有弹夹,需要安装)
- 方法
- 连接弹夹(保存弹夹)
- 射子弹
参考代码
class Person(object): """定义一个人类""" def __init__(self, new_name): """完成对一个人对象的初始化后""" self.name = new_name self.gun = None # 用来存储枪对象的引用 self.hp = 100 # 记录人的血量 def __str__(self): """返回人对象的描述信息""" if self.gun: return "%s剩余血量是:%d 有枪, %s" % (self.name, self.hp, self.gun) else: if self.hp == 0: return "%s已经挂了....." % self.name else: return "%s剩余血量是:%d 没有枪" % (self.name, self.hp) def install_bullet_2_clip(self, bullet_temp, clip_temp): """安装子弹到弹夹中""" # 弹夹.保存(子弹) clip_temp.save_bullet(bullet_temp) def install_clip_2_gun(self, clip_temp, gun_temp): """安装弹夹到枪中""" # 枪.保存(弹夹) gun_temp.save_clip(clip_temp) def get_gun(self, gun_temp): """让人拿起枪""" self.gun = gun_temp def pull_trigger(self, enemy_temp): """让枪发射子弹射向敌人""" # 枪.发射(敌人) self.gun.fire(enemy_temp) def lose_hp(self, power_temp): """敌人掉血""" self.hp -= power_temp if self.hp < 0: self.hp = 0 class Gun(object): """定一个枪类""" def __init__(self, new_name): """完成对枪对象的初始化""" self.name = new_name self.clip = None # 用来存储这个枪中的弹夹 def __str__(self): """返回这个枪对象的描述信息""" # 因为下面的代码中需要获取self.clip指向的对象的描述信息,因此 # self.clip指向的对象中的__str__方法会被自动调用 return "枪(%s)里有弹夹,%s" % (self.name, self.clip) def save_clip(self, clip_temp): """保存弹夹""" self.clip = clip_temp def fire(self, enemy_temp): """向敌人发射一颗子弹""" # 让弹夹弹出一颗子弹 # 弹夹.弹出一颗子弹() bullet = self.clip.pop_bullet() if bullet: # 让子伤害敌人 # 子弹.掉血(敌人) bullet.hit_enemy(enemy_temp) else: print("%s中没有子弹了" % self.name) class Clip(object): """定义一个弹夹类""" def __init__(self, new_max): """完成弹夹对象的初始化""" self.max = new_max self.bullets = [] # 用来存储所有的子弹的引用 def __str__(self): """返回弹夹的描述信息""" return "弹夹的信息是: (%d/%d)" % (len(self.bullets), self.max) def save_bullet(self, bullet_temp): """保存这个一颗子弹""" self.bullets.append(bullet_temp) def pop_bullet(self): """返回最上面的一颗子弹""" if self.bullets: bullet = self.bullets.pop() return bullet else: return None class Bullet(object): """定一个子弹类""" def __init__(self, new_power): """完成对子弹对象的初始化""" self.power = new_power # 子弹的威力 def hit_enemy(self, enemy_temp): """让敌人掉血""" # 敌人.掉血() enemy_temp.lose_hp(self.power) def main(): """完成整个程序的控制""" # 创建老王对象 lao_wang = Person("老王") # 创建一个枪 ak47 = Gun("AK47") # 创建一个子弹 bullet = Bullet(20) # 20表示杀伤力 # 创建一个弹夹 clip = Clip(10) # 10表示这个弹夹最大的容量 # 让老王把子弹安装到弹夹中 # 老王.安装子弹(子弹, 弹夹) lao_wang.install_bullet_2_clip(bullet, clip) # 让老王把弹夹安装到枪中 # 老王.安装弹夹(弹夹,枪) lao_wang.install_clip_2_gun(clip, ak47) # 测试枪的信息 # print(ak47) # 老王拿起枪 # 老王.拿起(枪) lao_wang.get_gun(ak47) print(lao_wang) # 创建一个敌人 enemy = Person("隔壁老宋") # 老王向敌人扣扳机 # 老王.扣扳机(敌人) lao_wang.pull_trigger(enemy) print(enemy) lao_wang.pull_trigger(enemy) print(enemy) bullet = Bullet(30) lao_wang.install_bullet_2_clip(bullet, clip) bullet = Bullet(90) lao_wang.install_bullet_2_clip(bullet, clip) lao_wang.pull_trigger(enemy) print(enemy) lao_wang.pull_trigger(enemy) print(enemy) if __name__ == '__main__': main()