码迷,mamicode.com
首页 > 其他好文 > 详细

101.自定义玩家类

时间:2020-05-12 20:22:31      阅读:85      评论:0      收藏:0      [点我收藏+]

标签:返回   return   创建   bsp   else   没有   one   imp   修改   

自定义玩家类

  1. 使用 Player 类可以创建 警察对象 和 匪徒对象
  2. 玩家有三个属性:
    • 姓名 name:字符串
    • 血量 hp:整数
    • 枪 gun:使用 Gun 类创建的对象,玩家初始没有枪
  3. 调用 hurt 方法可以让 当前匪徒玩家 受到参数 police_man_gun 的伤害,具体流程如下:
    • 1> 匪徒玩家血量 减去 枪对象 的 damage 伤害度
    • 2> 判断修改后的 玩家血量
      • 如果 血量 <= 0,提示 匪徒玩家挂了
      • 否则,提示 匪徒玩家受伤以及当前血量
  4. 调用 fire 方法可以向参数 bad_man 开火,具体流程如下:
    • 1> 判断 警察玩家 是否有武器,如果没有直接返回
    • 2> 检查 警察玩家的枪 是否有子弹,如果没有,自动装填子弹
    • 3> 让 警察玩家的枪 调用 shoot 方法,并传递 要射击的匪徒对象
# 导入枪模块
import hm

# 自定义玩家类
class Player(object):

    def __init__(self, name, hp=100):
        # 添加属性并赋值
        # 名字
        self.name = name
        # 血量
        self.hp = hp
        # 枪属性
        self.gun = None

    def __str__(self):
        return "名字:%s 血量:%d 枪:%s" % (self.name, self.hp, self.gun)

    # 描述土匪受伤的方法
    def hurt(self, gun):
        # 重新计算土匪的血量
        self.hp -= gun.damage
        # 判断土匪是击毙了 还是击中
        if self.hp <= 0:
            print("%s[%d]被%s击毙啦" % (self.name, self.hp, gun.model))
        else:
            print("%s[%d]被%s击中啦" % (self.name, self.hp, gun.model))

    # 描述警察的想法 射击土匪
    def fire(self, bad_man):
        # 判断警察是否有枪
        if not self.gun:
            print("%s[%d]请佩戴枪..." % (self.name, self.hp))
            return
        # 判断枪是否有子弹 如果没有子弹请自动添加子弹
        if self.gun.bullet_count <= 0:
            self.gun.add_bullets(10)
        # 警察对象委托他的枪对象射击土匪
        self.gun.shoot(bad_man)

if __name__ == __main__:

    # AK47
    ak47 = hm.Gun("AK47", 50)
    # 创建警察对象
    police_man = Player(警察)
    # 创建土匪对象
    bad_man = Player("土匪", 70)
    # 警察打土匪
    police_man.fire(bad_man)
    print("="*50)
    # 佩戴枪
    police_man.gun = ak47
    # 警察打土匪
    police_man.fire(bad_man)
    # 再次开枪
    police_man.fire(bad_man)
总结:
  • 玩家类 中封装了 开火 方法,在主程序中,创建完对象之后,只需要让 警察对象 调用 fire 方法,即可向 匪徒对象 射击,其他的细节,全部封装在类的内部
  • 玩家类 中封装了 受伤 方法,在 枪类 的 shoot 方法中,只需要调用 hurt 方法,即可处理 玩家对象 被击中的细节

例子:

# # 警察
# class PoliceMan(object):
#
#     def __init__(self, name, hp=100):
#         # 添加属性并赋值
#         # 名字
#         self.name = name
#         # 血量
#         self.hp = hp
#         # 枪属性
#         self.gun = None
#
#     def __str__(self):
#         return "名字:%s, 血量:%d, 枪:%s" % (self.name, self.hp, self.gun)
#
#     # 向坏人开火
#     def fire(self, bad_man):
#         pass
#
# # 匪徒
# class BadMan(object):
#
#     def __init__(self, name, hp=100):
#         # 添加属性并赋值
#         # 名字
#         self.name = name
#         # 血量
#         self.hp = hp
#         # 枪属性
#         self.gun = None
#
#     def __str__(self):
#         return "名字:%s, 血量:%d, 枪:%s" % (self.name, self.hp, self.gun)
#
#     # 描述匪徒受伤
#     def hurt(self, police_man_gun):
#         pass


# 自定义枪类
class Gun(object):

    def __init__(self, model, damage):
        # 型号
        self.model = model
        # 杀伤力
        self.damage = damage
        # 子弹数量
        self.bullet_count = 0

    # 追踪属性值变化
    def __str__(self):
        return "型号:%s, 杀伤力:%d, 子弹数量:%d" % (self.model,
                                           self.damage,
                                           self.bullet_count)

    # 填装子弹
    def add_bullet(self, count):
        # 修改bullet_count属性值
        self.bullet_count += count

    # 枪打敌人
    def shoot(self, bad_man):
        # 判断是否有子弹
        if self.bullet_count <= 0:
            print("请先填装子弹,再射击...")
            return
        # 如果有子弹
        # 消耗一颗子弹
        self.bullet_count -= 1
        # 判断是否击中敌人
        # 击中
        if bad_man:
            # 让匪徒受伤
            bad_man.hurt(self)
        print("%s发射了一颗子弹,子弹剩余%d颗" % (self.model,
                                     self.bullet_count))


# 优化
# 自定义玩家类
class Player(object):

    def __init__(self, name, hp=100):
        # 添加属性并赋值
        # 名字
        self.name = name
        # 血量
        self.hp = hp
        # 枪属性
        self.gun = None

    def __str__(self):
        return "名字:%s, 血量:%d, 枪:%s" % (self.name,
                                       self.hp,
                                       self.gun)

    # 向坏人开火
    def fire(self, bad_man):
        # 判断是否有枪
        if not self.gun:
            print("请佩戴枪...")
            return
        # 判断枪是否有子弹
        if self.gun.bullet_count <= 0:
            # 自动填装子弹
            self.gun.add_bullet(10)

        # 警察委托枪对象射击敌人
        self.gun.shoot(bad_man)

    # 描述匪徒受伤
    def hurt(self, police_man_gun):
        # 通过枪的杀伤力重新计算匪徒血量
        self.hp -= police_man_gun.damage
        # 判断匪徒是被击毙还是击中
        if self.hp <= 0:
            print("%s[%d]被%s击毙了" % (self.name,
                                    self.hp,
                                    police_man_gun.model))
        else:
            print("%s[%d]被%s击中了" % (self.name,
                                    self.hp,
                                    police_man_gun.model))

# 创建一把枪
ak47 = Gun("AK47", 50)

# 警察
police_man = Player("警察")
# 土匪
bad_man = Player("匪徒", 70)
# 警察想射击匪徒
police_man.fire(bad_man)
# 给警察佩戴枪
police_man.gun = ak47
# 警察想射击匪徒
police_man.fire(bad_man)
# 警察想射击匪徒
police_man.fire(bad_man)

 

101.自定义玩家类

标签:返回   return   创建   bsp   else   没有   one   imp   修改   

原文地址:https://www.cnblogs.com/kangwenju/p/12878108.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!