游戏中的人机对战,“机”这一部分是由两个部分组成的:数值(比如bot数目、血量、命中率、技能cd、攻击力、防御力等等)和AI(人工智能,控制bot行为)。很多没入行的朋友经常把这两个概念混为一谈,然后铁口直断AI战胜玩家是非常简单的事情。

先说结论:对挑战电脑的难度而言,AI和数值是相乘的关系,通过改良AI设计可以达到让电脑更具挑战性的目的。当前游戏行业普遍使用的都是弱人工智能,即通过预设AI使bot呈现人工智能的效果,请注意这个大前提。在制作AI的过程中,思路是非常简单的,就是将设计师的思维(或者叫人的思维)植入AI代码中。
在一个具体的情势中,人会如何行为就设计AI如何行为,当然有一些具体的方法因游戏和关卡环境而异,比如战棋游戏的格子限制、剧情包装需要、关卡地形等。而设计的难点在于两个方面:

1.设计师的精力和智力有限

(1)先说精力有限

遵照弱人工智能的设计思路,设计师需要穷举所有的战斗情势,对不同情势下的bot行为作出决策然后形成AI,而实际上战斗情势是几乎不可能穷举的。以简单的2V2回合制站桩战斗为例,假设这个游戏有2种职业,每个职业战斗中可使用2个技能,那实际可能的战场行为是9(职业组合)×4(技能组合)=36,另外还有很多其他数据也会影响AI行为,如血量、技能冷却、buff状态,而这些数据往往是连续的,如血量可以是1~n任意一个值,这些数据导致战斗情势复杂度指数级提升。鉴于此,AI设计过程中往往会进行很多简化,如90%以上生命值为安全,10%~50%为受伤,10%以下为濒死,而实际上呢,不同职业承受伤害能力显然不同的,T和奶同为10%的生命值,生存能力一样吗?即使相同职业面对特定攻击力的敌人,15%可能再挨一下就死了,50%可能能挨2下,但AI认为10%~50%是同一个情势,这个合理吗?当情势判断由于简化导致出现不合理时,AI的智能程度自然也会大打折扣。

(2)再说智力有限

通常设计师是一类游戏中最精通的玩家,他们面对游戏中一个具体情势时能很快给出比较合理的决策,但这种合理是有局限性的,当战场形势足够复杂,A、B决策短时间内都无法直观判断效果时,设计师其实也很难抉择最优策略,因此设计逻辑中可能存在大量次优策略,自然也导致AI智能程度下降。相比精力有限,智力有限的影响小很多,毕竟设计师是足以战胜大部分玩家的。

2.硬件限制

假设真有不开眼的土豪游戏公司,雇了一大帮牛B闪闪的设计师来设计AI,相信我,那个AI脚本的复杂度一定会超过你的想象。网络游戏AI由服务器计算,同一时间战斗的玩家很多,服务器CPU会因此不堪重负;即使土豪公司使用了宇宙级的服务器,但是要同时传送足够多的战场情势给服务器分析,网络带宽消耗也是非常大的,所以你还要交大把钱给中国电信。你真的够壕吗?对于单机游戏本质是一样的,将大量脚本载入内存,将大量运算交给CPU,二手出售平台会让你感觉电脑很“卡”。想象一下,人家玩3d的LOL飞起,你玩个2d策略游戏卡成马,你一定会默默撕掉笔记本外星人的logo,然后换上hasee……

综上所述,目前回合制游戏AI智能程度是不及真实玩家的,阵容、装备、技能配置等完全相同的情况下,电脑干不过玩家。那么问题来了?为什么有时候你会打不过电脑呢?有时候会觉得“哇这一关很有挑战性”呢?其实就是设计师欺负人啦(打破规则赋予电脑更多数值),比如你100攻击力,电脑150攻击力啦;你7级,电脑9级啦;你的农民一次采10矿,电脑的农民一次采20矿啦;你50个兵,电脑80个兵啦……有些游戏所谓的简单模式、地狱模式基本上也是在数值上下功夫。

因为AI和数值是相乘的关系,在同等挑战难度下,AI做得越好,电脑需要的额外数值越少,这个时候游戏会显得越有趣。试想一下,你的张飞和吕布对砍,1分钟内张飞需要每次攻击都暴击才能杀死吕布,否则张飞死,面对这样屌炸天吕布,你真的会乐此不疲地默默给张飞堆暴击吗?

