当前位置 博文首页 > mdxiaohu的博客:面向对象编程题——人开枪射击子弹

    mdxiaohu的博客:面向对象编程题——人开枪射击子弹

    作者:[db:作者] 时间:2021-07-09 16:06

    面向对象编程题目:人开枪射击子弹。

    ?

    第一步:分析题目。

    人开枪射击子弹。

    题目中有三个名词,分别是:人、枪、子弹。

    也就是说,至少要有三个类,分别是:人类、枪类、弹夹类(装子弹)。

    那么,我们再深入分析,三个类,每个类都有什么。

    第一个是人类。

    类名:Person(人)

    属性:gun(枪)

    行为:fire(开火)

    第二个是枪类。

    类名:Gun(枪)

    属性:bulletBox(弹夹)

    行为:shoot(射击)

    第三个是弹夹类

    类名:BulletBox(弹夹)

    属性:bulletCount(子弹)

    行为:(这里没有,因为弹夹确实没什么行为。)

    ?

    第二步,编写三个类的代码。

    Person类:

    class Person(object):
        def __init__(self, gun):
            self.gun = gun         #人首先要拥有一把枪
        def fire(self):
            self.gun.shoot()       #人开火的时候调用枪射击。
        def fillBullet(self, count):
            self.gun.bulletBox.bulletCount = count      #在没子弹的时候,要能购买子弹。
            print("购买子弹数:%d" %(count))

    Gun类:

    class Gun(object):
        def __init__(self, bulletBox):
            self.bulletBox =bulletBox       #枪首先得有个弹夹
        def shoot(self):
            if self.bulletBox.bulletCount == 0:    #判断子弹数,并输出信息。
                print("没有子弹了,请购买子弹。")
            else:
                self.bulletBox.bulletCount -= 1      #每次开火,减少一颗子弹。
                print("剩余子弹:%d发" % (self.bulletBox.bulletCount))

    BulletBox类:

    class BulletBox(object):
        def __init__(self, count):
            self.bulletCount = count   #弹夹用来装子弹就可以。

    三个类的调用关系是人-》枪-》子弹。

    简单逻辑:

    你人开枪射击子弹,首先得有一把枪,这把枪里得有弹夹,这个弹夹里得装有子弹。

    ?

    第三步,实现人开枪发射子弹的功能。

    先导入三个类。

    from person import Person
    from gun import Gun
    from bulletBox import BulletBox

    这里是使用自定义模块的方式导入的。

    小写的是模块名。

    再定义三个对象

    #弹夹  初始给上2发子弹。
    bulletBox = BulletBox(2)
    #枪
    gun = Gun(bulletBox)
    #人
    per = Person(gun)

    开始发射子弹

    per.fire()
    per.fire()
    per.fire()

    发射三颗后,没有子弹,并提醒用户购买子弹。

    per.fillBullet(10)

    买上10颗子弹,并打印购买个数。

    继续射击,并在射击后显示剩余子弹。

    per.fire()

    暂时,就写这么多,一个小题,大家有兴趣可以自行补充。

    cs