设为首页收藏本站|繁體中文

Project1

 找回密码
 注册会员
搜索
查看: 11689|回复: 12
打印 上一主题 下一主题

[交流讨论] 关于自动战斗AI

[复制链接]

Lv1.梦旅人

笑问情缘

梦石
0
星屑
73
在线时间
238 小时
注册时间
2006-5-3
帖子
640
跳转到指定楼层
1
发表于 2016-1-9 19:30:00 手机端发表。 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

加入我们,或者,欢迎回来。

您需要 登录 才可以下载或查看,没有帐号?注册会员

x
引擎自带的自动战斗,缺点太大了,角色不会自动释放针对自己的技能,治疗技能也只会对位置1的同伴使用,除非死亡才会第2个,诸如此类,有没有优化的AI呢

Lv2.观梦者

梦石
0
星屑
497
在线时间
266 小时
注册时间
2015-12-8
帖子
873
2
发表于 2016-1-9 21:51:11 | 只看该作者
不要自動就好了 如果自動能這麼聰明 可以全部角色都自動了
回复 支持 反对

使用道具 举报

Lv4.逐梦者 (版主)

梦石
0
星屑
12947
在线时间
2831 小时
注册时间
2008-11-23
帖子
2577

开拓者贵宾

3
发表于 2016-1-9 22:10:43 | 只看该作者
自动战斗是个负面属性好吗
设成自动战斗代表这个角色是临时入队,非主要角色,无法操控
I'm the bone of my Second Grade.
回复 支持 反对

使用道具 举报

Lv1.梦旅人

笑问情缘

梦石
0
星屑
73
在线时间
238 小时
注册时间
2006-5-3
帖子
640
4
 楼主| 发表于 2016-1-9 22:16:01 手机端发表。 | 只看该作者
但是我的游戏类似于刷装备游戏,战斗想要简单化,通常是全自动的,最多控制主角一个人
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
65
在线时间
385 小时
注册时间
2007-7-27
帖子
4106

开拓者

5
发表于 2016-1-9 22:38:11 | 只看该作者
本帖最后由 trentswd 于 2016-1-9 22:41 编辑

这种游戏印象比较深的是ff12和dao
以前xp时代见过一个仿ff12的系统
搜一下居然真的有
http://www.gdunlimited.net/scrip ... -fantasy-xii-engine
扯远了

写AI树纯粹是体力活,首先要给技能分类,然后要加一堆分支
关键是别人的游戏和你的游戏不一样,换了一套技能之后AI树也要改,感觉不太靠谱
不如等人写一个gambit系统吧(

吸吸
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
55
在线时间
388 小时
注册时间
2009-8-4
帖子
219
6
发表于 2016-1-9 22:54:29 | 只看该作者
本帖最后由 andrewx 于 2016-1-9 22:56 编辑

据我所知并没有这样的通用增强AI,因为这个东西跟每个游戏设计密切挂钩,插件作者根本不知道你的游戏里设计的技能的公式、效果都是什么样的,以及这些技能在游戏里的比重有多少,自然没有办法写出相应的求最优行动的算法。其次这样的AI真的不好做,一个buff究竟能带来多少效用,这个buff在战斗开始和战斗结束哪个时间点上效用最高,甚至敌人与玩家可能的行为也应该是影响AI的因素。也就是说你首先要提供能够覆盖你游戏里战斗行动的reward function, transition function等,这才有可能做出一个合适的AI。如果一个插件作者连这些都没有就能做出一个好的AI...那这个AI已经是机器学习的程度了。即便是Yanfly的敌人AI插件,这些判定也是要你自己手工写的。

正因为不现实,系统默认的战斗AI也仅仅是计算HP伤害/回复比率来判定一个行动的效用(所以默认自动行动不会碰那些不影响HP的技能)。如果你想修改,去看下面两个方法:
JAVASCRIPT 代码复制
  1. Game_Action.prototype.evaluate = function() {
  2.     var value = 0;
  3.     this.itemTargetCandidates().forEach(function(target) {
  4.         var targetValue = this.evaluateWithTarget(target);
  5.         if (this.isForAll()) {
  6.             value += targetValue;
  7.         } else if (targetValue > value) {
  8.             value = targetValue;
  9.             this._targetIndex = target.index;
  10.         }
  11.     }, this);
  12.     value *= this.numRepeats();
  13.     if (value > 0) {
  14.         value += Math.random();
  15.     }
  16.     return value;
  17. };
  18.  
  19. Game_Action.prototype.evaluateWithTarget = function(target) {
  20.     if (this.isHpEffect()) {
  21.         var value = this.makeDamageValue(target, false);
  22.         if (this.isForOpponent()) {
  23.             return value / Math.max(target.hp, 1);
  24.         } else {
  25.             var recovery = Math.min(-value, target.mhp - target.hp);
  26.             return recovery / target.mhp;
  27.         }
  28.     }
  29. };

这就是自动战斗的utility function了,你可以在evaluateWithTarget里面添加一些判定,赋予一些行动权重来调节自动战斗AI,比如当target濒死时,会返回双倍的value,比如如果回合数很小的时候,buff类技能也能返回一定的value等等

正如楼上上上说的,自动战斗并不是好的战斗解决方法,所以我也懒得实践,以上仅是理论思考。
话说回来FF13的队友AI实在做得很棒,执行的行动一般都是很合理的。所以说FF13的战斗系统真的没得黑...啊咧,好像扯远了...
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
223
在线时间
85 小时
注册时间
2015-12-22
帖子
56
7
发表于 2016-1-9 22:59:15 | 只看该作者
我是想问楼主自动刷装备怎么跳过最后的信息,切页的时候需要输入,比如某某升级得到物品什么的就会要切信息页
回复 支持 反对

使用道具 举报

Lv1.梦旅人

笑问情缘

梦石
0
星屑
73
在线时间
238 小时
注册时间
2006-5-3
帖子
640
8
 楼主| 发表于 2016-1-10 11:12:06 手机端发表。 | 只看该作者
谢谢楼上大大热心解答,我的战斗不是挂机游戏,只是战斗不需要手动控制每个角色而已
回复 支持 反对

使用道具 举报

Lv3.寻梦者

梦石
0
星屑
3411
在线时间
2587 小时
注册时间
2012-3-1
帖子
764
9
发表于 2016-1-10 18:55:27 | 只看该作者
我的自動戰鬥參考了某些戰鬥系統。也就是怒氣值滿了的話自動釋放必殺技,如果按照這個思路,AI也許會這麼做的吧?
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
650
在线时间
0 小时
注册时间
2016-1-12
帖子
4
10
发表于 2016-1-12 11:29:41 | 只看该作者
不能完整的实现自动战斗AI,真可惜
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

拿上你的纸笔,建造一个属于你的梦想世界,加入吧。
 注册会员
找回密码

站长信箱:[email protected]|手机版|小黑屋|无图版|Project1游戏制作

GMT+8, 2024-11-7 06:47

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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