如何让程序自己走迷宫是一个挺深奥的问题,涉及到生成迷宫的prim算法、深度优先算法,走迷宫的广度优先算法、深度优先算法等。不过那些都有一定难度,我们还是先从最简单的一种算法开始吧,这种自动走迷宫的算法其实是把自己当成盲人走迷宫。这就是“左手法则”,这种法则只针对有墙壁且出口在墙壁上的迷宫(如果出口在大厅中心的情况就不适用了),只要顺着墙壁走,都能走出去。因为出口和入口的墙壁都是闭合曲线,所以这种“法则”在这类迷宫中是通用。不过“左手法则”的效率太低,只适用于小范围的固定迷宫,而大范围的迷宫用这种算法会耗费大量的时间。未来我也会和大家分享“深度优先”等算法和如何自动生成随机迷宫。

最经典的“左(右)手法则”算法:在一张连通的迷宫图中我们用左右任意一只手一直摸着墙就一定可以走出这个迷宫,也称为绕墙走算法(或摸墙算法),是一种迷宫搜索的初级算法。左手法则的关键点:

1. 走到墙边

2. 监测左边是否有墙壁

3. 监测前面是否有墙壁

4. 左右转向。

下面我们把左手摸墙的走法用流程图表示出来,更加方便让大家理解。

代码分析:

程序以网上找到的一个简单迷宫为背景,迷宫墙壁为黑色。圆球角色Ball走迷宫,Bell铃铛为迷宫出口。

我们需要自定义三个函数模块积木,对应左手法则的三个判断(走到墙边,判断左边是否有墙,判断前边是否有墙)。

1. 走到墙边

这个功能就是让角色一直沿着既定的方向前进,直到碰到墙壁。这里可以使用侦测中的“碰到颜色”积木来实现。

2. 判断左边是否有墙

根据流程图结合代码,要求角色行每行动一步就要判断一次左边是否存在墙壁。在这个自定义函数中,我们还要定义一个“左边是否有墙”的变量,如果左边存在墙壁,就将这个变量设为1 ,否则这个变量值就是0(一直重复判断直到角色最终走出迷宫)。如何判断左边是否存在墙壁呢?我们可以让角色往左边移动一步,然后再侦测一下是否碰到了墙壁(在本例中,墙壁颜色是黑色的,可以使用“碰到颜色黑”作为检测条件)就可以了。当左移一步碰到墙壁,则说明左侧存在墙壁,如果没有碰到墙壁,则说明左边没有墙壁。

因为左移动作只是为了做侦测,并不能真的移过去,所以在检测完毕后还要将角色进行复位。把移动的步数退回来,转过的角度也要转回来。

3. 判断前方是否有墙

这个功能和判断左边是否有墙的方法一致,也需要添加“前边是否有墙”变量,用“碰到颜色黑”为条件。当前进一步碰到墙壁,则说明前方存在墙壁,变量值为1,如果没有碰到墙壁,则说明左边没有墙壁,变量值为0。并退回到原处。

接下来看分析主程序的代码部分,设置变量初始值为0,恢复角色初始位置,设置角色大小方向。走到墙边,然后开始进行角色移动过程的两种判断,重复执行直到角色到达终点也就是碰到Bell,结束循环。在循环的过程中先判断左边是否有墙壁,当左边没墙时向左转,且角色前进一步。这个前进移动非常重要,如果忘记写前进代码的话,会造成角色原地打转的Bug。当左边有墙时,才可以进行前方是否有墙壁的判断。如果前方存在墙壁,因为这时左边前面都有墙壁,我们只能右转,注意只是右转并没有前进。如果判断前方没有墙壁,那么此时就可以放心的前进一步。最终角色会一直自己左边的墙壁运动直到终点,走出迷宫。

今天用最简单的左手法则算法完成了自动走迷宫的目标,对算法有了一点最基础的了解,在未来的时间里,我也会和大家分享深度优先算法和递归的算法,更快得走出迷宫。并学会自动生成随机迷宫地图。

