python 老王开枪游戏 注释版

作者: 鲁智深 分类: Python 发布时间: 2017-06-23 01:14
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
#coding=utf-8
#人类
class Person(object):
    def __init__(self,name):
        self.name = name#人的名字
        self.gun = None#是否拿枪
        self.hp = 100#默认血量

    def anzhuang_zidan(self,danjia,zidan):#安装子弹的方法
        danjia.baocun_zidan(zidan)#保存子弹到弹夹

    def anzhuang_danjia(self,gun,danjia):#安装弹夹的方法
        gun.baocun_danjia(danjia)#枪保存弹夹

    def naqing(self,gun):#赋值给属性,none变成有值
        self.gun = gun

    def kaiqiang(self,diren):#开枪到敌人,是枪开火到敌人,转到敌人
        self.gun.fire(diren)

    def diaoxue(self,shan_hai):#把已经定义号的hp -= 伤害值
        self.hp -= shan_hai

    def __str__(self):#最后需要打印除,kzf 的受伤值
        if self.gun: #有枪情况下
            if self.hp > 0: #有血情况下
                return "%s有枪,生命值%d" %(self.name,self.hp)
            else:
                return "已经挂了"
        else:
            if self.hp > 0:
                return "%s没有枪,生命值%d" %(self.name,self.hp)
            else:
                return "已经挂了"

#枪类
class Gun(object):
    def __init__(self,gun_name):
        self.gun_name = gun_name
        self.danjia = None#定义一个是否有弹夹

    def baocun_danjia(self,danjia):#将弹夹放入枪,none值就改变
        self.danjia = danjia

    def fire(self,diren):#枪开火方法
       
        zidan = self.danjia.tuanchu_zidan()#枪开火是子弹在伤害敌人,所有拿到子弹列表,并且每开一枪将少一发子弹

        if zidan == None:#判断是否是为none,是就退出程序
            exit()

        zidan.diaoxue(diren)#子弹可以让敌人掉血

#弹夹
class Danjia(object):
    def __init__(self,max_num):
        self.danjia = max_num
        self.zidan_list = []#定义子弹的容器

    def baocun_zidan(self,zidan):
        self.zidan_list.append(zidan)#将子弹(就是地址)传入列表中

    def tuanchu_zidan(self):
        if len(self.zidan_list) > 0:#判断列表长度大于0,为真
            zidan = self.zidan_list.pop()#子弹列表删除最后一个,返回列表
            return zidan#返回值
        else:
            zidan = None#否在为为None
            return zidan#返回值

    def __str__(self):
        msg = "弹夹里面有%s/%s" %(len(self.zidan_list),self.danjia)#返回弹夹是否有子弹
        return msg#返回值

#子弹
class Zidan(object):
    def __init__(self,shan_hai):
        self.shan_hai = shan_hai

    def diaoxue(self,diren):
        diren.diaoxue(self.shan_hai)#调血需要有具体的伤害值,并且是 人掉血 所有需要回到 人类


#枪战游戏开始类
class Battle(object):
    def fun(self):
        #创建一个马克菠萝
        make = Person("马克菠萝")

        #创建一个枪
        gun = Gun("八一杠自动式步枪")

        #创建弹夹
        danjia = Danjia(20)

        #创建子弹
        zidan = Zidan(10)#这里的10是伤害值

        #往弹夹里面加子弹
        for n in range(15):
            make.anzhuang_zidan(danjia,zidan)#马克在安装子弹,需要有弹夹和子弹,方法写入人类

        print(danjia)#打印显示弹夹是否有子弹

        #把弹夹放到枪上
        make.anzhuang_danjia(gun,danjia)#马克把弹夹放到枪上,传入2个参数 枪 和 弹夹

        #创建一个敌人
        kzf = Person("卡扎非")

        #拿起枪
        make.naqing(gun)#马克拿枪传入枪参数

        #开火
        for n in range(25): #循环执行
            make.kaiqiang(kzf)#马克有枪了,就可以开枪
            print(make)#打印 马克
            print(kzf)#打印 卡扎非

battle = Battle()
battle.fun()

运行图

运行结果

运行结果

如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!

发表评论

电子邮件地址不会被公开。 必填项已用*标注