六、反恐精英
反恐精英是非常经典的游戏,游戏中分为两个角色:警察和土匪
警察和土匪都可以拿枪打击对方
我们要用面向对象实现反恐精英流程
1. 需求说明
| 1.游戏枪支有不同的型号,并拥有不同的伤害
2.枪支可以添加一定数量的子弹
3.枪支可以设计敌人,设计敌人时,如果子弹数量为0,则提示玩家;如果有子弹,会减少子弹,如果击中敌人,会让敌人受伤
4.输出枪支信息时,可以显示枪支的型号、伤害、子弹数量
5.游戏玩家分为警察和土匪两种角色,玩家拥有自己的枪支和血量,可以攻击敌人
6.玩家攻击敌人时,如果没有枪,则提示玩家;如果有枪,则检查枪支是否有子弹,有子弹则使用枪支射击敌人,没有子弹则自动给枪支添加子弹
7.玩家被击中会受伤,减少血量为枪支的伤害,提示玩家受伤并显示当前血量;如果血量<=0,则提示玩家死亡
8.输出玩家信息时,可以显示玩家角色、状态、血量、所持有枪支的信息
|
类图
枪支类
- 使用
Gun
类可以创建枪支对象
- 枪有三个属性:
- 型号:model
- 杀伤力:damage
- 子弹数量:bullet_count,枪出事没有子弹
- 实现
__str__
方法,显示枪的model、damage和area属性
- 调用
add_bullets
方法可以增加子弹数量
- 调用
shoot
方法可以给参数敌人对象造成伤害
- 如果没有子弹,则提示玩家并返回
- 如果有子弹,则:
- 子弹数量减少
- 调用敌人对象的
hurt
方法,给敌人造成伤害
玩家类
- 使用
Player
类可以创建警察对象和土匪对象
- 玩家有三个属性:
- 姓名:name
- 血量:hp
- 枪:gun 使用
Gun
类创建的对象,初始没有枪
- 实现
__str__
方法,显示玩家的name、hp和gun属性
- 调用
hurt
方法可以让当前玩家受到enemy_gun
的伤害,具体流程如下:
- 玩家血量减去枪对象的
damage
伤害度
- 判断修改后的玩家血量
- 如果血量<0,提示玩家挂了
- 否则,提示玩家受伤以及当前血量
- 调用
fire
方法可以向enemy
开火,具体流程如下:
- 判断自己是否有武器,如果没有直接返回
- 检查自己的枪是否有子弹,如果没有,自动装填子弹
- 让自己的枪调用
shoot
方法,并传递要射击的敌人对象
主程序流程
- 创建枪对象并测试装填和发射子弹
- 创建警察对象policeman和匪徒对象badman
- 将枪支交给警察,警察向匪徒开火
- 利用循环消灭匪徒
2. 代码实现
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 | """------------------ 枪支类 ------------------"""
class Gun:
def __init__(self, model, damage):
'''
初始化枪支
:param model: 型号
:param damage: 伤害
'''
self.model = model
self.damage = damage
# 默认子弹数量
self.bullet_count = 0
def __str__(self):
return '型号:{},伤害:{},子弹数量:{}'.format(self.model, self.damage, self.bullet_count)
def add_bullets(self, count):
'''
添加子弹
:param count:
:return:
'''
self.bullet_count += count
print('添加子弹成功')
def shoot(self, enemy):
'''
射击敌人
:param enemy: 敌方Player类型
:return:
'''
# 判断子弹是否为0
if self.bullet_count == 0:
print('请填充子弹')
else:
# 有子弹
# 减少子弹
self.bullet_count -= 1
# 默认击中敌人
enemy.hurt(self)
"""------------------ 游戏玩家 ------------------"""
class Player:
def __init__(self, role):
'''
初始化玩家
:param role: 玩家角色
'''
self.role = role
# 默认血量为100
self.hp = 100
# 枪支 默认没有枪支 为None
self.gun = None
# 状态
self.state = '活着'
def __str__(self):
return '角色:{},状态:{},血量:{},枪支:{}'.format(self.role, self.state, self.hp, self.gun)
def fire(self, enemy):
'''
射击敌人
:param enemy: 敌人Player类型
:return:
'''
# 判断有没有枪
if self.gun:
# 有枪
# 判断是否有子弹
if self.gun.bullet_count > 0:
# 有子弹
self.gun.shoot(enemy)
else:
# 没有子弹,添加子弹
self.gun.add_bullets(5)
else:
# 没枪
print('现在还没有枪支')
def hurt(self, enemy_gun):
'''
玩家受到伤害
:param enemy_gun:受到哪个枪支的伤害
:return:
'''
# 减少血量
self.hp -= enemy_gun.damage
if self.hp<=0:
# 死亡
print('玩家:{}死亡'.format(self.role))
else:
# 提示玩家受伤 提示当前血量
print('玩家受伤,当前血量:{}'.format(self.hp))
# 创建枪支
gun = Gun('ak47',10)
# 创建警察
player1 = Player('警察')
# 创建土匪
player2 = Player('土匪')
# 把枪支交给警察
player1.gun = gun
# 警察射击土匪
while player2.hp>0:
player1.fire(player2)
|