第5章 游戏人工智能

上传人:w****i 文档编号:108699276 上传时间:2019-10-25 格式:PDF 页数:39 大小:2.30MB
返回 下载 相关 举报
第5章 游戏人工智能_第1页
第1页 / 共39页
第5章 游戏人工智能_第2页
第2页 / 共39页
第5章 游戏人工智能_第3页
第3页 / 共39页
第5章 游戏人工智能_第4页
第4页 / 共39页
第5章 游戏人工智能_第5页
第5页 / 共39页
点击查看更多>>
资源描述

《第5章 游戏人工智能》由会员分享,可在线阅读,更多相关《第5章 游戏人工智能(39页珍藏版)》请在金锄头文库上搜索。

1、Windows 程序设计(面向游戏) 111 第第 5 5 5 5 章章游戏人工智能游戏人工智能 5.15.15.15.1移动型游戏移动型游戏 AIAIAIAI 我们常听到的 AI(Artificial Intelligence)即人工智能,是一个内容相当广的研究领域。 它的主要目的是要让计算机本身按照某些法则来模拟出类似人类般的思考与预测能力, 并结 合计算机具有快速数学运算能力的优点,创造出计算机在各方面的有效应用。 这一章要讨论的游戏人工智能, 实际上只是整个人工智能研究领域中的一小部分。 这里 用不到像神经网络、基因算法、模糊逻辑等复杂的人工智能理论。相反,只需利用自己本身 的思考模式

2、去赋予游戏中角色的判断能力, 来进行某些特定的行为, 这样便可拓展出属于游 戏自己本身的人工智能,而这也是一般游戏开发过程中最常见的方式。 接下来将探讨一些游戏 AI 的基本概念,包括游戏角色的移动、路径搜寻和计算机的决 策方式等。通过这些主题的讨论,可增加对游戏 AI 设计上的基本认识,激发设计游戏 AI 的灵感。 5.1.15.1.15.1.15.1.1追逐移动追逐移动 凡是在游戏中会移动的物体,实际上几乎都涉及移动型的游戏 AI,例如游戏中怪物追 逐或者躲避玩家和计算机角色的移动等都是移动型 AI 的例子。这一小节中先来介绍在游戏 程序中经常会看到的怪物追逐玩家这种追逐移动的设计方式。

3、追逐移动是通过计算机控制角色朝某一目标物接近来实现,要设计出这样的物体移动 模式很简单。以怪物追逐玩家的例子来说,只要在每次进行窗口贴图时,将怪物的所在坐标 与玩家角色的所在坐标做比较,递增或递减怪物 X、Y 轴上的贴图坐标,使得怪物每次进行 贴图时渐渐朝玩家角色所在的位置接近, 便可产生追逐移动的效果。 下面便是一个典型的怪 物追逐玩家的移动 AI 算法,其中“怪物 X” 、 “怪物 Y” 、 “玩家 X” 、 “玩家 Y”分别用来表 示怪物及玩家在 X 与 Y 轴上的贴图坐标。 if怪物 x玩家 x 怪物 X-; else 怪物 X+; if怪物 Y玩家 Y 怪物Y-; else 怪物 Y

4、+; 以前面所说明的概念来看这段算法的内容应该不难理解, 是让怪物能正确地往玩家角色 所在的目的地移动。不过一般在游戏程序当中,常会按照各种不同的情况(例如怪物本身的 追逐能力、游戏等级的难易度等)来加入怪物追逐移动的不确定性,以提高计算机角色移动 的多样化。 下面来看一个怪物追逐玩家的算法例子。 这段算法是以上面的算法为基础修改, 使得进 行追逐移动的怪物会按照自身生命值的多寡来决定是否进行追逐。 在每次计算下次的位置坐 标时,也只有 2/3 的几率能正确地朝向玩家。其中以“怪物 HP”来表示怪物当前的生命值。 Windows 程序设计(面向游戏) 112 if(怪物 HP200)/生命值大

