# 用class做文字RPG [課堂colab](https://colab.research.google.com/drive/1ELe5wPrV0Cc13TLrkB2WkBFdqqS_i6L2?usp=sharing) # RPG-class ## 角色 - Attributes - 名稱 - 攻擊 - 血量 - 魔法 - 座標 - 經驗值 - Methods - x座標移動a單位(a) 讓x座標增加a - y座標移動b單位(b): 讓y座標增加b - 與角色距離(角色): 回傳兩者距離 - 攻擊角色(角色): 敵方血量減少我方攻擊力 - 顯示資訊: 顯示角色名稱、位置、攻擊、血量 - 打怪(怪物): 顯示打怪過程,若打過,獲得經驗值 ## 怪物 - Attributes - 名稱 - 經驗值 - 攻擊 - 血量 ```python= class 角色: x = 0 y = 0 經驗值 = 0 def __init__(self, name, attack, hp, mp): self.名稱 = name self.攻擊 = attack self.血量 = hp self.魔法 = mp def 顯示位置(self): return f'現在{self.名稱}的位置在{self.座標}' def 顯示位置_x(self): print(f'現在{self.名稱}的位置在({self.x},{self.y})') def 與角色距離(self, 其他人): return ((self.x - 其他人.x)**2 + (self.y - 其他人.y)**2)**(1/2) def 顯示資訊(self): result = "\n***顯示角色資訊***\n" result += f'角色{self.名稱},目前位置({self.x},{self.y})\nHP: {self.血量}、MP: {self.魔法}\n攻擊: {self.攻擊}、EXP: {self.經驗值}' result += "\n******************\n" return result def 打怪(self, monster): process = '開始打怪!\n' result = '' 回合 = 0 while(self.血量 > 0 and monster.血量 > 0): 回合 += 1 monster.血量 = monster.血量 - self.攻擊 self.血量 = self.血量 - monster.攻擊 process += f'第{回合}回合結束,{self.名稱}剩下HP{self.血量},{monster.名稱}剩下HP:{monster.血量}\n' if self.血量 <= 0: result = f'經過{回合}回合,{self.名稱}掛ㄌ。' else: self.經驗值 += monster.經驗值 result = f'經過{回合}回合,{monster.名稱}掛ㄌ。\n{self.名稱}獲得經驗值{monster.經驗值}' return process, result class 怪物: def __init__(self, name, exp, attack, hp): self.名稱 = name self.經驗值 = exp self.攻擊 = attack self.血量 = hp kyle = 角色(name='Kyle', attack = 13, hp = 139, mp = 20) 家安 = 角色(name='家安', attack = 13, hp = 139, mp = 20) print(kyle.顯示資訊()) 哥布林 = 怪物(name='哥布林', exp = 200, attack = 1, hp = 50) p, r = kyle.打怪(哥布林) print(p) print(r) print(kyle.顯示資訊()) ``` ## 繼承 ```python= class 戰士(角色): 職業名稱 = '戰士' def __init__(self, name): super().__init__(name = name, attack = 100, hp = 1000, mp = 1) # overwrite def 顯示資訊(self): result = super().顯示資訊().replace('角色', '戰士') return result amber = 戰士(name = 'Amber') print(amber.顯示資訊()) ```