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的一個屬性值
這種一個對象的屬性值是另一個類的對象,就形成了一個組合