1 class Person(object): 2 """人的類""" 3 def __init__(self,name): 4 super(Person,self).__init__() 5 self.name = name 6 self.gun = None # 用來保存槍對象的引用 7 self.hp = 100 # 血量 8 9 def anzhuang_zidan(self,dan_jia_temp,zi_dan_temp): 10 """把子彈裝到彈夾中""" 11 dan_jia_temp.bao_cun_zidan(zi_dan_temp) 12 13 def anzhuang_danjia(self,gun_temp,dan_jia_temp): 14 """把彈夾安裝到槍中""" 15 gun_temp.bao_cun_danjia(dan_jia_temp) 16 17 def naqiang(self,gun_temp): 18 """拿起一把槍""" 19 self.gun = gun_temp 20 21 def __str__(self): 22 if self.gun: 23 return "%s的血量爲:%d,他有槍:%s"%(self.name,self.hp,self.gun) 24 else: 25 if self.hp>0: 26 return "%s的血量爲:%d,他沒有槍"%(self.name,self.hp) 27 else: 28 return "%s 已掛!"%self.name 29 30 def kou_ban_ji(self,diren): 31 """讓槍發射子彈去打敵人""" 32 self.gun.fire(diren) 33 34 def diao_xue(self,sha_shang_li): 35 """根據殺傷力,掉相應血量""" 36 self.hp -= sha_shang_li 37 38 39 40 41 42 43 class Gun(object): 44 """槍的類""" 45 def __init__(self,name): 46 super(Gun,self).__init__() 47 self.name = name # 用來記錄槍的類型 48 self.danjia = None # 用來記錄彈夾對象的引用 49 50 51 def bao_cun_danjia(self,dan_jia_temp): 52 """用一個屬性保存彈夾的引用""" 53 self.danjia = dan_jia_temp 54 55 def __str__(self): 56 if self.danjia: 57 return "槍的信息爲:%s, 彈夾信息:%s"%(self.name, self.danjia) 58 else: 59 return "槍的信息爲:%s,這把槍中沒有彈夾"%(self.name) 60 61 def fire(self,diren): 62 """槍中彈夾中獲取一發子彈,而後讓這發子彈去擊中敵人""" 63 #先取彈夾中取子彈 64 zidan_temp = self.danjia.tanchu_zidan() 65 #讓這個子彈去傷害敵人 66 if zidan_temp: 67 #子彈.打中敵人(敵人) 68 zidan_temp.dazhong(diren) 69 else: 70 print("彈夾中沒有子彈啦!") 71 72 73 class Danjia(object): 74 """槍的類""" 75 def __init__(self,max_num): 76 super(Danjia,self).__init__() 77 self.max_num = max_num # 用來記錄槍夾得容量 78 self.zidan_list = [] # 用來記錄全部子彈的引用 79 80 def bao_cun_zidan(self,zi_dan_temp): 81 """將這個子彈保存在彈夾""" 82 self.zidan_list.append(zi_dan_temp) 83 84 def __str__(self): 85 return "彈夾的信息爲:%d/%d"%(len(self.zidan_list),self.max_num) 86 87 def tanchu_zidan(self): 88 """彈出最上面的那顆子彈""" 89 if self.zidan_list: 90 return self.zidan_list.pop() 91 else: 92 return None 93 94 95 class Zi_dan(object): 96 """槍的類""" 97 def __init__(self,sha_shang_li): 98 super(Zi_dan,self).__init__() 99 self.sha_shang_li = sha_shang_li # sha_shang_li子彈威力 100 101 def dazhong(self,diren): 102 """讓敵人掉血""" 103 #敵人.掉血(一個子彈的威力) 104 diren.diao_xue(self.sha_shang_li) 105 106 107 108 def main(): 109 """用來控制這個程序流程""" 110 111 # 1建立一個老趙對象 112 laozhao = Person("老趙") 113 114 115 # 2建立一個槍對象 116 ak47 = Gun("AK47") 117 118 # 3建立一個彈夾對象 119 dan_jia = Danjia(20) 120 121 # 4建立一些子彈 122 for i in range(15): 123 zi_dan = Zi_dan(10) 124 125 # 5老趙把子彈安裝在彈夾中 126 # laozhao安裝子彈到彈夾中(彈夾,子彈) 127 laozhao.anzhuang_zidan(dan_jia,zi_dan) 128 129 130 # 6老趙把彈夾安裝到搶中 131 # 老趙.安裝彈夾到槍中 132 laozhao.anzhuang_danjia(ak47, dan_jia) 133 134 """ 135 # test:測試彈夾信息 136 print(dan_jia) 137 # test:槍測試 138 print(ak47) 139 """ 140 141 # 7老趙拿槍 142 laozhao.naqiang(ak47) 143 144 # 測試老王拿槍 145 print(laozhao) 146 147 148 # 8建立一個敵人 149 gebi_laosong = Person("隔壁老宋") 150 print(gebi_laosong) 151 152 # 9老趙開槍打敵人 153 # 老王.扣扳機(隔壁老宋) 154 laozhao.kou_ban_ji(gebi_laosong) 155 print(gebi_laosong) 156 print(laozhao) 157 158 #老趙向老宋連續開15槍 159 for i in range(15): 160 laozhao.kou_ban_ji(gebi_laosong) 161 print(gebi_laosong) 162 print(laozhao) 163 164 165 166 if __name__ == '__main__': 167 main()