回合制游戏对战AI制作请重视这两个难点相关推荐

  1. php 开发回合游戏,Unity回合制游戏战斗模块的制作

    回合制游戏相信大家没玩过也见过,了解它的玩法.回合制,那就是你来我回的,你一回合我一回合,直到把对方打败.市面上的回合制游戏比较经典的有梦幻西游,问道,神武,完美世界.这几个都还是很不错的.回到正题, ...

  2. AI回合制游戏,过程比较简单。程序中的f变量和条件语句用的很经典。

    本系列文章由zhmxy555编写,转载请注明出处. 文章链接  http://blog.csdn.net/zhmxy555/article/details/7447864 作者:毛星云    邮箱:  ...

  3. 使用C++完成一个小型双人对战回合制游戏

    #include<iostream> using namespace std; class hero {public:hero();//基础属性hero(int w = 80, int f ...

  4. [新手必备]如何用c#写挂机游戏的回合制角色对战(多人vs多人对战部分)

    前两篇文章中,我们讲了如何用c#搭配unity写出多人回合制游戏, 如果需要参考一下的朋友,可以点击传送门: 1v1部分,点击传送 1v多人部分,点击传送 现在,我们将进行回合制游戏最主要的部分,多人 ...

  5. python可以制作回合制游戏么_Python制作回合制手游外挂简单教程(上)

    正文 引入: 每次玩回合制游戏的时候,反反复复的日常任务让人不胜其烦 玩问道的时候,我们希望能够自动刷道,玩梦幻希望能自动做师门.捉鬼等等 说明: 该外挂只能模拟鼠标键盘操作,并不能修改游戏数据 我这 ...

  6. java rpg对战_[源码和文档分享]基于java的RPG回合制游戏

    一.工作积累总结 该项目是一个回合制RPG游戏,讲述了动物主角对抗人类,自逃出动物园开始,一路与人类对抗,提升能力,并寻找新队友组成团体,逼得人类不得不与之谈判,最终与人类达成了和平协议的故事.玩家可 ...

  7. 【Visual C++】游戏开发笔记十六 讲解一个完整的回合制游戏demo

    本系列文章由zhmxy555编写,转载请注明出处. 文章链接  http://blog.csdn.net/zhmxy555/article/details/7447864 作者:毛星云    邮箱:  ...

  8. 【Visual C 】游戏开发笔记十六 讲解一个完整的回合制游戏demo

    分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow 也欢迎大家转载本篇文章.分享知识,造福人民,实现我们中华民族伟大复兴! 本系列文 ...

  9. 第9章 梦的初现——开发回合制游戏《勇者斗恶龙》

    这一章是对前面讲解的所有Windows 下游戏编程知识的一个总结和拔高,综合了Windows 基础编程,GDI 绘图基础,透明贴图,动画显示技术,输入消息处理以及粒子系统,是对前面八章内容的一个大综合 ...

最新文章

  1. JavaScript对象的创建
  2. apache 创建多端口监听
  3. 《高性能网站构建实战》 目录--转
  4. TuShare获取K线数据
  5. JS引擎、运行时与调用栈概述
  6. python现在时间减去过去时间等于20分钟怎么写_获取当前时间减去10分钟的话SQL语句怎么写...
  7. android 抽屉侧滑冲突,利用DrawerLayout和触摸事件分发实现抽屉侧滑效果
  8. 实现线程安全的单例模式的四种方式
  9. python多线程,多进程,线程池,进程池
  10. 使用Box2D制作AS3游戏——2.1a版本——Hello World Box2D .
  11. 改变自己,永不会晚!
  12. 【解决方案】scrapy报错KeyError: ‘Spider not found‘
  13. 维基百科中文语料分析(附实际评论案例)
  14. html5版堆糖,堆糖(Duitang)
  15. excel表格横向纵向变换_Excel操作技巧:简单3步,搞定数据统计和分析!
  16. 如何锻炼自己的逻辑思维
  17. 强化学习入门项目 Spinning up OpenAI (1) installation
  18. 计算机网络学习笔记 3.6 局域网
  19. IntelliJ IDEA破解版 2017.3.4 Ultimate下载安装和JetbrainsCrack-2.7.jar激活教程
  20. SMTP命令与ESMTP命令简介(附带命令通信)

热门文章

  1. 69 Sqrt(x)
  2. 为什么要选择react
  3. d3 v4版本画基本图
  4. 150829_理论_屏幕适配
  5. Dolphin for Mac(Wii游戏模拟器) v5.0-13367中文免费版
  6. excel WPS批量删除表格中某一列为空的行数据
  7. Tushare Pro的安装使用——“抱歉,您没有访问该接口的权限,权限的具体详情访问:https://tushare.pro/document/1?doc_id=108”问题
  8. ios逆向越狱手机必备工具篇
  9. opencv-python图像处理 ----边界矩形、外接圆、模板匹配
  10. NO.87 提前还款or买火鸡?(捎带举例JAVA Double精度计算问题)