Board logo

标题: 看来做格斗游戏 学习性 AI 还真是难啊. [打印本页]

作者: beterhans    时间: 2008-10-22 21:58     标题: 看来做格斗游戏 学习性 AI 还真是难啊.

这几天一直在研究 mugen. 想自己改改 AI. 于是去各大论坛找 AI 教程.
没想到某老大直接给了一个 学习型 AI 的制作,直接傻眼....

http://www.mugenchina.org/dzbbs/ ... &extra=page%3D1
作者: 阿弄    时间: 2008-10-22 22:20

直接做个波升无敌的AI 就OK了
作者: beterhans    时间: 2008-10-22 22:36

好 AI 不是无敌... 那是烂 AI.......
作者: henvelleng    时间: 2008-10-22 22:36

学习型ai?传说中的天网?审判日即将到来?人类毁灭在即?
作者: HJYtm    时间: 2008-10-22 23:30

为什么格斗厂商不愿意记录玩家的部分操作来进行对游戏AI的升级呢?比如打补丁?
作者: flashback    时间: 2008-10-23 00:50

引用:
原帖由 HJYtm 于 2008-10-22 23:30 发表
为什么格斗厂商不愿意记录玩家的部分操作来进行对游戏AI的升级呢?比如打补丁?
可以记录某个人的操作,分析他的技术特点,然后有针对性的改变攻守策略,最新一作的WE据说加入了一些这种东西。
但很难收集多人的操作,然后分析玩家的行为模式,然后再挑选一个来应对,这个太难,数据太大,计算量也太大,而且只玩一局两局还不一定判断的出,然后刚收集了一些信息,机器前换了个一个玩家,AI他又不知道换人了....
厂商也不可能花这个精力去做,毕竟他设计这个游戏的目的是为了人间对战。
作者: HJYtm    时间: 2008-10-23 00:54

引用:
原帖由 flashback 于 2008-10-23 00:50 发表


可以记录某个人的操作,分析他的技术特点,然后有针对性的改变攻守策略,最新一作的WE据说加入了一些这种东西。
但很难收集多人的操作,然后分析玩家的行为模式,然后再挑选一个来应对,这个太难,数据太大,计 ...
可以选择性收集啊,而且格斗呢,从操作上看,难度是很小的
作者: shinken4503    时间: 2008-10-23 01:13

这个有什么好研究的
玩家的 每个操作AI其实都知道,真要100%难度全开你连AI的毛都不会碰到一根
说白了AI设计就是结合该角色本身的攻防特性进行出招种类和几率的设置,再加上基于难度反比修正的强制失误罢了,这就是大多数的游戏无论什么难度AI出的就是那么几个COMBO套路的原因
作者: beterhans    时间: 2008-10-23 01:18

引用:
原帖由 shinken4503 于 2008-10-23 01:13 发表
这个有什么好研究的
玩家的 每个操作AI其实都知道,真要100%难度全开你连AI的毛都不会碰到一根
说白了AI设计就是结合该角色本身的攻防特性进行出招种类和几率的设置,再加上基于难度反比修正的强制失误罢了,这就是 ...
以前我也这么想但是其实不是....
作者: beterhans    时间: 2008-10-23 01:39

我来翻译一段我在 Mugen 里最喜欢的 POTS 的真好鬼的 AI

这段 AI 是定义 好鬼什么时候发出 必杀升龙拳的
给你们一点了解

[State -1, messatsugoushoryuu]        ; 定义 -1 招式名称
type=changestate           ; 类型 为 动作转换
value=3100                  ; 作编号 3100 这个动作 (就是 必杀升龙)
triggerall= var(59)>=1 && numenemy ; 必要条件 ; 变量 59 大于等于 1 和 有敌人存在
triggerall= roundstate=2 && statetype!=A && prevstateno!=3100; 必要条件:开战状态,自己不在空中,上一个动作不是浩升龙拳
triggerall= power>=1000 && var(20)<=60 必要条件 能量 大于等于 1000 变量 20 小于等于60
triggerall= !(enemynear,ctrl) && (enemynear,stateno!=[120,155]) 必要条件 最近的敌人不在首控制状态 (比如出招,或者中招ing) 和 最近的敌人不在防御状态--------(也就是说 这个 AI 是用来定义根连招的不会空放)
triggerall= (p2bodydist x=[-80,80]) && (p2dist y=[-40,0]) && p2statetype!=L 必要条件 (定义了敌人的相对位置) 和 敌人不倒地状态.
triggerall= (enemynear,const(size.head.pos.y)<=-40) || (enemynear,statetype=A) 必要条件 这个不懂.... 以一个Y 坐标? 或者 敌人在进攻状态
trigger1= (stateno=210 || stateno=225 || stateno=240 || stateno=255) 触发条件1: 自己在 210 225 240 255 的动作下 都是一些普通拳脚动作
trigger1= movehit && (p2bodydist x=[0,30]) && random<100 和 前面动作击中对方 和 对方距离在 30 以内,和 随机数小于100
trigger2= (stateno=1100 || stateno=1305) 触发条件2 在 1100 或者 1305 动作上 (也是绝招)
trigger2= movehit && (p2bodydist x=[0,30]) && random<250 和 前面动作击中对方 和 对方距离在 30 以内,和 随机数小于250
trigger3= (stateno=[1000,4999]) && numhelper(stateno+5) && var(10)<=6 触发条件3 动作在 1000-4999 内 后面不懂
trigger3= helper(stateno+5),var(3) && random<100
trigger4= ctrl && enemynear,movetype=A && (p2bodydist x=[0,70]) && random<250 触发条件4 自己在控制状态,敌人在近处处于进攻状态,和 随机数小于 250
作者: shinken4503    时间: 2008-10-23 01:43

引用:
原帖由 beterhans 于 2008-10-23 01:39 发表
我来翻译一段我在 Mugen 里最喜欢的 POTS 的真好鬼的 AI

这段 AI 是定义 好鬼什么时候发出 必杀升龙拳的
给你们一点了解

[State -1, messatsugoushoryuu]        ; 定义 -1 招式名称
type=changestate       ...
还是一样的嘛,函数和变量再精细再科学也还是这个原则啊,难道还能编出学习型AI?
作者: flashback    时间: 2008-10-23 17:19

引用:
原帖由 HJYtm 于 2008-10-23 00:54 发表

可以选择性收集啊,而且格斗呢,从操作上看,难度是很小的
怎么选择性收集?
例如,收集了X个人,其中有1/3打防守型,有1/3打攻击型,1/3会根据AI反应改变防守或攻击型。
机器怎么知道第一局玩家的打法到了第二局发生了变化,是受到AI的刺激修正了打发,还是根本就是换了一个玩家。
收集时无法判定,AI产生效用时同样无法判定。
作者: 玛丽医生    时间: 2008-10-24 19:43

学习湾岸3~~来个格斗化身模式…………每人一张记录卡……一次化身对战模式记录下一个人的AI……不在身边也可以对战……




欢迎光临 TGFC Lifestyle (http://bbs.tgfcer.com/) Powered by Discuz! 6.0.0