day23 02 組合(繼續人狗大戰游戲)

来源:https://www.cnblogs.com/wxm422562/archive/2019/05/16/10878401.html
-Advertisement-
Play Games

day23 02 組合(繼續人狗大戰游戲) 面向對象的三大特性:繼承 多態 封裝 先講解一下組合 組合:一個對象的屬性值是另一個類的對象:對象.屬性.屬性(一般有兩個點) 繼續擴展day22 01裡面的人狗大戰的小游戲來說明組合的存在,相對於之前的游戲,這次多加了一個武器裝備類,而且武器還有它的大招 ...


day23 02 組合(繼續人狗大戰游戲)

面向對象的三大特性:繼承 多態 封裝

先講解一下組合

組合:一個對象的屬性值是另一個類的對象:對象.屬性.屬性(一般有兩個點)

繼續擴展day22 01裡面的人狗大戰的小游戲來說明組合的存在,相對於之前的游戲,這次多加了一個武器裝備類,而且武器還有它的大招。首先一個武器裝備所有的屬性有:武器的名字,武器具有的攻擊力,武器可使用的次數,購買購買該裝備需要的錢,所以你每次使用武器前都要看看自己的錢夠不夠,不夠就得先充值,每次購買武器後,所擁有的錢都要扣除相應的錢。代碼如下,以及相關註釋:

# 人物類的定義
class someone:
    def __init__(self,name,blood,aggr,sex):  # self對象的創建以及初始化
        # 給人物的屬性賦值,得到一個具體的人物
        self.name=name
        self.blood=blood
        self.aggr=aggr
        self.sex=sex
        self.money=0

    # 人物擁有的攻擊技能
    def attack(self,dog):
        dog.blood -=self.aggr  # 人物沒攻擊一下狗,狗就會掉相應的血量

    # 給人物裝備武器
    def get_weapon(self,weapon):
        if self.money>=weapon.price:  # 只有當人物擁有的錢大於或者等於該武器裝備的價格的時候才能擁有該武器裝備
            self.money-=weapon.price  # 購買武器後錢就相應的扣除
            self.weapon=weapon  # 添加武器
            self.aggr+=weapon.aggr  # 人物添加武器裝備後,具有的攻擊力就等於它自身的加上武器的
        else:
            print('餘額不足,請先充值')  # 人物擁有的錢不夠買武器裝備的時候就提醒人物充值

#  狗類的定義
class dog:
    def __init__(self,name,blood,aggr,kind,):  # self對象的創建以及初始化
        # 給狗類的屬性賦值,得到一條具體的狗
        self.name=name
        self.blood=blood
        self.aggr=aggr
        self.kind=kind
        self.money=0  # 預設人物開始沒有錢

    # 狗具有的攻擊技能
    def bite(self,someone):
        someone.blood-=self.aggr  # 狗每次攻擊人物,人物就會掉相應的血量

# 添加一個武器裝備類
class weapon:
    def __init__(self,name,aggr,sustain,price):  # self對象的創建以及初始化
        # 給武器裝備的屬性賦值
        self.name=name
        self.aggr=aggr
        self.sustain=sustain
        self.price=price

    #  武器裝備裡面有個大招double_kill
    def double_kill(self,person,dog):
        if self.sustain>0:  # 只有當你武器使用次數還有剩餘的時候,才能使用武器裡面的大招
            person.blood-=self.aggr*2  # 每次使用大招,人物的血量就會掉武器兩倍攻擊力的血量,即武器的大招是武器原本攻擊力的兩倍
            dog.blood-=self.aggr*3  # 每次使用大招,狗被擊中,血量就會掉武器3倍攻擊力的血量
            self.sustain-=1  # 每次使用一次大招,武器使用次數相應的減一次

