游戏开发论坛

 找回密码
 立即注册
搜索
查看: 27792|回复: 12

[原创] 半即时回合制战斗属性的基础模拟

  [复制链接]

2

主题

39

帖子

289

积分

中级会员

Rank: 3Rank: 3

积分
289
QQ
发表于 2015-6-25 12:06:23 | 显示全部楼层 |阅读模式
本帖最后由 ssaimixiu 于 2015-6-26 14:05 编辑

  近来常有人问我关于战斗属性模拟的问题,比如怎么设定职业属性、怎么做模拟工具。说实话还真的没有一套通用的办法,只是针对不同的需求做满足需求的事而已。但是感觉还是有一些基本的思路是可以借鉴的,所以在这里我分享一个简单的战斗模拟过程,旨在能给对这部分迷惑的同行兄弟一些帮助,同时也希望能汲取各路大神的指点。

  在这里不想做太多解释说明,可以直取附件(excel2007以上)

  战斗属性页设定了简单的基础属性,确定了战斗相关的公式。攻方公式采用了最简单的减伤比方式,也就是大家经常说的乘法,没有考虑等级因素,因为后面战斗模拟时默认双方是同等级。这里选用减伤比的方式,还有一个目的是能够更容易保持战斗属性在分配和成长的过程中,能够保持线性,让我们所谓的战斗平衡能够维持不变

  属性分配页对如何评价战斗能力做了一个简单的推导,以此为基础随意设定了几个职业。在这里我们可以随意控制职业间的能力差异,当然,按照常规的思维,我们会把各职业的总能力保持在基本相同的一个层面,而内部会有不同的能力差异。根据预期感受调出的能力比,可以得到各职业的属性情况(也许这里需要你去拍一些数字,这些数字是一个全能职业的各项属性,代表了项目周期内各项能力会输出多少,当然这个周期并不是死的,因为理论上我们是想输出多少就输出多少,但是我们还是应该有一个清晰的设计目标为好)

  基础战斗页是一个战斗模拟器,模拟一场5V5的半即时对战,我们可以设置speed游戏速度,设置战斗单位的怒气技能的类型,比如前排×1代表攻击前排随机1个目标、后排×2代表攻击后排随机2个目标、加血×3代表给友方最多3个单位回复生命等等。甲队和乙队的属性默认取了相同值,我们可以通过关联把它们指向不同的情况,这里看我们的需求而定。 我们还可以设置队伍的阵型,规则默认是剑士和长柄在前排,琴和法在中排,弓在后排。 基本操作是通过“阵列编辑”设定双方的阵型并设定单位的属性,生成阵列后“战斗开始”,战斗结束后“重置”可重新模拟下一次战斗。

QQ图片20150625114031.jpg

PS:

①因为默认甲队会先于出手,所以同阵列同属性情况下,甲队会以轻微优势取胜

②调整不同的阵列对抗,我们其实可发现在职业属性完全平衡的情况下,单位搭配会对战斗结果带来很多变化,这是阵型带来的最基本的策略。你知道哪种阵列搭配是最优的吗?

③我们通过这个简单的模拟工具,可以扩展一些数值的设定范围,比如控制效果,在制作个性化技能的时候,也许可以将这些效果转化为已知的输出或回复能力,并以此来做一些平衡设计的假设。具体细节就靠大家自己扩展了

  职业属性分配页根据各职业属性权值,生成了各职业属性在系统拆分中的分配,这里简单的分为了自身、装备、强化等,实际情况看需求而定。

  这是一个比较简单的工具,实际因项目复杂程度而异,所以不建议直接套用,以免误人子弟。希望这种类型的思路能够帮助到一些人,毕竟这个行当分享出来的可行性资料并不多。

  PS:VBA这个东西其实只是一个工具,能够帮助我们去更好的验证一些我们的想法,并能简化我们的工作,它本身并没有什么专业性的数值内容。所以建议还是要把重点放到数值思路上,以及如何设计优秀体验的方法上,比如兴趣曲线、心流设计这些真正操控用户情绪的领域。

基础的战斗模拟.xls (869.5 KB, 下载次数: 3985)


0

主题

3

帖子

70

积分

注册会员

Rank: 2

