day23 02 組合(繼續人狗大戰遊戲)spa
面向對象的三大特性:繼承 多態 封裝code
先講解一下組合對象
組合:一個對象的屬性值是另外一個類的對象:對象.屬性.屬性(通常有兩個點)blog
繼續擴展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
以上代碼中:get
person1.weapon是weapon類的一個對象it
person1.weapon是person1這個對象的一個屬性值class
double_kill又是person1.weapon的一個屬性值擴展
這種一個對象的屬性值是另外一個類的對象,就造成了一個組合