person1=someone('王昭君',1000,300,'girl')  # 人物實例化
print(person1.name)
dog1=dog('溜溜球',2000,500,'泰迪')  # 狗角色的實例化
print(dog1.name)
person1.attack(dog1)  # 進行人物攻擊狗的操作
print(dog1.blood)  # 因為人的攻擊力是300,所以當人物攻擊狗的時候,狗會掉300的血量,剩餘1700的血量
weapon1=weapon('打狗棒',100,3,1000)  # 武器實例化
person1.get_weapon(weapon1)  # 給人物裝備武器打狗棒
person1.money=2000  # 裝備過程發現人物擁有的錢不夠買武器裝備,提醒充值,然後充值2000
person1.get_weapon(weapon1)
print(person1.weapon.name)  # 人物裝備武器成功
print(person1.aggr)  # 人物獲得武器裝備後攻擊力等於自身的攻擊力加上武器具有的攻擊力為400
person1.attack(dog1) # 人物獲得武器後再去攻擊狗
print(dog1.blood)  # 狗會掉400的血量,即此時的血量剩餘1300
person1.weapon.double_kill(person1,dog1) # 人物使用武器裡面的大招
print(dog1.blood)  # 狗會掉300的血量,剩餘1000
print(person1.blood)  # 人物也會掉200的血量,剩餘800

運行結果:

王昭君
溜溜球
1700
餘額不足,請先充值
打狗棒
400
1300
1000
800

以上代碼中:

person1.weapon是weapon類的一個對象

person1.weapon是person1這個對象的一個屬性值

double_kill又是person1.weapon的一個屬性值

這種一個對象的屬性值是另一個類的對象,就形成了一個組合

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 最近項目需要用到類似access token進行加解密、驗簽的需求,本人在此做個小筆記記錄一下,以供他人參考。 一共會用到2中加解密,HS256 和 RS256,本文只是對 HS256做個備註,好了直接上代碼,先引入jar包 <dependency> <groupId>io.jsonwebtoken ...
  • API概述 什麼叫做API? API(Application Programming lnterface),應用程式編程介面。 所謂API就是值好多的類,好多的方法,JDK給我們提供了很多現成的類,我們可以直接去使用,這些類就是API "API官方文檔" 常見的幾個API之Scanner類的使用 1 ...
  • 12.1 match 12.1.1 基本介紹 Scala中的模式匹配類似於Java中的switch語法,但是更加強大 模式匹配語法中,採用match關鍵字聲明,每個分支採用case關鍵字進行聲明,當需要匹配時,會從第一個case分支開始,如果匹配成功,那麼執行對應的邏輯代碼,如果匹配不成功,繼續執行 ...
  • Java8是Oracle於2014年3月發佈的一個重要版本,其API在現存的介面上引入了非常多的新方法。 例如,Java8的List介面新增了sort方法。在Java8之前,則每個實現了List介面的類必須定義sort方法的實現,或者從父類中繼承它的實現。想象一下,如果List介面的繼承體系非常龐雜 ...
  • 力扣題目解答自我總結(反轉類題目) 一.反轉字元串 1.題目描述 編寫一個函數,其作用是將輸入的字元串反轉過來。輸入字元串以字元數組 的形式給出。 不要給另外的數組分配額外的空間,你必須 原地修改輸入數組 、使用 O(1) 的額外空間解決這一問題。 你可以假設數組中的所有字元都是 "ASCII" 碼 ...
  • while語句的一般形式: 同樣需要註意冒號和縮進。另外,在 Python 中沒有 do..while 迴圈。 以下實例使用了 while 來計算 1 到 100 的總和: 執行結果如下: 無限迴圈: 我們可以通過設置條件表達式永遠不為 false 來實現無限迴圈,實例如下: 輸出結果如下: whi ...
  • Python字元串的方法 字元串大小寫相關 upper() 轉換字元串中的所有小寫字元為大寫。 swapcase() 翻轉字元串中的大小寫。 lower() 轉換字元串中所有大寫字元為小寫。 capitalize() 把字元串的第一個字元改為大寫。 casefold() 把整個字元串的所有字元改為小 ...
  • 如果你正在使用Spring Cloud體系,在實際使用過程中正遇到以下問題,可以閱讀本文章的內容作為後續你解決這些問題的參考,文章內容不保證無錯,請務必仔細思考之後再進行實踐。 問題: 1,本地連上開發或測試環境的集群連調,正常測試請求可能會請求到本地,被自己的debug阻塞。 2,測試環境維護時, ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...