栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 游戏开发 > 其他

Unity迷宫随机生成(面试题)

其他 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Unity迷宫随机生成(面试题)

最近准备面试一家游戏公司,不得不说游戏公司现在真不好进啊(是不是我太菜了TAT)。终于有了一家找我上来就甩给我一道题,初级Unity面试题。需求如下:

1.有且只有一条正确路径

2.每一个格子都是连通的

3.每一个格子至少有一面墙

4.用Unity实现

5.需要两个按钮一个重新生成新迷宫,一个自动寻路。

平常的时候我也是比较注重算法训练,但是刚刚上手这个题目还是有一点点懵,所以网上查了一下资料。我当时主要看的算法有两种,第一种Prime算法,第二种深度优先探索(DFS)。大神们写的都很好,做的时候我也有了一些自己的心得,以此记录一下。

首先是Prime,这种算法的思路:

1.建一个数组,将数组中所有元素初始设为墙。(我用的int数组,0是墙,路是1)

2.做一个预处理,先将迷宫最外层先全部设置成路。(这是为了后面迷宫生成的判断条件,并保护最外层迷宫)

3.随机在迷宫中选择一个墙加入数组,最好不要选择最外层,后面的起点终点方便规定一些。

4.做一个While循环,条件是数组中元素不为0,每一次循环,随机在数组中挑选一个元素(墙)出来,并判断该墙四周的路是否小于等于1,若符合则将该墙变为路,并将该墙四周的墙新加入数组。

5.跳出循环后规定起点和终点。(条件是起点,终点的墙必须和里面的路连通)

这样我们的迷宫数组就规划好啦,剩下还有一个难点,就是自动寻路功能。这也是Prime在本题里面不太好用的地方,他有两个需求不好达到,所以我有尝试了一下深度优先的方法,思路如下:

1.建一个数组,将数组中所有元素初始设为墙。(我用的int数组,0是墙,路是1)

2.做一个预处理,先将迷宫最外层先全部设置成路。(这是为了后面迷宫生成的判断条件,并保护最外层迷宫)(1,2其实是一样的)

3.随机选择一个最外层墙入栈作为起点(这里数据结构是用的堆栈)

4.一样用While循环,终止条件是栈中元素为空。每一次循环,选择栈顶元素(不要弹出去),在此元素的四个方向中随机选择一个方向的墙体,判断它是否可以入栈,判断条件是:该墙体的四周有且仅有一条路。若符合,则将它入栈,并把该墙体变为路。若该栈顶元素四个方向均无符合条件的墙体,则将该元素弹出。

5.跳出循环后规定终点。(条件是终点的墙必须和里面的路连通)

这一种方法的好处是,路径比较好规划,随机性没有那么强。但是在这里我也没有找到一个很好的方法去做一个路径规划的判定。但是我们要知道,这条路径一定是足够长的,因为他是会有很长的一条路径的从头到尾连通的。所以我们可以有一个很大概率能找到最短路径的方法,以该数组一个大致的长度为界限。小于该长度的时候,将无用的元素移除。这样我们就能有一个还算不错的寻路方法了。

由于本人还是个菜鸟,代码就不贴了,有想要探讨的小伙伴可以私聊我,也请大佬能教教如何写更好的寻路方法。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/901376.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号