游戏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呢的更多相关文章

  1. 游戏引擎网络开发者的64做与不做(二A):协议与API

    [编者按]在这个系列之前的文章"游戏引擎网络开发者的64做与不做(一):客户端方面"中,Sergey介绍了游戏引擎添加网络支持时在客户端方面的注意点.本文,Sergey则将结合实战 ...

  2. WEBGL 2D游戏引擎研发系列 第一章 <新的开始>

    WEBGL 2D游戏引擎研发系列 第一章 <新的开始> ~\(≥▽≤)/~HTML5游戏开发者社区(群号:326492427) 转载请注明出处:http://html5gamedev.or ...

  3. 炸弹人游戏开发系列(7):加入敌人,使用A*算法寻路

    前言 上文中我们实现了炸弹人与墙的碰撞检测,以及设置移动步长来解决发现的问题.本文会加入1个AI敌人,敌人使用A*算法追踪炸弹人. 本文目的 加入敌人,追踪炸弹人 本文主要内容 开发策略 加入敌人 实 ...

  4. 游戏引擎网络开发者的 64 做与不做 | Part 1 | 客户端方面

    摘要:纵观过去 10 年的游戏领域,单机向网络发展已成为一个非常大的趋势.然而,为游戏添加网络支持的过程中往往存在着大量挑战,这里将为大家揭示游戏引擎网络开发者的 64 个做与不做. [编者按]时下, ...

  5. HTML5游戏开发系列教程9(译)

    原文地址:http://www.script-tutorials.com/html5-game-development-lesson-9/ 今天我们将继续使用canvas来进行HTML5游戏开发系列的 ...

  6. HTML5游戏开发系列教程8(译)

    原文地址:http://www.script-tutorials.com/html5-game-development-lesson-8/ 这是我们最新一篇HTML5游戏开发系列文章.我们将继续使用c ...

  7. HTML5游戏开发系列教程6(译)

    原文地址:http://www.script-tutorials.com/html5-game-development-lesson-6/ 这是我们最新一篇HTML5游戏开发系列文章.我们将继续使用c ...

  8. HTML5游戏开发系列教程4(译)

    原文地址:http://www.script-tutorials.com/html5-game-development-lesson-4/ 这篇文章是我们继续使用canvas来进行HTML5游戏开发系 ...

  9. 《zw版·Halcon-delphi系列原创教程》 Halcon分类函数002·AI人工智能

    <zw版·Halcon-delphi系列原创教程> Halcon分类函数002·AI人工智能 AI人工智能:包括knn.gmm.svm等 为方便阅读,在不影响说明的前提下,笔者对函数进行了 ...

随机推荐

  1. 记一次tomcat线程创建异常调优:unable to create new native thread

    测试在进行一次性能测试的时候发现并发300个请求时出现了下面的异常: HTTP Status 500 - Handler processing failed; nested exception is ...

  2. 通过Jexus 部署 dotnetcore版本MusicStore 示例程序

    ASPNET Music Store application 是一个展示最新的.NET 平台(包括.NET Core/Mono等)上使用MVC 和Entity Framework的示例程序,本文将展示 ...

  3. Linux下服务器端开发流程及相关工具介绍(C++)

    去年刚毕业来公司后,做为新人,发现很多东西都没有文档,各种工具和地址都是口口相传的,而且很多时候都是不知道有哪些工具可以使用,所以当时就想把自己接触到的这些东西记录下来,为后来者提供参考,相当于一个路 ...

  4. Yii1.1的验证规则

    在Yii1.1的数据验证是由CValidator完成,在CValidator中提供了各种基本的验证规则 <?php public static $builtInValidators=array( ...

  5. logstash file输入,无输出原因与解决办法

    1.现象 很多同学在用logstash input 为file的时候,经常会出现如下问题:配置文件无误,logstash有时一直停留在等待输入的界面 2.解释 logstash作为日志分析的管道,在实 ...

  6. nodejs创建http服务器

    之前有简单介绍nodejs的一篇文章(http://www.cnblogs.com/fangsmile/p/6226044.html) HTTP服务器 Node内建有一个模块,利用它可以很容易创建基本 ...

  7. BPM配置故事之案例10-获取外部数据

    老李:Hi,小明,我又来了 小明:--这次又怎么了. 老李:之前的物资管理方式太混乱了,这段时间我整理了采购物资清单,现在都录入到我们的ERP中了,以后申请物资改成从ERP数据选择吧.物资明细表我也做 ...

  8. Linux实战教学笔记02:计算机系统硬件核心知识

    标签(空格分隔):Linux实战教学笔记-陈思齐 第1章 互联网企业常见服务器介绍 1.1 互联网公司服务器品牌 - DELL(大多数公司,常用) - HP - IBM(百度在用) 浪潮 联想 航天联 ...

  9. [学习笔记]JavaScript之函数式编程

    欢迎指导与讨论:) 前言 函数式编程能使我们的代码结构变得简洁,让代码更接近于自然语言,易于理解. 一.减少不必要的函数嵌套代码 (1)当存在函数嵌套时,若内层函数的参数与外层函数的参数一致时,可以这 ...

  10. UWP控件与DataBind

    在uwp开发中必不可少的一个环节就是各种通用的控件的开发,所以在闲暇时间汇总了一下在uwp开发中控件的几种常用写法,以及属性的几种绑定方式,有可能不全面,请大家多多包涵 :) 1.先从win10新增的 ...