今天也要直播魔法,求科学的!
欢迎来到小妖精Balous的完美游戏教室!
经过前两周的学习,相信米娜桑已经对状态机有所了解了呢~虽然状态机能够实现几乎所有的人工智能,但是,在实践中,你们有没有发现,自己做出来的怪物很笨呢?比如说,前面明明有一堵墙,但是怪物还是把脸往墙上撞,不会拐弯;又比如游戏的地图比较复杂,怪物追击玩家追到树林里后,玩家只要在树的周围绕圈子,怪物就不知道该怎么继续追击玩家了,因为怪物总是被几棵树挡住去路!
这样看来,怪物的确很笨呢,因为它们不会在复杂的地形中找到一条正确的道路继续追击玩家,然后,怪物就被玩家给调♀戏了。
再换个栗子,现在你在玩DOTA2,你正在使用卓尔游侠,现在看来,卓尔游侠并不是AI,因为你作为玩家在操控她,然而,当你用鼠标右键点击地图的一块空白区域时,卓尔游侠就会自己跑过去你点的地方,即使周围有小兵或者树挡住卓尔游侠的前进路线,她还是能够找到一条最近的路线跑到目标地点。用这种方法来分析,即便是玩家操控的游戏角色,它们依然也是人工智能。
小妖精跟大家举了这两个例子,是为了要引出这节要讲述的话题——AI寻路!
没错,无论是怪物在复杂地形中追击玩家,还是卓尔游戏能够自动走到目标地点,这些例子都是在解决一个问题,就是AI寻路问题,既然是寻路,肯定就离不开图论,所以,图论基础不好的同学回去翻翻《数据结构》的课本吧。
然后,小妖精会告诉你,课本上讲的东西根本一无是处,这是赤裸裸的现实,因为学校的教育是培养一些能够参加全国比赛的学生,而不是能够参与项目的学生,如果你打算使用深度优先搜索dfs,广度优先搜索bfs,或者是Dijkstra算法的话,你就等着游戏卡帧吧,没错,因为你使用了毫无用处的算法,导致你的cpu运转不过来!!虽然课本上讲的这些算法在编程竞赛中很有用,但到了实践中却是毫无意义的。可悲的是,学校的评级是按照科研水平来评,所以学校为了让自己的学校更出名,肯定是教你一些竞赛中常用的算法,然后,获得全国一等奖的你就会发现,你连个软件也做不出来。
不过,小妖精Balous要教大家的,是有实际意义的算法,A*算法,这个算法的目的,是找到从起点到目标点的最短路径,A*比dfs,bfs以及Dijkstra都要好很多,因为A*是有目的性地去寻找路径,而后面三者则是盲目地去试探性寻找。
因为这章是引言,所以小妖精也不讲太多啦,接下来的课程,Balous将教大家如何创建图,如何使用A*算法。那么,我们下周见咯~~