zoukankan      html  css  js  c++  java
  • python 面向对象之老王开枪

    老王开枪

    1. 人类

    • 属性
      • 姓名
      • 血量
      • 持有的枪
    • 方法
      • 安子弹
      • 安弹夹
      • 拿枪(持有抢)
      • 开枪

    2. 子弹类

    • 属性
      • 杀伤力
    • 方法
      • 伤害敌人(让敌人掉血)

    3. 弹夹类

    • 属性
      • 容量(子弹存储的最大值)
      • 当前保存的子弹
    • 方法
      • 保存子弹(安装子弹的时候)
      • 弹出子弹(开枪的时候)

    4. 枪类

    • 属性
      • 弹夹(默认没有弹夹,需要安装)
    • 方法
      • 连接弹夹(保存弹夹)
      • 射子弹

    参考代码

    #人类
    class Ren:
        def __init__(self,name):
            self.name = name
            self.xue = 100
            self.qiang = None
    
        def __str__(self):
            return self.name + "剩余血量为:" + str(self.xue)
    
        def anzidan(self,danjia,zidan):
            danjia.baocunzidan(zidan)
    
        def andanjia(self,qiang,danjia):
            qiang.lianjiedanjia(danjia)
    
        def naqiang(self,qiang):
            self.qiang = qiang
    
        def kaiqiang(self,diren):
            self.qiang.she(diren)
    
        def diaoxue(self,shashangli):
            self.xue -= shashangli
    
    #弹夹类
    class Danjia:
        def __init__(self, rongliang):
            self.rongliang = rongliang
            self.rongnaList = []
    
        def __str__(self):
            return "弹夹当前的子弹数量为:" + str(len(self.rongnaList)) + "/" + str(self.rongliang)
    
        def baocunzidan(self,zidan):
            if len(self.rongnaList) < self.rongliang:
                self.rongnaList.append(zidan)
    
        def chuzidan(self):
            #判断当前弹夹中是否还有子弹
            if len(self.rongnaList) > 0:
                #获取最后压入到单间中的子弹
                zidan = self.rongnaList[-1]
                self.rongnaList.pop()
                return zidan
            else:
                return None
    
    #子弹类
    class Zidan:
        def __init__(self,shashangli):
            self.shashangli = shashangli
    
        def shanghai(self,diren):
            diren.diaoxue(self.shashangli)
    
    #枪类
    class Qiang:
        def __init__(self):
            self.danjia = None
    
        def __str__(self):
            if self.danjia:
                return "枪当前有弹夹"
            else:
                return "枪没有弹夹"
    
        def lianjiedanjia(self,danjia):
            if not self.danjia:
                self.danjia = danjia
    
    
        def she(self,diren):
            zidan = self.danjia.chuzidan()
            if zidan:
                zidan.shanghai(diren)
            else:
                print("没有子弹了,放了空枪....")
    
    
    #创建一个人对象
    laowang = Ren("老王")
    
    #创建一个弹夹
    danjia = Danjia(20)
    print(danjia)
    
    #循环的方式创建一颗子弹,然后让老王把这颗子弹压入到弹夹中
    i=0
    while i<5:
        zidan = Zidan(5)
        laowang.anzidan(danjia,zidan)
        i+=1
    #测试一下,安装完子弹后,弹夹中的信息
    print(danjia)
    
    #创建一个枪对象
    qiang = Qiang()
    print(qiang)
    #让老王,把弹夹连接到枪中
    laowang.andanjia(qiang,danjia)
    print(qiang)
    
    
    #创建一个敌人
    diren = Ren("敌人")
    print(diren)
    
    #让老王拿起枪
    laowang.naqiang(qiang)
    
    #老王开枪射敌人
    laowang.kaiqiang(diren)
    print(diren)
    print(danjia)
    
    laowang.kaiqiang(diren)
    print(diren)
    print(danjia)
    View Code
     
  • 相关阅读:
    转:POI操作Excel:cell的背景颜色类型
    在table中tr的display:block在firefox下显示布局错乱问题
    [转]:颜色 16进制对照表
    js时间操作
    SQL 复制数据库里面的表到另一个表
    js 去除空格
    判断一个表单是否被修改过
    判断数据库,函数名,表名,存储过程名称等是否存在
    JS 获取radiobuttonlist checkboxlist的值
    Asp 结合JQuery EasyUI 框架完成的一个增删改查
  • 原文地址:https://www.cnblogs.com/wilson-wu/p/8310708.html
Copyright © 2011-2022 走看看