'''《反恐精英》是一款经典的对战游戏。将玩家分为“反恐精英”(Counter Terrorists)阵营与“恐怖份子” (Terrorists)阵营两队,每个队伍必须在一个地图上进行多回合的战斗。赢得回合的方法是达到该地图
要求的目标,或者是完全消灭敌方玩家。
现编写一个程序,可以创建角色对象,并可以为角色创建武器对象,创建角色后,可以让角色进行对
战,对战过程中,会对对方造成伤害。对战轮数可以随机来设定,对战结束后,查看各角色的状态,包
括存活状态、血量、所造成的伤害、子弹数量等。'''
'''《反恐精英》是一款经典的对战游戏。将玩家分为“反恐精英”(Counter Terrorists)阵营与“恐怖份子” (Terrorists)阵营两队,每个队伍必须在一个地图上进行多回合的战斗。赢得回合的方法是达到该地图
要求的目标,或者是完全消灭敌方玩家。
现编写一个程序,可以创建角色对象,并可以为角色创建武器对象,创建角色后,可以让角色进行对
战,对战过程中,会对对方造成伤害。对战轮数可以随机来设定,对战结束后,查看各角色的状态,包
括存活状态、血量、所造成的伤害、子弹数量等。'''
以下是代码:
# 导入随机数模块
import random
class Gun:
"""枪类"""
def __init__(self, name, bullet=0):
# 枪支名字
self.name = name
# 子弹
self.bullet = bullet
def add_bullet(self, bullet):
"""添加子弹方法"""
self.bullet += bullet
class Solider:
def __init__(self, name, gun=None, typ=True):
self.name = name
# 武器
self.gun = gun
# 阵营,默认True,代表警察
self.typ = typ
# 血量
self.blood = 100
# 伤害
self.hurt = 0
def add_gun(self, gun):
self.gun = gun
msg = "%s已经装备了枪%s" % (self.name, self.gun.name)
self.solider_print(msg)
def solider_print(self, msg):
"""传入你要打印的信息,然后打印不同的颜色"""
if self.typ:
msg = '\033[31m%s\033[0m' % msg
else:
msg = '\033[34m%s\033[0m' % msg
print(msg)
def add_bullet(self, bullet):
"""人为枪添加子弹"""
# 判断是否为None用is而尽量不用==
if self.gun is None:
msg = "%s还没有枪,请装备枪" % self.name
self.solider_print(msg)
return
self.gun.add_bullet(bullet)
msg = "%s已经为枪%s添加了%d发子弹" % (self.name, self.gun.name, bullet)
self.solider_print(msg)
def fire(self, other):
"""开火方法"""
if self.gun is None:
# 没有枪,无法开火
msg = "%s没有枪,无法开火,请装备枪" % self.name
self.solider_print(msg)
return
if self.gun.bullet <= 0:
# 没有子弹,无法开火
msg = "%s的枪%s没有子弹,无法开火,请上子弹" % (self.name, self.gun.name)
self.solider_print(msg)
return
if self.blood <= 0:
# 自己阵亡,无法开火
return
if other.blood <= 0:
# 敌人阵亡,没必要开火
return
# 随机生成伤害值
hurt = random.randint(10, 50)
# 自己造成的伤害增加
self.hurt += hurt
# 别人的血量减少
other.blood -= hurt
# 子弹减少1
self.gun.bullet -= 1
msg = "%s正在射击%s,造成的伤害值为%d,当前子弹数为%d" % (
self.name,
other.name,
hurt,
self.gun.bullet
)
self.solider_print(msg)
def show_info(self):
if self.blood <= 0:
if self.gun is None:
msg = "%s已经阵亡,他没有枪" % self.name
self.solider_print(msg)
else:
msg = "%s已经阵亡,他造成了%d点伤害,当前子弹数为%d" % (
self.name, self.hurt, self.gun.bullet)
self.solider_print(msg)
else:
if self.gun is None:
msg = "%s存活,他没有枪,当前血量为%d" % (self.name, self.blood)
self.solider_print(msg)
else:
msg = "%s存活,他的枪为%s,有%d发子弹,他的血量为%d,造成的伤害值为%s" % (
self.name, self.gun.name, self.gun.bullet, self.blood, self.hurt
)
self.solider_print(msg)
def counter_strike():
police = Solider('兰博')
terriost = Solider('本拉登', Gun('Ak47', 30), typ=False)
police.fire(terriost)
m4 = Gun('m4')
police.add_gun(m4)
police.fire(terriost)
police.add_bullet(50)
# 随机射击一定的轮数
for i in range(random.randint(10, 20)):
soliders = [police, terriost]
# 从soliders中随机选出一个士兵
solider1 = random.choice(soliders)
# 将刚才选出的士兵删掉
soliders.remove(solider1)
# 剩下的那个士兵就是列表取索引0
solider2 = soliders[0]
solider1.fire(solider2)
# 展示状态信息
police.show_info()
terriost.show_info()
# 如果是主模块,执行,被导入则不执行,规定程序的入口
if __name__ == "__main__":
counter_strike()
710

被折叠的 条评论
为什么被折叠?



