游戏开发论坛

 找回密码
 立即注册
搜索
楼主: lihai9917

[讨论] 新手请教怪物AI的设定问题

[复制链接]

9

主题

52

帖子

56

积分

注册会员

Rank: 2

积分
56
发表于 2007-8-22 11:58:00 | 显示全部楼层

Re: Re:新手请教怪物AI的设定问题

tonycat: Re:新手请教怪物AI的设定问题

国内ai设计还处于一个薄弱应用阶段。很多都处于理论,这个自然不是简单的策划或程序的事,是整个行业的综合...


能够给出这本书的书名吗??? [em20]

76

主题

1100

帖子

1107

积分

金牌会员

Rank: 6Rank: 6

积分
1107
发表于 2007-8-22 15:34:00 | 显示全部楼层

Re:新手请教怪物AI的设定问题

给些不是伪代码的伪代码供逻辑分析(具体不探讨具体AI),怪物ai可以用有限状态机做思考,回合游戏的ai相对arpg要单纯一些,如果复杂ai可以从arpg入手;

/*怪物AI
一个派生类怪物 有以下几种ai ,他继承了 monster类

HP<50,hp自动加血150;
闪避,99里随机生成一个数值,人物自身闪避数值<该数值,闪避成功,怪物HP+50;
hp<30,召唤出一个同样的monster

这3个ai*/

class MonsterAI   
{
private:
int m_nShanBi;  
int m_nHp;

public:
    virtual void Ai();
     
};

class OgreAI : public MonsterAI  
{
public:
void Ai(){

srand(time(NULL));
int nShanBi = 1+rand() % 99;
if ( m_nShanBi < nShanBi ){
m_nhp+=50;
}  

if(m_nHP<50){
m_nHP+=m_nHP;}
  
        if ( m_nHp < 30 ){
            m_pSceneManage->AddNewMonster( this );
}
}
};








/*下面是 正式游戏里实现的例子*/

if (pMonster->IsOnHit( pHero ))//怪物被攻击了
{
    int nDamage = pHero->GetDamage();
    pMonster-&gtlayAnim("被攻击");  
    pMonster->DeleteHp(nDamage);   
    pMonster->PlaySound("被攻击.wav");  
}

23

主题

3388

帖子

6440

积分

论坛元老

Rank: 8Rank: 8

积分
6440
发表于 2007-8-22 20:12:00 | 显示全部楼层

Re: Re:新手请教怪物AI的设定问题

windtiger: Re:新手请教怪物AI的设定问题

给些不是伪代码的伪代码供逻辑分析(具体不探讨具体AI),怪物ai可以用有限状态机做思考,回合游戏的ai相对arpg...

我实在看不出什么有价值的逻辑...

不探讨具体AI,那这段代码能说明什么?
说明你会C++?
说明你会把怪物的属性写在AI里?
说明你会用高耗时的轮询来实现一个怪物的被攻击行为效果?并且可以不使用你之前定义的怪物AI类就直接在游戏里实现?

我只看出一个结论,LS炫耀的成分大于讨论

76

主题

1100

帖子

1107

积分

金牌会员

Rank: 6Rank: 6

积分
1107
发表于 2007-8-22 20:54:00 | 显示全部楼层

Re:新手请教怪物AI的设定问题

因为探讨ai肯定不可能只是写两段话,ai也不可能在不完善的程序环境里去分析和探讨,那更没意思.这个oo伪代码有意义,你认真去理解他包含了什么,如何让数据和行为互动,虽然这个ai看起来都很垃圾简单,只是去理解实际开发中 程序他们是怎么去做ai的,可能设计到的思路,虽然不完善,也没用什么有限状态机思考,只是提个方式;

你丢给他们一张纸没什么意义呀;

在这里是没必要去探讨我该如何设计一个被打50下,就跑开,没意义吧;
集中探讨比如

攻击
判定(hp<50) 行为

被攻击
判定(受伤害>100) 行为

