`
yzd
  • 浏览: 1858494 次
  • 性别: Icon_minigender_2
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

【Visual C++】游戏开发笔记十五 游戏人工智能(一) 运动型游戏AI

 
阅读更多

本系列文章由zhmxy555编写,转载请注明出处。

作者:毛星云邮箱:happylifemxy@qq.com欢迎邮件交流编程心得


我们常常听闻AI(ArtificialIntelligence人工智能)这个名词,比如Dota里面的AI地图。写这篇文章的时候,最新版的DotaAI是6.72f,估计过几天6.73的AI也要出来了。很多Dota玩家喜欢玩AI地图练练感觉和补刀,可以这样说,Dota地图成功的加入了AI元素,是近几年Dota风靡全球不可缺少的因素之一。


一、知识点讲解


那么,到底什么是AI呢?首先我们来了解一下人工智能(AI)的具体定义。“人工智能”(ArtificialIntelligence)简称AI。它是研究、开发用于模拟、延伸和扩展人的智能的理论、方法、技术及应用系统的一门新的技术科学。人工智能研究如何用计算机去模拟、延伸和扩展人的智能;如何把计算机用得更聪明;如何设计和建造具有高智能水平的计算机应用系统;如何设计和制造更聪明的计算机以及智能水平更高的智能计算机等。人工智能是计算机科学的一个分支,人工智能是计算机科学技术的前沿科技领域。人工智能与计算机软件有密切的关系。一方面,各种人工智能应用系统都要用计算机软件去实现,另一方面,许多聪明的计算机软件也应用了人工智能的理论方法和技术。


而我们要讲解的游戏人工智能,只是渊博的人工智能领域里面的冰山一角。我们不会用到那些类似于神经网络,基因算法,模糊逻辑等复杂的人工智能理论,我们只需利用自己本身的思考模式去赋予游戏中角色判断的能力,来进行某些特定的行为。


今天我们主角是运动型的AI,下面就开始正题吧。


凡是在游戏中会移动的物体,几乎都涉及到了运动型的游戏AI,例如游戏中怪物的追逐或者躲避玩家和游戏中NPC角色的移动都是移动型AI的例子。


<1>追逐移动

下面我们以移动型AI里的追逐移动型AI来作为例子讲解。

追逐移动一般是通过控制一角色朝某一目标接近来实现,简单点说,就是两个物体的空间坐标相互接近。比如我们要设计一个怪物追逐玩家的游戏,只要在每次进行贴图时,将怪物坐在坐标与玩家角色所在的坐标进行比较,自增或者自减怪物X,Y轴上的贴图坐标,就可产生追逐移动的效果。下面就是一个典型的怪物追逐外加的移动AI算法,其中“枭兽X”、“枭兽Y”,“幻影刺客X”,“幻影刺客Y”分别用来表示怪物及玩家在X与Y轴上的贴图坐标。


【算法1】


下面我们再来看一个例子,这段算法是以上面的【算法1】为核心代码,赋予了怪物更多的“思考”空间。追逐移动的怪物会按照自身生命值的多寡来决定是否进行追逐,每次计算下次的位置坐标时,也只有二分之三的几率能正确地朝向玩家,以其中以“枭兽HP”来表示怪物当前的生命值。


【算法2】



这样的怪物就比较有灵性了,要继续创造出更聪明的AI,只要继续完善代码,写出更多的功能就行了。




<2>躲避移动

其实躲避移动和追逐移动的算法差不多,就是把++的地方和--对调就行了,让怪物与人物的空间坐标相互远离。

具体代码如下:


【算法3】



二、在实例中将知识融会贯通


依旧,我们看一个实例,来将本节的知识融会贯通。


这是一个小鸟追逐小女孩的场景,我们需要用键盘的【↑】【↓】【←】【→】键来躲避小鸟的追击,具体键盘输入消息的知识点还

不太了解的朋友,请移步笔记十二,这里给出链接:


【Visual C++】游戏开发笔记十二 游戏输入消息处理(一) 键盘消息处理



下面依旧是贴图详细注释的源代码:




运行截图如下:


以及

运行这个小游戏,我们要用键盘的【↑】【↓】【←】【→】键来躲避小鸟的追击,小鸟则会不断向人物靠近。



贴图这方面,我只是把效果做了出来,由于最近实在是有些忙,这个demo提供只是希望给大家一个实现AI的思路,具体的bug没有进一步修复和完善,这个例子里面会出现小鸟闪烁的小问题,希望大家不要见事说事,呵呵。


至于贴图的方式,之前尝试了CImage的draw方法,图像闪烁得很严重,由于这是消息循环产生的动画效果,图像闪烁的原因估计和CImage类的贴图效率有关。之后还采用过用CImage的detach方法将某png的句柄附给HBITMAP,然后调用bitblt进行贴图,却得到了一个失真的矩形。

如果有解决动画显示里CImage贴图会闪烁的方法,请与我讨论,这是一个相互学习提高的过程,非常希望能和大家交流。

由于CImage类的采用没起到一个好的效果,所以依旧采用的传统的bitblt贴图方式。这种贴图方式的优点是贴图效率非常的高。





本节笔记到这里就结束了,由于近期在做一个纯flash的网站,更新速度和评论的回复都不像往常那么及时,而且文章末尾demo的质量有些下滑,不过这不会影响整体的学习效果,希望大家能够体谅。


本节笔记的源代码请点击这里下载:【VisualC++】Code_Note_15


感谢一直支持【VisualC++】游戏开发笔记系列专栏的朋友们,也请大家继续关注我的专栏,我一有时间就会把自己的学习心得,觉得比较好的知识点写出来和大家一起分享。


精通游戏开发的路还很长很长,非常希望能和大家一起交流,共同学习,共同进步。


大家看过后觉得值得一看的话,可以顶一下这篇文章,你们的支持是我继续写下去的动力~


如果文章中有什么疏漏的地方,也请大家指正。也希望大家可以多留言来和我探讨编程相关的问题。


最后,谢谢你们一直的支持~~~

——————————浅墨于2012年4月7日

分享到:
评论

相关推荐

    Visual-C++游戏开发笔记全集

    根据给定的信息,我们可以归纳出一系列与Visual C++游戏开发相关的知识点。这些知识点主要围绕DirectX 11的使用、2D纹理映射、物理建模、游戏算法、游戏AI等多个方面展开。下面将逐一进行详细说明: ### DirectX 11...

    C++智能游戏开发实例

    此外,C++的面向对象特性允许开发者设计复杂的系统,如游戏对象、AI(人工智能)、网络同步等,这些都是现代游戏不可或缺的组成部分。 智能游戏通常涉及到复杂的游戏逻辑和AI算法。例如,一个游戏可能包含多个NPC...

    Visual C++%DirectX9 3D游戏开发导引源代码 part2

    《Visual C++%DirectX9 3D游戏开发导引源代码》是人民邮电出版社出版的一本关于3D游戏开发的专业书籍,作者为叶至军。这本书的源代码被分成两个部分,此处我们主要讨论的是第二部分,即"part2"。这部分源代码旨在...

    Dir.rar_游戏引擎_Visual_C++_

    在Visual C++中开发游戏引擎,可以利用其对C++语言的强大支持,以及对DirectX API的直接访问,DirectX是微软为Windows平台设计的一套多媒体编程接口,用于高效地处理图形、音频和其他计算密集型任务。 描述中提到的...

    VisualC++ 游 戏 编 程

    Visual C++是一款强大的集成开发环境(IDE),它提供了对C++语言的强大支持,同时也为游戏开发者提供了丰富的工具和库,使得构建高性能、图形密集型的游戏成为可能。 **1. C++语言基础** 在游戏编程中,C++是首选...

    游戏开发教程.zip游戏开发教程.zip

    **人工智能(AI)** 在现代游戏中,AI常用于控制非玩家角色(NPC)。基础的AI技术包括路径规划、行为树和有限状态机。更高级的AI技术,如机器学习,也可以用于生成动态敌人和自适应游戏难度。 **网络编程** 多人...

    游戏引擎开发

    游戏编程涉及多个方面,包括但不限于图形学、网络通信、人工智能等。开发者需要掌握C++等编程语言,并熟悉相关的开发框架和API。 **2.2 游戏引擎的组成部分** 游戏引擎通常由以下几个关键部分构成: - **渲染引擎...

    cpu.rar_人工智能/神经网络/深度学习_Visual_C++_

    标题中的“cpu.rar”可能是指一个包含与CPU性能优化或CPU相关算法的压缩文件,而“人工智能/神经网络/深度学习_Visual_C++”则表明这个压缩包内的内容是关于使用Visual C++编程环境来实现人工智能、神经网络以及深度...

    簡易遊戲開發流程.ppt

    同时,人工智能技术让游戏更具挑战性和真实感,例如移动游戏的AI系统。 **第七章 2D游戏算法** 2D游戏涉及基本贴图、画面特效、地图制作、动画制作等技术。横轴滚动和透视图的制作是2D游戏中常见的技术挑战。 **第...

    PC游戏编程

    在IT行业中,游戏编程是一个非常热门且充满挑战的领域,特别是针对个人计算机(PC)的游戏开发。"PC游戏编程"这个主题涵盖了多个重要的知识点,包括编程语言、游戏引擎、图形渲染、物理模拟、人工智能以及网络编程等...

    四川大学软件学院的游戏编程资料

    在四川大学软件学院的课程中,何坤教授的游戏编程资料无疑为学生提供了一条深入学习游戏开发的路径。 一、基础编程语言 游戏编程的基础通常是掌握一种或多种编程语言。C++是游戏开发中的常见选择,因为它的性能强大...

    《学VC编传奇游戏》.rar

    3. **游戏逻辑**:设计游戏规则、AI(人工智能)系统、任务系统、战斗机制等。这部分涉及数据结构和算法的应用,例如状态机设计、寻路算法(如A*算法)。 4. **资源管理**:音频、图片、模型等资源的加载、解压、...

    Bullet_20130307.zip_Visual_C++_

    本压缩包“Bullet_20130307.zip”提供了基于Visual C++的一个简单射击小游戏的源代码,对于初学者来说,这是一个极好的学习资源,可以深入了解Windows编程的基础和游戏开发的基本流程。 首先,让我们了解一下Visual...

    vc++游戏源码包3

    【VC++游戏源码包3】是一个集合了多个VC++编程语言开发的游戏示例源代码和相关说明文档的资源包。这个包对于学习和研究VC++游戏编程的开发者来说是宝贵的财富,它提供了丰富的实践案例,帮助理解游戏开发的基本原理...

    p_1.rar_VJC_game c++_vjc程序

    游戏编程涉及到多个方面,包括图形渲染、物理模拟、人工智能和用户交互等。在这个案例中,虽然游戏可能相对简单,但通过VJC,学生可以直观地理解和操作C++代码,从而实现游戏的逻辑和功能。 【压缩包子文件的文件...

    学VC编游一书的戏源代码

    《学VC编游戏》这本书的源代码集合是一个宝贵的学习资源,尤其对于那些对游戏开发充满热情并且希望通过Visual C++(VC)进行实践的人来说。在这个压缩包中,你将找到一系列的源代码文件,它们展示了如何使用VC进行...

    VC++角色扮演游程序开发

    在VC++角色扮演游程序开发这个主题中,我们主要探讨的是使用Microsoft的Visual C++(简称VC++)作为编程工具,来设计和实现一个角色扮演游戏(RPG)。RPG游戏通常涉及复杂的故事情节、角色交互、战斗系统、物品管理...

Global site tag (gtag.js) - Google Analytics