python学习-面向对象-老王开枪

class Person(object):
    """人的类"""

    def __init__(self, name):
        super(Person, self).__init__()
        self.name = name
        self.gun = None
        self.hp = 100 #定义一个血量

    def anzhuang_zidan(self, dan_jia_temp, zi_dan_temp):
        """把子弹装到弹夹中"""

        # 弹夹.保存子弹(子弹)
        dan_jia_temp.baocun_zidan(zi_dan_temp)

    def anzhuang_danjia(self, gun_temp, dan_jia_temp):
        """把弹夹安装到枪中"""

        # 枪.保存弹夹(弹夹)
        gun_temp.baocun_danjia(dan_jia_temp)

    def naqiang(self, gun_temp):
        """拿起一把枪"""
        self.gun = gun_temp

    def kou_ban_ji(self,diren):
        """让子弹发射击中敌人"""

        #枪.开火(敌人)
        self.gun.fire(diren)


    def __str__(self):
        if self.gun:
            return "%s的血量为:%d,他有枪,抢的信息为:%s"%(self.name,self.hp,self.gun)
        else:
            if self.hp>0:
                return "%s的血量为:%d,他没枪%s"%(self.name,self.hp,self.gun)
            else:
                return "%s已挂"%(self.name)
    def diaoxue(self,sha_shang_li):
        """根据子弹威力,敌人掉一颗子弹的威力"""
        self.hp -= sha_shang_li

class Gun(object):
    """枪类"""

    def __init__(self, name):
        super(Gun, self).__init__()
        self.name = name  # 用来记录枪的类型
        self.danjia = None  # 用来记录弹夹对象的引用

    def baocun_danjia(self, dan_jia_temp):
        """用一个属性来保存这个弹夹对象的引用"""
        self.danjia = dan_jia_temp

    def __str__(self):
        if self.danjia:
            return "枪的信息为:%s, %s" % (self.name, self.danjia)
        else:
            return "枪的信息为:%s,这把枪中没有弹夹" % (self.name)

    def fire(self,diren):
        """枪从子弹中获取一次子弹,子弹去击中敌人"""

        #弹夹.弹出子弹()
        zi_dan_temp = self.danjia.tanchu_zidan()

        #子弹.击中(敌人)
        if zi_dan_temp:
            zi_dan_temp.jizhong(diren)
        else:
            return "没有子弹了....."

class Danjia(object):
    """弹夹类"""

    def __init__(self, max_num):
        super(Danjia, self).__init__()
        self.max_num = max_num  # 用来记录弹夹的最大容量
        self.zidan_list = []  # 用来记录所有的子弹的引用


    def baocun_zidan(self, zi_dan_temp):
        """将这颗子弹保存"""
        self.zidan_list.append(zi_dan_temp)
        #print(self.zidan_list)

    def tanchu_zidan(self):
        """弹夹弹出最上面的子弹,获取子弹"""

        if self.zidan_list:
            return self.zidan_list.pop()
        else:
            return None
    def __str__(self):
        return "弹夹的信息为:%d/%d" % (len(self.zidan_list), self.max_num)


class Zidan(object):
    """子弹类"""

    def __init__(self, sha_shang_li):
        super(Zidan, self).__init__()
        self.sha_shang_li = sha_shang_li  # 这颗子弹的威力

    def jizhong(self,diren):
        """让敌人掉血"""

        #敌人.掉血(一颗子弹的威力)
        diren.diaoxue(self.sha_shang_li)

def main():
    """用来控制整个程序的流程"""

    # 1. 创建老王对象
    laowang = Person("老王")

    # 2. 创建一个枪对象
    ak47 = Gun("AK47")

    # 3. 创建一个弹夹对象
    dan_jia = Danjia(20)

    # 4. 创建一些子弹
    for i in range(11):
        zi_dan = Zidan(10)

        # 5. 老王把子弹安装到弹夹中
        # 老王.安装子弹到弹夹中(弹夹,子弹)
        laowang.anzhuang_zidan(dan_jia, zi_dan)

    # 6. 老王把弹夹安装到枪中
    # 老王.安装弹夹到枪中(枪,弹夹)
    laowang.anzhuang_danjia(ak47, dan_jia)

    # test:测试弹夹的信息
    print(dan_jia)

    # test:测试枪的信息
    print(ak47)
# 7. 老王拿枪
    laowang.naqiang(ak47)
    # test:老王拿枪
    print(laowang)
# 8. 创建一个敌人
    laosong = Person("老宋")
    #laosong.naqiang("")
    print(laosong)
# 9. 老王开枪打敌人
    #老王.扣扳机(敌人)
    laowang.kou_ban_ji(laosong)
    print(laosong)
    print(laowang)
    print(laosong)
if __name__ == '__main__':
    main()

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值