Python(面向对象)--阶段案例——反恐精英CS

反恐精英CS案例

游戏说明:

在全世界风靡起来的反恐精英是一种以团队合作为主的第一人称射击游戏,简称CS。根据面向对象的编程思维,模拟实现一个战士开枪射击敌人的场景。

游戏中主要包含两个角色:战士(玩家)和敌人,还有三个道具:枪、弹夹和子弹。其中战士和敌人的默认血量为100,它们一旦被子弹击中,就会因子弹的杀伤力而出现掉血行为,每次中击一次的血量减少10;枪里面默认是没有弹夹的,弹夹里面也没有子弹。战士若想持枪射击敌人,需要给弹夹装上子弹、给枪装弹夹,每次射击一次,子弹的数量减少一枚。

分析类具体如下:
(1)战士和敌人类:Person
属性:姓名(name)、血量(blood)、枪(gun)
方法:安装子弹(install_bullet)、安装弹夹(install_clip)、持枪(take_gun)、开枪(fire)
(2)子弹类:Bullet
属性:杀伤力(damage)
方法:伤害敌人(hurt)
(3)弹夹类:Clip
属性:最大容量(capacity)、当前子弹列表(current_list)
方法:放置子弹(save_bullets)、弹出子弹(launch_bullet)
(4)枪类:Gun
属性:弹夹(clip)
方法:链接弹夹(mounting_clip)、发射子弹(shoot)

具体代码如下:

"""
战士(玩家),敌人,枪,子弹,弹夹
"""


# 定义表示战士、敌人的类
class Person:
    def __init__(self, name):
        # 姓名
        self.name = name
        # 血量
        self.blood = 100
        self.gun = None

    # 给弹夹安装子弹
    def install_bullet(self, clip, bullet):
        # 弹夹放置子弹
        clip.save_bullets(bullet)

    # 给枪安装弹夹
    def install_clip(self, gun, clip):
        # 枪链接弹夹
        gun.mounting_clip(clip)

    #持枪
    def take_gun(self, gun):
        self.gun = gun

    # 开枪
    def fire(self, enemy):
        # 射击敌人
        self.gun.shoot(enemy)

    # 掉血
    def lose_blood(self, damage):
        self.blood -= damage

    def __str__(self):
        return "%s剩余血量%d" % (self.name, self.blood)


# 定义表示枪的类
class Gun:
    def __init__(self):
        # 默认没有弹夹
        self.clip = None

    # 链接弹夹
    def mounting_clip(self, clip):
        if not self.clip:
            self.clip = clip

    def __str__(self):
        if self.clip:
            return "枪已经装了弹夹"
        else:
            return "枪无弹夹"

    # 射击
    def shoot(self, enemy):
        # 弹夹出子弹
        bullet = self.clip.lunch_bullet()
        if bullet:
            bullet.hurt(enemy)
        else:
            print("没有子弹了,放了空枪...")


# 定义表示弹夹的类
class Clip:
    def __init__(self, capacity):
        # 最大容量
        self.capacity = capacity
        # 当前子弹数量
        self.bullet_list = []

    # 安装子弹
    def save_bullets(self, bullet):
        # 当前子弹数量小于最大容量
        if len(self.bullet_list) < self.capacity:
            self.bullet_list.append(bullet)

    def __str__(self):
        return "现在弹夹中子弹数量为:%d" % len(self.bullet_list)

    # 出子弹
    def lunch_bullet(self):
        # 判断当前弹夹中是否还有子弹
        if len(self.bullet_list) > 0:
            bullet = self.bullet_list[-1]
            self.bullet_list.pop()
            return bullet
        else:
            return None


# 定义表示子弹的类
class Bullet:
    def __init__(self, damage):
        # 伤害力
        self.damage = damage

    # 伤害敌人
    def hurt(self, enemy):
        # 让敌人掉血
        enemy.lose_blood(self.damage)


if __name__ == '__main__':
    soldier = Person("张三")
    clip = Clip(20)
    print(clip)
    i = 0
    while i < 5:
        # 创建一个子弹
        bullet = Bullet(10)
        soldier.install_bullet(clip, bullet)
        i += 1

    print(clip)
    # 创建一个枪
    gun = Gun()
    print(gun)
    # 安装弹夹
    soldier.install_clip(gun, clip)
    print(gun)

    soldier.take_gun(gun)
    # 创建一个敌人
    enemy = Person("敌人")
    print(enemy)
    # 士兵拿枪
    soldier.fire(enemy)
    print(enemy)
    soldier.fire(enemy)
    print(enemy)

程序运行结果如下:
小脆筒style

END
感谢看到这里的各位读者朋友们,如果你感到本文写的不错,就顺手点个赞收藏一下,也可以关注一波~~

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章