赞 | 0 |
VIP | 90 |
好人卡 | 0 |
积分 | 104 |
经验 | 60532 |
最后登录 | 2020-7-14 |
在线时间 | 1181 小时 |
Lv4.逐梦者 水月·镜花
- 梦石
- 10
- 星屑
- 403
- 在线时间
- 1181 小时
- 注册时间
- 2005-10-22
- 帖子
- 1183
|
加入我们,或者,欢迎回来。
您需要 登录 才可以下载或查看,没有帐号?注册会员
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
伪代码算法:- #===========================================
- # AI演算的方法
- #===========================================
- Enemy_AI(Enemy enemy)
- actions[] = new[] Action
- action_points[][] = new[][] int
- # 读取有效行动表
- for action in Enemy.avalible_Action
- actions[] += action
- end
- # 计算行动得分
- for action in actions
- action_point = |action.damage| * action.ap_parameter + action.ap_addition – action.sp_cost * 100
- action_points[action.index] = action_point
- end
- # 获得得分最高的行动
- temp_score
- temp_index = 0
- while temp_index < count(actions[])
- if points[temp_index][i] > temp_score
- then temp_score = point
- final_action = temp_index
- end
- temp_index += 1
- end
- # 返回最终决定的行动
- return actions[final_action]
- end
复制代码 优化什么的等代码写出来再说……
这个算法基本可以杜绝AI的弱智行为,比如玩家角色红血时自己刷BUFF,比如盯着进行防御的战士集火任由后面的法师乱BIU。
缺点是简单的行动积分制无法完成行动预判,例如,当对方(玩家)角色准备施放法术,这个法术一次把AI角色全A死。
而AI角色只会全力治疗或者集火这个法师,而不会考虑使用伤害较低但是有打断效果的攻击。
如果单纯提高打断效果的AP加成,又会导致AI无脑打断直到放不出技能……
求一个更好的预判算法改进,如果能预测两三回合就更完美了orz |
|