Python面向对象练习之老王开枪

老王开枪

大体框架

故事:老王看隔壁老宋不爽,准备拿枪干掉隔壁老宋,首先把子弹安装到弹夹中,然后再把安装好子弹的弹夹装到AK47上面,然后拿起AK47瞄准隔壁老宋一阵狂扫...

  • 创建”老王“对象
  • 创建”AK47“对象
  • 创建”弹夹“对象
  • 创建”子弹“对象,”老王“把”子弹“安装到”弹夹“中
  • ”老王“把装有”子弹“的弹夹安装到”AK47“中
  • ”老王“拿起”AK47“
  • 创建”隔壁老宋“对象(敌人)
  • ”老王“对准”隔壁老宋“开枪

python实现代码

#!/usr/bin/env python3
# coding=utf-8

class Person(object):
    """人的类"""
    def __init__(self, temp_name):
        super(Person, self).__init__()
        self.name = temp_name
        self.HP = 100
        self.gun = None 

    def install_bullet(self, temp_clip, temp_bullet):
        #安装子弹到弹夹
        temp_clip.upper_bullet(temp_bullet)

    def install_clip(self, temp_gun, temp_clip):
        #安装弹夹到枪中
        temp_gun.add_clip(temp_clip)

    def take_gun(self, temp_gun):
        #拿起枪
        self.gun = temp_gun 

    def shoot(self, temp_enemy):
        #射击(枪开火)
        if self.gun:
            self.gun.fire(temp_enemy)
        else:
            print("{}没有枪".format(self.name))

    def loss_HP(self, temp_power):
        #掉血(被子弹击中,掉血根据子弹威力算)
        self.HP -= temp_power 
        if self.HP <= 0:
            print("{}已挂".format(self.name))
            self.HP = 0

    def __str__(self):
        return "{}\nHP:{}/100\nGun:{}".format(self.name, self.HP, self.gun)

class Gun(object):
    """枪的类"""
    def __init__(self, temp_name):
        self.name = temp_name
        self.clip = None 

    def add_clip(self, temp_clip):
        #添加弹夹到枪中
        self.clip = temp_clip 

    def fire(self, temp_enemy):
        #开火(从弹夹中弹出一颗子弹)
        temp_bullet = self.clip.pop_bullet()
        if temp_bullet:
            temp_bullet.hit(temp_enemy)
        else:
            print("没子弹了")

    def __str__(self):
        return "{} {}".format(self.name, self.clip)

class Clip(object):
    """弹夹的类"""
    def __init__(self):
        super(Clip, self).__init__()
        self.max_bullet = 20
        self.bullet_list = []

    def upper_bullet(self, temp_bullet):
        #安装子弹
        if len(self.bullet_list) < self.max_bullet:
            self.bullet_list.append(temp_bullet)
        else:
            print("弹夹已满")

    def pop_bullet(self):
        #弹出子弹
        if self.bullet_list:
            return self.bullet_list.pop()
        else:
            return None 

    def __str__(self):
        return "子弹:{}/{}".format(len(self.bullet_list), self.max_bullet)

class Bullet(object):
    """子弹的类"""
    def __init__(self, temp_power):
        super(Bullet, self).__init__()
        self.power = temp_power 

    def hit(self, temp_enemy):
        #子弹击中敌人,使敌人掉血
        temp_enemy.loss_HP(self.power) 

def main():
    #1.创建老王对象
    lao_wang = Person("老王")

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

    #3.创建一个弹夹对象
    clip = Clip()

    #4.创建一些子弹并把子弹安装到弹夹中
    for i in range(22):
        bullet = Bullet(10)
        lao_wang.install_bullet(clip, bullet)

    #5.把弹夹安装到抢里面
    lao_wang.install_clip(ak47, clip)

    #6.老子拿起抢
    lao_wang.take_gun(ak47)

    #7.创建敌人对象
    gebi_laosong = Person("隔壁老宋")

    #9.老王开枪射击隔壁老宋
    for i in range(14):
        lao_wang.shoot(gebi_laosong)


    print(lao_wang)
    print(gebi_laosong)

if __name__ == "__main__":
    main()

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值