python课程设计 文字游戏 魔塔1

[python课程设计]魔塔文字游戏分享1

这是我的python课程设计魔塔游戏的DOS版,我觉得我做的还不错( 我太自恋了 。先给大家放个截图看一下效果。
python课程设计 文字游戏 魔塔1_第1张图片

python课程设计 文字游戏 魔塔1_第2张图片
因为代码很多,所以我打算分成几部分来分享给大家。做这个游戏的时候我才学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)

作为游戏的主角,英雄的诞生充满随机性可以使游戏更有趣味,所以我设计英雄类时,只让玩家可以命名,面板什么都是随机的。英雄类主要有:

  1. 构造函数:用于记录英雄名称并随机设置英雄面板(欧皇就是数值怪 ,面板有基础的攻防血蓝,还有等级和经验条。人物的升级我放到了另外一个函数里(我太菜了
  2. setability方法:用于修改英雄面板,实现人物成长和变化,例如装装备了、受伤了、吃药了等等。
  3. 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)

唯一的一个技能就是治疗,而且还是战斗外才能使用。想法有过不少,我也想过写个火球术、闪电术之类的,但是用到战斗里太复杂了,我还不够强,写不出来。技能类主要有:

  1. 构造函数:创建技能名称和效果
  2. useSkill方法:使用技能,减少英雄类的蓝,增加英雄类的血。我推荐大家可以把回血的数值与英雄等级用数学关系联系上,让回血不至于等级低的时候太多,等级高的时候太少。(大家可能注意到了参数列表里有个type,这个type能让方法调用的时候调用别的类,这里我是相当于绑定在英雄类身上的,因为我是先写的英雄类,后来补上的技能类。)
  3. studySkill方法:等英雄技能等级高了之后能回更多的血。
  4. 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

物品类因为要和装备类区分,我又叫它可使用道具类。大家可以看到我的代码里有写长效效果和短效效果,是因为后面战斗会引入回合的概念,大厅也有操作回合的概念(用于技能冷却),但是菜鸡如我并没有真的设计一个短效道具,所以加攻加防这些效果都是永久的。代码里也能看出道具的作用就是增加面板,本来我还想设计一次性伤害道具,飞刀什么的,但是和伤害技能一样太麻烦了,我就砍掉了。可使用道具类有:

  1. 构造函数:主要是记录道具的名字和种类。
  2. setZhi方法:法如其名,用于设置道具的值和道具类型。
  3. Change方法:改变英雄类的面板,数值按照类型有不同的大小变化。
  4. 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)

装备类同样也是继承了无卵用的物品父类。作为装备,它有类型、数值、品级和装备状态等属性。我对武器和防具的设定很简单,武器只加攻击,防具只加防御。大家也看到了饰品,饰品自然是攻防都加。装备类有:

  1. 构造函数:用于设置装备名称、种类和品级(史诗、传说之类的)
  2. setEstate方法:改变装备的装备状态。装了的卸,没装的装。
  3. setEquipment方法:给装备设置数值。数值大小和品级有关,同样也是随机赋值,并修改武器的防御和防具的攻击。
  4. viewEquipment方法:输出装备信息。

这次就先写这些,之后的怪物类,战斗、开箱等等我们下篇文章再和大家分享。

如果觉得这篇文章很有意思,欢迎你点赞收藏哦,如果觉得我很有意思,也欢迎关注我哦,我会不定期更新有趣的代码。
我们下次再见。

你可能感兴趣的:(python)