这个写了没什么太大意义.还是不能很实际去真实理解游戏开发里的ai设计,还有ai也分回合、arpg、其它,设计思路不一样,更难集中探讨,所以只能提个方式,如果只是纯分析,还是推荐有限状态机;

76

主题

1100

帖子

1107

积分

金牌会员

Rank: 6Rank: 6

积分
1107
发表于 2007-8-22 21:07:00 | 显示全部楼层

Re: Re:新手请教怪物AI的设定问题

ahalyb2000: Re:新手请教怪物AI的设定问题

AI是智能个体判断自身状态及外界环境,并依此触发做出行为的算法。

关键词:自身状态、外界环境、行为
...

这个写很好,如果只是做描述性理解,至少很完善,但你在程序里要实现这些ai,是需要非常完善的环境下才去做的事情;卡特铁角肯定知道我在说什么吧?

76

主题

1100

帖子

1107

积分

金牌会员

Rank: 6Rank: 6

积分
1107
发表于 2007-8-22 21:29:00 | 显示全部楼层

Re:新手请教怪物AI的设定问题

AI,要分析ai,不如推荐 自己设计一个最简单的游戏;

赌博游戏,分不同的压赌率,庄家对象和你有一定的ai对抗,退出条件<=100$ game over;

不一定从rpg入手;

23

主题

3388

帖子

6440

积分

论坛元老

Rank: 8Rank: 8

积分
6440
发表于 2007-8-22 22:24:00 | 显示全部楼层

Re:新手请教怪物AI的设定问题

我问的是,撇开具体的AI之外,你这段代码还能说明什么?说实话我对有限状态机类型的AI确实不大感冒,虽然这个东西很实用,但也的确很无聊——几乎没有学习能力的AI啊。。。

看了这段代码。。。我感觉你不明白何为事件驱动(最后一段代码看起来是轮询方式的写法),也并不真正明白什么是oo编程(从你那个类的属性成员来看,它更象一个描述怪物属性的类,而非描述AI的类,即是说你的抽象思想有问题),更不用说——你也不了解ARPG中的AI与回合制游戏中的AI有些什么差别。

不说具体的编码方式,对单纯的AI而言,动作游戏中的每一个逻辑帧与某些回合游戏中的一个回合并没有本质的差别。

76

主题

1100

帖子

1107

积分

金牌会员

Rank: 6Rank: 6

积分
1107
发表于 2007-8-22 23:55:00 | 显示全部楼层

Re: Re:新手请教怪物AI的设定问题

卡特铁角: Re:新手请教怪物AI的设定问题

我问的是,撇开具体的AI之外,你这段代码还能说明什么?说实话我对有限状态机类型的AI确实不大感冒,虽然这...
卡特铁角: Re:新手请教怪物AI的设定问题

我问的是,撇开具体的AI之外,你这段代码还能说明什么?说实话我对有限状态机类型的AI确实不大感冒,虽然这...

你说的有理,这点没注意到.我是AI初学者啦,只是把注释删除了.一个是基类,定义了一个ai虚函数和部分成员数据,一个是继承类,本来想写2个基类,但发现大家只是在探讨如何去实现一个ai,而不是ai实现的过程,所以编写了这个代码,也发给朋友验证了没问题,最后一段是附带了 另外一种写法;
private定义了 怪物的数据(只是该ai里会调用的,并不是全部),public是行为函数,定义为virtual;

代码的重要性是是去看oo编程思想下的普通ai如何去实现,这个相信你真去写ai程序如果没人教你肯定会苦恼如何去定义这些ai,ai该如何放和调用,至于这个代码是事件驱动还是效率如何并不是重要去描述和分析;因为正式ai也不是在这个什么都没有的环境下编写的;

毕竟你说的很多ai不过只是一些行为,是具体的行为.这个足够用文字型即可表达,如你讲,你需要什么ai ,需要实现考虑清楚,绘制清晰的逻辑图.而这些逻辑流程图转换进代码里,你又如何去思考该如何去实现一个生动的怪物ai所必要的一些基础;做ai策划肯定是需要非常清晰熟悉掌握程序里的ai实现原理,才能更充分的去实现你的ai,而不是丢给程序,你去yy吧,y不出来是你的错;

