002day_开枪

import random
class Person(object):
    '''
    人类
    '''
    def __init__(self,name):
        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 diao_xue(self,sha_shang_li):
        '''根据杀伤力调相应的血量'''
        self.hp-=sha_shang_li

    def __str__(self):
        if self.gun:
            return "%s的血量为%d,他有枪,%s" %(self.name,self.hp,self.gun)
        else:
            if self.hp>0:
                return "%s的血量为%d,他没枪" %(self.name,self.hp)
            else:
                return '%s已挂' %(self.name)
    def koubanji(self,diren):
        '''让枪发射子弹打敌人'''
        self.gun.fire(diren)

class Gun(object):
    '''
    枪类
    '''
    def __init__(self,name):
        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):
        '''枪从弹夹中获取一颗子弹,然后让这发子弹去击中敌人'''
        zidan_temp = self.danjia.tanchu_zidan()
        if zidan_temp:
            zidan_temp.dazhong(diren)
        else:
            print('弹夹中没有子弹了......')

class Danjia(object):
    def __init__(self,max_num):
        self.max_num = max_num#弹夹的最大容量
        self.zidan_list = []#用来进行记录子弹

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

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

    def tanchu_zidan(self):
        '''弹出最上面的那颗子弹'''
        if self.zidan_list:
            return self.zidan_list.pop()
        else:
            return None

class Zidan(object):
    def __init__(self,sha_shang_li):
        self.sha_shang_li = sha_shang_li#子弹的威力
    def dazhong(self,diren):
        '''让敌人掉血'''
        diren.diao_xue(self.sha_shang_li)


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

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

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

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

    #4.创建一些子弹
    for i in range(15):
        zi_dan = Zidan(random.randint(1,20))
        #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.创建一个敌人
    gebi_diren = Person('敌人')
    # print(gebi_diren)

    #9.老王开枪
    # laowang.koubanji(gebi_diren)

    print(gebi_diren)
    opt_lst = ['查看老王信息', '查看敌人信息', '老王开枪打敌人','退出']
    for index, opt in enumerate(opt_lst, 1):
        print(index, opt)
    while True:
        xuanze = input("请输入选项>>>")
        if xuanze == '1':
            print(laowang)
        elif xuanze == '2':
            print(gebi_diren)
        elif xuanze == '3':
            laowang.koubanji(gebi_diren)
            print(laowang)
            print(gebi_diren)
        elif xuanze == '4':
            break

if __name__ == '__main__':
    main()
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值