游戏AI系列内容 咋样才能做个有意思的AI呢
游戏AI系列内容 咋样才能做个有意思的AI呢
写在前面的话
怪物AI怎么才能做的比较有意思。其实这个命题有点大,我作为一个仅仅进入游戏行业两年接触怪物AI还不到一年的程序员来说,来谈这个话题,我想我是不够格的。不过,在这有限的时间里边,我也多多少少的写过几个怪物。最初,很多怪物写完之后,就感觉很傻。一点意思都没有到后来的,慢慢的觉得,像是一点一点的赋予这个怪物生命一样,成就感满满。然后让我一步一步的告诉你什么是有意思的AI。
啊 什么才是有意思的AI呢
从宏观上来说,大到一个人,小到一只青蛙,都是存在AI的。落实到游戏项目里呢,能跟你打一会的,都叫做AI。我们这个地方很显然是指的后边这种。仿照现实世界AI的游戏AI。让我举个例子来说明一下,我们比较常见的AI。
LOL的人机模式,有一定的智能感觉,不过做的有点太极端了。技能的释放,简直爆表,恐怕跟机器人硬肛正面一般情况下会比较惨,因为他们对于技能释放的控制恐怕是人类远远跟不上的。不过他们的行为模式非常单一,比如说他们明明在中路占有非常大的优势,但是一旦他们发现你在推他们的塔了,他们就会放弃自己的优势去防守自己的防御塔。比如说你是血皮他也是血皮的情况下,他的反应是逃跑而不是算算伤害跟你肛正面。所以这个感觉是比较尴尬的,硬打打不过,但是套路就能套路赢。顺便一提LOL的末日模式里边中的机器人,其实单纯的AI也是比较简单的,但是他们的技能非常变态,所以很难打,这也是提高AI有意思程度的一种方式,笑。
守望先锋中的机器人对战模式中,跟LOL中的机器人也是类似的模式。记得一次,我想从背后偷袭76,结果被76反手A死,我去看死亡回放的时候,发现上一秒的时候,他还是面向前方的,下一秒直接镜头一切,冲背后的我开了几枪,等我死了,就头也不回的跑了,当时就感觉整个人都不好了。
哈哈,举了几个例子,发现,我好像是没有见过好的AI的例子。这么说吧,一个AI应该像是你朋友跟你玩游戏一样,初级的AI就像是刚开始玩;中级的就像是玩了一段时间;高级的像是比你NB的玩家一样。或许他的操作并不好,或许他在某些事情上会失误,但是他在努力的玩下去这种感觉。
好吧,先让我来回顾一下我做的怪物吧
那些曾经被我编写出来的怪物
小魔人
AI:
1. 如果看到玩家就靠近玩家,造成碰触伤害
2. 没事瞎溜达或者在原地歇会
我们的小魔人
这应该是我编写的第一个怪物。很简单,也很傻。这个基本上应该算是最白痴的AI了。这种一般情况下是数量比较多,让玩家来割草的。不得不承认,这个怪物的AI白痴到爆炸,但是游戏中还是需要存在这种AI来缓解一下紧张的气氛。
大魔人
AI:
1. 看到玩家之后会最初几种随机攻击模式(发射距离较远的双排子弹弹幕、发射范围非常近的的扇形弹幕、跳跃到玩家周围去、召唤救济仓)
2. 没事的时候瞎溜达一下或者在原地休息休息
大魔人召唤救济仓
大魔人的扇形散射弹幕
大魔人的双排弹幕
大魔人的蹦蹦跳跳
这是我编写的第一个Boss怪物。这个的攻击方式可能就会变的复杂一些了。面对他的时候,你可能需要考虑一下怎么应对他的技能。比如说。如果他释放双排弹幕的话,就不要呆在原地。如果他释放了扇形弹幕那么就需要远离他。如果他跳起来了,那么就得时刻留意,他的阴影是不是出现在了自己的周围,远离那个地点。如果他选择召唤救济仓就需要打掉救济仓,免得他搞出来一些幺蛾子。或许,这个怪物已经可以让你跟他周旋一段时间了。但是他距离我心目中那种真正的Boss还差的很远。
大魔人的狗
略,实在是没啥好写的
激光眼机器人
AI:
1. 醒了,距离你比较远了就靠近你
2. 像是之前的大魔人类似,一堆技能(背后光柱扫射、横向光柱驱散、双手弹幕散射、激光眼、多重激光狙击、召唤狙击怪、弹幕光球)随机放
3. 如果敌人(玩家)在他的头上的时候释放合适的技能()
4. 如果在下面的时候释放合适的技能()
5. 没事睡觉
我们的激光眼机器人
机器人召唤狙击怪
机器人双手发射弹幕
机器人背后激光扫射
机器人激光狙击
机器人激光逼退敌人
机器人发射球形弹幕
我在写这个怪物的时候觉得这个怪物碉堡了,自己拥有7、8个技能在手里边,肯定会把玩家吓尿的,结果自己在尝试的时候,就遇到了类似于LOL的AI尴尬。如果吧技能调整的伤害很强,会觉得这个怪物没法打,自己动不动就死了。但是技能伤害太弱的时候就会发现这个怪物真是太弱B了。随便打打就死了,最后为了增加他的寿命,所以增加了他的血量。我觉得这个结果是我不想看到的但是有没什么办法,这已经是最好的方式了。
小精灵
AI:
1. 进入战斗的时候冲着玩家吐个弹幕
2. 距离玩家很近的时候会逃跑
3. 距离玩家太原的时候会尝试靠近
4. 玩家不见了会跑到最近一次玩家出现过的地方尝试找找玩家
5. 没事瞎溜达
我们的小精灵
Piu 精灵弹幕
太近了我要逃跑
太远了,让我来追击一下吧
根据印象追击敌人
其实这个怪物也很简单,跟前面提到的小魔人是同一个属性的,都是属于没啥攻击性,被人割草类型的,不过,这个怪物却比小魔人给人的感觉更好。因为小魔人太容易被套路了,你距离他远一点,就可以随便搞他。但是这个怪物,他可以跟你周旋一段时间,虽然他没有啥攻击性。偶尔只是冲你发一个弹幕。但是他却可以保持跟在你周围,并且距离你相对来说距离适中。避免了近战伤害,同时他的攻击能够攻击到你。所以就可玩性来说这个逼小魔人好太多了
刺客
AI:
1. 距离在攻击范围内的时候,会直接发动伤害非常大的伤害
2. 如果没有被人发现的时候伪装成一颗洋葱
3. 距离玩家比较远并且在玩家正面的时候尝试Z字走法靠近玩家
4. 距离玩家比较远并且在玩家背面的是后快速突进到玩家背面
5. 没事瞎溜达
我们的刺客像洋葱
平时的刺客
刺客的Z字强突
刺客的十字斩
这个怪物应该算是比较厉害的怪物了,也是我比较满意的怪物之一。他的血量非常少,最低级的枪也能两枪打死。他的伤害非常高,一次攻击就能让玩家血量损失过半。通常这个怪物出现的时候,我都会觉得,要死了要死了要死了,搞死他的时候会获得莫大的挤压情绪释放的赶脚。或许他没有非常高的血量,没有花样繁多的技能。不过他能够靠着自己仅有的一个技能让你感觉精神紧张。
综述
一个好的AI,应该能在合适的时候做出合适的选择。比如,怪物本身并不能进行近战攻击,那么他冲到人的周围这就是傻的行为。如果他能保持一定的距离,这个距离保证他能够打到玩家,但是玩家的某些攻击打不到他。那么他的行为就是合适的。如果一只怪物他只有近战攻击,那么他就应该努力的尝试去靠近你,然后从背后给你一刀,这也是合适的。如果你的攻击手段攻击距离比较近,但是玩家距离你比较远的话,这个时候你做出这个攻击就并不合适。一个好的AI其实就是作者在操作的一个角色,跟玩家对战。其实这就是一种感觉,要想想成这是你与玩家的对决。或许你可以操作的怪物能力非常有限。血量不高、伤害不高、行动不快,但是每一个怪物都有他存在的意义,都能够为你跟玩家对战的时候贡献自己的力量。这样一个AI才能算是做的比较有意思。
恐怕我我写的出来的部分只能是一小部分。就像是这样
但是呢实际上这个课题可能真正的内容量确实这样
游戏AI系列内容 咋样才能做个有意思的AI呢的更多相关文章
- 游戏引擎网络开发者的64做与不做(二A):协议与API
[编者按]在这个系列之前的文章"游戏引擎网络开发者的64做与不做(一):客户端方面"中,Sergey介绍了游戏引擎添加网络支持时在客户端方面的注意点.本文,Sergey则将结合实战 ...
- WEBGL 2D游戏引擎研发系列 第一章 <新的开始>
WEBGL 2D游戏引擎研发系列 第一章 <新的开始> ~\(≥▽≤)/~HTML5游戏开发者社区(群号:326492427) 转载请注明出处:http://html5gamedev.or ...
- 炸弹人游戏开发系列(7):加入敌人,使用A*算法寻路
前言 上文中我们实现了炸弹人与墙的碰撞检测,以及设置移动步长来解决发现的问题.本文会加入1个AI敌人,敌人使用A*算法追踪炸弹人. 本文目的 加入敌人,追踪炸弹人 本文主要内容 开发策略 加入敌人 实 ...
- 游戏引擎网络开发者的 64 做与不做 | Part 1 | 客户端方面
摘要:纵观过去 10 年的游戏领域,单机向网络发展已成为一个非常大的趋势.然而,为游戏添加网络支持的过程中往往存在着大量挑战,这里将为大家揭示游戏引擎网络开发者的 64 个做与不做. [编者按]时下, ...
- HTML5游戏开发系列教程9(译)
原文地址:http://www.script-tutorials.com/html5-game-development-lesson-9/ 今天我们将继续使用canvas来进行HTML5游戏开发系列的 ...
- HTML5游戏开发系列教程8(译)
原文地址:http://www.script-tutorials.com/html5-game-development-lesson-8/ 这是我们最新一篇HTML5游戏开发系列文章.我们将继续使用c ...
- HTML5游戏开发系列教程6(译)
原文地址:http://www.script-tutorials.com/html5-game-development-lesson-6/ 这是我们最新一篇HTML5游戏开发系列文章.我们将继续使用c ...
- HTML5游戏开发系列教程4(译)
原文地址:http://www.script-tutorials.com/html5-game-development-lesson-4/ 这篇文章是我们继续使用canvas来进行HTML5游戏开发系 ...
- 《zw版·Halcon-delphi系列原创教程》 Halcon分类函数002·AI人工智能
<zw版·Halcon-delphi系列原创教程> Halcon分类函数002·AI人工智能 AI人工智能:包括knn.gmm.svm等 为方便阅读,在不影响说明的前提下,笔者对函数进行了 ...
随机推荐
- 游戏服务器菜鸟之C#初探一游戏服务
本人80后程序猿一枚,原来搞过C++/Java/C#,因为工作原因最后选择一直从事C#开发,因为读书时候对游戏一直比较感兴趣,机缘巧合公司做一个手游的项目,我就开始游戏服务器的折腾之旅. 游戏的构架是 ...
- JS与APP原生控件交互
"热更新"."热部署"相信对于混合式开发的童鞋一定不陌生,那么APP怎么避免每次升级都要在APP应用商店发布呢?这里就用到了混合式开发的概念,对于电商网站尤其显 ...
- ASP.NET MVC5+EF6+EasyUI 后台管理系统(74)-微信公众平台开发-自定义菜单
系列目录 引言 1.如果不借用Senparc.Weixin SDK自定义菜单,编码起来,工作量是非常之大 2.但是借助SDK似乎一切都是简单得不要不要的 3.自定义菜单无需要建立数据库表 4.自定义菜 ...
- 如何远程关闭一个ASP.NET Core应用?
在<历数依赖注入的N种玩法>演示系统自动注册服务的实例中,我们会发现输出的列表包含两个特殊的服务,它们的对应的服务接口分别是IApplicationLifetime和IHostingEnv ...
- 操作系统篇-分段机制与GDT|LDT
|| 版权声明:本文为博主原创文章,未经博主允许不得转载. 一.前言 在<操作系统篇-浅谈实模式与保护模式>中提到了两种模式,我们说在操作系统中,其实大部分时间是待在保护模式中的. ...
- TortoiseGit 文件比对工具使用 Beyond Compare 和 DiffMerge
TortoiseGit 内置的文件比对工具是 TortoiseMerge,用于文件比对和解决冲突合并,TortoiseGit 还支持外部的比对工具使用,比如 Beyond Compare 和 Diff ...
- Create a Team in RHEL7
SOLUTION VERIFIED September 13 2016 KB2620131 Environment Red Hat Enterprise Linux 7 NetworkManager ...
- Dynamics CRM 2015-Data Encryption激活报错
在CRM的日常开发中,Data Encryption经常是不得不开启的一个功能.但是有时,我们可能遇到一种情况,Organization导入之后,查看Data Encryption是已激活的状态,但是 ...
- Android之SAX解析XML
一.SAX解析方法介绍 SAX(Simple API for XML)是一个解析速度快并且占用内存少的XML解析器,非常适合用于Android等移动设备. SAX解析器是一种基于事件的解析器,事件驱动 ...
- OpenGL: 纹理采样 texture sample
Sampler (GLSL) Sampler通常是在Fragment shader(片元着色器)内定义的,这是一个uniform类型的变量,即处理不同的片元时这个变量是一致不变的.一个sampler和 ...