积分
70
发表于 2015-6-25 14:40:48 | 显示全部楼层
干货,支持下

1

主题

61

帖子

238

积分

中级会员

Rank: 3Rank: 3

积分
238
发表于 2015-6-25 17:33:36 | 显示全部楼层
不错,很有指导意义。

基础数值用计算就可以调节。
需要可查看战斗细节,用于调整技能,测试技能效果。

如果缺少配置读取,和统计结果的输出的话,这个只是vba实现的excal小游戏。
实际游戏开发,关于战斗的配置文件可能多到十几个。
能由这个工具读入,并模拟战斗,然后与游戏的实际战斗,确认游戏中的战斗逻辑写的是否正确,是有帮助的。

还可以加入数据库读写功能,回放任何一组战斗过程,作为分析工具也不错。

这个工具的思路是不错的!

ps. 微软早就开始推行vsto替代vba。你试试vsto,c#比vb好用

1

主题

17

帖子

59

积分

注册会员

Rank: 2

积分
59
发表于 2015-6-26 17:58:15 | 显示全部楼层
不知道楼上的能共享下你的东西否
大家产考产考

0

主题

21

帖子

1344

积分

金牌会员

Rank: 6Rank: 6

积分
1344
发表于 2015-6-26 18:17:43 | 显示全部楼层
好东西,就是不知道能不能共享一下VB密码啊,我这64位系统编译报错啊

29

主题

487

帖子

953

积分

高级会员

Rank: 4

积分
953
发表于 2015-6-29 10:47:01 | 显示全部楼层
本帖最后由 traso 于 2015-6-29 10:48 编辑

稍微看了一下。关于平衡推导部分没看懂。主要是K值的制定到底有什么意义。以及这个常数应该制定的是多少?如果他是个常数的话。

不过按照公式来算的话。DPS=ASK*speed 来平衡的话。
我们先假设双方HP相同,A玩家和B玩家有2000点HP。
A的攻击是400而攻速是0.8秒秒攻击一次  B的攻击是500和攻速是1秒攻击一次。 时间推移到第4秒时B和A都死了。打成平手。看上去是平衡的。
可是A玩家和B玩家有1501~1600点HP之间的时候 按照此推导A玩家都是赢B玩家的。 而此外的情况都是A和B打平手。那么攻击速度高的玩家在此平衡下就会出现在某一阶段数值的情况下赢B玩家。而其他区间下双方则是平衡的。
所以LZ的EXCEL上也说过速度快的一方会有轻微优势。
当然我和3L也是意见相同。 实际情况下的数值比这复杂的多。 很多数值平衡上都用了数值建模的东西。不过对于新人来看,确实有不少指导的意义。但是切不可直接套用。

2

主题

39

帖子

289

积分

中级会员

Rank: 3Rank: 3

积分
289
QQ
 楼主| 发表于 2015-6-29 11:50:08 | 显示全部楼层
traso 发表于 2015-6-29 10:47
稍微看了一下。关于平衡推导部分没看懂。主要是K值的制定到底有什么意义。以及这个常数应该制定的是多少? ...

所言极是,其实内部东西还是比较粗糙,攻速的加入可能造成与实际情况的误差。很难实现多线程同步(类似DOTA),所以按轮次模拟,如果是严格的回合,先手必然会有优势,那样的话能相对更准确一些。  本着负责的态度,正如你所说,只看过程,不能套用

2

主题

39

帖子

289

积分

中级会员

Rank: 3Rank: 3

积分
289
QQ
 楼主| 发表于 2015-7-7 11:27:23 | 显示全部楼层
本帖最后由 ssaimixiu 于 2015-7-13 12:09 编辑

完全即时看来只能用时间轴把攻防分开计算

19

主题

198

帖子

757

积分

高级会员

Rank: 4

积分
757
发表于 2015-7-8 16:34:45 | 显示全部楼层
学习一下

0

主题

4

帖子

88

积分

注册会员

Rank: 2

积分
88
发表于 2015-7-10 16:35:36 | 显示全部楼层
学习学习
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

作品发布|文章投稿|广告合作|关于本站|游戏开发论坛 ( 闽ICP备17032699号-3 )

GMT+8, 2024-4-20 18:23

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表