游戏开发论坛

 找回密码
 立即注册
搜索
查看: 5776|回复: 10

请教一下传统格斗游戏的AI设计思路

[复制链接]

10

主题

34

帖子

38

积分

注册会员

Rank: 2

积分
38
QQ
发表于 2006-10-22 15:22:00 | 显示全部楼层 |阅读模式
比如拳皇、街霸一类的AI设计思路

很怕一个角色一套程序,由于各招式的不同导致程序量巨大 [em1]

小弟初来。等待各达人赐教

27

主题

179

帖子

259

积分

中级会员

Rank: 3Rank: 3

积分
259
发表于 2006-10-22 15:31:00 | 显示全部楼层

Re:请教一下传统格斗游戏的AI设计思路

一样是一个角色一套程序,只不过用脚本语言。

10

主题

34

帖子

38

积分

注册会员

Rank: 2

积分
38
QQ
 楼主| 发表于 2006-10-22 15:41:00 | 显示全部楼层

Re:请教一下传统格斗游戏的AI设计思路

ryu对日本肥是一套程序,然后下一局对苏联肥又是加载另一套AI程序?

     !_!

10

主题

34

帖子

38

积分

注册会员

Rank: 2

积分
38
QQ
 楼主| 发表于 2006-10-22 15:46:00 | 显示全部楼层

Re:请教一下传统格斗游戏的AI设计思路

我想做一个传统的2D格斗game,被多个对手多种招式难住了……

27

主题

179

帖子

259

积分

中级会员

Rank: 3Rank: 3

积分
259
发表于 2006-10-22 16:14:00 | 显示全部楼层

Re:请教一下传统格斗游戏的AI设计思路

还是来详细解释以下吧。AI一般是3种技术,1是rule based,基本上就是用script language实现,具体来讲,就是在脚本语言里,先对环境进行判断,然后做出正确的选择。比如: ryn在对ken的时候,script里边可以这么写(不是真实的script language,pseudocode):