ai也和数值策划一样,也是需要透彻理解原理才能去做的事情,不能空给 文字就行呀,兄弟;

--------
只是测试ai,而不是去探讨ai的乐趣;
如果你只是为了纯测试ai的乐趣,自己可以编写个最基础的oo console app程序好了。
赌博游戏,分不同的压赌率,定义一个带AI的庄家对象和你有一定的ai对抗,退出条件while(Money<=100$){
game over;}

AI的测试乐趣和学习,不一定从rpg入手;自然ai大部分书籍里都有,有限状态机是好东西,继续努力学习,我是新人表欺负偶,一起进步;

6

主题

47

帖子

52

积分

注册会员

Rank: 2

积分
52
发表于 2007-8-23 10:32:00 | 显示全部楼层

Re: 新手请教怪物AI的设定问题

对于一个策划来说,没有必要会C++,要写怪物AI,只需要会写AI脚本以及和相应的程序沟通就可以了。
一般的游戏都只有基本AI,这种AI包括怪物移动、怪物寻径、怪物攻击等等。
甚至怪物的仇恨系统也可以当作是AI的一部分,不过目前很多游戏的仇恨系统并不完善,像仇恨追击时间、仇恨区域、仇

恨值的衰减和增加,会让很多玩家觉得很不爽。
回到AI,其他游戏我不清楚,但是像魔兽世界这种MMORPG,是我见过的第一款使用智能化AI的脚本系统,主要是用在BOSS

上。
WOW的AI我不会写,只能举个简单的例子:
HP=当前生命值 MAXHP=最大生命值
if HP < MAXHP*50% then 每隔X时间使用技能×××,又或者 if HP < MAXHP then 战斗计时,战斗计时大于600s,则进

入狂暴状态等等,具体的脚本只要会写就可以了,再向程序要求一些你需要的指令就行。
很多AI的复杂程度无疑就是脚本写的长点,可以使用的指令多些,逻辑复杂些,程序提供的参数多些罢了。
其实现在MMORPG的AI相对比较简单了,只是目前国内这块用的比较少,多用用,写出像魔兽世界这样的BOSS的AI,也不是一个很远的目标。纯数值做的怪物,要不就是一定打不过,要不就一定能打过。(如果魔兽世界的BOSS没有高级AI,别说两年了,估计两个月就顶不住了) [em22]

23

主题

3388

帖子

6440

积分

论坛元老

Rank: 8Rank: 8

积分
6440
发表于 2007-8-23 14:22:00 | 显示全部楼层

Re: Re: Re:新手请教怪物AI的设定问题

windtiger: Re: Re:新手请教怪物AI的设定问题


你说的有理,这点没注意到.我是AI初学者啦,只是把注释删除了.一个是基类,定义了一个ai虚函数和部分成员数...

要讨论具体的AI算法的确是需要在具体的环境之下的,但我根本就没有和你讨论具体的AI算法,并且现在也没这个必要.

你说你的这个代码交给朋友验证了没有问题?是那一方面没有问题?能够执行?int a=0;这样的代码无论执行多少次也是没有问题的.

另外,AI的定义,前面也有朋友总结得很好了----游戏中的AI就是根据事件(状态变化/外部输入的操作行为)决策角色行为的代码(AI的表现总是"行为")

请尽量使用事件驱动的方式----AI的大部分工作都是对事件的响应,当然也可能会出现必须要轮询当前状态的情况,但绝对不是你在代码中写的那种.事件驱动结构,是无论哪一本介绍AI编程基础的书都在推崇的,因为相对于轮询,它更有效率,也更符合人的思维逻辑.

所以说,你那段代码既不能用来探讨具体的AI算法,也不能说明实际AI代码的结构,我实在不清楚它能说明什么.

新人,那就学些实在的东西,别学忽悠.
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2025-6-10 03:44

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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