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
感謝看到這裏的各位讀者朋友們,如果你感到本文寫的不錯,就順手點個贊收藏一下,也可以關注一波~~

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