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

Project1

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

[讨论] 【求高人指路】回合制战斗AI,怎么为敌人增加预判

[复制链接]

Lv4.逐梦者

水月·镜花

梦石
10
星屑
403
在线时间
1181 小时
注册时间
2005-10-22
帖子
1183

开拓者

跳转到指定楼层
1
发表于 2012-10-21 14:34:40 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

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

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

x
正在改进RM默认的AI,从随机选择行动和目标改为以得分计算行动。

算法描述:
    敌人可以进行的行动有:攻击、特技、法术、防御和待机。待机不会产生任何效果,其他行动的消耗与己方角色相同。敌人会在轮到当前敌方角色行动时进行AI运算,决定具体行动。行动将以行动绩点(AP)计算,当前行动角色遍历搜索可以执行的所有动作Avalible_Action,计算行动得分,并获得得分表Action_Points[action_index]。遍历得分表获得最高得分的行动index,搜索行动表获得行动并返回。以下为AP优先级:
    最高优先级:可能使玩家方角色战斗不能(HP归零或体力归零)时,以最优化进攻方案打击目标,AP得分修正10000
      高优先级:友方HP低下,且自己可以治疗时,以最优化治疗方案治疗,AP系数5
      普通优先级:自己可以治疗时,以最优化治疗方案治疗,AP系数4
      普通优先级:可以施放或解除增益、减益效果(含法术、特技、攻击效果),且存在合适目标(即未有该效果)时,对目标施放效果,AP得分修正1000
      普通优先级:可以攻击(含施放法术和特技)时,以最优化攻击方案进攻。
    次优先级:无法造成有效伤害或有效治疗时,进行防御,AP得分修正100
      最低优先级:无法行动时待机,AP得分修正0。

AP得分计算公式:
|有效伤害或治疗值| * AP系数 + AP得分修正 – sp消耗 * 100

伪代码算法:
  1. #===========================================
  2. # AI演算的方法
  3. #===========================================
  4. Enemy_AI(Enemy enemy)
  5.     actions[] = new[] Action
  6.     action_points[][] = new[][] int
  7.     # 读取有效行动表
  8.     for action in Enemy.avalible_Action
  9.         actions[] += action
  10.     end
  11.     # 计算行动得分
  12.     for action in actions
  13.         action_point = |action.damage| * action.ap_parameter + action.ap_addition – action.sp_cost * 100
  14.         action_points[action.index] = action_point
  15.     end
  16.     # 获得得分最高的行动
  17.     temp_score
  18.     temp_index = 0
  19.     while temp_index < count(actions[])
  20.             if points[temp_index][i] > temp_score
  21.             then temp_score = point
  22.                  final_action = temp_index
  23.             end
  24.             temp_index += 1
  25.     end
  26.     # 返回最终决定的行动
  27.    return actions[final_action]
  28. end
复制代码
优化什么的等代码写出来再说……
这个算法基本可以杜绝AI的弱智行为,比如玩家角色红血时自己刷BUFF,比如盯着进行防御的战士集火任由后面的法师乱BIU。
缺点是简单的行动积分制无法完成行动预判,例如,当对方(玩家)角色准备施放法术,这个法术一次把AI角色全A死。
而AI角色只会全力治疗或者集火这个法师,而不会考虑使用伤害较低但是有打断效果的攻击。
如果单纯提高打断效果的AP加成,又会导致AI无脑打断直到放不出技能……

求一个更好的预判算法改进,如果能预测两三回合就更完美了orz

Lv1.梦旅人

梦石
0
星屑
66
在线时间
91 小时
注册时间
2012-8-15
帖子
57
2
发表于 2012-11-8 10:18:40 | 只看该作者
# 计算行动得分 路人表示啥意思不明。
理论:求得敌人可以攻击的范围内所有角色,应该是移动后可攻击也包括在内,读取角色各种信息,然后进行判断是否选择攻击。
回复 支持 反对

使用道具 举报

Lv4.逐梦者

水月·镜花

梦石
10
星屑
403
在线时间
1181 小时
注册时间
2005-10-22
帖子
1183

开拓者

3
 楼主| 发表于 2012-11-8 11:34:52 | 只看该作者
虾米£浪子 发表于 2012-11-8 12:18
# 计算行动得分 路人表示啥意思不明。
理论:求得敌人可以攻击的范围内所有角色,应该是移动后可攻击也包括 ...

行動得分就是判定行動優先級,打個比方

你在一個時間內可以同時攻擊一個戰士和一個法師
戰士防高,法師皮脆,顯然攻擊法師製造的有效傷害更高
那麼行動得分應該引導AI優先攻擊法師

