[python課程設計]魔塔文字游戲分享1
這是我的python課程設計魔塔游戲的DOS版,我覺得我做的還不錯( 我太自戀了 ,先給大家放個截圖看一下效果,


因為代碼很多,所以我打算分成幾部分來分享給大家,做這個游戲的時候我才學python沒多久,這個代碼我也是帶著練習的心態寫的,所以可能會出現一段沒什么太大意義的練習用代碼,希望大家不要嫌棄我,
英雄類的設計
class Hero:#英雄類
def __init__(self,pname='英雄'):
self.name = pname
print('新英雄'+self.name+'誕生了,快去開啟你的傳說吧!')
self.attack = random.randint(30,40)
self.defend = random.randint(25,35)
self.HP = random.randint(400,500)
self.MP = random.randint(100,150)
self.Rank = 1
self.jingyantiao = 0
def setability(self,a,d,hp,mp):
self.attack += a
self.defend += d
self.HP += hp
self.MP += mp
def viewHero(self):
print('當前英雄等級:',self.Rank)
print('生命值:',self.HP,'\t法力值:',self.MP)
print('攻擊力:',self.attack,'\t防御力:',self.defend)
作為游戲的主角,英雄的誕生充滿隨機性可以使游戲更有趣味,所以我設計英雄類時,只讓玩家可以命名,面板什么都是隨機的,英雄類主要有:
- 建構式:用于記錄英雄名稱并隨機設定英雄面板(
歐皇就是數值怪,面板有基礎的攻防血藍,還有等級和經驗條,人物的升級我放到了另外一個函式里(我太菜了, - setability方法:用于修改英雄面板,實作人物成長和變化,例如裝裝備了、受傷了、吃藥了等等,
- viewHero方法:輸出英雄面板
技能類的設計
class Skill:#技能類
def __init__(self):
self.Skill = '回復術'
self.Xiaohao = 50
self.Xiaoguo = 200
def useSkill(self,type):
print(type.name+'使用了'+self.Skill)
type.MP -= self.Xiaohao
print(type.name+'消耗了{}點法力'.format(self.Xiaohao))
type.setability(0,0,self.Xiaoguo,0)
print(type.name+'恢復了{}點生命值'.format(self.Xiaoguo))
def studySkill(self,type):
if type.Rank >= 50:
print(type.name+'已經{}級了'.self.Rank,self.Skill+'進化了')
self.Skill ='大回復術'
self.Xiaohao = 2000
self.Xiaoguo = 10000
print(type.name+'學會了'+self.Skill)
def viewSkill(self,type):
print(type.name+'的技能為'+self.Skill)
唯一的一個技能就是治療,而且還是戰斗外才能使用,想法有過不少,我也想過寫個火球術、閃電術之類的,但是用到戰斗里太復雜了,我還不夠強,寫不出來,技能類主要有:
- 建構式:創建技能名稱和效果
- useSkill方法:使用技能,減少英雄類的藍,增加英雄類的血,我推薦大家可以把回血的數值與英雄等級用數學關系聯系上,讓回血不至于等級低的時候太多,等級高的時候太少,(大家可能注意到了引數串列里有個type,這個type能讓方法呼叫的時候呼叫別的類,這里我是相當于系結在英雄類身上的,因為我是先寫的英雄類,后來補上的技能類,)
- studySkill方法:等英雄技能等級高了之后能回更多的血,
- viewSkill方法:輸出技能資訊,
物品類的設計
class Disposable_props(Items):#可使用道具類
def __init__(self,name='可使用道具',duration = 1):
super().__init__(name)
self.Iname = name
self.Duration = duration #0短效 1永久 道具效果默認永久
def setZhi(self,dtype):
self.Zhi = random.randint(5,10)
self.dtype = dtype
if self.Duration == 1:
self.Duname = '永久生效道具'
elif self.Duration == 0:
self.Duname = '短效道具'
if self.dtype == 1:
self.dname = '血量恢復'
self.Zhi = self.Zhi * 10
elif self.dtype == 2:
self.dname = '法力值恢復'
self.Zhi = self.Zhi * 5
elif self.dtype == 3:
self.dname = '增加攻擊力'
elif self.dtype == 4:
self.dname = '增加防御力'
def Change(self,type):#dtype 1 回血 2 回藍 3 加攻 4 加防
if self.dtype == 1:
type.setability(0,0,self.Zhi,0)
print('你的血量恢復了{}點'.format(self.Zhi))
elif self.dtype == 2:
type.setability(0,0,0,self.Zhi)
print('你的法力值恢復了{}點'.format(self.Zhi))
elif self.dtype == 3:
type.setability(self.Zhi,0,0,0)
print('你的攻擊力增加了{}點'.format(self.Zhi))
elif self.dtype == 4:
type.setability(0,self.Zhi,0,0)
print('你的防御力增加了{}點'.format(self.Zhi))
def viewItems(self):
print(self.Duname+':\t'+self.Iname+'\t功能:'+self.dname+'\t數值:',self.Zhi)
對python類有些了解的小伙伴已經發現這個物品類是帶繼承的,這是因為我在這里練習了繼承類,因為是練習,所以父類我也沒有好好開發,(大家別學我
下面是物品父類
class Items:#物品父類
Itemname = '物品'
def __init__(self,name):
self.Itemname = name
物品類因為要和裝備類區分,我又叫它可使用道具類,大家可以看到我的代碼里有寫長效效果和短效效果,是因為后面戰斗會引入回合的概念,大廳也有操作回合的概念(用于技能冷卻),但是菜雞如我并沒有真的設計一個短效道具,所以加攻加防這些效果都是永久的,代碼里也能看出道具的作用就是增加面板,本來我還想設計一次性傷害道具,飛刀什么的,但是和傷害技能一樣太麻煩了,我就砍掉了,可使用道具類有:
- 建構式:主要是記錄道具的名字和種類,
- setZhi方法:法如其名,用于設定道具的值和道具型別,
- Change方法:改變英雄類的面板,數值按照型別有不同的大小變化,
- viewItems方法:輸出物品資訊,
裝備類的設計
class Equipment(Items):#裝備類
def __init__(self,name='裝備',ty = 0,pinji=1):
super().__init__(name)
self.Ename = name
self.typed = ty
self.pinji = pinji
Etypes = ['武器','防具','飾品']
Estate = '未裝備'
def setEstate(self,type):
if self.Estate == '未裝備':
self.Estate = '已裝備'
type.setability(self.addattack,self.adddefend,0,0)
elif self.Estate == '已裝備':
self.Estate = '未裝備'
type.setability(-1*self.addattack,-1*self.adddefend,0,0)
def setEquipment(self):
self.Etype = self.Etypes[self.typed]
self.addattack = self.pinji * random.randint(30,40)
self.adddefend = self.pinji * random.randint(25,35)
if self.Etype == '武器':
self.adddefend = 0
elif self.Etype == '防具':
self.addattack = 0
def viewEquipment(self):
print(self.Etype+':',self.Ename,'\t攻擊力:',self.addattack,'\t防御力:',self.adddefend,'\t',self.Estate)
裝備類同樣也是繼承了無卵用的物品父類,作為裝備,它有型別、數值、品級和裝備狀態等屬性,我對武器和防具的設定很簡單,武器只加攻擊,防具只加防御,大家也看到了飾品,飾品自然是攻防都加,裝備類有:
- 建構式:用于設定裝備名稱、種類和品級(史詩、傳說之類的)
- setEstate方法:改變裝備的裝備狀態,裝了的卸,沒裝的裝,
- setEquipment方法:給裝備設定數值,數值大小和品級有關,同樣也是隨機賦值,并修改武器的防御和防具的攻擊,
- viewEquipment方法:輸出裝備資訊,
這次就先寫這些,之后的怪物類,戰斗、開箱等等我們下篇文章再和大家分享,
如果覺得這篇文章很有意思,歡迎你點贊收藏哦,如果覺得我很有意思,也歡迎關注我哦,我會不定期更新有趣的代碼,
我們下次再見,
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/271899.html
標籤:其他
下一篇:Unity任意多邊形碰撞體Polygon Collider自動優化,減少碰撞體Shape Count數量(2D建筑物加多邊形碰撞體)
