YACHY给了个游戏战斗计算公式,比较复杂。。。
复杂的系统很难平衡,所以为了测试公式是否合适,我写了个测试机,实现两个机器人基于该设定PK,暂时给定 男一号 :张无忌 男二号:段誉。
测试结果不太满意,然后我修改了一下公式。现在看来效果还不错~
相当有意思的数值游戏!!
以下为两者能力相同的情况下,
段誉高轻功,张无忌高输出,
具体战斗信息
数据脚本设定
数据内容
公式如下:
攻击能力评估 g = 武器伤害 + (技能伤害 * 技能熟练度 * 技能与内功适性 ) * ( 1 + 内功比例系数 * 当前内力/内力上限 )
防御能力评估 s = 防具防御力 + (技能1防御力 * 技能熟练度 * 技能与内功适性 + 技能2防御力 * ...) * ( 1 + 内功比例系数 * 当前内力/内力上限 )
进攻方轻功能力评估 q1 = 轻功 * ( 1 + 内功比例系数 * 当前内力/内力上限 )
防守方轻功能力评估 q2 = 轻功 * ( 1 + 内功比例系数 * 当前内力/内力上限 )
伤害力评估 c = g - s ( 如果c<0 则c=10 )
伤害力 受伤层能力计算 x = g / ( g + s )
攻击判定轻功修正 y = ( q1 - q2 ) / q2
命中概率 w = x + y * 0.3
如果命中:
受伤度 m = 守方当前生命值hp / 守方生命上限hpmax
伤害值 damage = c/10 * ( 1/m ) * ( 攻击方当前生命hp / 攻击方生命上限hpmax )
先给出大体的计算设定:(文by yachy)
DEMO版人物的属性定义:
为了不同以往游戏的计算方法,我们希望设计出一个更贴近于武侠模式的属性计算方式。
命:相当于武侠小说中人物的身体状态,100%为健康,0%为死亡,中间分为轻伤,重伤,濒死。受伤遵循以下原则
第一:受伤与否是根据一次被攻击而定,损失命的百分比有一个发生概率。也就是说,碰到高手受伤概率大,碰到小人物也不一定不会受伤。
第二:游戏中没有回血的药品。受伤之后只能通过时间的流逝恢复,比如一天恢复1%。但是拥有灵丹妙药或者是静心在某个地方打坐,恢复值一天能超过1%。这个恢复速度也更主人公的内力有关。
第三:受伤后的后果很严重,攻,守,轻,等等属性都需要乘以命的百分比,内力的下降速度非常快。如果在受伤情况下再次战斗,受伤概率更大。
内力:值无上限。原则有几点:
第一:内力有属性,比如学习了九阴真经,不能学九阳神功。
第二:通过修习内功以及打斗增加,低等内功每天增加得少,高等内功每天增加的多。所以主人公可以开始慢慢修炼低等内功,也可以等待机缘修习到高等内功再说,不过那样风险比较大。
第三:战斗中内功会持续损失,发动招式,无论攻,守,轻,也会大量损失。
第四:受伤的可能性跟内力有关,内力剩余越多受伤的可能性越小。内力也可以影响武功的发挥程度,只有五成内力的话,对招式的加成会变得很低。
第五:内力可以极快速度恢复,也可以吃药,也可以打坐,随着时间也能回复。恢复速度以10%为底线计。
攻:进攻能力,无上限。包括基础值和实际值,原则如下:
第一:基础值由两方面决定,内力武器和招式。纯砍的话,仅用内力乘以比例+武器计算,战斗中每回合损失内力也到最小。运用招式的话,攻=内力乘以比例+武器+内力对于招式的加成,伤害肯定要大,但是消耗内力多。
第二:进攻招式可以通过战斗中使用或平时练习升级,前者升得快。
第三:算出基础值之后,需要通过“命”来计算实际值,乘以命的百分比,得到实际能发出的攻值。如果濒死,乘以命的百分比还要乘以1/2,因为快死了嘛。
守:防守能力,无上限。包括基础值和实际值,原则如下:
第一:基础值由两方面决定,内力防具和被动招式。守=内力乘以比例+防具+内力对于被动招式1的加成+内力对于被动招式2的加成+…………
第二:算出基础值之后,需要通过“命”来计算实际值,乘以命的百分比,得到实际的守值。如果濒死,乘以命的百分比还要乘以1/2,因为快死了嘛。
第三:守技属于被动,但是主角可以选择性装备,因为原则上不同内力对于不同被动防御招式加成不同,损失的内力也不同,多装备内力损失大,但是更保险。
第四:被动防御招式可以通过战斗中使用或平时练习升级,前者升得快。
轻:轻功能力,无上限。涉及到武功的属性。也包括基础值和实际值,原则如下:
第一:轻功基础值更内力有关,更与轻功秘籍有关。轻=内力比例+轻功1+轻功2+…………注意内力占的比例应该低一点,30%。
第二:算出基础值之后,需要通过“命”来计算实际值,乘以命的百分比,得到实际的轻值。如果濒死,乘以命的百分比还要乘以1/2,因为快死了嘛。
第三:轻功属于被动,但是主角可以选择性装备,因为原则上不同内力对于不同轻功加成不同,损失的内力也不同,多装备内力损失大。
第四:轻功的作用:以比例减小主人公受伤的几率,以比例提高主人公的进攻对象受伤的几率,缩短回合的冷却时间。(与守不同,守是以绝对值加入计算受伤)。
第五:轻功也能通过战斗或者平时练习升级,前者升的快。
重点来了,伤害计算!!!
伤害计算方式分为两个层次。
第一:受伤层。这个部分是由攻,守等等属性计算出概率得到。决定一次被进攻是否受伤。
第二:伤势层。这个部分是由第一层计算结果决定是否计算,是计算到底伤害多少。
再描述一下伤害计算的设计来源。
天龙八部中初期的段誉。因为学习了凌波微步,加上不太弱的内力(北冥神功),可以大大减少自己被伤害的概率,进攻上(虽然当时他不会进攻的招式)也能大大提高进攻的成功率。但是这个部分仅限于比他实力只高出一层或几层的人,或者内功高一线,或者招式强一线。一旦碰到了绝对实力的对手,初期段誉的轻功相信是完全没有作用的。
受伤层:
在一次攻击中。
令绝对实力差距 c=攻方攻的实际值-守方守的实际值
令实力差距相对守方值 x=c/守方守的实际值(c为负时,变为0)
轻功差距 q=攻方轻功实际值-守方轻功实际值
轻功相对守方值 y=q/守方轻的实际值(q为负时,继续计算)
受伤概率为 w=x+y*10%
(下面进行一下数据的测试。
例1:当实力都大大强于对手。攻方攻实际1000,守方守实际500,攻方轻200,守方轻100
C=500,x=1,q=100,y=1,x=1.1,百分之百受伤。
例2:当实力都稍强于对手。顺序同上,下同。600,500,200,100
C=100,x=20%,q=100,y=1,w=30%
例3: 当武力稍强于对手,轻功很弱(大约是段誉被进攻时)。600,500,100,200
C=100,x=20%,q=-100,y=-1,w=20%-10%=10%
例4:当武力稍弱于对手,轻功很强(大约是段誉进攻时)。500,600,200,100
C=负,x=0%,q=100,y=1,w=10%
例5: 均弱于对手,x=0,w主要受轻功影响。
)
综上所述,大大强于对手伤害100%,稍强于对手,轻功能起到一定程度的作用,哪方面弱于对手概率都会变低,均弱于对手的架还是靠轻功了。
伤势层:
如果判定为受伤。伤势计算暂时如下:
如果伤害以x%的概率发生并且发生了,那么命的损失为x%*80%。如果x%<10%,伤害以10%计。
此时如果被攻击者已经受伤,收到的伤害会更大,如果生命值已经是m%,伤害值还要乘以1/m%。
即如果生命值是50%,那么这次受伤原本是20%,那么要乘以1/50%=2,受40%的伤害。
下面再谈谈攻,守,轻基础值计算:(中间k开头的参数均是比例,有待商榷,初步k1=k2=50%,k3=30%)
攻g=内功当前值 × k1 (+ 武器的攻击) (+ 招式伤害 × 招式熟练度 × 内功与招式的配合程度 × 内功当前值 / 内功最大值)
守s=内功当前值 × k2 (+ 防具的防御) (+ 招式1防御力 × 招式熟练度 × 内功与招式的配合程度 × 内功当前值 / 内功最大值) (+ 招式2防御力 ……)……
轻q=内功当前值 × k3 (+ 轻功1 × 招式熟练度 × 内功与招式的配合程度 × 内功当前值 / 内功最大值) (+ 轻功2 ……)……
实际值就是以基础值×生命值,生命值低于20%为濒死,实际值还要除以2。
为什么要乘以内功当前值/内功最大值呢?这样的算法是根据武侠小说而来:
第一:内功最大值可能很大,但是如果当前值很少,那么就不能发挥全部威力,好比无涯子传功给虚竹之后,内力非常低,武功招式精妙也没有用。
第二:凸显招式的重要性。如果某人内力1098/1100,而一个高手1098/10000。这样,虽然内力相同,某人能发出所学的100%,而高手只能发出所学的10%,这是不合理的,因为两人内力相等,高手可以凭借招式取胜。这个我们可以这样理解:高手的招式伤害×招式熟练度×内力与招式的配合程度非常高,就算10%也足矣抗衡。如果你还要刨根问底:为什么同样的内力,高手要比撮B招式厉害10倍才能打个平手。我会说:第一,凸显招式的重要性,“招式伤害×招式熟练度×内力与招式的配合程度”提高10倍不容易,也不难!招式领悟高3层我们就能10倍差距,如果修炼到10000内力,招式还是跟1000的人领悟一样的话,那拜托你不要玩了。第二,属性还是以内力为大头的。打斗中,保存内力也是必要的!第三,打斗的方式有限定,见下面“第三”。
第三:打斗中,内力都会以一定数值减少,比如一个回合降20点,招式100点等等。而恢复的时候内力却是以百分比恢复,非常快。所以内力高很有优势,10000点内力和1000点内力,打斗,基本秒杀对方,不可能出现后来1098/1100对1098/10000的情况,除了车轮战,或者玩家一直不补给。但是如果这样,第二条的设定还是很合理的,持续的疲劳需要更高的技巧来弥补。
分享到:
相关推荐
在现代数字化社会,我们经常使用压缩工具如WinRAR或7-ZIP来打包和分享多个文件,如这里的"浅谈《倚天屠龙》中张无忌角色与现代社会的关联.zip"。这个压缩包可能包含了对金庸先生笔下经典人物张无忌的深入研究,以及...
课程资源一直都有的是数据结构,相对的来说数据结构对所有程序员都是免不了的,上传数据结构课程单张,继续更
这个"asp自动化测试工具(源代码+论文).zip"压缩包显然包含了一个专门针对ASP应用程序的自动化测试工具的源代码和相关论文,这为理解和学习ASP应用的测试方法提供了宝贵的资源。 在自动化测试领域,ASP应用的测试...
1.0 计算机基础 1.1 软件的概念 1.2 软件危机 1.3 软件工程 1.4 软件生命周期 1.5 软件开发过程模型 1.6 软件开发方法简述
通过Self-evaluate,张无忌自我评价自己的技能和经验,强调自己的创新思维、沟通能力、艺术触觉和审美水平,这些技能对于一个UI/设计师来说是非常重要的。 项目经历 张无忌参加了多个项目,包括协助新浪公司进行新...
1. 苹果的误用:在《倚天屠龙记》中,张无忌将苹果与未知的果实进行比较,但实际上,苹果在元朝末期才传入中国,而张无忌所在的时代是南宋,因此这一情节是不准确的。 2. 玉米的穿越:在《神雕侠侣》中,杨过在南宋...
机械工程测试技术/机械设计/机械制造技术基础/控制工程/互换性/液压与气动传动等 审计学/软件工程/微机原理/宏观经济学/数字信号处理/流体力学/单片机/财务管理/自动控制原理/数学物理方法/生物化学/机械制造基础/...
银行转账事务的小练习,简单的简单表述...Update tb_account set balance = balance -1000 where name=’张无忌’ 3.在赵敏的账户余额尚增加1000. Update tb_account set balance = balance +1000 where name=’赵敏’
【创意高端商务求职简历】是求职者展示个人能力和专业素养的重要工具,对于UI/设计师张无忌来说,一份独特而专业的简历能让他在众多求职者中脱颖而出,吸引潜在雇主的注意。以下是对张无忌简历中关键知识点的详细...
【汇编语言教程(图片版)】是一份以图像形式呈现的教程,旨在帮助学习者更直观地理解和掌握汇编语言的基本概念、语法和应用。汇编语言是计算机科学中的低级编程语言,它与机器语言密切相关,每条指令都对应着计算机...
张无忌的简历分为自我评价、教育背景、技能证书、实习经历和项目经历等多个部分,这种结构让信息层次分明。 1. **求职意向**:张无忌明确了自己的求职目标为UI/设计师,这有助于雇主快速了解他的职业定位。 2. **...
张无忌作为答辩人,需要在此处清晰地表达出他的研究是如何与当前学术或实践需求相吻合的,以及这项研究对学术界或社会可能产生的影响。指导老师张三丰的角色是指导和审阅这部分内容,确保其科学性和逻辑性。 研究...
该文档是一个求职简历,主要展示了求职者张无忌的个人信息、求职意向、教育背景、专业技能、实践经验以及获得的奖项和证书。以下是简历中的关键知识点: 1. **求职意向**:求职者张无忌期望在成都市武侯区寻找工作...
2. 张无忌在《倚天屠龙记》中从白猿腹中找到了《九阳真经》,这部经书帮助他修炼了深厚的内力。 3. 《笑傲江湖》中的东方不败使用的兵器是绣花针,虽然看似不起眼,但威力巨大。 4. 天山童姥每隔三十年会经历一次...
例如,张无忌毕业于四川大学设计专业,拥有扎实的专业知识,曾实习于多个知名公司,并获得了多项奖学金和技能证书。 4. 英语能力:CET4 和 CET6 的高分表明求职者具备良好的英语听说读写能力,能够适应跨国公司或...
【嵌入式学习三剑式】是指在学习嵌入式技术的过程中,常见的三种学习路径,分别对应武侠小说中的人物形象,即韦小宝式、陈近南式和张无忌式。 1. **韦小宝式**:这种学习方式类似于在导师的指导下快速提升技能,...
张无忌在这一部分应该介绍他的研究是如何与现有知识体系相连接的,以及他的工作对学术界或实践领域的潜在贡献。指导老师张三丰可能会在这个阶段给予指导,确保研究背景的准确性和深度。 2. **研究结果与应用**: ...
文档中的内容是一个创意高端商务求职简历,用于展示张无忌的个人能力和专业技能,以便在求职过程中吸引潜在雇主的注意。以下是对这份简历中关键知识点的详细解释: 1. **求职意向**:张无忌的目标职位是UI设计师、...
如果其中一个更新操作失败了,比如张无忌的money不足2000,我们可以选择回滚事务来撤销所有的更改。 ```sql -- 开启事务 START TRANSACTION; -- 更新李莫愁的money字段 UPDATE select_student SET money = money +...
String[] names = {"令狐冲", "张无忌", "韦小宝", "杨过", "段誉", "乔峰"}; System.out.println(names[index++]); //打印出令狐冲 System.out.println(names[index]); //打印出张无忌 如果我们使用++i来实现循环...