Python基於類和物件實現的決鬥遊戲
阿新 • • 發佈:2018-12-11
需求: 基本任務: 1 建立角色類,角色擁有生命值的屬性和攻擊的方法,攻擊值是隨機的。 2 建立職業子類,刀客, (傷害少,血量多)劍客(傷害正常,血量正常,有機率兩倍暴擊), 女賊(傷害高,血量少,有機率 3 倍暴擊) 3 歡迎介面,選擇職業,建立角色,替電腦建立角色(角色名為同桌名) 4 選擇與電腦決鬥還是聊天 如果為聊天則隨機和電腦聊三句話 如果選擇決鬥則直至一方死亡,列印中間打鬥過程,打鬥過程為隨機打鬥,不同職業打鬥描 述要求不同。一人出招後,停下幾秒給觀眾讀打鬥的時間 5 新增勝利或失敗介面 Importrandom,time Random.choice((元素,元素,元素))從元組的元素中隨機選取。 Random.int(a,b)a 為下限,b 為上限,隨機選取數字 引數 Self 為物件本身,引數 other 為其它物件。 Time.sleep(秒數),可以延緩下一個程式執行時間 功能進階(可選功能) : 1 建立其它職業,要求有職業特性,遊戲平衡 Eg:新增嗜血刀客職業,有機率攻擊造成等量傷害的血量回復 2 建立角色特性技能,要求技能隨機釋放 Eg:新增醫聖職業,有機率釋放技能讓自己血量回復 3 新增裝備系統,增加角色生命值或傷害值 4 新增寵物系統,建立角色後隨機獲得一個寵物 5 新增物理防禦系統,建立武僧職業,有機率忽視防禦 6 新增謀士職業(法傷),增加法術傷害體系和法術防禦體系 7 添加升級系統,打鬥勝利獲取經驗升級,傷害和血量增加 8 增加答題系統,通過答題來獲得裝備或者是屬性提升 *9 故事系統,按順序擊敗一些列劇情人物,和每個人物擁有劇情對話,角色屬性和傷害 逐步提升 10 可存檔和讀檔 程式碼實現: #進階功能除6 4 以外全部實現
import random import time import sys global sss global mylevel global comlevel class Role: def set_damage(self,damage): self.__damage=damage def get_damage(self): return self.__damage def set_hp(self,hp): self.__hp=hp def get_hp(self): return self.__hp def set_name(self,name): self.__name=name def get_name(self): return self.__name def get_money(self): return self.__money def set_money(self,money): self.__money=money def set_defense(self,defense): self.__defense=defense def get_defense(self): return self.__defense class Tank(Role): def attack(self,enemy): print("%s 是一位Tank" %(self.get_name())) print("攻擊力為%d" %(self.get_damage())) print("防禦力為%d" %(self.get_defense())) zs1=random.randint(1,2) if zs1==1: print('%s大錘一掄 捲起陣陣風浪 頓時間呼呼作響 直向%s的胸膛砸去...' % (self.get_name(),enemy.get_name())) else: print('%s雙錘並起 兵分兩路 暗影蔽日 打向%s的左肋 右肋 ' % (self.get_name(),enemy.get_name())) print("Hit %d" %(self.get_damage())) print("對方護甲為%d" %(enemy.get_defense())) print("真實傷害為%d" %(self.get_damage()-enemy.get_defense())) nowlife=0 nowlife=enemy.get_hp()-self.get_damage()+enemy.get_defense() enemy.set_hp(nowlife) print("%s剩餘血量%d" %(enemy.get_name(),enemy.get_hp())) #enemy.life_value -= self.attack2 #return enemy.life_value class Sword(Role): def attack(self,enemy): rate=random.randint(1,100) if rate>=0 and rate<=25: print("%s 是一位Sword" %(self.get_name())) print("攻擊力為%d" %(self.get_damage())) print("%s打出了暴擊!" %(self.get_name())) zs2=random.randint(1,2) if zs2==1: print('%s哈哈一笑,突然間左腿微蹲,長劍呼的甩出,打在%s的腰間。' % (self.get_name(),enemy.get_name())) else: print('%s一劍分刺敵人雙手腕,自有先後之別,只是劍勢實在太快,%s的兩個手腕彷彿同時中劍一般。' % (self.get_name(),enemy.get_name())) print("Hit %d Critical" %(self.get_damage()*2)) print("對方護甲為%d" %(enemy.get_defense())) print("真實傷害為%d" %(self.get_damage()*2-enemy.get_defense())) nowlife=0 nowlife=enemy.get_hp()-self.get_damage()*2+enemy.get_defense() enemy.set_hp(nowlife) print("%s剩餘血量%d" %(enemy.get_name(),enemy.get_hp())) else: print("%s 是一位Sword" %(self.get_name())) print("攻擊力為%d" %(self.get_damage())) zs2=random.randint(1,2) if zs2==1: print('%s哈哈一笑,突然間左腿微蹲,長劍呼的甩出,打在%s的腰間。' % (self.get_name(),enemy.get_name())) else: print('%s一劍分刺敵人雙手腕,自有先後之別,只是劍勢實在太快,%s的兩個手腕彷彿同時中劍一般。' % (self.get_name(),enemy.get_name())) print("Hit %d" %(self.get_damage())) print("對方護甲為%d" %(enemy.get_defense())) print("真實傷害為%d" %(self.get_damage()-enemy.get_defense())) nowlife=0 nowlife=enemy.get_hp()-self.get_damage()+enemy.get_defense() enemy.set_hp(nowlife) print("%s剩餘血量%d" %(enemy.get_name(),enemy.get_hp())) class Thief(Role): def attack(self,enemy): rate=random.randint(1,100) if rate>=0 and rate<=50: print("%s 是一位Thief" %(self.get_name())) print("攻擊力為%d" %(self.get_damage())) print("%s打出了三倍暴擊!" %(self.get_name())) zs2=random.randint(1,2) if zs2==1: print('%s手若蓮花 飛快的從腰間掏出數枚飛針 暴雨梨花般向%s射去' % (self.get_name(),enemy.get_name())) else: print('%s雙手合十 手中匕首在空中飛舞 一個閃步來到了%s身邊 順勢刺去' % (self.get_name(),enemy.get_name())) print("Hit %d Critical" %(self.get_damage()*3)) print("對方護甲為%d" %(enemy.get_defense())) print("真實傷害為%d" %(self.get_damage()*3-enemy.get_defense())) nowlife=0 nowlife=enemy.get_hp()-self.get_damage()*3+enemy.get_defense() enemy.set_hp(nowlife) print("%s剩餘血量%d" %(enemy.get_name(),enemy.get_hp())) else: print("%s 是一位Thief" %(self.get_name())) print("攻擊力為%d" %(self.get_damage())) zs2=random.randint(1,2) if zs2==1: print('%s手若蓮花 飛快的從腰間掏出數枚飛針 暴雨梨花般向%s射去' % (self.get_name(),enemy.get_name())) else: print('%s雙手合十 手中匕首在空中飛舞 一個閃步來到了%s身邊 順勢刺去' % (self.get_name(),enemy.get_name())) print("Hit %d" %(self.get_damage())) print("對方護甲為%d" %(enemy.get_defense())) print("真實傷害為%d" %(self.get_damage()-enemy.get_defense())) nowlife=0 nowlife=enemy.get_hp()-self.get_damage()+enemy.get_defense() enemy.set_hp(nowlife) print("%s剩餘血量%d" %(enemy.get_name(),enemy.get_hp())) class Blood(Role): def attack(self,enemy): rate=random.randint(1,100) if rate>=0 and rate<=50: print("%s 是一位嗜血刀客" %(self.get_name())) print("攻擊力為%d" %(self.get_damage())) print("%s觸發了吸血特效!" %(self.get_name())) print("%s恢復了%d 的血量!!" %(self.get_name(),self.get_damage())) nowlife=0 nowlife=self.get_hp()+self.get_damage() self.set_hp(nowlife) print("%s現在的血量是%d" %(self.get_name(),self.get_hp())) zs2=random.randint(1,2) if zs2==1: print('%s狂刀拔出 帶出陣陣腥風 彷彿沾血為畫 %s劈去' % (self.get_name(),enemy.get_name())) else: print('%s一個閃身 來到%s背後 刀刃如亂披風一般向%s砍去' % (self.get_name(),enemy.get_name())) print("Hit %d" %(self.get_damage())) print("對方護甲為%d" %(enemy.get_defense())) print("真實傷害為%d" %(self.get_damage()-enemy.get_defense())) nowlife=0 nowlife=enemy.get_hp()-self.get_damage()+enemy.get_defense() enemy.set_hp(nowlife) print("%s剩餘血量%d" %(enemy.get_name(),enemy.get_hp())) else: print("%s 是一位嗜血刀客" %(self.get_name())) print("攻擊力為%d" %(self.get_damage())) zs2=random.randint(1,2) if zs2==1: print('%s狂刀拔出 帶出陣陣腥風 彷彿沾血為畫 %s劈去' % (self.get_name(),enemy.get_name())) else: print('%s一個閃身 來到%s背後 刀刃如亂披風一般向%s砍去' % (self.get_name(),enemy.get_name())) print("Hit %d" %(self.get_damage())) print("對方護甲為%d" %(enemy.get_defense())) print("真實傷害為%d" %(self.get_damage()-enemy.get_defense())) nowlife=0 nowlife=enemy.get_hp()-self.get_damage()+enemy.get_defense() enemy.set_hp(nowlife) print("%s剩餘血量%d" %(enemy.get_name(),enemy.get_hp())) class Doctor(Role): def attack(self,enemy): rate=random.randint(1,100) if rate>=0 and rate<=50: print("%s 是一位醫聖" %(self.get_name())) print("攻擊力為%d" %(self.get_damage())) print("%s觸發了治療技能!" %(self.get_name())) print("%s恢復了20的血量!!" %(self.get_name())) nowlife=0 nowlife=self.get_hp()+20 self.set_hp(nowlife) print("%s現在的血量是%d" %(self.get_name(),self.get_hp())) zs2=random.randint(1,2) if zs2==1: print('%s輕捏蓮花指 彈指順技 一枚鐵珠向%s打去' % (self.get_name(),enemy.get_name())) else: print('%s雙掌分開 雙腿發力 如狂轟亂炸 向%s胸前打去' % (self.get_name(),enemy.get_name())) print("Hit %d" %(self.get_damage())) print("對方護甲為%d" %(enemy.get_defense())) print("真實傷害為%d" %(self.get_damage()-enemy.get_defense())) nowlife=0 nowlife=enemy.get_hp()-self.get_damage()+enemy.get_defense() enemy.set_hp(nowlife) print("%s剩餘血量%d" %(enemy.get_name(),enemy.get_hp())) else: print("%s 是一位醫聖" %(self.get_name())) print("攻擊力為%d" %(self.get_damage())) zs2=random.randint(1,2) if zs2==1: print('%s輕捏蓮花指 彈指順技 一枚鐵珠向%s打去' % (self.get_name(),enemy.get_name())) else: print('%s雙掌分開 雙腿發力 如狂轟亂炸 向%s胸前打去' % (self.get_name(),enemy.get_name())) print("Hit %d" %(self.get_damage())) print("對方護甲為%d" %(enemy.get_defense())) print("真實傷害為%d" %(self.get_damage()-enemy.get_defense())) nowlife=0 nowlife=enemy.get_hp()-self.get_damage()+enemy.get_defense() enemy.set_hp(nowlife) print("%s剩餘血量%d" %(enemy.get_name(),enemy.get_hp())) class Monks(Role): def attack(self,enemy): rate=random.randint(1,100) if rate>=0 and rate<=50: print("%s 是一位武僧" %(self.get_name())) print("攻擊力為%d" %(self.get_damage())) print("%s觸發了克敵機先技能!" %(self.get_name())) print("%s此次攻擊無視對方護甲!!" %(self.get_name())) zs2=random.randint(1,2) if zs2==1: print('%s手持棍棒 胡亂飛舞向%s 打去' % (self.get_name(),enemy.get_name())) else: print('%s用出一招如來神掌向%s 打去' % (self.get_name(),enemy.get_name())) print("Hit %d" %(self.get_damage())) print("直接造成真實傷害為%d!" %(self.get_damage())) nowlife=0 nowlife=enemy.get_hp()-self.get_damage() enemy.set_hp(nowlife) print("%s剩餘血量%d" %(enemy.get_name(),enemy.get_hp())) else: print("%s 是一位武僧" %(self.get_name())) print("攻擊力為%d" %(self.get_damage())) zs2=random.randint(1,2) if zs2==1: print('%s手持棍棒 胡亂飛舞向%s 打去' % (self.get_name(),enemy.get_name())) else: print('%s用出一招如來神掌向%s 打去' % (self.get_name(),enemy.get_name())) print("Hit %d" %(self.get_damage())) print("對方護甲為%d" %(enemy.get_defense())) print("真實傷害為%d" %(self.get_damage()-enemy.get_defense())) nowlife=0 nowlife=enemy.get_hp()-self.get_damage()+enemy.get_defense() enemy.set_hp(nowlife) print("%s剩餘血量%d" %(enemy.get_name(),enemy.get_hp())) com=Tank() com.set_name("倪海龍") global sss sss=random.randint(15,25) com.set_damage(sss) com.set_hp(100) com.set_defense(10) #me=Thief() #me.set_name("Lancer") #me.set_damage(random.randint(20,30)) #me.set_hp(60) #me.attack(com) def main(): global mylevel global comlevel while True: print("*********************************************") print("**************歡迎來到決鬥場*****************") print("*********************************************") print(" 輸入S來創 建 角 色 ") print("*********************************************") print(" 輸入Q來退 出 遊 戲 ") print("*********************************************") ch=input("輸入你的選擇:") if ch=='S' or ch=='s': first() break elif ch=='Q' or ch=='q': break else: print("請輸入正確的選擇") continue def first(): global mylevel global comlevel mylevel=0 comlevel=0 list1=['人生苦短要及時行樂','你的家裡是有礦嗎','咦咦咦咦咦咦切切切','真實是人生的命脈,是一切價值的根基','人生貴知心,定交無暮早','理想是人生的太陽。'] wodezy=0 ff=0 zhiye=0 mydef=0 while True: print("勇士 請選擇你的職業:") cf=input("T 坦克(傷害少,血量多,護甲為10)\nS 劍客(傷害正常,血量正常,有機率兩倍暴擊,護甲為5)\nD 盜賊(傷害高,血量少,有機率三倍暴擊,護甲為0)\nB 嗜血刀客(中等傷害 低生命值 有機率攻擊造成等量傷害的血量回復,護甲為3)\nE 醫聖(低傷害 低生命值 有機率觸發技能恢復20的Hp,護甲為3)\nM 武僧(中等傷害 中等生命 有機率觸發技能克敵機先 無視對方護甲。護甲為6):") print("-------------------------------------------------------------------------------") if cf=='T' or cf=='t': class Hero(Tank): def __init__(self): print("您選擇的職業是坦克") me=Hero() zhiye='t' elif cf=='S' or cf=='s': class Hero(Sword): def __init__(self): print("您選擇的職業是劍士") me=Hero() zhiye='s' elif cf=='D' or cf=='d': class Hero(Thief): def __init__(self): print("您選擇的職業是盜賊") me=Hero() zhiye='d' elif cf=='B' or cf=='b': class Hero(Blood): def __init__(self): print("您選擇的職業是嗜血刀客") me=Hero() zhiye='b' elif cf=='E' or cf=='e': class Hero(Doctor): def __init__(self): print("您選擇的職業是醫聖") me=Hero() zhiye='e' elif cf=='M' or cf=='m': class Hero(Monks): def __init__(self): print("您選擇的職業是武僧") me=Hero() zhiye='m' else: print("輸入錯誤請重新輸入") continue print("接下來為你的職業為你隨機賦予攻擊力") if zhiye=='t': gongji=random.randint(11,15) wodezy="坦克" myhp=120 mydef=10 elif zhiye=='s': gongji=random.randint(15,20) wodezy="劍士" myhp=80 mydef=5 elif zhiye=='b': gongji=random.randint(20,25) wodezy="嗜血刀客" myhp=70 mydef=3 elif zhiye=='e': gongji=random.randint(20,30) wodezy="醫聖" myhp=50 mydef=3 elif zhiye=='m': gongji=random.randint(20,30) wodezy="武僧" myhp=80 mydef=6 else: gongji=random.randint(30,35) wodezy="盜賊" myhp=60 mydef=0 print("你的攻擊力為%d" %gongji) print("龍哥當然是一個坦克") print("龍哥的攻擊力是%d" %sss) print("***************************************") print("現在 不用你充錢 我給你一個變強的機會!") print("Bouns: 答對這個問題 攻擊力 +10 !!") a=random.randint(1,100) b=random.randint(1,100) c=a+b ee=input("請問! %d+%d等於多少!:" %(a,b)) ee=int(ee) if ee==c: print("答對了!攻擊力增加10點!") gongji+=10 print("現在 你的攻擊力是 %d !!!" %(gongji)) else: print("答錯了!很遺憾你失去了變強的機會!") print("*********************************************************") print("為了助你打敗龍哥 我贈你1000金幣 可以用來購買裝備讓自己變強") me.set_money(1000) me.set_damage(gongji) me.set_defense(mydef) me.set_hp(myhp) me.set_name("lancer") break while True: count=0 print("1. 與倪海龍閒聊幾句") print("2. 與倪海龍決鬥!!") print("3. 進入商城 ") print("4, 退出決鬥場 ") cd=input("您接下來的選擇是:") if cd=='1': count=0 while count<3: ju=random.randint(0,5) print("龍哥說:%s" %list1[ju]) count+=1 elif cd=='3': while True: print("歡迎來到商城") ccc=input("*********************************************************\n選擇你要購買的裝備:\n1.長劍 售價100 效果 攻擊力+10\n2.紅水晶 售價50 效果 血量+10\n3.退出\n你的選擇是:") if ccc=='1': if me.get_money()<100: print("金幣不足 100 你現在只有%d個金幣" %(me.get_money())) else: print("購買成功 你的攻擊力+10 你現在剩下金幣%d" %(me.get_money()-100)) me.set_money(me.get_money()-100) me.set_damage(me.get_damage()+10) elif ccc=='2': if me.get_money()<50: print("金幣不足 50 你現在只有%d個金幣" %(me.get_money())) else: print("購買成功 你的血量+10 你現在剩下金幣%d" %(me.get_money()-50)) me.set_money(me.get_money()-50) me.set_hp(me.get_hp()+10) elif ccc=='3': break else: print("輸入錯誤 請輸入 1 2 3來選擇功能") continue elif cd=='2': print("為表地主之誼 龍哥決定讓你先出手!") print("——————————————————————————") print("--------------------決鬥開始------------------------") print(" Player1:%s Player2:%s " %(me.get_name(),com.get_name())) print("----------------------------------------------------") print(" Player1: 名字:%s 職業:%s 攻擊力:%s 生命值%s 等級:%d " %(me.get_name(),wodezy,me.get_damage(),me.get_hp(),mylevel)) print(" Player2: 名字:%s 職業:坦克 攻擊力:%s 生命值%s 等級:%d " %(com.get_name(),com.get_damage(),com.get_hp(),comlevel)) print("----------------------------------------------------") mycsd=me.get_damage() mycshp=me.get_hp() comcsd=com.get_damage() comcshp=com.get_hp() while True: me.attack(com) if com.get_hp()<=0: mylevel+=1 print("你贏得了決鬥!") print("經過這次決鬥 你提升了一級!") print("你的Hp增加了10 傷害增加了5點!") me.set_damage(mycsd+5) me.set_hp(mycshp+10) com.set_damage(comcsd) com.set_hp(comcshp) print("現在 你的hp是%d 你的攻擊力是%d" %(me.get_hp(),me.get_damage())) ff=1 count+=1 break print("----------------------------------------------------") time.sleep(1) com.attack(me) if me.get_hp()<=0: comlevel+=1 print("龍哥贏得了決鬥!") #print("你贏得了決鬥!") print("經過這次決鬥 龍哥提升了一級!") print("龍哥的Hp增加了10 傷害增加了5點!") com.set_damage(comcsd+5) com.set_hp(comcshp+10) me.set_damage(mycsd) me.set_hp(mycshp) print("現在 龍哥的hp是%d 你的攻擊力是%d" %(com.get_hp(),com.get_damage())) ff=1 count+=1 break print("----------------------------------------------------") time.sleep(1) elif cd=='4': break else: print("輸入錯誤 請重新輸入") if ff==1: continue if __name__=='__main__': main(); ''' z zz z z z z z z z '''