5、于 200 时才追 p = rand()%3;/取随机数除以 3 的余数 if玩家 X) 怪物 X-; else 怪物 X+; if(怪物 Y玩家 Y) 怪物Y-; else 怪物 Y+; else 怪物 HP+=5;/怪物不动,休息补血 上面的这段怪物追逐的算法看起来比较具有弹性且符合真实的情况。 在了解设计计算机 角色追逐移动的方式之后,下面就来看一个完整的追逐移动范例程序。 范例范例 ch5_1ch5_1ch5_1ch5_1 在范例 ch4_2(飞机在循环背景上移动)中,加入 3 只追逐飞机移动的小鸟。 程序代码程序代码:全局变量声明 1 /声明全局变量 2 HINSTANCEhInst

6、; 3 HBITMAPbg,ship,bird; 4 HDChdc,mdc,bufdc; 5 HWNDhWnd; 6 DWORDtPre,tNow; 7 intx,y,nowX,nowY; 8 intw=0; 9 POINTp3; 程序说明程序说明 第 9 行:声明“POINT”类型的点坐标数组“p”,用来记录窗口中 3 只小鸟的贴图坐标。 在 InitInstance()函数中设定数组中各个元素的初值。范例中使用了如图 5-1 所示的这张 122122 的小鸟位图。 图 5-1 Windows 程序设计(面向游戏) 113 当目标飞机在小鸟的右边时, 以图中上面的小鸟图案进行贴图; 当目标飞

