游戏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. 【探索】机器指令翻译成 JavaScript

    前言 前些时候研究脚本混淆时,打算先学一些「程序流程」相关的概念.为了不因太枯燥而放弃,决定想一个有趣的案例,可以边探索边学. 于是想了一个话题:尝试将机器指令 1:1 翻译 成 JavaScript ...

  2. 透过WinDBG的视角看String

    摘要 : 最近在博客园里面看到有人在讨论 C# String的一些特性. 大部分情况下是从CODING的角度来讨论String. 本人觉得非常好奇, 在运行时态, String是如何与这些特性联系上的 ...

  3. 普通程序员如何转向AI方向

    眼下,人工智能已经成为越来越火的一个方向.普通程序员,如何转向人工智能方向,是知乎上的一个问题.本文是我对此问题的一个回答的归档版.相比原回答有所内容增加. 一. 目的 本文的目的是给出一个简单的,平 ...

  4. pt-heartbeat

    pt-heartbeat是用来监测主从延迟的情况的,众所周知,传统的通过show slave status\G命令中的Seconds_Behind_Master值来判断主从延迟并不靠谱. pt-hea ...

  5. TemplateMethod(模块方法模式)

    /** * 模块模式 * @author TMAC-J * 将一个完整的算法分离,分成不同的模块 * 用于有很多步骤的时候,可能以后这些步骤还会增加,把这些步骤分离 * 将有共性的部分放在抽象类中 * ...

  6. 似懂非懂的localStorage和sessionStorage

    一.区别 相信很多人都见过这两个关于HTML5的新名词!HTML5种的web storage包含两种存储方式:localStorage和sessionStorage,这两种方式存储的数据不会自动发给服 ...

  7. BPM配置故事之案例6-条件可见与条件必填

    小明兴奋的告诉大毛自己独立解决了必填和水印问题,腹黑的大毛决定给小明出一个进阶问题刷一下存在感. 大毛:我再考考你,我把表单改成了这样(下图).怎么做到,预算状态为"预算内"时,不 ...

  8. 在centos7(EL7.3 即 kernel-3.10.0-514.X )上安装BCM4312无线网卡驱动要注意的问题

    我新装的centos7主机无法使用里面自带的网卡,查询后发现网卡型号为BCM4312.我在看资料安装的过程中遇到了些问题,纠结了好久,现在分享下要注意的点,为后来的遇到同样问题的人提供点帮助.现在开始 ...

  9. 前端开发小白必学技能—非关系数据库又像关系数据库的MongoDB快速入门命令(2)

    今天给大家道个歉,没有及时更新MongoDB快速入门的下篇,最近有点小忙,在此向博友们致歉.下面我将简单地说一下mongdb的一些基本命令以及我们日常开发过程中的一些问题.mongodb可以为我们提供 ...

  10. Openfire的启动过程与session管理

    说明   本文源码基于Openfire4.0.2.   Openfire的启动       Openfire的启动过程非常的简单,通过一个入口初始化lib目录下的openfire.jar包,并启动一个 ...