加深对面对对象编程的理解实例-反恐精英

'''游戏需求分析:
1.首先创建两个类:玩家类和枪类
2.玩家属性:姓名、血量、是否有枪
3.玩家方法:得到枪、拿枪射击、受伤
4.枪的属性:子弹数量、枪的型号、杀伤力
5.枪的方法:加子弹,开火
'''

# 创建玩家类
class Player(object):
    # 初始化玩家信息
    def __init__(self,name,hp):
        self.name = name
        self.hp = hp
        self.gun = None
        print('%s的血量为:%d,枪为:%s'%(self.name,self.hp,self.gun))

    # 玩家方法:拿到枪
    def get_gun(self,gun):
        self.gun = gun

    # 玩家方法:拿枪射击
    def shoot(self,enemy):
        # self.gun是玩家的属性,同时也是枪的对象
        # 在玩家方法里面调用枪的方法fire  ******
        print('%s射击了%s'%(self.name,enemy.name))
        self.gun.fire(enemy)


    # 玩家方法:受伤
    def hurt(self,damage):
        self.hp -= damage
        if self.hp > 0:
            print('%s受伤,当前血量为%d'%(self.name,self.hp))


# 创建枪类
class Gun(object):
    # 初始化枪的属性
    def __init__(self,model,bullet_count,damage):
        self.model = model
        self.bullet_count = bullet_count
        self.damage = damage
        print('枪的型号为:%s,子弹数量为:%d,杀伤力为:%d'%(self.model,self.bullet_count,self.damage))


    # 枪的方法:增加子弹
    def add_bullet(self):
        self.bullet_count += 4

    #枪的方法:开火
    def fire(self,enemy):
        if self.bullet_count <= 0:
            print('没子弹了')
            self.add_bullet()
            print('加子弹4颗')
        self.bullet_count -= 1

        # 在枪的方法里调用玩家hurt的方法 *****
        enemy.hurt(self.damage)

    # 返回枪的描述信息
    def __str__(self):
        return '枪的型号为:%s,子弹数量为:%d,杀伤力为:%d'%(self.model,self.bullet_count,self.damage)

def main():

    # 1.初始化玩家对象
    police = Player('警察',100)
    tufei = Player('土匪1',100)

    # 2.初始化枪的对象
    gun1 = Gun('Ak47', 2, 30)

    # 3.警察调用拿枪的方法
    police.get_gun(gun1)

    # 4.police开火射击敌人
    while True:
        police.shoot(tufei)
        if tufei.hp <= 0:
            print('土匪挂了')
            break


if __name__ == '__main__':
    main()

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值