7、机在小鸟的左 边时,则以图中下面小鸟的图案进行贴图。 程序代码程序代码:MyPaint() 1 /*绘图函数* 2 / 1.设定飞机坐标并贴图 3 / 2.设定小鸟坐标并贴图 4 void MyPaint(HDC hdc) 5 6int i; 7 8/贴背景 9SelectObject(bufdc,bg); 10BitBlt(mdc,0,0,w,480,bufdc,640-w,0,SRCCOPY); 11BitBlt(mdc,w,0,640-w,480,bufdc,0,0,SRCCOPY); 12 13/贴飞机 14if(nowX x) 18nowX = x; 19 20else 21 22n

8、owX -=10; 23if(nowX nowX-25) 55pi.x -= 5; 56else 57pi.x += 5; 58 59 60if(pi.x nowX-25)/ 判断小鸟移动方向 61 62BitBlt(mdc,pi.x,pi.y,61,61,bufdc,61,61,SRCAND);/向左追 63BitBlt(mdc,pi.x,pi.y,61,61,bufdc,0,61,SRCPAINT); 64 65else 66 67BitBlt(mdc,pi.x,pi.y,61,61,bufdc,61,0,SRCAND);/向右追 68BitBlt(mdc,pi.x,pi.y,61,61,

9、bufdc,0,0,SRCPAINT); 69 70 71 72BitBlt(hdc,0,0,640,480,mdc,0,0,SRCCOPY); 73 74tPre = GetTickCount(); 75 76w += 10; 77if(w=640) 78w = 0; 79 程序说明程序说明 (1)第 1441 行:按照实际鼠标光标的位置(x,y)设定飞机的贴图坐标(nowX,nowY) 并进行飞机的贴图。 (2)第 4470 行:进行小鸟追逐移动坐标计算及贴图操作。其中第 47 行程序代码设定 小鸟有 2/3 的几率进行追逐移动。第 4858 行设定移动的贴图坐标。第 6069 行以目前飞

10、机 所在坐标点“nowX”减掉 25 个单位为中心点来判断贴上小鸟向右或向左飞行的图案。 Windows 程序设计(面向游戏) 115 运行结果运行结果 程序运行结果如图 5-2 所示。 图 5-2 小鸟在窗口中追逐飞机移动,按下【Esc】键结束程序的运行。 5.1.25.1.25.1.25.1.2躲避移动躲避移动 从前面的追逐移动大概可以推知躲避移动是怎么一回事。 与追逐移动朝着目标前进的目 的刚好相反, 躲避移动的目的是远离目标。 下面就以计算机怪物躲避玩家的例子来看看躲避 移动基本的算法。 if(怪物 X玩家 X) 怪物 X+; else 怪物 X-; if(怪物 Y玩家 Y) 怪物 Y

11、+; else 怪物Y-; 上面的这段算法,其中的判断式与追逐移动是相同的,不过每次重设怪物的贴图坐标 时,则会越来越远离玩家角色的所在位置。 5.1.35.1.35.1.35.1.3模式移动模式移动 由于计算机角色的移动通常并不完全只进行像追逐或者躲避这样的单一的移动模式, 因此程序中经常替计算机角色定义出一组移动的模式,其中可能包含多种基本的移动模式, 例如追逐、躲避、随机移动、固定移动。计算机角色会随着游戏情节的改变按照定义的不同 移动模式进行移动,这就是模式移动。 这里以计算机怪物视玩家的强弱进行移动的例子来说明模式移动的方法。假设游戏中 定义的怪物移动模式包含了追逐、 躲避与随机移动

12、 3 种模式, 那么怪物进行这些移动的时机 如图 5-3 所示。 Windows 程序设计(面向游戏) 116 图 5-3 模式移动的设计可以让计算机角色拥有更高级且富变化性的移动行为。 像上面这个例子 中, 怪物通过比较玩家与自身的强弱来决定进行何种方式的移动, 其中涉及怪物本身的思考 及思考后的行为动作,因此这部分与下一节中要探讨的行为型 AI 相关。 5.25.25.25.2行为型游戏行为型游戏 AIAIAIAI 行为型游戏 AI 主要是通过计算机角色本身的判断思考, 然后产生对应行为的 AI。在设 计行为型的游戏 AI 时,通常会利用到一连串的“if-else”判断、数学运算,或者一些

13、数据结 构的概念。在这一节中,将讨论如何来构思并赋予游戏计算机角色的行为 AI。 5.2.15.2.15.2.15.2.1计算机角色的思考与行为计算机角色的思考与行为 首先来谈谈游戏程序中计算机角色的思考与行为,这部分内容事实上与平日对于各种 不同事件情况进行分析思考, 进而加以处理的概念是一样的。 至于在游戏程序中如何让计算 机角色拥有判断状况的思考能力,并按照判断后的结果进行相应的行为动作,可以利用 “if-else”和“switch-case”这类的判断式来完成游戏中这类行为型 AI 的设计。 这里举个 RPG(ROLE PLAYING GAME)游戏中怪物行为的例子进行说明。 假设某一

14、怪 物在对战时具有下面的几种行为: (1)普通攻击: (2)施放攻击魔法; (3)使尽全力攻击; (4)补血; (5)逃跑。 那么根据以上几种怪物的行为,可编写出如下的一段算法,用来仿真怪物在对战时的 行为模式。 1 if(monster.nHp 20)/怪物的生命大于 20 2 3if(rand()%10 != 1) 4普通攻击; 5else 6魔法攻击; 7 8else/怪物的生命小于 20 9 10switch(rand()%5)/随机选择怪物行为 11 Windows 程序设计(面向游戏) 117 12case 0: 13普通攻击; 14break; 15case 1: 16魔法攻击;

15、 17break; 18case 2: 19全力攻击; 20break; 21case 3: 22补血; 23break; 24case 4: 25逃跑; 26break; 27 28 在上面的这段算法中,利用“if-else”判断式判断怪物的生命值是否大于“20” 。当怪 物生命值大于“20”时,怪物有 9/10 的几率进行普通攻击及 1/10 的几率进行施放攻击魔法; 假设当怪物受到了严重伤害且生命值小于“20”时,第 10 行程序代码通过“switch”叙述 判断“ran()%5”的结果来进行对应的行为,因而怪物有可能会进行普通攻击、施放攻击魔 法、使尽全力攻击、补血和逃跑等动作,而这些

16、怪物行为的发生几率各为 1/5。 事实上像上面这样利用“if-else” 、 “switch”叙述,使计算机角色进行状况判断,并产 生对应的行为动作就是行为型游戏 AI 设计的基本精神。 下面来看一个简单的 RPG 玩家与怪 物对战的范例程序。这个范例采用玩家与计算机轮流攻击的模式,其中怪物部分的行为 AI 将按照上面的算法以实际的程序代码加以实现, 玩家部分则主要是下达攻击命令, 两者之间 的对战状态以文字消息来显示。运行时的画面如图 5-4 所示。 图 5-4 范例范例 ch5_2ch5_2ch5_2ch5_2 在怪物与玩家对战模式中,设计计算机控制怪物的行为型 AI。 Windows 程序设计(面向游戏) 118 程序代码程序代码:结构定义与全局变量声明 1 /定义结构体 2 struct chr 3 4intnHp;/目前生命

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 办公文档 > 其它办公文档

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号