Scratch之自动走迷宫相关推荐

  1. 用Q-learning算法实现自动走迷宫机器人

    项目描述: 在该项目中,你将使用强化学习算法,实现一个自动走迷宫机器人. 如上图所示,智能机器人显示在右上角.在我们的迷宫中,有陷阱(红色炸弹)及终点(蓝色的目标点)两种情景.机器人要尽量避开陷阱.尽 ...

  2. 基于Python实现机器人自动走迷宫【100011016】

    机器人自动走迷宫 一 题目背景 1.1 实验题目 在本实验中,要求分别使用基础搜索算法和 Deep QLearning 算法,完成机器人自动走迷宫. 图1 地图(size10) 如上图所示,左上角的红 ...

  3. scratch甲壳虫走迷宫 中国电子学会图形化编程 少儿编程 scratch编程等级考试一级真题和答案解析2023年3月

    目录 scratch甲壳虫走迷宫 一.题目要求 1.准备工作 2.功能实现 二.案例分析

  4. c语言自动按键脚本,C语言键盘控制走迷宫小游戏

    本文实例为大家分享了C语言键盘控制走迷宫小游戏的具体代码,供大家参考,具体内容如下 在看了<啊哈C语言>之后想写一个游戏demo 游戏的截图 首先是启动界面 然后是初始化 接下来是键盘操控 ...

  5. 有关迷宫的c语言程序的编写,3种C语言编写走迷宫的方法

    曾经听说过一个走迷宫的诀窍:顺着墙沿一侧走. (一直沿左侧或一直沿右侧).本程序实现了这一 思想,小人一直沿左侧走. 迷宫是随机生成的. 开始时,按数字 1 键进入人工控制模式:按w,s, a,d分别 ...

  6. LRU算法,走迷宫,数根,星际战争

    问答题1 问答题1:一进程刚获得三个主存块的使用权,若该进程访问页面的次序是{1321215123},采用 LRU 算法,缺页数是几次? LRU 算法是先置换出不常用的页面,如果一个页面刚刚被访问过, ...

  7. DFS和BFS概念及实践+acwing 842 排列数字(dfs) +acwing 844. 走迷宫(bfs)

    DFS (深搜), 也有说就是递归的 执着: 一直搜到底,然后回溯下一个节点 数据结构 : stack (这里的栈,实际上是编译器内部的栈, 所以说也可以看成递归, 递归内部也是调用编译器内部栈) 空 ...

  8. C语言实现老鼠走迷宫(附源码)

    CSDN源码下载:C语言实现老鼠走迷宫.zip 1.需求分析   利用二维数组创建一个随机迷宫或者自定义迷宫,再在迷宫中找到一条从起点到终点的路径,并用图形界面显示. 2.概要设计 3.详细设计 输入 ...

  9. 蓝桥杯国赛-大胖子走迷宫

    广度优先搜索,见注释 五个状态:上下左右停 题目提交 import java.util.ArrayDeque; import java.util.Queue; import java.util.Sca ...

  10. BZOJ 2707: [SDOI2012]走迷宫 [高斯消元 scc缩点]

    2707: [SDOI2012]走迷宫 题意:求s走到t期望步数,\(n \le 10^4\),保证\(|SCC| \le 100\) 求scc缩点,每个scc高斯消元,scc之间直接DP 注意每次清 ...

最新文章

  1. html,css,js,反弹的js效果
  2. pandas官方文档_电影数据轻松学习 Pandas
  3. 18M 超轻量系统开源
  4. MySQL存储引擎中MyISAM和InnoDB区别
  5. 计算机在我国开始被应用于,计算机应用推动自动化与信息化的发展
  6. UISlider 设置增量
  7. cmake 学习笔记(四)
  8. Mindomo Desktop for mac(思维导图软件)中文版
  9. Atitit.软件硕士  博士课程 一览表 attilax 总结
  10. Lync 2013安装要点
  11. 自适应函数符和函数适配器(Adaptable Functors and Function Adapters)
  12. c语言中 输入有两行:第一行是一个正整数n,第二行是n个整数,c语言问题:输入格式 输入有多组数据.每组数据两行.第一行包含一个正整数n(小于等于1000...
  13. O3DE 的Lumberyard 游戏引擎
  14. TabLayout 之改变 Indicator 的宽度
  15. Altium Designer18之修改画图光标大小
  16. 【Java基础】手把手教你用Java制作飞翔的小鸟
  17. 又干起一起胡闹的事了,,,,,,,,
  18. 很详细、很移动的Linux makefile教程:介绍,总述,书写规则,书写命令,使用变量,使用条件推断,使用函数,Make 的运行,隐含规则 使用make更新函数库文件 后序...
  19. OpenWRT 添加第三方库
  20. 数据结构案例 C语言版

热门文章

  1. 拉杆音响电池升压芯片4.2V转12V2.5A大功率升压芯片
  2. web前端面试题(全)
  3. 联想y7000 Linux显卡驱动,联想Y7000安装ubuntu1804.6双系统和显卡驱动(一)
  4. WPS文字常用排版快捷键
  5. 企业大数据规划建设方案(PPT)
  6. 软件测试之 app测试的工具汇总
  7. 红巨星粒子插件:Red Giant Trapcode Suite 15 for Mac
  8. 何凯明新作ViTDET:目标检测领域,颠覆分层backbone理念
  9. (三)python(基于面向对象)使用Requests+Xpath提取HTML内容(妹子网MM图片)
  10. 计算机里怎样打字,电脑知识:如何电脑快速打字