if ( distansenToOpposite < OneThreshold
     && rand() < Threshold
     && difficulteLevel < ....)
{
switch (Opposite) {
case Ken:
     give a fireball;
break;

case XX:
    other action...
break;

}

第2种是reactive based的,基本上由环境出发,比如ken起跳,就会触发ryn的一个事件判断。一般来讲这个事件判断是个decision tree。根据自身和对方的不同状态,做出最后的选择。这个decision tree可以在代码里,也可以由game designer 给出,存在数据库里,用的时候读到内存。例如:

if( bloodPoint < 30)
{
    if(ken's blood > 30)
    {
        action one
    }
    else
    {
       action two
    }
}
else
{
    if( ken's bloodPoint > 50)
    {
      action 3
    }
    else
   {
        action 4
   }
}

最后是最难,也是最有趣,最多变,最不稳定的系统,就是神经网络。所谓神经网络,就是方程的求解过程,根据特定的输入输出组合,求出方程的系数。 不同层次和类型的神经网络,对不同的方程类型有效。举个简单的例子,人物在地图中的漫游算法,假设从人物身上发出3条探路线(相当于我们的视线)。 根据3条线遇到障碍物的距离,决定人物的前进方向。

用神经网络在求解的话,输入是3个方向的距离,输出是行走方向。在training的过程中,人物随便选择一个方向行走,如果没碰到障碍物,那么就对神经网络进行正向taining,如果遇到了,就进行反向training,在反复学习几次后,就能够自己判断出行动方向了。

对于对战类游戏,神经元的如数就为对手的状态参数和自己的状态参数,输出就是最后采取的行动。不过一般来讲,数据量太大,最少需要几十个神经元和3,4层的网络结构,很容易对CPU造成负担。对于初学者,推荐script language,或者 decision tree的实现方法

106

主题

743

帖子

745

积分

高级会员

Rank: 4

积分
745
QQ
发表于 2006-10-22 18:50:00 | 显示全部楼层

Re:请教一下传统格斗游戏的AI设计思路

其实传统格斗游戏的AI都比较弱智,包括拳皇。

10

主题

34

帖子

38

积分

注册会员

Rank: 2

积分
38
QQ
 楼主| 发表于 2006-10-22 20:04:00 | 显示全部楼层

Re:请教一下传统格斗游戏的AI设计思路

Thanks aear!

我设想一种可以方便添加招式的方法。
用一套程序来解决每个角色的AI而不是每个 角色配一套程序。然后根据level来决定攻击力的高低、防御几率的高低从而决定level所对应的难度。

每一个招式,不管它是哪个人物的,都具有招式自身的属性:
比如:
     动作方式:(普通动作、元素攻击、气功、必杀)[curAtt.nMode]
     动作时间:一个动作12帧,电脑可以知道玩家动作执行到8帧的时候是最好的还击时间[curAtt.nTime]
     攻击距离:还包括攻击最小距离[curAtt.nMinDis]和攻击最大距离[curAtt.nMaxDis]
     攻击高度:[curAtt.nHeight]
     杀伤力:[curAtt.nDamage]
     

然后,不管玩家现在是什么角色,动或不动,电脑都能做相对反应。

电脑先检测自己和玩家之间的距离[curDis],

一个过程:   
玩家使出下蹲重腿(扫堂腿?);
电脑接受到信息--
curAtt.nMode=element元素攻击不带任何气功
curAtt.nTime=2    我这个动作结束的时候,玩家执行到第二帧了
curATT.nMaxDis= 200,最长的时候,玩家的腿伸出到它的坐标200单位外
curAtt.nHeight=20   ,嗯?这么低的高度,看来是下方攻击过来的
curAtt.nDamage=78,   晕,这么大攻击力,看来是非常狠的重招。

curAtt.nTime/curAtt.nMaxTime<一半,刚刚开始攻击的,目前难度是4,玩家前面已经干掉了3个人了,我不能傻呼呼被打,
curDis: 我目前跟玩家的距离是150单位,完全在攻击范围内
nLifePlayer=509: 玩家的血还有一半
我目前是怒的状态,最大攻击力只有499
nLifeCom=21,   我目前的血只有21,被玩家碰一下就完蛋了

result:  电脑蹲下去挡了一下。



如果此时电脑的血>curAtt.nDamage,并且玩家的血在电脑最大攻击力499之下,电脑会拼了命出必杀干掉玩家,几率由当前level决定。
而如果目前跟玩家的距离curDis超过了200,在攻击范围之外,电脑会随着level来random一下下一步要做的事情。越高的level电脑攻击模式越趋于变态。

这样的好处是每个角色添加新的招式或动作的时候,不需要很大改动程序,而只要给出新招式的属性,招式只是作为一个object存在

还未想的仔细,可行性也不知道。
P吧~

106

主题

743

帖子

745

积分

高级会员

Rank: 4

积分
745
QQ
发表于 2006-10-22 20:35:00 | 显示全部楼层

Re:请教一下传统格斗游戏的AI设计思路

建议楼上在网上和其他玩家对战拳皇,拳皇97玩的人相对多一点。

54

主题

2918

帖子

3765

积分

论坛元老

Rank: 8Rank: 8

积分
3765
QQ
发表于 2006-10-23 08:57:00 | 显示全部楼层

Re: Re:请教一下传统格斗游戏的AI设计思路

hwbnet: Re:请教一下传统格斗游戏的AI设计思路

建议楼上在网上和其他玩家对战拳皇,拳皇97玩的人相对多一点。


对对对!用WinkaWaks1.45(网上用这个版本的比较多)去网上对战比较稳定。[em3] [em3] [em3]

下载模拟器和游戏ROM:http://replay.ga-la.com/default.asp

0

主题

27

帖子

27

积分

注册会员

Rank: 2

积分
27
发表于 2006-10-23 19:22:00 | 显示全部楼层

Re:请教一下传统格斗游戏的AI设计思路

键盘记录也是很重要的,玩家会采取什么行动,NPC都是依靠玩家的键盘输入来进行判断的。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2025-5-19 12:28

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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