Day12 封裝資料的思考過程

2021-09-29 15:55:53 字數 2302 閱讀 4417

昨天雲裡霧裡的,基本搞不懂

今天又練習了一上午,基本品出味道了

用具體的例子來表達一下這整個的推倒過程,來加深一下印象:

首先,拿到需求,分析需求.

"玩家攻擊敵人,敵人受傷(減血,加分)後可能死亡(掉落裝備)。"

這句話中有玩家和敵人,(玩家)攻擊,(敵人)受傷,(敵人)減血,(玩家)加分,(敵人)死亡,(敵人)掉落裝備,下一句話的行為同理.要把他們都加以分析分類,建立起類和方法,這是封裝的設計角度.

我們可以看出來:

主語是兩類:玩家和敵人;

互動方法有四種:玩家攻擊,玩家受傷;敵人攻擊,敵人受傷,雙方各兩種;

互動結果有八種:敵人減血,敵人死亡,敵人掉落裝備;玩家加分,玩家減血,玩家碎屏,玩家死亡,遊戲結束

這樣,大致就有了兩個類:玩家,和玩家的各種行為;敵人和敵人的各種行為.具體類裡邊的各種方法,並不是一氣呵成寫出來的,而是要根據需求先建立測試**,再按照測試**需要用到的方法,去一步一步編寫的!

這裡模擬著把需求**化,便會逐步得到需要定義的東西:

1,需要玩家(建立玩家類)p01 = user( ),裡邊的先不寫

2,需要敵人(建立敵人類)e01 = enemy(),裡邊的先不寫

3,需要攻擊這個動作,p01.attack(e01),去定義attack

4,定義attack後發現,需要乙個敵人受傷的動作作為回應,敵人damage

5,敵人damage發現需要敵人有hp,和受傷的程度(玩家的attack)

6,再接著思考:敵人可能血量為0,死亡,定義death,同時掉落裝備

7,再接著思考:敵人受傷,玩家就要加分,需要玩家分數count

接下來是第二句話:

1,敵人攻擊玩家,需要敵人攻擊這個動作,同時需要敵人的攻擊值

2,攻擊的結果是玩家受傷,定義玩家受傷

3,玩家受傷後,減血.定義玩家的血量/減血和碎屏的現象

4,玩家死亡的判斷

5,玩家死亡後的顯示,遊戲結束

當然,根據不同的理解和實現要求,很多東西可以簡化,做到主次有別,像這個需求裡,括號裡的部分不做過多要求,就可以不去具體實現,體現一下就好.例項**如下:

"""

根據物件導向思想,描述下列情景。

玩家攻擊敵人,敵人受傷(減血,加分)後可能死亡(掉落裝備)。

敵人攻擊玩家,玩家受傷(減血,碎屏)後可能死亡(遊戲結束)。

[核心:行為的不同,使用類區分。]

"""class

player

:def

__init__

(self, hp=

0,atk =0)

: self.atk = atk

self.hp = hp

defattack

(self,target)

: target.damage(self.atk)

defdamage

(self,value)

:print

("減血"

)print

("碎屏"

) self.hp -= value

if self.hp <=0:

self.death(

)def

death

(self)

:print

("遊戲結束"

)class

enemy

:def

__init__

(self, hp=

0, atk=0)

: self.hp = hp

self.atk = atk

defattack

(self,target)

: target.damage(self.atk)

defdamage

(self,value)

: self.hp -= value

print

("敵人扣血"

)print

("給玩家加分"

)if self.hp <=0:

self.death(

)def

death

(self)

:print

("死亡"

)print

("掉落裝備"

)p01 = player(

99999,50

)e01 = enemy(

100,10)

p01.attack(e01)

e01.attack(p01)

p01.attack(e01)

資料結構Day12

首先需要明確的是二叉樹和二叉查詢樹的區別 二叉樹就是我們正常所理解的這種樹形結構,每乙個節點都包含乙個項和兩個指向其他節點 稱為子節點 的指標,分為左節點和右節點。樹的頂部,稱為根 當乙個節點沒有子節點時,稱為葉節點。而二叉查詢樹是在二叉樹的基礎上有如下規定 左節點的項在父節點的項前面,右節點的項在...

資料結構 day 12

雙鏈表 問題 實現乙個雙鏈表,雙鏈表初始為空,支援5種操作 1 在最左側插入乙個數 2 在最右側插入乙個數 3 將第k個插入的數刪除 4 在第k個插入的數左側插入乙個數 5 在第k個插入的數右側插入乙個數 現在要對該鍊錶進行m次操作,進行完所有操作後,從左到右輸出整個鍊錶。注意 題目中第k個插入的數...

1 2封裝陣列之新增元素

在上一小節中,我們對陣列進行了乙個基本的封裝,該小節中,我們在上一次基礎上,新增往陣列新增元素的方法 1.向所有元素後新增乙個元素 思路 1 先判斷當前陣列容量是否已滿,未滿則轉入 2 否則丟擲異常 2 在元素下標為size的位置插入新元素 3 維護我們的size值 向所有元素後新增元素 publi...