文字对战游戏
主要的系统分类:
角色系统:种族系统和技能系统
战斗系统:采用回合制
商城系统:游戏的道具贩卖系统
充值系统:充值
各系统功能细化:
角色系统--种族系统
分为2大种类:法师和战士
金克木,木克土,土克水,水克火,火克金。
无论战士还是法师都有自己的属性。当一个属性被另一个属性克制的时候,攻击力和防御力都会减弱。
法师系:
属性:五种属性中的一种。对同类属性的道具有加成。
血量值较低 初值较低为战士的75% 血量成长系数1.15
法术攻击高:初值自己设定 成长系数 1.3
魔法值高:初值自己设定 成长系数 1.2
魔防高:初值自己设定 成长系数 1.2
物防低:初值自己设定 成长系数1.1
敏捷稍低:初值自己设定 成长系数1.1
无物理攻击,普通攻击为法伤
战士系:
属性:五种属性中的一种。对同类属性的道具有加成。
血量值较高 初值自己设定 血量成长系数1.25
物理攻击高:初值自己设定 成长系数 1.3
魔法值低:初值自己设定 成长系数 1.1
魔防低:初值自己设定 成长系数 1.1
物防高:初值自己设定 成长系数1.2
敏捷正常:初值自己设定 成长系数1.2
无法术攻击,普通攻击为物理伤害
角色系统--技能系统
两大类:
法师技能和战士技能
法师技能:
烈日灼心:单体伤害为攻击的150%。
光之吟唱:全体伤害为攻击的90%。
战士技能:
晴元霸斩:单体伤害为攻击的150%。
乾离龙杀:全体伤害为攻击的90%。
战斗系统
回合制战斗设置:
战斗开始后
- 依据双方目前的敏捷属性设定先手后手
- 技能为随机发动 需要消耗魔法值
- 伤害计算公式为自定义
- 一方血量为0判定胜负
- 战斗胜利获得经验值和金币
- 经验每增加100,上升一个等级,且玩家生命值回满,多余的经验值累积。
- 道具对玩家有增益效果,等级越高,增益效果越明显,自定义;与玩家职业相匹配,增益效果越明显。属性相克攻击力越高。
- 每次战斗敌人为随机出现(数量不定,1-5),名字随机(可提供名字列表,供随机出现),但(总)等级与玩家基本持平,且随机携带道具。
- 每次战斗完毕,自动存储玩家的当前的等级、金币和道具等相关信息,下次启动会先加载玩家的信息。
class Race_System: def __init__(self,name,attribute,hp,mp,magic_defense,physical_defense,agile): self.name = name#名字 self.attribute = attribute #属性 self.hp = hp #血量值 self.mp = mp #魔法值 self.magic_defense = magic_defense #法术防御 self.physical_defense = physical_defense #物理防御 self.agile = agile #敏捷值 class Master(Race_System): def __init__(self, name, attribute, hp, mp, magic_attack,magic_defense, physical_defense, agile): super().__init__(name,attribute,hp,mp,magic_defense,physical_defense,agile) self.magic_attack = magic_attack self.vocation = '法师' # def skill(self): # print(self.name,'使用技能烈日灼心,单体伤害为攻击的150%') # # def skill2(self): # print(self.name,'使用技能光之吟唱:全体伤害为攻击的90%') class Warrior(Race_System): def __init__(self, name, attribute, hp, mp,physical_attack, magic_defense, physical_defense, agile): super().__init__(name, attribute, hp, mp,magic_defense, physical_defense, agile) self.physical_attack = physical_attack self.vocation = '战士'
import random import time global player0 global player1 class Master_Attack(Master): def attack(self,enemy): print(self.name,'当前生命值',self.hp) __magic_attack = self.magic_attack cs = random.randint(1, 2) if cs == 1: self.magic_attack = self.magic_attack * 1.5 self.mp = self.mp - 100 print(self.name,'微微一动,手印一结,大喝一声,使用技能烈日灼心,形成一轮太阳,发射一道强烈光束攻向',enemy.name,'单体伤害为攻击的150%','打出伤害',self.magic_attack) else: self.magic_attack = self.magic_attack * 2 self.mp = self.mp -150 print(self.name,'眼神凌厉,突然使用技能光之吟唱,白烟升起,四面八方的圣光夹杂着魔音向',enemy.name,'扑面而来,全体伤害为攻击的90%','造成伤害',self.magic_attack) sh = self.magic_attack - self.magic_defense print(enemy.name,'护甲为',self.magic_defense,'造成真实伤害',sh) enemy.hp = enemy.hp - sh if enemy.hp < 0: enemy.hp = 0 print(enemy.name,'剩余血量为',enemy.hp) class Warrior_Attact(Warrior): def attack(self,enemy): print(self.name, '当前生命值', self.hp) __physical_attack = self.physical_attack cs = random.randint(1, 2) if cs == 1: self.physical_attack = self.physical_attack * 1.5 self.mp = self.mp - 100 print(self.name, '哈哈大笑,原地不动,突然凭空消失,冲天而起,使用技能晴元霸斩,剑势如风,快如电光,突然劈向', enemy.name, '单体伤害为攻击的150%', '打出伤害', self.physical_attack) else: self.physical_attack = self.physical_attack * 2 self.mp = self.mp - 150 print(self.name, '怒吼一声,缓缓拔剑,剑光激起,飞速旋转起来,使用技能乾离龙杀,剑势化为一条巨龙冲向', enemy.name, '全体伤害为攻击的90%', '造成伤害', self.physical_attack) sh = self.physical_attack - self.physical_defense print(enemy.name, '护甲为', self.physical_defense, '造成真实伤害', sh) enemy.hp = enemy.hp - sh if enemy.hp < 0: enemy.hp = 0 print(enemy.name, '剩余血量为', enemy.hp) def main(): while True: print("1,选择玩家(不允许切换职业)") print("2,进入商城") print("3,进入充值") print("4,选择装备") print("5,玩家信息") print("6,进入战斗(需要先选择职业)") print("7,退出") num = int(input("请输入您的选择:")) if num == 1: occupation() break if num == 2: mall() if num == 3: recharge() if num == 4: mall() if num == 5: occupation() if num == 6: occupation() else: print("请输入正确的选择!") continue dict_vocation = {'T': '法师', 'S': '战士'} def occupation(): global player1 while True: name = input("勇士,请为您的角色命名:") print("-------------------------------------------------") print("T: 法师,伤害高,血量防御低\n" "S: 战士,伤害低,血量防御高\n") cf = input("%s,请选择您的职业:" % name) print("-------------------------------------------------") if cf == 'T' or cf == 't': player1 = Master_Attack('武则天', '金', 4000, 700, 500, 100, 100, 30) break elif cf == 'S' or cf == 's': player1 = Warrior_Attact('关羽', '木', 5000, 500, 400, 200, 200, 40) break else: print('输入错误,请重新输入:') continue show_player_info(_player=player1) time.sleep(1) # 初始化电脑角色 global player0 if cf == 'T' or cf == 't': player0 = Warrior_Attact('关羽', '木', 5000, 500, 400, 200, 200, 40) elif cf == 'S' or cf == 's': player0 = Master_Attack('武则天', '金', 4000, 700, 500, 100, 100, 30) print("电脑选择了",player0.name,"与你对战") show_player_info(_player=player0) if player0.agile > player1.agile: print("止戈为武,以武会友",player0.name,"请你先出手!") duel(_player0=player0, _player1=player1) elif player0.agile < player1.agile: print(player0.name,"不讲武德,卑鄙的向你发起了偷袭") duel(_player0=player1, _player1=player0) def show_player_info(_player): print(_player.name,'是一位',_player.vocation,'\n生命值',_player.hp,_player.attribute,'属性') print("****************************************") def duel(_player0, _player1): while True: _player1.attack(_player0) if _player0.hp <= 0: print("******************************") print("恭喜%s获得胜利!" % _player1.name) break print("---------------------------------") time.sleep(1) _player0.attack(_player1) if _player1.hp <= 0: print("******************************") print("%s赢得了决斗!" % _player0.name) break print("---------------------------------") time.sleep(1) if __name__ == '__main__': main()