但是,如果戰士剩下一絲血,法師滿血
雖然攻擊戰士的有效輸出低,但是實際收益比攻擊法師高
那麼對殘血敵人補刀的優先級就應該比集火脆皮高

点评

比如玩家一个战士一个牧师,战士半血的情况下,牧师可能会加血,那么等牧师开始读法术然后打断那是判断,而在牧师施放法术前沉默掉就是预判。  发表于 2012-11-8 12:13
行动得分只是判断当下最优动作,预判是预测玩家下一步的行动,然后选择最优方案。  发表于 2012-11-8 12:11
那么行动得分不就是预判了吗?  发表于 2012-11-8 11:43
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
37 小时
注册时间
2012-7-30
帖子
147
4
发表于 2012-11-9 23:22:35 | 只看该作者
复杂判定代码如果不能用general语句套的话就要设定每个情况了吧。虽然不知道具体行动分怎么算的……你写好了就发出来呗:S
想想真复杂。就按你说的那个情况改进的话,在判定角色威胁度的时候大规模法术要提高,而且要在“此时”打断法术的优先度要提高。是嘛?
如果这样,威胁度就不能只用int排(如果你是这样做的),要array+额外判定。
ex:角色2在释放大杀器。获取威胁度后,角色1是[100,[]]角色2是[999,[“打断”]](由于大杀器效果判定提高,这个额外string可以技能return)此时排威胁度顺序还是用array[0]排,而在判定什么action好的时候,就可以if action.打断? && array[1].include?("打断") actionPoint = 99999提高打断技能的排序。当然你想要ai有超级团队配合(一个打断就不管第二个)那更复杂了,还要加团队额外处理。
ps.把boss的技能换成大范围超高杀伤和单体近似秒杀完全解决了所有问题。。。

点评

这样做必然会拖慢运算速度,看ai的聪明度,越聪明if越多嗷嗷嗷  发表于 2012-11-9 23:25
想回复我的话请呼(@)我一下。
准备执行人体盗图计划,copyright的诸君赶紧藏好咧~
回复 支持 反对

使用道具 举报

Lv3.寻梦者

梦石
0
星屑
1624
在线时间
1609 小时
注册时间
2007-8-28
帖子
3253

第3届短篇游戏大赛主流游戏组冠军第1届Title华丽大赛新人奖

5
发表于 2012-11-17 13:10:57 | 只看该作者
用西洋棋ai算法就可以了
“我推荐你一个游戏吧,avg的,剧情特感人”
“我擦,都是文字图片的游戏有啥好玩的,连个战斗都没有!”
“我推荐你一个游戏吧,rpg的,战斗也新颖”
“我擦,怎么米有作i弊器?“
”你不是喜欢战斗么?”
“不,我是剧情党!!”

继续阅读请点击
http://rpg.blue/blog-53316-10027.html
回复 支持 反对

使用道具 举报

Lv4.逐梦者

水月·镜花

梦石
10
星屑
403
在线时间
1181 小时
注册时间
2005-10-22
帖子
1183

开拓者

6
 楼主| 发表于 2012-11-17 15:01:06 | 只看该作者
柳之一 发表于 2012-11-17 15:10
用西洋棋ai算法就可以了

將玩家後續行動列入計算再評分選取么?
問題RPG戰鬥有隨機數,最基本的命中暴擊和傷害浮動率都會影響實際結果,AI思考計算最多只能根據這些變數追加價值參數,預判未必準確。
嘛,也是一個辦法,先試試
回复 支持 反对

使用道具 举报

Lv3.寻梦者

梦石
0
星屑
1624
在线时间
1609 小时
注册时间
2007-8-28
帖子
3253

第3届短篇游戏大赛主流游戏组冠军第1届Title华丽大赛新人奖

7
发表于 2012-11-17 17:15:25 | 只看该作者
电子最终龙 发表于 2012-11-17 15:01
將玩家後續行動列入計算再評分選取么?
問題RPG戰鬥有隨機數,最基本的命中暴擊和傷害浮動率都會影響實際 ...

就算是有變數也要考慮啊

有%15幾率 暴擊 和有12%記錄用哪個技能 實際上是一樣的,所以預判一定準確,只不過可能性多了而已.
你的系統比起西洋棋還是簡單得多的
“我推荐你一个游戏吧,avg的,剧情特感人”
“我擦,都是文字图片的游戏有啥好玩的,连个战斗都没有!”
“我推荐你一个游戏吧,rpg的,战斗也新颖”
“我擦,怎么米有作i弊器?“
”你不是喜欢战斗么?”
“不,我是剧情党!!”

继续阅读请点击
http://rpg.blue/blog-53316-10027.html
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2024-11-28 20:35

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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