新闻列表
咨询热线:
187 - 6397 - 2757
在我们以往的文章中也带领同学们制作过自动找迷宫的游戏,但是我们那是我们自己做的,问题来了,那我们能不能写一个程序让它自动给我们生成迷宫呢?今天老师就安排!~
先看效果图:
红色的方块表示起点。终点我们可以假设在右下角。
自动画迷宫最关键的就是算法,老师用的是Prim算法做的迷宫算法,这种算法画出来的迷宫更适合游戏使用。
在这个游戏里我们把绿色当成路,把浅红色当成墙。也就是一个角色的两种造型。老师用克隆做,而不是用画图的形式去做。其实区别不大,因为所有的计算都是通过算法完成的,角色之间没什么互动,我们可以根据算法计算出来的迷宫结果,用克隆去画这个迷宫,也可以用图章去画。每个人习惯不同。
让我们看看程序怎么做的吧:
生成一个只有墙的迷宫
这个简单,代码也不用讲了,大家把位置和坐标只要确定好,画得漂亮一些就行。在克隆的时候要注意,老师引入了一个编号的私有变量,也就是要标明每一个克隆体的编号。确保后面的行动能找到对应的克隆体。老师之所以用自定义命令去生成方阵,主要的目的还是不想有刷屏效果,这样方阵可以秒成。这个技巧老师前面已经讲过所以这次不反复讲了。
另外老师还引入了一个列表,标明每一个克隆体的状态,是墙还是路,列表的顺序号对应的就是克隆体的编号,列表的内容对应的是墙还是路,墙为零,路为1。
全部都是墙,所以都是零。
迷宫生成算法
下面就是这次讲的关键部分,就是迷宫的算法。老师另外导入一个角色,用来做算法的程序,没有放到迷宫方块的角色里。
算法概述:
1.建立两个数组,一个是用于存储地图的二维数组α,另一个是用于存储待处理的墙的数组β。
2.将α的所有方格全部初始化为墙。
3.选定起点,并将该位置的墙变为路,将其四周的四块置入β数组中(出界的直接筛掉,就不说了)。
4.当β数组不为空时,循环以下步骤
1)从β数组中随机选择一块,暂且叫他A。
2)遍历该方块四周,并选定其中的某一块为路的方块,暂且叫他B。
3)判断相对于A,在B的对侧的方块C是否为墙(假如B在A左侧,就判定A右边的方块;B在A上方,就判定A下方的方块;以此类推……),若为墙,则:
①将A、C均置为路。
②将C周围是墙的所有方块,均置入β数组中。
4)将A从β数组中去掉。
这段算法就是迷宫的生成算法,老师其实也是从网上找的,下面我们看看Scratch怎么做:
1和2步刚才基本上已经做了,老师设置了一个列表,用来存储迷宫地图上所有的方块,另外老师也把这个列表里的每一个变量设置成零,代表全部初始化成墙。同时另外再建临时待处理的墙的列表。
所以关键是第三步和第四步:
第三步:选定起点,起点老师定为第一个方块,然后把周边的方块放到待处理的墙列表中。
这里面有一个自定义的命令,“返回周边情况”,这个命令是用来检测指定的方块周边的路和墙的状况。会将周边的墙和路分别放到两个临时的列表中:“周边墙”和“周边路”这两个列表。
老师把第一个方块进行检测,然后把返回都周边墙的数据填入到待处理墙列表中。
(这个返回周边情况的代码有点长,主要是要测试上下左右的四个方块是路还是墙,同时还要对方块的位置进行判断,处理好当方块位于边界的情况。代码并不复杂,就是找到四边的方块的编号,然后去全路径状态列表里读取这个方块是墙还是路,分别放到不同的列表里。)
第四步:
接下来就是做算法中的第四步,也是关键的一步:
为了跟算法描述对应,老师zQ也用了ABC三个变量来对应算法描述,方便大家阅读代码。
1:先从待处理的墙列表中随机抽取一个数据,也就是随机选一个方块A。
2:对这个方块的四周进行检测,返回这个方块周边为路的列表。
3:从方块A周边路的列表中随机选择一个路的方块定义为B。
4:然后根据算法描述,找到C的位置,判断C是否为墙,如果为墙,就把他四周的所有的墙都放到待处理的墙列表中去,同时把A和C都设置成路。如果不是就什么也不做。
为了找C的位置,老师单独做了一条命令,代码有点长,其实就是判断A和B的位置的特殊情况,比如B在A的左边,而又A在最后面一列,那就没有C了。
(有点长就不全部截屏了)
找到C的位置后,老师又做了一条自定义的命令来处理剩下的操作。
5:处理完了C,然后就把A从待处理列表中删除掉。
重复这5步过程,直到待处理的列表中没有数据,那么迷宫就生成完毕了。
通过迷宫算法,最后的全路径状态列表中就有了整个迷宫的数据,每一个方块应该是路还是墙都清清楚楚。随后,老师只需要发一条消息刷新一下克隆体的状态,让克隆体的造型跟老师的迷宫列表一一对应就好了。
(当然,这部分代码是在迷宫方块的角色里,用消息来控制克隆体真是一个方便的方法。
今天的程序相对来说不复杂,老师是让大家知道有这么一套自动生成迷宫的算法,用这个方法可以自由的生成各种难度的迷宫,是不是很有意思呀,同学们!~
速云少儿编程致力于 4 - 18 岁,山东少儿无人机编程教育机构,速云网络研发软件工程师授课少儿编程,教给孩子们不光要学习编程,还要结合编程知识给我们无人机写程序,实现我们无人机的自动启飞、人脸识别、智能跟随,包括更加高级的编程玩法,就是无人机编舞。可能家长想了!四岁孩子能学习无人机编程吗?那我们看个四岁的小同学吧,你自己看看能不能学习吧!
我们来看一看四岁小朋友的学习视频吧!
家长担心孩子们真的能听懂课程吗?在每节课即将结束的时候我们都会进行课程汇报展示,来看一下小童鞋的汇报成果吧!
这个时候家长可能说了,我们四岁的孩子,年龄辣么小,又不认字,那该如何学习呢?
其实四岁、五岁的孩子不认字怎么学习?只要孩子识别颜色就可以学习。通过颜色识别具体编程积木,比如:蓝色是运动、紫色是外观、黄色是事件等等,通过颜色识别文字,根据颜色先实现出程序做出卡通的效果,以激发孩子兴趣,使孩子产生兴趣后开始具体学习每个积木的作用,再学习积木上面的文字。如下图:
这个时候你还认为编程难吗?其实针对4岁起,就已经可以学习编程了。通过搭积木的方式让孩子学习编程。
当然,比如我们下面的无人机编程视频吧!
无人机能六架一起起飞?没错!那他又和数学有什么关系呢?
小云说啦!这是根据我们数学中的坐标轴的 x轴 y轴 初始化无人机位置,无人机与无人机之间的距离、架数的多少,全部需要通过精密的计算,否则无法编排出理想的造型。
现在作为家长的你!还在纠结无人机编程是否对孩子有帮助吗?
无人机编程能做什么?人脸识别?智能跟随?自动飞行?还有吗?
答案:有!那就是"无人机编舞"!不知道无人机如何编舞?快看下面我们速云小童鞋的无人机编舞吧!!
无人机编程都学习哪些内容呢?
让无人机与编程结合?
没错!就是要让孩子“动手”+“编程”实现无人机起飞。
重点培养孩子逻辑思维能力与动手操作能力,让孩子在编写无人机程序的时,无形的锻炼孩子的逻辑思维能力和前沿科技的运用能力,在飞行学习中,孩子们需了解飞机的机械结构,练习手眼协同能力,甚至自己组装飞行器;在编程中,无人机可以在三维空间中,用摄像头完成巡线、人脸识别等人工智能任务。
例如:人脸识别,智能跟随,红外线定稿,光流定位、无人机编舞等。
看我们小童鞋们上课视频吧
坦克编程都学习哪些内容呢?
动手组装”+“编写程序”
通过编程将抽象理论与实践操作合二为一,让孩子重新理解知识,体验人工智能,培养独立思考的习惯和动手解决问题的能力。
课程涉及机器人拼装、力学等数理知识,运用六类人工智能模块,编写专属的自动驾驶算法程序,让孩子更加深入理解人工智能技术。
例如:人脸识别、智能跟随等前沿技术。