基于Knuth算法的随机生成地图

本文介绍了如何在Unity中使用经典Knuth-Shuffle算法来生成随机地图,通过创建二维数组并结合洗牌算法确保每个坐标被公平选择,最终实现地图障碍物的随机分布。文中提供详细代码示例,并展示了生成的效果图。后续项目会继续完善并分享到Github。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

    
    
今天开始准备开一个新的项目,以后也会将项目中的好的demo分享出来。这个项目的第一步就是关于随机生成地图的,便整理了一下,写了一个新手也能看懂的版本。望大家多多支持,以后也会分享更多有趣的技术和demo . 首先给大家简单介绍一下洗牌算法。洗牌算法时非常经典的算法,也有很多版本,这里使用到的是经典版本 -- -- Knuth - Shuffle算法。 引出:有一个大小为 100 的数组,里面元素为 1 - 100 ,从里面随机选取 50 个不同的数。最简单的思路:直接随机一个( 1 , 100 )的数,判断这个数是否出现过,没出现过就放到一个目标数组中,直到取满 50 个,这样会出现一个问题,越到后面取的数重复性越高。这样每个数出现的概率并不相等,也就是不公平的。而洗牌算法可以解决这个问题。其基本思路就是每取一个元素就将它与数组最后一位交换,然后长度减小 1 ,再从剩下的数组中重复即可(如果不了解,读者可自己去学习一下,这里不重点介绍)
这里把洗牌算法放到单独的一个类里,这里的Coord是一个结构体,代表一个坐标,定义在MapController里的。
Coord结构体的定义:
MapController脚本里的基本设置:
然后是生成地图,基本思路就是以一个空物体为基础位置,然后用二维数组去生成地图,注意为了后面的洗牌算法,要边生成边将坐标放入到一个List里。同时为了方便管理把生成的Tile设为空物体的子物体。
最后是生成障碍物,这里meish没什么好讲的,直接上代码。
放一个效果图,注意:障碍物的数量要小于MapSize的平方(地图的大小)
做完后续的功能,会上传到Github,到时候会把链接给出来。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值