反恐精英游戏

'''《反恐精英》是一款经典的对战游戏。将玩家分为“反恐精英”(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()
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值