粉丝137获赞968

自动拼斗机大揭秘来了!我自主开发了一款拼斗机项目,包含框架、电源、控制器和控制板。框架选用高强度铝合金,能保证设备长期使用不变形。电源采用 arduino nano 先进的微控制器编辑控制程序,可实现自动化操作,还能与笔记本电脑配合,方便用户设置参数和操作。 自动拼斗的另一大核心装备是配备了舵机强化的按压式拼斗笔,当需要上斗时,只需将笔从机器上轻松取下,简单拧动几下就能继续投入使用。在后续的优化计划中,我打算采用磁吸触点对它进行升级, 让我们简单看看效果, 如果再加上神奇的豆包编程魔法会怎么样呢? 这就是自动拼斗机的原型机了,项目已经开园,欢迎大家一起玩!

这一题是一个叫小兔子跳台阶的题目,小兔子要跳十次台阶,一共有二种跳法,一次 可以跳一次一阶或两阶。我们先可以我们来看一阶,一阶有一种跳法,就是跳一次一阶,然后两阶有两种跳法,分别是跳两次一阶和一次 两级。呃,三级有三种跳法,分别是跳三个一级和一个一级, 再加上一个两级或者是两一个两级加上一个一级。第四个有四级台阶,可以跳四个一级, 或者是一个两个一级和一个两级。然后呢是一个一级加上两个一级和一个一级,或者是直接跳两个两级,所以这是五种方法,我们可以读出的这个规律, 用前面两个数加加起来,就得出下一下一集有多少种跳法,因为呢,我有制出这样的公式 先,我们先求,我们先求把这他俩的第一个给写出来,作为出使值,然后加到 n, 也就是这里。 最后呢我们再 print 输入,我们要加要几阶阶,就推出有多少种跳法了。

今天想跟大家聊一聊香肠切片法,它是我至今为止唯一坚持下来的工作方法,就是把一个看着超难的大人物像切香肠一样,切成一小片一小片的,让每一片都很容易被吃掉。首先我们需要准备一本便签或者一张白纸,如果没有纸笔的话,手机里的备忘录也是可以的。 ok, 现在把你记 今天要完成的任务依次写下来。比方说最常见的老板让我们交稿,这个任务很大,我通常会这样写,一、沟通,敲定选择题。二、查找至少五条信息。三、提取至少十条观点。 四、写出稿。五、润色。六、交稿。你看当第一条敲定选择题被我完成的时候,是不是感觉后面的事情都有了方向,不会那么的困难了。除了工作以外,比如说周末在家请客呀,打扫煮饭这类的杂事,我更会是写卡片来辅助自己完成。 大家看杂事其实是可以交替完成的。一、买菜小哥在送来路上我就可以去收拾卧室了。二、收拾所有卧室脏衣物。这里我急切的想跟大家说,我的整理原则是每间房不重复进出,收拾完一间再去另一间,强烈建议大家都这样收拾房间。 之前我看到过一个观点,如果在家你的动线太重复的话,总是往返于两个房间做重复的事情,你在家多走出一万步都是有可能的,这样是比较耗费精力的。洗衣机在转动的过程中,我的菜也来了,三、烧水,四、炖汤, 时间久的菜要先做。五、备菜。六、摆放零食。七、摆放拖鞋。基本上到这里就做完代客的工作了,而且大家有没有察觉到大小事是交替来的,买菜很快, 收拾很慢,烧水很快,备菜很慢,摆放工作很快,这样子我们的大脑更容易接受,因为会盼望下一件容易的事情赶紧到来, 效率真的会高很多。小孩子的学习任务也是用切片法执行的,我会定期跟他一起探讨出回家后的任务,做成这样的小卡片,让他每完成一件就收在一个盒子里, 真的会很快很快就完成。有小孩的家庭我强烈推荐。大家知道吗?切片法的背后其实是有科学依据的,其实就是心理学上克服起始障碍。 你的大脑一看到大项目就会焦虑拖延,但是切成小片以后,他就会觉得,哎,这片我能行,那片我也能行,然后每完成一片就会很有成就感,推动你继续下去。

谁敢信啊,一个完全不懂编程的纯小白,居然只用了三天,就用 ai 手搓出了一个完美的拼斗图纸小程序,迄今简直离谱。那天我偶然刷到别人玩拼斗,觉得哎呦有点意思啊,想搞,结果直接卡在了第一步,根本不知道怎么弄图纸。求人不如求己,既然没有顺手的工具, 那我干脆自己做一个仪式。身为纯小白的我,开始了和爱相爱相杀的写马之路。一开始我导出了这么个网页版,总觉得哪里怪怪的,生成的图纸完全不是那味,接着就是疯狂的改改改,加了才切,加了调色功能, 虽然勉强凑活能用了,但我自己这一关都过不去。后来一想,做都做了,不如直接搬到小程序上,掏出手机就能用,多香啊!我又经历了堪比渡劫的几十轮疯狂调整,因为我本人极度讨厌那种花里胡哨、功能臃肿的 app, 所 我的原则只有一个,界面极简,功能实用。就在我快要头秃的时候,终于让我淘到了一套神仙开源代码。这一下,效果图直接起飞来看现在的终极玩,整体 操作贼简单,先上传图片,做个简单的颜色调整,切到效果图界面,挑个你顺眼的模式,最后点开图纸,选好适合的板子大小和颜色数量,顺手调一下裁剪比例,搞定出的图纸就是这样。这效果简直不要太完美,从零到一,跑通全流程,真的成就感爆棚! 独乐乐不如众乐乐,我已经把小程序的名字放在评论区了,免费给大家用,想玩拼斗的朋友自己去搜一搜吧,别忘了回来交作业哦!

就这个插件啊,以前做一套方案需要半天,现在只需要一个小时。比如我要做一套现代风格的效果图,先在这个插件里面去找参考,通过筛选找到这个风格。哎,这套不错,点开,接下来我就开始搬了。 先切换到材质按钮,拾取地面瓷砖放到我的方案内。拾取墙面材质,点一下墙面就到了我的方案内。 切换模型,喜欢哪一个模型?点一下,鼠标移到我的方案中,模型就跟着来了。电视背景墙不喜欢。好,那我就换下一套, 点击同样模型会跟随鼠标来到我的方案中,并且背景墙是属于定制的,直接截图就可以调整。换一个思路,你不是在做设计,而是在做组合。

给大家介绍一个神仙一样的酷,叫做 lit, 听见没有?这个酷呢,它一周的下载量在三百多万,还挺不错的,是吧,我就讲它的酷神奇在哪,然后呢,我再给你讲这个玩意儿可以用在什么地方? 它用来干嘛的呢?这个酷它是用来做渲染的,那你说个渲染还用它来做?像 u r, react 的 一些框架渲染都已经非常成熟了,对吧?还用它来去做什么渲染? 你别着急哈,咱们捋一下这个事,你就知道他为什么这么牛逼了。呃,比方说举个例子吧,我这里呢是一个简单的位子工程啊,就是个空界面啊,一个原生的 gs 啊,这里面没有使用 vivo, 也没有使用 react。 然后呢,我在这里呢定义一个数据,比方说 ctrl 啊,从零开始吧,然后呢,我这里呢写上这么一个渲染函数啊,我希望呢渲染一段 html 呢,大概是长这个样子啊,我们写简单一点啊,呃,就一个 h 元素,然后元素里边呢套一个个 ctrl, 哎, ctrl 是 动态的是吧?那么我就把这个东西宣传出来,我把它宣传到哪了?我就把它宣传到这个 app 这个内容里边。好,咱们把这个 app 拿到啊, 我们注意听哈,因为我讲这个东西对你们将来去做一些高级前端开发是非常有帮助的。这种思路真的是把我震惊到了。好,我们再描述一下啊,这个宣传还是要做什么?就是把这个东西呢放到这里边,那么最简单的方式是啥?最简单的方式是不是就是直接弹一个 excel 对 不对?来一个模板置物串吧 啊?就像这样来个模板,是不是那么这一块呢?就拼接的动态内容有问题吗?没有任何问题。然后我们渲染一次啊,然后接下来每隔一段时间啊,设置 in terminal, 每隔一秒钟吧,又渲染一次啊,每隔一秒钟,我们把数据改一下, ctrl 加加,然后再进行重新渲染啊,这里没有什么数据响应式啊,那就是直接重新渲染就完事了。好,就这么一个代码,你看一下能不能达到我们的要求呢?那肯定是可以的啊,咱们打开页面, ctrl 好 打开啊, 你看肯定是没有任何问题的,但是呢,这样做是有效率问题的。你看一下,每一次我们重新渲染,这个 h 元素是不是都被改变了?是不是?我们怎么来验证这一点?其实你可以通过这里的闪烁都可以看得到,对吧?在闪的地方就说明他之前的东西已经没了,变成个新的东西了。 那么也可以通过代码的角度来去观察,我们可以通过这个定义的变量啊,通过 documents 啊查找,然后去拿到这个 h 元 素,它目前的值呢?是三十,然后呢,现在其实已经值已经变到了三十五,三十六了,是吧?然后再去打印一下 h 是 不还是三十, 也就意味着每一次渲染都在生成新的元素,过往的元素全部抛弃掉。当然我们这里的渲染呢,其实元素倒不是不多啊,只有这么一个,但是实际情况下,真实的开发里边,一个组件里边,那元素是不是非常多?你每一次都要这样搞的话,那性能就很低下了。 这就是为什么那些 view 啊, rest, 那 些框架啊,它要引入什么虚拟 dom 对 不对?然后还要去做对比,然后去做精准的更新,这是它的本质原因。然后再说回到这个库, 这个库呢,他也能做精准的渲染,你多次渲染,他也能够精准的渲染到变的地方。但是神奇的是,他里边是没有虚拟动的,也没有任何的什么 d、 f 都没有, 但是他就能够轻而易举的做到精准更新。我们先把他的代码写出来啊,写出来过后呢,我再给他解释一下他到底是怎么做的,他思路非常的巧妙。好,我们安装好这个库之后呢,我们就导入他啊,我就全当导入吧,他里边其实也就是提供了两个核心函数 from it html, 它里边第一个函数呢是一个 html, 你 把这个函数写到哪呢?写到模板字母串之前啊,这叫做模板字母串标记,这是合法的 es 六的语法啊,就是模板字母串之前是可以写函数的,那么他到时候呢,会把这个东西呢作为参数传到这个函数里面去,得到的是这个函数的返回结果。好,返回结果的时候呢,我们就不要直接用这个 html 看一下啊,我们先把这个 in table 注死掉, 保存一下,你看它打印出来是啥啊?它打印出来其实很简单啊,就这么两个属性,一个属性呢叫做 strings。 strings 呢?实际上是啥呢?实际上就是这个模板数据库里边静态的部分,就这一部分啊和这一部分,就静态的部分, 你看它是个数组啊,静态的部分,对吧?都是 strings。 然后呢, y 六十是啥呢? y 六十是它的动态的部分啊,就这一部分,它对应到这个 y 六十,它其实很简单啊,它基本上看上去呢,好像也没做啥事,然后别着急,你看它是怎么渲染的啊?它里边呢,还给我们提供了一个渲染函数,叫 render, 一个函数呢,传两个参数,第一个参数呢就是你渲染的内容是啥,那么就把内容传进去好。第二个参数呢,你渲染的容器在哪?就是你把这个内容放到哪个容器里边,哎,放到 app 里边,完事了, 生成内容,内容是有静态的,也有动态的,然后呢,渲染它,把它渲染到一个容器就完了,然后后面呢,我们就不断的去调用这个渲染函数啊,改变数据,重新调用渲染函数,我们来看一下神奇的结果啊,保存,你看一下这个元素这里啊,我们展开这个元素啊,你看 每一次数字变化是不是精准的更新到这,他并没有改动这个元素本身,我们在控制台里面也可以打印看一下啊。拿到个 h 一, 你看 h 一, 始终是拿到是最新结果,你看现在十八了,对吧?然后再去拿这个 h 一, 拿到的永远是最新结果,说明啥?说明这个 h 一 永远是同一个,他并没有抛弃掉之前的 h 一, 也没有去重新生成这个元素, 是附用了它,那么这就带来了极高的性能。你看 u 和 rest 框架折磨了半天,还要搞出什么虚拟多门呀,还搞出什么 d f 啊,才能搞定的事情。这个库一下就搞定了, 而且用起来无比的简单,就是个模板字母串,而且这个库极其的清亮,他清亮到什么程度了都难以想象,我们可以找到他这个库的原码啊,他打包出来的原码列列表,然后呢?这里边啊,你看这个吧,列列表解释啊,就是压缩过后的代码就这么点,你去翻一翻 ui 的 代码有多少,浏览器代码有多少, 这么点就实现了。我当时都蒙了,我说这个东西你咋实现的啊?这个同学们也可以想一想,他是咋实现的啊?我们后边来讲,先想想他怎么实现的 这个玩意吧。我跟你说没有十年的脑血栓,你真想不出来。他的实现逻辑很巧妙啊。他首先做了一个假设,我们来看一下这个假设什么成立哈,他的假设是这么说的,同一块渲染的内容挺好啊, 他的静态部分一定是固定的,比方说这个康天志,他要渲染很多次,对吧?每次都要渲染这个内容,他静态部分一定是百分之百是固定的,你不可能第一次渲染这里是 h 一, 第二次渲染这里是 h 二,他既然叫静态,那就不会变, 这个好理解吧?那如果说你要变,那就不是静态了,就动态了。这他第一个假设成不成立?完全成立。他第二个假设,你同一段渲染的内容,你动态部分的数量一定是固定的, 比方说这个内容他动态部分只有一个,是吧?只有一个地方是动态部分,那么动态部分的数量就是一,那么下一次渲染他动态部分的数量还是一,只是他那个一里边的内容不同而已。这个假设有没有问题?没有任何问题。好。第三个假设,他假设静态部分和动态部分的相对关系,位置关系是不会变化的, 这个好好捋捋哦。比如这是静态部分,这是动态部分啊,这一块呢,我要讲慢一点啊,不然的话同学们是听不太懂的啊。但是你听懂过后你就知道它有多巧妙了, 它静态部分和动态部分的相对关系是不会变化的。你看先进态一个 h 一, 然后接一个动态内容,不管动态内容是啥吧,是啥其实我并不 care, 但是呢,就是一个 h 一 要接个动态,动态后面是接个结束标签,这就是相对位置关系。他不可能说第一次渲染的时候这个动态在这,第二次渲染的时候动态在这不可能的,因为你不把字幕一写出来,他的位置关系就相对固定了。 他其实这三个假设就是基于模板数据库的特点来假设的,模板数据库就是这样的特点,静态是固定的,动态是变化的,动态的数量和静态的数量与他们的相对关系是稳定的。 模板数据库的特点啊,这三个假设全部成立好,于是呢,他就开始玩发火了,他怎么玩的呢?他是这样玩的啊,我给你讲讲他的原理啊,他不是有两个函数吗?对吧?一个是 atm 啊,这是个模板数据库标记啊。如果说不太清楚模板数据库标记的同学呢,可以翻一翻我以前录过的一些短视频啊,不过他倒不是很清楚模板数据库的标记的同学呢,可以翻一下事情就可以了啊。好,首先说他的 atm 的 原理, 他收到的是什么?他收到的是一个模板字母串,是吧?那他怎么来处理的呢?他做了这么一些事情,他要把它做缓存,生成一个 key, 这个 key 是 啥呢?是所有静态内容的拼接。举个例子吧,好比方说这个例子吧,这个例子里边他这个生成的 key 是 啥呢? key 就是 一个静态内容的拼接啊,就是这个 h 一, 然后斜杠 h 一, 然后中间部分是动态的, 动态的怎么办呢?他动态的这里呢,他会给他加一个特殊标记,标记一下这里是动态的。其实这个标记实际上是啥呢?刚才如果说细心的话,朋友们都可以看到了啊,他的一个特殊标记就是一个注视节点啊,这里会生成一个唯一的 id 啊,总之呢,他会做一个标记,然后呢,他就会把这个东西呢作为一个替代 啊。实际上呢,他在实现的时候呢,这里还有一些其他的小处理啊,不过我们不用 care 了,细节还是很多的,虽然代码不多,但细节还是比较多的。不过我们不用 care 了,一些细节我就给大家分享一下他的那种巧妙的思路就可以了,来打开同学们的思维空间。好, key 有 了, 那么他要拿一个建筑队存起来。我首先说一下他为什么要存哈,因为他不存的话呢,他下一次渲染又是一个全新的渲染了,他就不会基于之前已存在的元素去渲染, 他只有把之前的东西存起来才知道。哦,这玩意我之前渲染过的,我只需要去更新他某一部分就行了啊。好,他的值是什么?他值有很多啊,他存的一堆东西,他第一个东西是什么呢? 第一个东西他存的是文档片段,啥意思呢?就是我们给他的不是这么一个什么呢?是个特殊标记,那么是不是他可以根据这个东西去创建一个一个的元素啊? 比如说它可以使用 document create element h e, 对 吧?是不是可以创建一个元素啊?当然它不是用这种方式来创建的哈。呃,它实际上做的做法非常简单,它就创建一个 template 元素, template 元素里边儿,然后直接来一个 inner, 哎,听见没有?直接复制。为啥复制为这个东西?因为 template 用来干嘛的? template 它就是用来生成一个文档片段的啊,文档片段叫做 docio mind fragments 啊,我跟你说啊,同学们要学习进阶部分的内容啊,特别是像这种偏架构思维性的内容,你首先基础得牢哈,你基础不牢的话,你是看啥啥都不行,学啥啥都恼火,而要打下一个牢靠的基础的话,就来关注一下我们的课程啊,尤其是我们的免费的大师课。 这个部分课程就是专门为那些以前从线下机构培训出来,或者是以前是完全自学的同学专门为你们准备的。你们看那些玩意吧,我都清楚 哪些地方有重大缺失,哪些地方是讲的错的,通过这个课程,一门课程几天的时间给你纠正过来,你把这些核心东西纠正完了,然后才能说我去玩什么新花样,学什么境界知识。后边我们的境界知识有很多啊,像这些课程啊,这些课程都有大量的境界知识在里边,有 些是偏架构的,有些是偏复杂的业务开发的,有些是偏核心原理的,都是来解决你过往的一些核心缺失的,这些都是咱们的福利课程啊,那么除了咱们福利课程之外呢,我们还有一些成体系的课程, 高新课呢,是从零基础到高级业务开发的,架构课呢,是从高级业务开发到架构师的,那么这两套课程加起来就是前端从零到毕业的课程。我建议同学们呢,可以先学习一下我们的免费课程啊,先在短时间内获得足够的提升, 然后呢,如果说后边你再有深造的需要的话,再去了解咱们的付费课程。好,那么这些课程的领取方式啊,在咱们账号主页点击头像进入账号主页,根据提示来找咱们就可以了啊。好说回来啊,他首先第一件事是生成一个文档片段,那么这个文档片段里面是不是包含了整个的多媒体了,对不对?就是我们现在要渲染的多媒体都有了,多媒体都生成出来了。好,这是保存了第一个东西。好,第二个东西呢, 他要找到这个文档片段里边的所有的特殊标记啊,找到就所有的特殊标记,这个好找吧,因为特殊标记是个注视节点吗?对不对?他就依次便利注视节点去找不就完了吗?像现在已经有什么已经有这个文档片段了啊,就是个 template 了,那么从这个 template 里边是不是就可以来 query selector 哦, 自己找不就完了吗?说找特殊标记是非常好找的啊,而且找出来是一个什么呢?是一个树组啊,标记一,然后呢? 标记二好,后背我不写了啊,第二步能找出来吧?好,第三步,我可以根据每一个标记,是不是可以生成一个更新函数,因为每个标记它代表着一块动态内容嘛,那么将来呢?这个动态内容要更新,我是不是可以通过一个函数更新,对不对?我就可以根据这个标签呢,生成一个一个的 更新函数,比方说随便手写一个为代码,第一个更新函数啊,比方说 update 一, 第一个动态内容的更新函数传入一个值,对吧? value 一 啊,那么将来怎么更新呢?我就通过标记一啊,我标记什么?这里 next supplement, 对 不对?下个兄弟节点我来一个什么 text content 啊,或者是 initiative 啊,那些都是一些细节了啊,来一个白六一,非常简单,对吧?那么也就是说我可以得到所有的更新函数,那么得到结果就是一个函数一,函数二啊, 好,别不写了,好,现在有了标记,有了函数还有什么呢?我还可以得到目前所有动态值,对不对?它目前传过来的动态值,这个肯定是可以拿到的。所有的动态内容啊,那就是值一值二 啊,后面不写了。好,这就是整个 html 这个函数,他做的事情,就这一段代码,他做的事情,把这些处理好了。好,接下来就是渲染了,你会发现当这些事情处理好了过后,渲染变得极其的简单了,当他渲染的时候,是不是传了一个容器进来,然后传了一个要渲染的内容进来,对不对?好,那么咱们来说一下啊,它 render 的 原理, 不着急哈,我们这个原理讲完了过后,你再去说它应用场景我们会用到什么样的地方,到时候我可以给大家写个例子出来啊。好, render 的 时候怎么来渲染的?它分为第一次和后续, 因为你可能后边不停的调这个文档吧,你看我们的代码里边是不是每隔一段时间调了个文档,他这个文档还是就在调他的文档,对吧?文档会反复的调用,我如何来保证不要重复渲染呢? 啊?看这逻辑啊。首先第一个问题,他如何来区分第一次还是后续?这个事情太简单了,哪怕就在里边做个印刷表格都可以,一个容器他就对应他渲染了几次,对吧?如果说这个容器里边没有在表格里出现的话,说明他从来没被渲染过,那就是第一次搞定了。第一件事通过 key 啊,之前也不是有 key 吗?对吧?那么这个内容传进去,它可以通过内容拿到一个 key, 通过 key 去得到什么呢?得到这个 value, 这个 value 里边有什么呢?是不是有文档片段?那个纯静态的这个东西是不是文档片段好?通过 key 拿到文档片段,然后复制到容器中就完事了,容器的中里边就会有静态内容了,也就说最开始的时候它应该是这个样子的, 拿到了文档片段就是这一部分加上这一部分啊,这里边要带个标记啊,就没有这一部分,这一部分是没有的啊。然后把这个内容呢?加到哪?加到容器里边去就完事了啊,直接加进去就完事了,那现在容器里边就有东西了啊。好的,第一步好,第二步好,我都讲到这了,朋友们能不能想到第二步在做啥?第二步就是便利更新函数,就是把这个数值来一个 for 循环,便利一下, 依次调用函数即可,没了,因为这些函数就对应到一,然后传一个值一,因为他们的数值都是完全一样的, 数量都完全一样的。一对应的呀,标记对应的是动态内容,而且标记同时对应的是函数,数字的长度都是一样的,一次调就完事了。函数一,然后来个函数二,一调,它就更新了这个位置。所以说人这个渲染原理,第一次就完事了,就渲染出来了。 那么后续你要再去调那个文档渲染的时候,他怎么做呢?他知道这不是你的第一次渲染了,因此他第一步就不做了,他做啥呢?就做一件事就行了。你后续渲染的时候是不是会得到一些新的值啊?你看我这个值改变过后再去调渲染,那渲染过后是不是会得到一个新的值?那这个值跟之前是不是不一样?所以说呢,后续的做法就是 对比新旧两个数组。也应该说,那这里不还是在地府吗?哥们,这里的地府多简单啊,就对比数组就完事了,一个小学生都写的出来,就一个负循环, 这个数字的这一项对等不等于这个数字的另一项,就用一个严格相等就完事了。他就不会像 u r reaction 那 种,他要去对比标签,还要去对比 k 值,还要去对比属性。哇,对比一大堆,没有那些乱七八糟的事,就是两个数字对比好一样的,不管不一样的,调用对应函数就完事。 如果你听懂的话,你现在脑袋里把代码都写出来了,一个负循环是吧?输入到 d i 项等,等于就输入到 d i 项,不相等的话,就调用函数 i, 把这个行的值 i 传进去,完了,这是他的核心原理,这就是他为什么写出来如此清亮的原因。就这么点代码,我看我都惊呆了。好,那么接下来就是问题来了,这个玩意那么牛逼,他干嘛用的呢? 实际上呢,这个呢,它是来自于一个框架的一个纸包。什么框架呢?叫做 list 框架,而 list 框架用来干嘛的呢?用来封装 web component 的。 它之所以没有去选择 view 和 write 那 种虚拟 dom 啊,什么 def 的 那种方式,没有去绕远路,因为它要解决的问题是 web components 的 问题, 而 web components 是 没有那些框架的运行环境的,它就是原生机制,它就巧妙地利用了动态模板字母串,再达到了精准更新的渲染。那么这一块是不是就要对接我们上一节课讲的 web components 的 内容了啊?不过呢,这个 list 框架啊,时间关系,我这两天是没有时间给同学们介绍的, 但是我会介绍这个 list html 这个核心库会如何来改变我们开发 web components? 其实你懂了这个过后,你后边再去看 list 框架,它的原理你一眼秒懂。好,于是接下来我们需要改造上一节课我们预留的 web components 的 代码。 好看一下我们上节课的代码啊,我,上节代码在这,我上节课代码有啥问题呢?问题太多了,就是我们现在把那个主键的模板写到哪的呢?写到 tab 页面里边的。那显然不合适啊,我们希望把这个模板呢,像那个 react 一 样聚合到主键里边,对吧?聚合到这个 doe space 这个主键里边?不太懂为什么 componenet 的 东西啊,可以去看一看我们上节课的东西啊,我希望把它聚合在主键里边,但在主键里边会不会遇到这种反复渲染的问题,对吧?属性变了,数据变了,是不是会引发重复渲染? 同步渲染的时候,为了尽量的提升效率,我是不是要做精准更新,而目前我做精准更新的方式,我是通过原生动物的方式去做的,有点麻烦,那现在既然这个 let html 它能够解决这样的问题,我是不是可以利用它来做到精准更新,我就不用去反复的去操作这个原生动物了,对不对?所以说我们来改造一下啊,我们这里呢,去搭建一个位置工程, 好来一个 implement create 啊, which, 然后写上一个 my components 吧,工程名字好,框架选择,我们现在不用任何框架啊,就用 van lina 啊,就是原声的好。 g s, 你 们要上 t s, 你 们自己上,要不要用?使用 load 档啊,没必要,要不要启动,先不启动吧。好,我们进去啊 my components, 然后安装一下这个列子,哎,听见没有? 好了,那么进入到这工程,稍微把一些东西不要了,然后没点 g s 里面啥都不要了啊, 我们这里呢,直接去新建一个文件啊,就是我们的 web 主键叫做 doe switch 啊,这个主键一会儿呢,我们把主键代码就写到这里边,然后 mid 点 js 里边呢,直接去导入主键就可以了啊。好,接下来我们进入到这个 doe switch 点 js, 我 希望可以达成一个什么样的效果呢?就是我这个主键里边啊,比方说我这样写啊, doe switch extends element 啊,这是上节课的知识啊, 我希望我这个主键里边不要去写什么乱七八糟的生命周期函数啊,跟我就没啥关系。我就希望呢,我写这么一个 run 的 函数,就类似于 write 那 种,写这个 run 的 函数我直接就返回类似于 gs 叉那种东西。你给我炫耀你不就完了吗?那数据改变了,你自动给我炫耀不就完了吗? 那我就希望写成这种,那这里能写 excel 写的是不行的,我又不是 write 环境,但是我可以用什么呢?可以用那个 excel, html 啊,对吧?是不是可以用这个?它里边是不是提供了一个 html, 对 不对?用它来写呗。好,我这里就写了 html。 好, 咱在这里是不是就可以把这个模板,我们刚才的模板里边这一坨给它弄过来,对吧?包括这个 style 啊,包括这些东西就全部给它弄过来了。 好复制一下啊,直接给他弄过来啊。顺便说一下,这里有个代码着色啊,这个编辑器里边你们那边可能没有代码着色啊,代码着色呢,需要安装一个插件哈,插件的名字呢?就叫做 lit。 哎,听没有啊,就这个,把这个插件安装一下啊,安装一下它就代码着色了。 好,我这个主键我就觉得写完了。哎,那如果说这里边有一些,呃数据,比方说这个这个地方啊,不是内样式要变化吗?对不对?根据当前的状态来进行变化来内样式,是不是?哎,那个数据怎么办呢?就是我们就可以参考那个 rest 的 做法吧,比方说我们这里呢,数据不有个 state 吗?对不对?还有属性啊,一起来吧, 好,弄过来啊。属性和数据弄过来。好,数据在这里呢,我们是不是可以在这里去拼接?因为它是一个模板字母串吗?所以说它是可以拼接的。 this state checked, 那 我就给你加上一个 checked 的 样式,否则的话就它就不加不就完了吗?然后在属性变化的时候要处理一下,对吧?属性变化的时候把它复制过来, 之前的属性变化的勾子函数。属性变化的时候我要干嘛呢?我判断一下啊,如果说这个 name 等于什么呢?等于 default checked, 就是 我们之前的啊,写到这里的这个属性啊, default checked, 如果说是这个属性的变化的话,我就干嘛?我就把当前的 state 的 checked 等于啥?等于六 y 六, 对吧?好,下面就不要了。好,最后呢,我来定义这个附件, custom elements define do e switch。 好, 这个 web 附件就定义好了。那定义好了过后基本上就可以使用了呀。 那我们把之前的页面上的东西直接复制粘贴过来,就把这个东西直接复制,然后粘贴到我们这个页面上来,直接用就完事了。这个 app 都不要了啊,直接粘过来用就完事了。你看这样子的话,我们在页面上就不用去写模板了,模板就可以聚合到哪呢?就可以聚合到我们的主键里面去了。好,咱们看一下效果,你觉得能生效吗? 腾讯小马局的,人品的好坏啊,运行出来还有东西啊,啥东西?没有啊,哪有东西啊?这啥玩意?这是?他都不认识,为啥没东西?我们,首先我问同学们,主键我们注册了没?注册了,写了没?写了,但是这个文档是啥玩意,他能看懂吗?完全看不懂这个文档是啥玩意,他是有自己的生命周期勾制函数的,他没有这个文档, 所以说根据你们的开发经验,这一块该怎么来处理?我就想做成这个样子,但是他确实又不认识 render, 那 该怎么来处理?是不是中间夹一层就完事了?这个是子类,这个是父类,我在子类和父类之间再夹一层,夹一个叫做 web components 吧,或者叫 doe component 吧, 加一个赋类就完事了呗。好,我就去写一个啊, doe components。 那 么以后呢?我们去开发 web 主键都可以基于这个 doe components 去开发,因为你们以后要做 web components 开发的话,肯定是要用一些框架的,目前知名度最高的就是这个例子框架了,就是你把这两篇东西听完了以后,以后再去学这个例子框架就非常简单了,他也是这么做的,只是他有更多的细节而已。 好,那么现在我们来写这个 doe components 啊,导出一个 class doe components, 还有继承字, element, elements。 好, 那么这边呢?我们就直接导出进来就行了啊, doe components。 好, 接下来压力就给到这边了,这边咋玩呢? 我们首先想一想啊,一步步来吧。最开始的时候是不是要调用一次 render? 什么时候调用?是不是在组建挂载的时候调用?那是不是要用这个勾子函数叫 connected call back, 而这个钩子函数里面要干嘛呢?是不是就要调用子类的这个 render 函数,拿到它要渲染的东西,对吧?那就调用这个 render, 打了东西过后干嘛? 是不是就 render 导入那个列成 html 里面的 render? 其实这里呢,我就顺便做一件事吧,把它的 html 直接放到属性里边,这样子的子类用起来方便一点,因为子类的话,你看每次都要去导入这个列成 html, 没必要啊。那直接通过这个 this html 就 可以了, 不是,这样用起来更加方便一点,没问题了,好到复制里边来啊。好,那么接下来我们拿到它的渲染内容过后,我们干嘛呢?我们就 render 内容传进去。容器是谁呢?容器就是自己呗,自己就是容器,好保存,你看一下能不能渲染出来呢?你看不就渲染出来了吗?有没有渲染出来?渲染出来了, 而且它默认是打开的,是吧?那么默认就打开的,那如果说默认是关闭的呢?我们到 atm 里边啊,把它变成 force, 默认是关闭的,好保存,你看一下刷新是不是默认是关闭的。 好了,那么接下来还有新的问题出现了,那事件咋办?以前我们通过原生的方式去注册事件的,是吧?那现在的事件咋注册呢?不用担心哈,这个东西还是挺强大的,他同时支持事件,其实你都能想得到,他为什么能够支持事件,为什么能支持呢? 因为他那个动物元素结构的片段都出来了呀,他可以拿到任何想要的动物,那去注册就完事了啊。因此呢,他是支持这样的语法的,就是在这个 diy 里边直接写事件没问题的 啊。比方说我在这里加个事件啊,他是用这种格式写的啊,那后边就直接写事件,跟那个 write 写法差不多啊,怎么把它变成一个拼接?这里就写事件函数 啊,事件函数的话,我们按照那个 write 的 书写习惯吧,单独开个函数叫做 handle click 啊,单独开个函数,然后呢,这边就来啊, this handle click, 注意要绑定 this 啊,这个东西不用解释吧,为什么要绑定 this? 学过 write 的 同学应该都清楚啊。好了,这里呢,我们就在事件里面了,给大家先打印吧,打印一个,一二三,看一下,保存 控制台,点击是不是一二三就出来了。好,事件里边我们可以做啥?是不是可以改变状态? this state check 相反,对不对?是不是改变状态就完事了?好,保存,你看一下呢,但是你会发现状态是变了,但是有没有重新渲染啊?它并没有重新渲染, 为啥呢?因为这个 web components 啊,它是没有什么响应式的,响应式是那些乱七八糟的其他库搞出来的。那你能不能做成响应式的?比如说像 vivo 的 样子,数据一变,界面就自动跟着变,能不能做出来呢?那肯定可以啊,你去用一些响应式库不就完了吗?那响应式库有一大堆啊, p, rex 或者是就用 u 那 个响应式库也可以啊,还有这个 s, g s, 对 吧?也是一个知名的非常轻量级的响应式库。都可以啊,随便你爱用哪个用哪个,我们就用 u 吧,我们用 u u 的 响应式库,不代表我用了 u 哈,那是两码事啊,因为它是独立的,那这一块又会涉及到 u 的 响应式原理的啊,你不要认为这个响应式跟 u 是 绑在一起的,不绑在一起啊, 你好好去把咱们这个课好好看一下 u 三元码,它里边整个课程就是从零开始写一套完整的 u 响应式系统出来,这套系统跟 u 一 毛钱关系没有,它就是一个独立的响应式系统,数据一遍,函数重新运行。响应式的本质就是数据一遍,函数重新运行,它到底是怎么做到的?去看一下这一课课程啊, 你把这个课程要看完了,那么 u 里边的所有跟响应式系统相关的东西你全清出来以后,遇到的所有面试题,所有的 bug, 所有的调试都是轻而易举,这也是咱们福利课程之一啊,反正你只要能够找到咱们的话,这些大量的优质课程 都是能够领取到的哈。领取方式再说一次,在咱们账号主页点击头像进入账号主页,点击提示来找咱们领取哈。好,这里呢,我们就先停止啊,然后安装一个 ui 的 响应式库, ui reactive 吧,就这个好,安装完了,然后呢我们再启动起来。好,接下来我们有响应式了,过后呢,我们在这个赋类里边就可以这样操作了,你看 我导入 ui reactive 里边不是有个 react, 那 么后面就熟悉了,是不是 is reactive, 对 吧?可以判断一个东西是不是响应式的,那么这里呢,我们可以怎么做呢?我就可以这样, 如果在最开始的时候判断一下当前的 state 是 不是响应式,如果当前的 state 不是 响应式的话,我就把它变成响应式,这个逻辑没问题吧?好, 它变响应式数据了,然后呢,这下面是不是在渲染?我现在要做的事情不就是把响应式数据跟渲染挂钩吗?因为渲染的过程中有可能会用到这个数据,那这个数据将来变化过后呢?这个渲染要重新运行,所以呢,我就把这两行代码呢放到 effect 里边啊,这也导入一个 effect, 这些函数啊,都在我们刚才说那个课程里边,都是手写过的,一定要去看哈。好,来一个 effect, 把这两行代码包进去 就完事了。把这里打印一次 render 吧,好,保存。你看一下最开始的时候是不是渲染了一次,一改变,这个是不是又重新渲染了?为啥呢?因为响应式关联起来了呀,一改变数据,这里的数据一变,那么就会触发这里的 excel 重新执行。搞不清楚原理啊,看课去啊。好,点击点击点击。你看事件也没问题了, 它本身还可以监听,这里也是一样的。把它变成 true, 你 看啊,它现在已经是 true 了,是吧?把它变成 force, 你 看,变回去了,变成 true 是 不是也变回去了?为什么它强势建立起来了呀?因为你改变了属性,它会运行什么?运行这个回调,而这个回调你在干嘛?改变了数据,而这个数据一变,是不是 the random effect 又要重新运行?是一样的道理,就可以灵活运用了,我们以前学过的东西。 好的,现在我们封装完了没?其实还没有啊,还有这么三个问题,这个问题到现在都还是没有解决的啊, 什么叫样式隔离呢?比方说我这个主键里边用了一些元素,对吧? switch 啊,像什么 switch core 啊?比方说吧,我就在页面上去整一个那样式, switch core, 给它来一个背景颜色为黑色,你保存看一下啊,这里的有一个优先级啊,我就来一个 body 下边的 switch core, 把它变成黑色啊,或者是把它变成 important, 把它优先级给他提高保存,你看一下它就变黑色了,也就是外边那样式,它会影响到这个主键里边,这显得是不合适的,因为这个样式就没有隔离了。 我们之前说过, web component 的 很重要的作用就是它能实现样式隔离,里边的样式不会影响外边,外边的样式不会影响里边,但是现在样式是没有隔离的,对吧?这是第一个问题没解决好,第二个问题呢是插槽的问题,插槽的问题呢是在这, 比如这里两个地方,我万一要想写别的文字呢?或者是我根本就没有文字,或者是我的东西不是文字,是图标,那又怎么弄呢?它可能需要通过插槽来传递,对吧?那么第二个插槽怎么传递?第三个呢?是 主件事件怎么办?比方说我在外边在用这个主件的时候,我希望监听这个主件的变化,比方说我希望做成了这么一个事件啊,叫做 on 欠起事件啊,假设啊,我有这么一个事件,哎,我希望他变化的时候呢,给我扔出来这个事件,我在外边要做一些其他处理,那这个东西又怎么弄好?那么这三个问题呢?我们就到下节课讲。

好,那接下来我们来讲解一下十六题到三十题的这样一个解析啊。首先我们来看十六题,首先 code 应该一步,然后到达这个载具,然后从载具出发执行到第一个道具,第二个道具,第三个道具,然后 code 执行到这个位置。我们来分析一下啊。 首先来看一下,这是一步,没有问题,这是五步,五步,五步,这是两步,我们来看一下啊。首先 good 应该前进一步,然后上载具,载具的话接下来就要重复执行了,载具需要执行五步,那么一共三个,要重复执行三次,然后左转,右转, 然后右转,然后 coder, 然后再前进两步。但是这里有一个错误的点是什么呢?最后一个循环,它应该是右转,那么我们的载距应该是面向这个方向,如果说想让 coder 前进的话,它需要转到这个方向来,所以说在这个地方我们要再加一个左转来尝试一下, 我们来看一下第十七关啊,第十七关我们首先调整一下视角,然后来分析一下它的路径,然后前进,右前进,右 前进。哟,他是这样的,我们来找一下规律,首先前进两步,右转两步,前进两步,右转两步,然后同样前进两步,右转两步。 我们来编辑一下程序,已经重复执行了一次,两次,三次,三次,那么 code 属于他要先转,面向这边,所以说先要左转,直行两步,然后到这个位置,他要右转, 我想再直行两步来尝试一下。好,没问题,接下来我们看第十八关, 第十八关我们来找一下规律啊。首先让 follower 前进一步,前进一步到这个企鹅的位置,然后从这个企鹅这样每一次重复这个动作,每一次重复这个动作,大家看一下啊,直行, 然后这样的前进一步,然后再右转两步,他是这样的一个规律啊,首先我们让他前进一步,然后重复执行 一次,两次,三次,所以重复执行三次,然后 code 需要先怎么样?嗯,左转,然后再前进一步,然后再右转,前进两步,那没问题,我们看一下。 好,接下来我们来看一下第十九关。第十九关我们先分析一下路径,前进一二三三步,然后右转两步,前进三步,右转两步,前进三步,右转两步,然后再抵达最后一个道具转向规律,我们说三二 三二三二,这个地方是两。我们来看一下啊,首先重置几次?一次,两次,三次, 重执行三次,然后我们用 coder 前进三步,然后往这个方向转,我们是右转,右转一步,两步之后再继续左转,我们来看一下啊,三二三二三二。现在到已经到这个位置了,但是他到这个位置后,他左转,左转的方向应该是这边,对不对?所以说我们要让这个 coder 后退,因为他面向这边,然后后退就知道了,两步没问题。接下来我们来看一下第二十关。第二十关是这样的啊,我们先分析一下他这个路径,从中心点出发做, 他是这样的啊,一二三四四四。每一次走四步,比如说先向左转,然后前进四步,那么他还需要再退回这个位置,所以说我们要倒退四步, 还是要到这个位置,然后再次的左转,然后前进四步,后退,然后他先面向这边,然后再次的左转,这样的重置型啊,然后我们一共四个点看一下。 好,接下来我们来看一下第二十一关,这关就是比较简单的,我们首先可以有两种方式啊,第一种方式让人物先走到这里,第二种方式呢,就是让载具直接到这位置等我们,然后我们采用一下第二种方式,载具前进一二三四四步, 然后他需要面向我们这个道具,那是右转,然后让人物直接走上载具一二三,所以多走一步,走上载具,人物需要走四步,然后载具继续前进,从这个地方出发,一二三四四步,直接到 我来验证一下成功没问题。大家注意啊,并不是每一个关卡都要符合他一模一样的就要求的代码啊,你只可以少于,但是不可以多于少于,成功也是 ok 的, 继续下一题,二十二题,二十二题,我们来看一下啊, 第二十二题的话,我们直接做就可以了啊,首先我们来分析一下它的路径,前进,这就可以不用循环了啊,二三四五五,这是五,这是五, 一二三四五,没问题啊,前进五步,然后左转,如果用循环的话,他会步数会多,然后继续再左转五步到这位置,然后再左转,继续在五, ok 了,应该是 好,成功了,没问题,同样也是要求七个代码,但我们六个代码就完成了。好,这个的话我们就需要用循环了,我们可以这样啊,大家分析一下。首先从这个地方出发,直行三步,两步,然后到这个位置,然后再到这个位置,这是重复执行一次,告诉大家为什么要这样去做啊? 大家可以看一下一二三,他要从这个起点,其实这个地方他是多出来的嘛,所以说我们要一分为二嘛。从这到这,然后我们试着做一下,首先扣的直行三步,然后再右转,然后扣的再直行两步,然后再右转, 然后再直行三步到这个位置,然后再左转,再直行一二、三四四步,然后要面向这个方向,所以说我们要左转,一分为二的话,所以说我们要重复直行两次,尝试一下, 好,没问题了,接下来我们来做一下第二十四题, 每一次一定要把这个视角调好啊,这个稍微有点大,前进两步,两步,两步,两步,到这个位置来看一下啊,因为我们要重复执行,这是最基础的一次, 首先放个重复执行,然后前进两步,然后再前进两步,然后再右转来运行一下,看试一下前进两步,然后左转到这个位置 到这个位置,然后右转,前进两步,然后再左转。还需要前进两步到这个位置,然后再左转,那我们一共是一次,两次,三次试一下, 这个地方应该是右转。 好,没问题。接下来我们来看一下第二十五题, 你要调整好一个最佳的视角,然后前进,先换一下路径,前进一步,然后这里是一步、两步,这是两步,然后这里变成三步、三步,然后四步、四步。到这里我们来标注一下,首先一步、一步、两步、 两步、三步、三步、四步、四步,我们会发现他的这个步数随着道具的收集会逐渐的增加,对不对?所以说我们先建立一个变量基础的,就是一重复执行,一次、两次,三次、四次。 然后我们首先要前进一步,因为变量数值是一嘛,然后前进完了之后,他需要左转, 左转呢?继续再前进这个原有变量的这个数字一步,然后走到这里的话,他有应该是转方向了。右转,右转之后继续前进,由原来的一变成了二,所以说我们要将变量给它做一个运算,由变量原来的一再增加一就变成了二,来试一下 每一次变量都会逐渐的增加。好,没问题。第二十五题,我们来看一下第二十六题, 还是让我们先来找一下规律,一二三四五。我们会发现它这次的规律变成了一步、两步,三步,四步、五步。 那么同样也是初时给它设置一个最基础的变量是一,然后重复执行,做了一共五次。首先它应该是左转,然后前进变量的这个数字, 然后再左转,对不对?然后再前进两步,那么这个运算我们就可以给他由原来的一变成了二,所以说每一次还是递增一,来试一下。 好好,接下来我们来看一下第二十七题,分析一下啊。前进一步到这里,然后两步,两步,三步,四步,四步,然后五步,我们来找一下规律, 一二二三,这里也是啊,一二三 四四,这里是五。首先我们要设一个变量为初始的值为一,然后重复执行一次,两次,三次,四次,四次。 然后首先他要往哪个方向转?右转变量的步伐,然后我们需要让他再往左边旋转,左边旋转由原来的一变成了二。所以说我们要将变量的值做一个运算, 由原来的数量再加上一,然后再前进变量,这样的话前进到这二,然后这个它总变量已经变成二了,然后再前进二到这个位置,然后左转左转,由原来的二变成了三,所以说再加一,我们来运行一下。 好好,接下来我们来看一下第二十八关。首先我们来分析一下他这个路径啊,首先需要让这个人物前进两步,上车,然后走到这里,然后左转载具,载具再右转到这个位置到这个位置,然后再到这个位置,然后再直行,再到这个位置, 我们来标注一下,首先两步上车没问题,三步到这,然后左转这是两步,然后再前进一二三四变成了四,这地方还是二,因为一二三四五变成了五 还是二。首先并且他上车,他需要两步上车没有问题。然后我们要给这个载具做一个变量,因为我们发现载具在前进的时候,由原来的三变成四,四又变成五,每次递增是一,我们设个最基础的三,重复执行几次,一次,两次,三次。 那么需要载具前进三步,也就是我们设变量的位置,到达这个位置的时候,他需要左转载具,左转,左转之后我们不需要让载具的车头面向道具,让载具的车头面向他要行驶的方向,所以说 载具要直行二这个位置。二,这个为什么要写二呢?因为这个地方是二,这个地方是二,它是固定的数值啊。然后右转就是车头不需要面向道具, 然后我们可以让人物后退一步,然后再前进一步,这样的话他就下车之后,直到道具又重新回到了车上,那么他的变量由三继续前进变成了四,所以说我们要给这个变量设一个值,这个计算的方式由原来的 加上一就 ok 了。然后我们再继续前进一步,是因为他到这个地方停了,跳出循环了,我们就要前进一步,看一下这个代码,没问题。 好,我们接下来来看一下第二十九题,同样也是找一个最佳的位置啊。先分析一下 code 在 陆地上的行走轨迹,首先一二三四一二三四五一二三四五,这个会变成六一二三四五六。 那么每一次它其实递增的都是一有基础的四步前进,四步,总共进行三次 四步,然后我们要需要让它转弯右转,然后我们需要给这个变量进行一个计算,因为他每一次其实递增的都是一嘛,所以说我们要让这个变量由原来的 四再加上一变成五,由原来的五再加上一变成现在的六。所以这是人物的行走轨迹啊,最终它是到这个位置,它是右转面向了我们这个道具。那么接下来我们要做这个载具,同样我们给它画一下路径, 这个地方他是行走了一步,这个地方行走两步,这个地方他行走了一二三四四步。那么这个规律是怎么样的?一二四一乘二得二,这块两步了,二乘二得四,这是四步了,这是乘法关系,所以说我们先给他设为一个一,因为要初十走,然后重复执行,同样是三次,先让这个车头转过来,然后右转, 右转之后我们需要让他前进,那么这个变量我们要给他做一个乘法的计算,乘以二, 那么现在他就已经走到这了,因为你看大家看一下啊,第一步走到一,走到这,然后右转面向这边,他需要走两步,所以说一乘二得二,走到这,然后再右转,然后就要走四步,由原来的变量二乘以二得四步走到这,那么这个时候我们需要先吃到他,我们刚刚已经说了,人物这一部分已经转到这边了,那么我们需要同样也让车转到这边, 所以说车以后同样再来一个右转,人物在前进一二三三步来运行一下,没问题。接下来我们看一下最后一道题, 各位老铁们来看一下啊。首先一二二三三四四,这应该是一二三四五,标注一下啊,五四四三 三,然后这里是二二,这里是一,我们来看一下啊,首先我们要让出式的变量设为一,可以这样设啊, 设为二吧,这应该是二,然后呢,重复执行,一次,两次,三次,四次,四次。那我们再来看一下啊,为什么要设为二呢?因为一只前进的一步嘛,所以说我们要前进,让它怎么样呢?让变量的二 去减一,这样的话每次减一,然后再左转,左转之后再前进这个变量的数量,再前进变量的数量,然后前进二,之后需要右转 再前进二吗?对不对?然后我们这个这个地方可以设为一个这样的啊,写完了之后给大家讲一下,它的逻辑是这样的, 因为由原来的二不变成了三吗?那么这个地方为什么只减了一次一呢?前进一步,对吧?二减一,一步前进完了之后,然后左转,左转,然后转两步,两步之后再右转,右转,他原来的 二变成了加一,之后变成了三,但这个地方只需要转两步,所以说这个代码三又减去一,然后两步,然后再左转,所以说又减去了。我来运行一下试一下。 好,没问题,这个就是我们小学地理组的三十道关卡。

给大家讲一下咱们这个长春市第五届青少年创业大赛这个全程,这个题我已经做过一遍了,我们从第一题开始吧。呃,这里的大家都是可以设置一下这个画质设置高一点,因为第一点他这个比较猛,看不太清楚。 嗯,他做题前几步大家都比较简单,我就简单略过啊,这个简单来说就是通过这个主角的前进移动去控制这些角色的移动啊,然后就吃掉所有的标记,拿到所有的分数啊。 那我们也同时也可以设置这个速度啊,增加我们答题时间。答题速度这个速度还是比较快,设为光速区也没有那么快,大家都能看到啊。 forward 就是 前进啊, left 和 right 就是 左转和右转,这个都是前几道题,都是比较简单的, 前几道题我们比较简单,我们就快速略过。 嗯,这里是第一道涉及到载具的一个题目啊,我们简单看一下。嗯,载具这个题目还是比较有意思的,它这里分为角色分为这两部分啊,一个是主角部分啊,一个是角色部分,一个是载具部分。这个载具部分大家要注意啊,载具部分是可以独立移动的,但载具部分并不能迟到,这个标记载具经过标记是没有意义的,没有意义的不会迟到。这个得分 角色必须在载具上面,有时候得分必须要是角色能吃到的,那载具的作用是让角色可以通过一些这个角色自己单独不能通过的部分啊。比如说这道题,我们就可以先上到载具,然后吃到标点,右转到这个位置,让载具去下车啊,让让角色这个下去,下到载具就可以, 嗯,还是比较简单的啊,简单来说就是把我们的执行部分分成了两部分啊,由角色一部分执行和载具一部分执行啊,这道题就是比较典型的,我们分为两部分啊,载具啊,这是 code for for word 和这个 car for word 啊, 我们可以让这个载具遥控,第这个第一步的时候,我们遥控载具前进一步啊,让载具在这里等我们,然后同时将载具左转,我们角色就可以直接通过载具作为,将载具作为跳板,直接跳到跳过去啊,直接一步到位。那所以我们看我们这个 flower 舞啊,一二三四五,我们可以直接走过去的,当我们走到这一步的时候,载具是可以往这个方向一转, 这里要注意的点就是载具下车的时候,当角色从载具上下车, b 只能从前方和后方去下车,不能从左和右去下车啊。比如说角色在这个载具是没有办法转向的,我们只能转载具的方向,我们将载具向左移动,向左转,我们可以前进,我们从前面下车,后退,我们可以从后面下车啊,这个角色也是可以前进和后退的。 下一题 下一题也是一样的,我们上载具,然后去上有载具帮我们运载到指定区。那如果我们以最正常的方式来看的话,我们大概率会选择上车,然后一直走,走到这里,然后当角色上到这个台上,向这个方向,再向这个方向,然后载具移动载具到这个位置 啊,载具转向这个方向之后,我们移步过来,吃掉这个标记啊,但是这个会有一定的跃进啊,我们的程序会有一定的超越,那我们看一下新的一个选择,我们把速度降下来, 我们可以走到这个方向,然后后退去吃掉这个,再往前进,再来这边吃的话啊,这样和能和我们最开始的想法有所冲突啊。但是我们要意识到问题就是这个步数会大量的减少啊,我们当我们走到这个位置的时候, 如果我后退再前进,我的整个步骤实际上是多走了多少?这个部分是走了两次的,对吧?这个部分走了两次,那这个部分只有八次的重复,对吧?那这次的话一二三来往复只有六次的重复, 所以我们要减少这个走的步数,越少的步数越符合,这个当我们的步数不符合的时候,也是会减到我们一定分数的。 尽量选择短的路途来执行尽量选择短的路途来执行。 这道题也是一样的啊,我们先去上车,然后将车走到这个分界点,然后我们去转向啊,我们去转向,将车向左转动,然后去倒退车啊,倒退车,让车倒退,向后吃掉这个标记点,然后再前进,回到重新回到这个点,然后控制什么 啊?然后控制我们这个人物再去吃这个点啊,他们俩谁先吃谁不吃都无所谓。吃好之后,然后所有的这两个标点全部吃到,车再去向右转向,再去执行下一个任务啊,我们看一下, 这里要注意的就是我们当刚才上车的时候,大家能看到我们这个载具的方向,实际上是倒着是倒退的啊,是倒退的,我们再看一下我们这个载具的方向是倒退的,其实对正对着我们这个角色的,对吧?正对着我们这个角色的,所以当我们上车的时候,载具是直接翻过来会撞到墙上,对吧?所以我们是一定是后退啊,所以要注时刻注意这个载具出发的一个位置。 我们看下一道题,这道题虽然没有载具,但是这道题依旧是一个呃容易踩坑的地方,我们要看我们这个,这是一个环形,也就是说当我们走到这个位置的时候,当我们角色向前走到这个位置分界点的时候,我们面临两条路的选择,我是从左侧路还是从右侧的去走, 这样我们如何去选择?其实走哪一侧我们一定是都可以吃到所有标记点的,那还是就像我刚才说的,一定要选择最短的路来走,如果我们选择右侧的路来走,你会发现这一侧这几个位置, 当我们在离我们迟到一个标记点的时候,一二三四五有五步,加快转向的话有六步操作需要去执行,对吧?但如果我迟到左侧的标记点的话,我只需要三个格,我就可以迟到, 对吧?那么如果我从右侧出发的时候,我一定要回到这个点才作为结束点,也就是说只有这一个格我是没有走的,这个环形只有这一个格我是没有踏足的,对吧? 但如果我从左侧开始去走的话,那么右侧这几个格啊,右侧这五格我都是没有走的,那这样大大节省了我们的步数,所以当我们去选择路线的时候有岔口,我们选择路线的时候一定要选择短的那一条,我们可以自己在头脑中模拟一下,走哪一个侧,走哪一侧的路更少啊,这个步数更少。 这种环形呢,我们是不需要考虑代码数量的,因为这种环形的代码数量几乎都是一样的,我们只需要考虑最短的那个路, 这道也是一样的。这道题就没有过多的争议了,因为这道题只有一条路啊,你只有一条路去走,所以没有问题,我们只要沿着路径走,一直走到最后一个位置就可以了。只需要注意一个问题,就是我们这个 forward 的 数量啊,绝对不能是超过去,超过去我们踩了不能走的地方也会失败。 来看这道题啊,这道题有个这道题也是一样的,也就说我们先要选择我们要走的路,我们先要选择哪一个方向, 这个他我们出生在两个点中间的时候,一定有一个点的位置是我们需要走两遍的,就是前进和后退,后退或者前进都是我们需要走两遍的,那一定就选择短的那一侧走两遍,如果选择这一侧走两遍,会就会比这一侧多走两步,那么这个步数可能就超了, 所以一定选择短的这一侧来就行,一定选择短的这一侧来就行啊,注意看,一定是短的这一侧,那我这个多走两遍,一定比这个少少了几步,对吧?那个就是我代码中 出现了一个情况,就是这个理由出现了复赛啊,这里要注意这个倒退和前进,他俩其实并不是绝对对立的,我们是可以通过前进负步数完成倒退效果的啊,这个在后边,我们在做等比数列的时候,有大量的使用这种负数的步数来节省我们代码数量。 这个题目也是一样的,我们先去让车转过来,然后我们人跨过去这一块也是其实我们在踏上车的时候就已经产生了第一个选项,我是在这里直接吃到这个标记点,然后让车带着我来这里吃这个标记点,再吃这个标记点,这样选择还是我直接跨过去绕一圈再走过来, 但哪一个标记点更少了,哪一个标记点的步数更少了?其实如果你正常来看的话,标记点步数更少了,应该是我坐车啊,我一共吃到这个标记点,退回来,再往这个方向走,再吃标记点再退回来,那你说我的步数值踏足了几个方格?一个、两个、三四五六七八八个方格,对吧?那如果我是绕一圈的话,车走的步数其实也算我的步数,对不对? 但是我们要考虑另一个问题,就是代码的数量,当我们把角色取值的时候,我可以走一二三三个格,对吧? 那如果我是前进再后退的话,这个格我就需要走一步、两步、三步,再加上转向四步了,有四行代码要写,对不对?那么这样我们的代码数量就很容易超过这个二十五行代码,我们后面还有很多的路要走,很多的路要走,所以我们的代码数量一定要能省则省,所以有的时候我们就要选择代码数量和步数数量的一个平衡啊。 那么这道题我们只需要去遥控这个车向左转,我们可以一步走到这个位置,再走到这,再回到这里,要注意啊,我们走到这个位置以后,不要着急吃这个点,因为如果吃这个点还需要浪费银行代码去返回一,但实际上我只需要把车遥控到哪个位置,我们把车遥控到这个位置, 我们再去一步上车,我就可以节省一次返回一,直接返回二,就直接走到车上了,然后车再向前移动,我们再吃到这个标记点,这样是最省代码步数的啊, 在这里等待,等车过来,一定不要说我先把这个标记点吃了,我再等车过来,这是不行的,我们的代码数量会多一次,多一次我们就很容易拿不到三星啊,拿不到满的评分。 这道题也是一样的,也是当我们走上车的时候,要去选择一个路数,我们是从左面走还是从右边走啊?这也是我们要考虑一个问题,同样和刚才那个一岔路就是左右两个岔路口的环线是一样的,这个虽然这个也是一道环线啊,这也是一道环线,只不过这个环线是载具走的环线而已。 那么这个环线我们要考虑的就是我是当把这个当做最后一个点,还是把这个当做最后一个点?同样我们要能很清晰的看到一个问题,如果我把它当做最后一个点,我从这一侧出发,载具是需要掉头的,那这样就浪费了我的代码数量,同时这几个冰块位置也是多走的路,对吧?那如果我选择这个作为标记点的话,我上车可以直接走 啊,我上车就可以直接走,我已经不需要掉头了,节省代码数量。另一个就是我们的步数也能够少,走这四个冰块的步数是非常合适的。所以当环线出现的时候,我们只需要考虑一个问题,我是从左侧出发步数少,还是从右侧出发步数少?一定要选择步数少的,并且代码数量也比较少的。代码数量少的含义就是直线比较多啊,我走大直线比较多, 那你像这个方向,如果走了一直转弯,一直转弯,转弯数量多,就代表了我的代码数量也会增多,这里要注意啊,当角色登上载具的时候,无论角色上载具的朝向是多少,都会跟随载具的朝向。当他走上载具的时候,他的朝向一定是和载具相同的,即使他是倒着上来的,他也能回来。 这道题开始就要涉及到循环结构了,这个循环结构应该是 c r 加上比较常用的一个结构,这很明显是一个非常规律的环形图形啊。追非常规律的环形图形,我们方式有很多啊,第一种,后退、 前进、左转、后退、前进、左转,对吧?哎,都是一样的,所以我们选择哪种方式都行。但大家一看啊,很明显能知道有四个标记点,我有四个方向要转,四个路要走,所以直接后退两步,前进八步再左转就可以了。直接使用放循环,零到 四四次循环就可以了。这在使用放循环的时候,我们要注意的一个点就是我的起始值,有的时候,有的时候我可能一开头更好,因为我要对这个变量进行应用的时候,那如果不需要的话,我就零开头。没有关系的,我只需要执行次数就可以了。 这道题同样是一个放循环啊,我们先看一下这个,这里的循环结构和我们正常使用循环结构是没有什么太大区别的 啊,我们点一下这个代码就出来,当然我们自己手写也是可以的啊,手写也是可以,按照我们自己的想法来就可以。这道题的路线也是比较清晰的,很明显,我们前进,右转,前进,再左转,直接就完成了一个循环体的构造,也就说这实际上是一个什么?我们需不需要走出一个完整的 z 字形?我们是不需要走出一个完整的 z 字形,我只需要走出一个拐弯就可以了, 我只需要调整角色的朝向,我只要向前走,右转,再向前走,再左转,走完了这个步数,其他的部分都是循环的啊,都是循环的,一次次的,一次次的循环而已, 所以一定要看清楚,我们一定要找到循环的最小量啊,我们找到循环的最小步数,把它放到循环里啊,把它放到循环里,这样能大大减少我们代码的数量啊。代码的数量虽然步数是一致的,但代码数量越少,你的得分高率,效率也就越高啊,尽量要达到三分啊,尽量达到三分, 在循环的部分尽量就是找到最小最小循环量。这道题是也是一个循环,那这个循环稍稍有些特殊,它的步骤是逐渐递减的啊。在 c 加加中,我们都知道递增和递减是我们变对于循环变量一个常用的增长表达方法。 那么这道题很非常明显,我第一步要走五步,下一次我就要走四三二一,所以其实这还是一个环线,只不过这个环线的每一条边长在 逐渐的缩小。那我们直接使用循环变量里的这个 i 就 可以了,我们不需要再准备一个变量了,但是我们再准备一个变量也不是可以啊,那我直接使用循环内的变量就可以了,因为循环的作用我到了循环是没有任何问题的啊,从五一直循环到最后一个一啊,一直循环到最后一个一步,那最后我们使用 file 里面添加填写一个变量 i 就 可以了。 直接使用使用循环变量本身啊,会减少我们代码的行数要求,就能看到它的代码要求五行,其实只有四行就可以解决了啊。 这道题就是一个循环和循环结构和这个分支结构的一个嵌套的使用方式了。循环结构和分支结构的嵌套使用方式,这里能看到。你说如果这个看起来它不像一个环线,但其实它就是一个环线,只不过它走在当角色走在这个位置这儿,这儿走到这儿的时候, 他没有向左去转,他这里需要额外执行一次任务,然后再去执行五次,一个五步一个五步一个,对吧?哎,一二三四五对吧?我执行到这里的时候,我需要用 f 去做一个其他的任务,其他的点不需要了,我们只需要卡好,哎,我们只需要卡好这个做任务的节点就可以了。看,第一次我走到这个位置, 第二次循环我走到这个位置,第三次循环我走到这个位置,也就是说在第三次循环的时候,我需要额外的多做一个任务 啊,多做一个任务,那么我们第一次循环的循环变量是零,也说我们只需要判定第三次循环的循环变量是多少,第三次循环的循环变量是二,对吧?当第二次、第三次循环变量结束的时候,我已经走到这个位置了,那下一次当循环变量是三的时候,我需要额外的做一个动作,就是我走进这个岔路再退回来, 我走进岔路再退回来,重新调整角色的方向,我就可以继续完成这个环线的运行了。看一下第一步,然后第二次、 第三次到这里,我不再进行左转了,我是额外去执行,然后退回来,再去左转,再去运行就可以了。这里需要注意的点就是在第这一次的时候,在第三次啊, i 等于三的时候,其实我们是执行这次左转的啊,这次左转会对我们产生影响的,我们角色的朝向也是很重要的, 但是我为了完成这个任务,我退回来的时候,角色实际上是朝向左面的,所以我增加一次左转,重新把角色面向这个方向啊,面向这个这个标记点的方向,这样会让我的程序看起来更加的流畅,而且代码数量也少,所以我们是我们是可以去,不着急去,我们不要着急去调整角色的朝向,也许我们做完岔路口的任务回来的时候,我们朝向更有利于我们进行下一步的运行 啊。 来看下一题,这道题也是一个递增的问题啊,也是一个明显的递增问题。这次也是有载具,呃,这个载具和角色就像刚才说的,其实没有什么太大的差别啊,我们走一步上车, 然后让车去带着我们去前进,那这里我们能看到我们的标记点有几个岔路口,一个、两个,三个、四个,我们有四个岔路口,有四个岔路口,我们这个循环肯定是要四次,对吧?哎,每个岔路口都需要停一次,那同时我们也能观察到一个问题,就是每个岔路口只有一步,第二个就要两步了,三步,四步, 这个恰好和我们岔路口的数量是统一的,那非常明显了,我们还是要用到循环的变量,对吧?哎,用放循环的循环变量就可以了。一步,第一次我往前走一步,走上第一个岔路口也是走一步,对吧?那第二次的时候再走两步到第二个岔路口,再走两步到第三个岔路口,再走两步到第四个岔路口, 所以我们要在这里做前进和左转,然后叉路口深入叉路口的部分就是 i 按 u 循环变量就可以了。这里同时能看到我们没有使用 backword, 当程序没有提供给我们 backword 的 时候,我们可以去使用 forword 的 负数, forword 的 负步数啊,这个负 i 实际上就是让 i 去进行一个去反啊,就说负一啊,一的负,负一就是负一,对吧? 返回一的时候是负一,有时候我们前进的附属部分,我们就是退回来就是 backward 啊,我们平时也是可以使用这个方式,它和 backward 没有任何区别,没有任何的区别,我们所以来我们继续看,当我们走到这个位置的时候,接下来剩下的步骤就可以跳出去完成了,我只需要一步走到头,任务就已经完成了。 走一步,两步之后深入两个位置,再回来,再走两步,再深入三个位置,退回来,再走两步,再深入四个位置,退回来,然后转过来,一步到位, 下一个。这道题也是一个比较有意思的题目啊,比较有意思的题目。这个题目你要注意看这道题目能不能用循环来做呢?也是可以的啊,也是可以的,但是有的时候题目的陷阱就在这里,你用循环去做, 可能是将将满足它这个条件,而且还写的稍稍复杂一点。但这道题你会发现,虽然这个标记点有岔路口,但这个岔路口比较少,比较少 啊,比较少,只有两个岔路口。那我去单边专门写一个循环,循环,一个循环就会自己整个循环结构,就会占两个代码量,所以我们就需要考虑另一个问题,问题就是什么呢?我们能不能简单直板的去写啊?简单直板写,你看,我直接走到这个标记点, 右转,深入岔路口,退回来,左转,再走到这个标记点,再进入岔路口。我都不需要退回来啊。不需要退回来是不就解决解决这个问题了?我只要知道这个标记任务是不是就结束了,对吧?所以我没有必要去使用循环,那我们简单直白的去写,哎。走到这个标记任务是不是就结束了,对吧?所以我没有必要去使用循环,那我们简单直白的去写,哎。走到这个位置,右转进入,走到这个位置进入 啊,我们不需要退回来,这个时候你就能看到我们代码少一行步数还能少五步,对吧?哎,所以有的时候要注意,循环不是万金油啊。循环不是万金油,我们也不是说它是必须的,我们有的时候也可以采用一些 笨方法啊,采用一些笨方法,其实它能更快的去完成这个任务啊。来看下一道题啊,这道题也是一个循环的题目了啊。也是,岔路口是有四个,但不是每个岔路口我都进的,对吧?不是每个岔路口我都进的,只有前两个岔路口我们就进,可以了, 就可以进,对吧?走三步一个叉路口三步一个叉路口,三步一个叉路口,所以循环几次呢?四次啊,有四个叉路口,但只有前两个叉路口要需要进,对不对?只有编号零的叉路口和编号一的叉路口需要进。 我第零次循环和第一次循环的叉路口需要进步进入,其他的不需要进,所以我们只需要在循环这里写一个什么,如果 f, f 什么,如果 i 小 于二,我们就进入这个叉路口。 哎,前两个二号口,第二这个第二个二号口我们已经不需要进入了啊。第二个最后一个我们都是不需要进入的,我们直接拿到这个标记点就可以了,对吧?那看一下这个分支结构,这个分支结构在这里特殊说一下这个分支结构,我,我的建议是我们尽量用自己手洗啊,自己手洗 自己手写的速度可能会比这个快一点,因为这个的 app 判定了,你点一下它直接是一个双分支啊。这个条件里面按天空的这个条件,你还需要去删掉,重新去写,然后他这个注视啊,你可能都需要去稍稍修改一下,那我觉得他就不如我们自己去手写一个 app 比较方便,比较快捷,对吧?而且条顺手条件写的也比较快啊,这样条写的也比较快。 你写的代码,写代码数速度也是会影响你的成绩的,毕竟考试的时候也是有时间限制的。所以这个 if 其他的我觉得点一下就出来的代码会比我们正常写的更多,但是更快啊。但是这个 if 我 觉得不一定,因为有的时候我们可能是单分之解决了下上一题,单分之足够解决的话,我们就没有必要去写双分支,因为双分支一个双分支只 算分支结构,它也会占取四行的一个代码量。那我们看这道题啊,我们去拆分一下这道题的一个肯定还是还是要用到循环,我们看一下循环的最小单位应该是什么? 最小单位是什么?我能不能说只走一个弯就能解决这个循环?不可能的,因为我们这起码是要有一个 z 字型的,对吧?哎,起码是一定是有一个 z 字型,因为有右转也有左转。 z 字型一般就是循环的最小单位了,除非是一个环形的, 那如果他不是环形结构的话,这字型可能是最小单位。但我们看我们如果使用这字型,能不能找到对应的规律啊?能不能找到对应的规律?这里能看到前进五步,吃到第一个,右转前进四步吃到下一个啊,前进三步吃到下一个,然后再去五步,再五步,再五步。这里很明显的能看到这是一个三分之啊,四分之三的一个环形,四分之三的一个环形,这个位置, 我们只需要在这个位置找到四分之三的一个环形,那这样这个位置是不也可以用一个循环的,对吧?哎,但是这个四分之三的这几个步数没有办法和这个部分的三步融合到一起,那我们可能就要把最小的循环单位扩大一点了,我可能就需要走到哪个位置,我需要走到这个位置,我需要走到这个位置,但能看到下一步有一个长直线,这个长直线在它前后左右都是没有相同长度的 啊,也没有相似的步数,我们也没有办法去变量,去累加、递增啊和递减,所以我们这个步数可很有可能就需要啊,循环两次了,我要从这个位置一直走到这个标记点,作为一次循环啊,作为一次循环 啊,那么我们看到我们前进,右转,再前进,再左转,再前进,然后三次再左转,再向前进,走到这个位置,这个图案是一个轴对称图形啊,是一个轴对称图形。看到啊,从这里切开,它两边是对称的,那你说我从这里走到这,我一定能以相同的程序从这个位置重新走回我的出发点啊, 所以我两次循环就可以搞定,所以循环是两次的,然后按照这个路线一直走到这个位置就可以了。来我们看一下啊,可以速度加快一点啊,启动第二次循环,同样的路线走到这个位置啊,这样我们的代码数量反而少一些,反而少一些啊。 来看这道题啊,这道题是比较典型的一个分支嵌套啊,循环嵌套分支问题,而且这道题非常明显,你能看到我们有岔路口,几个岔路口,六个岔路口。 那如果我们每一个叉路口都去编程序的话,我们这十六行代码一定是不够用的啊,一定是不够用的,那我们就找叉路口深入的距离规律,如果大家都在同一个点上,那是比较简单的啊,我到一个叉路口同样循环就可以了,但可以看到每一个叉路口的深度各有不同,但是我们同样也能观察到一个规律,就是第一个是二,然后是一, 这个到最深处了啊,这个到最深处了,然后又是二,二一最深处啊。所以你能看到我们岔路口实际上只有几种岔路口啊?这个几个岔路口只有三个,只有三种,只有三种,对不对?那只有三种,我们就可以采用另一种方式去记录什么呢?取余算,取余三,我们就可以切换三种的情况啊。取余三,我们可以切换三种情况。 当我们趋于三,切换三种情况的时候,这个时候就不得不使用一个东西叫多分子结构,这个程序里面并没有提供多分子结构,所以我们可以考虑用双分子结构来解决啊。用双分子结构来解决,怎么解决呢?我们看一下,其实最特殊的叉路口就是最远端的这个,这两个叉路口是有规律的,这两个叉路口的规律非常的明显,是吧? 就是一个是二,一个是一,对不对,对吧?而且我们取于的是三,所以我们可以用三去减掉我们这个循环变量来尝试一下。来尝试一下 啊,我们只需要用循环变量去取于三啊,任何数取于三的结果无非就三种,零一二三,对吧?按零一二三,那么当我们在第一个位置的时候,循环,我们把循环变量设为一啊,第一个叉路口循环变量设为一,一, 对吧?哎,三减去一,我们试一下三减去一是多少?二,我是不是正好前进两步啊?那一取三的结果是几?是不是也是一样?哎,所以我们可以用三减去循环变量当前路口的编号指示,这个循环变量去取于三的结果来决定我深入的步数,那同样这个路数也是可以的。二 二取三,结果是二,三减二是一,我们只需要到这个位置了,下一个路口我们的深入是深度是非常深的, 所以下一个路口我们就不能使用这种方式了。那么下一个路口正好是第三号路口,三取三的结果是零,所以我们的条件可以这样写, i 取三结果不等于零的时候啊, i 取三结果不等于零,也就是说只有三号路口特殊处理,其他路口需不需要?不需要其他路口,我们可以直接套用这种方式去解决深路口深入深度的问题, 否则呢?否则我们直接前进五,后退五就可以了,前进一步,直到这个循环外的标记点就完美的解决这个问题。 我们要通过,我们要通过什么?我们要通过每一个标记点的位置去找到规律啊,我们如何找规律?点击这个位置,我们是可以获得标记点的坐标的,这个标记点的坐标的,我们去观察这些坐标啊,我们去观察这些坐标,这些坐标它你能找到一些坐标的规律,那我们就能够通过这些规律去逆推出这些这个关系式。关系式, 那我们点击这个位置是可以显示坐标的,那我们继续下一题来看这道题啊,这道题很明显的一个循环问题,对吧?也还是一样的问题,找到循环的最小单位找到循环的最小单位,能看到我们这个角色一直是朝向哪个方向的啊?初是朝向还是只朝向这个方向的? 还是一个环线,我们从左边走,从右边走,没有区别的,没有,我们离最近的标记点的距离是一样的,那所以我们就简单一点,就以当前的角色朝向开始走啊。我们向前走,向右走,再向右走,然后走到这个位置,再向左走,那先走出一个 z 字型,看这个 z 字型能不能作为我们的最小单位。能不能作为我们最小单位呢?它是可以作为我们最小单位的 啊,走到这个位置,右转再走,再左转,走到这个位置,对吧?哎,我们再去左转,那这个时候这里是不是又是一个 z 字形,这又是一个 z 字形,这又是一个 z 字形,很明显几个 z 呢?四个啊,我们只需要走出四个 z 字形就可以了啊,很明显的看到我们的四个 z 字形啊。我简单画一下图,我们看一下,这个是比较经典的一个 位置啊,我们走到这个位置,从这个位置走到这里,这里啊,这就是一个最小单位了,因为后面呢,我们能看到,我们换一个颜色呀, 后面我们能看到它依旧是一个 z 字型,对吧?依旧是 z 字型, 我用不同的颜色去区分一下啊,能看到这就是循环的一个最小单位,每个颜色就是循环的最小单元,对吧?我们完成一个 z 字型,两个、三个,这样就完成了整个的图案的便利啊,我们都走好,都走完了, 来继续下一题 来看这道题。这道题还是找最小的这个循环单位啊,最循环的最小的循环单元, 哎,稍稍放大一点,这个时候我们能看到它这个奇六百八,对吧?它的弯线比较多,那它这种弯线比较多的时候我们就需要注意了,这种弯线比较多,而且弯线的步数没有统一的情况下,我们的循环规律就没有那么的好处理。我们先找找什么呢?看我们这一部分的步数没有统一的情况下,我们的循环规律就没有那么的好处理。我们先找一二三四四步, 同样往这个方向走,还是几步,一二三四步,对吧?然后我们再走,走什么呢?我们再往前走啊,我再换一个颜色,这是两步,这也是两步,也说我走出一个类似问号的形状之后, 找到规律了,什么规律?你会发现它上面其实还有一个类似问号的规律, 这一步我们走到这个位置就可以了,对吧?哎,我们用黑色来来看一下,这里这里这里,这是不是还是一个问号的形式啊?像一个北斗七星的这个这个方向啊?这里还是一样的,我们看一下, 也就是说我们的最小单元现在就变成了什么?就变成了前进、右转,前进,左转,对吧?哎,我只需要完成这个结构,我们的最小单元就出现了,但是你能看到我们这几个位置啊,他们这几个位置 长度各有不同啊。长度各有不同怎么办呢?我们先看循环,我们可以用循环来代替这个方位啊。首先第一步,一二三四四,哎,从四开始,对吧?从四步开始,那这个位置从几前进了几步?一二三,这里呢?一二四 三二四三二。很明显的一个什么 d 键,很明显的一个 d 键,对吧?我们这里是四步,这里是三步,这里是两步,所以我们执行的这部分,包括我们横向,包括这个横向的 都是一样的,对不对?都是递减的,所以我们就可以考虑将循环做成一个递减,递减序列,递减序列啊,就是一个等差数列,四到二,每次都减一。那我这三个问号的问号的柄部啊,这个手柄部分就搞定了。那同样我们看这个方向前进的方向,他有什么规律啊?他有什么规律?我们再看,这里前进了两步, 这里前进了三步,这里前进了四步,恰好和刚才那个是反过来的,对吧?和你这个前进的方向和这个前进方向,比如说你第一个 l 和反过来的第二个 l 型,他们俩是反过来的,那就比较简单了,对吧?哎,你只需要用加减法就可以解决这个问题,我们先前进挨次再去进行六减去挨就可以了 啊,六减挨就可以了,因为你能看到啊,我们整个图案它的长度是多少?它的长度,我们整个图案从这个位置来看啊, 这样作为一个最小单元来看的话,它的纵向啊,它的上下,它的上下是不是正好六个单位啊?那这个位置是不是也是六个单位?那这里也是六个单位,所以我们只需要减去这个部分,我们就可以得到剩余的部分啊,所以 一定要注意,它既然能成为最小单元,它一定有地方是相同的,我们只需要找到相同的那个地方啊,一减就可以得到另一半的数据了啊, 那我们看这道题啊,这道题就是一个典型的循环嵌套问题了啊,循环嵌套问题,因为很明显我们能看到它给我们的代码数量并不是很多,那我们一定是要循环的,而且能看到我们这个 啊。载具,我们走上这个载具,开始。这个载具,我们先看白色部分是载具走的,我们看载具部分的规律啊,载具部分的规律是外循环的规律,然后呢?人走到绿色这个角色走到绿色部分是内循环的规律, 我们先看外循环的规律啊,我们先看外循环的规律,我们从这里开始走出一步,这是一步,然后呢?右转这个部分是走两步,然后这里是四步,这里六步,这个位置是八步, 这很明显是二四六八等差数列,那么这个部分就没有办法嵌入到等差数列里面,所以这个部分我们可以干什么?这个部分我们可以单独的去走,让车先头两行手续,直接让人啊,让我们的角色上载具,然后让载具走到我们这个标记点,也就是说我们人为的把整个角色启动的标记点挪动了, 我们让角色在哪里启动,我们让角色在这个位置。哎,我们从这个位置才开始找规律,因为这个一实在进入不了我们的这个规律范围内,所以我们就不需要考虑它。那么二四六八很明显是一个等差数列的啊,等差数列的循环,那我们只需要写一个什么样的循环啊?只要写一个从哪里?哎?一到四,一 一二三四四四个循环,对吧?那么接下来我们走的步数是如何确定的啊?如何确定我们走的步数呢?首先二一乘二是二,对吧?哎,然后呢,二乘二是四,三乘三,三乘二是六,四乘二是八。那这个等差数列的表示方式有很多种啊,还有一种方式是什么? 他另一种方式我是在循环变量上直接去使用二四六八这种方式去执行,也是可以的。那我为什么这样写呢?我为什么这样写呢?为什么使用 s 二这种方式去写呢?走 s 二的步数,那他的优点在于我们一会需要确定另一个事情,什么事情?就是能看到我们人走的这个循环,有向右走的,也有向左侧去走的,那我们如何去区分呢? 啊?我们如何去区分呢?恰好和我们走的这几个位置是有关系的。我们能看到第一个走的这个形状是一个 p 字形,也就是要右转,第二个就左转了,第三个又右转,第四个又左转,这很明显隔每隔一个调转一次方向。所以我们这个内循环的启动方式,我们内循环还是走出这个圆圈的,我们看一下内循环的循环范围, 我们内循环其实就比较容易看出来了,我们内循环只需要走出这个方框就可以了,因为这一步我们是可以通过其他程序去单独程序走到这个位置的,对吧?哎,我们可以前进两位和后退两位都是可以的,那么这个部分就是只有左转和右转来解决了,那么我们的内循环就需要用 用分支来确定我是左转还是右转,这很明显,第一次是左转右转,第一次是右转,第二次就是左转,第三次又是右转,第四次又是左转,很明显极有数啊,规律非常明显的极有数,所以我们直接取二就可以了啊。如果我们取二等于一啊,证明他是什么?第一个或者是第三个,那我就右转,否则我就是左转, 哎,否则我就是左转,哎。右转或者是左转,然后直接去直行,是吧?来看一下我们直接是 返回点二啊,走出这两步,右转,走两步,再右转,走两步,再右转,重新回到这个标记点,然后再退回到车上,我们来看一下,退回到车上,返回,退回到车上,然后让载具带着我们继续前往下一个地点啊,前往下一个点,到下一个地点之后,我们这个 i 的 数字就变了, 再取二的时候它是零的。好,我们就左转走到上,哎,人物脱离载具返回了,走到这个位置,然后开启一个小循环,环形的小循环,再退回到环形,循环结束,再退回到车上,再去下一个位置,这样我们整个程序就结束了。看一下 这种循环嵌套的问题,规律还是相对明显的规律还是相对明显的来,我们看这题啊,一个单循环的问题,看一下,找一下它的规律啊,找一下它的规律 还是找它的最小单元,这样能很明显的看到这种问题,它的最小单元就比较明显了,一定是一个 l 型啊,一个 l 型,这是它的最小单元,对吧?那么它这个 l 型,这个 l 它是有规律的。看这里是一步, 纵向是几步,纵向是两步,然后发现横向还是两步,纵向变成多少了?三步,这个纵向还是三步,那这个再走四四,这个是五, 对吧?那么这个时候你能看到你的横向,纵向会比横向多一步,但是呢,你下一次的横向和这次的纵向是相同的,那我们只看横向啊,这种问题我们就可以先看横向的规律,再看横向的规律,因为横向和横向只差一,我们可以最后可以使用加一来解决这个问题。那只看横向的规律,只看横向的规律。一二三四 非常简单,一二三四循环开始,一二三四啊,小于五就可以了。那我每次横向走 i 步,那我纵向就走 i 加一步,然后循环多少次?循环四次,问题轻松解决。 找到最小单元,找到最小单元,然后逐步分析横向和纵向的规律。这个这个扣丁,这个岛啊,这个,这个所有的岛他都有一个特点,就是他你只需要把它纵向和横向的数值去 找到横向,纵向的数值规律就可以完美解决,因为横向纵向就是最基本的一个规律证明。这题来看一下,又是一个循环检讨题目,又是一个循环检讨题目,看一下整个能走的路线,就这些我们大致看一下,我们大致看一下就能发现, 大家看一下就能发现。我们从哪里,从这个位置切一下,上下两部分完全是相同的,完全是相同的,所以我们只需要找到下边这部分的规律就可以了啊,找到这个规律就可以了,对吧?上半部分直接一模一样的套一次循环就可以了。那我们看下面的规律是什么样的?下面的规律是什么样的?一二三, 纵向三步,横向两步,这里纵向三步,横向两步。哎,规律出现了,哎,它的规律比较比较明显出现了,哎,我只需要走三步,再走两步,循环两次这个部分就可以了,那么唯一剩下的就是这个部分了,哎,这个部分 这一步和转弯啊,直走转弯,那这个部分他就没有必要强行的套到内循环里,我们可以在内循环外,外循环内啊,内循环外边,外循环内部去强把这个角色单独的走到这个位置啊,重新走到这个规定点,我们就可以同样的入手再走一次。什么? 再走?走到这个规定点,我们就可以同样的方式再走一次这个循环就可以了啊,所以外循环两次,内循环也是两次。看一下啊,我们走一遍内循环啊,一遍内循环,我们完成到这个位置,对吧?然后外循环负责把从这个位置转弯到这个位置,对吧?哎,我们看一下 来解决。来,我们再看下一个问题, 大家看一下角色还是朝前的,而且这个路其实只有一条路啊,只有一条路,这里要注意只有一条路,那么这个怎么去找规律呢啊?你们看到前面这个 l 型比较大,后面的 l 型比较小,那它们俩之间的递增规律,递减规律,我们 眨眼一看是看不出来的啊,我们再看,你可以把这个图案其实分成两部分来看啊。分成两部分来看,我们先看大的这部分,这部分就是一个明显的连续两个 l 啊,连续两个 l 型,所以我们只需要用这个前半部分程序去控制,直行,右转,再左转,再直行,再左转,哎,两次重直行就 ok 了。 解决前半部分,然后后半部分次数比较多,一次,两次,三次,四次都是小 l 啊,都是小 l。 我 们可以再写一个循环去解决这个问题啊。再写一个循环去解决问题,这两个循环并不具备欠套关系啊。这两个循环并不具备欠套关系,所以并不是欠套循环的问题,也是单循环问题,只不过是两个单循环。 我看一下,前一个循环解决大 l, 后几个循环,后一个循环解决小 l。 大家看这道题啊,这很明显又是一个循环欠套分枝的问题啊,又是一个循环欠套分枝的问题,循环欠套分枝。而且循环步骤啊,一样的,每个叉路口深度也是规律非常明显,一三五七啊,一三五七规律也非常明显,所以我们就省事,直接使用放循环来做就可以了。一到七我们可以小于等于七,也可以小于八, 每次加二就轻松解决这个问题。每次是不是多走两步?每次是不是都都都是多走两步,而且每个叉路口之间的间距还是相等的,这就非常的简单,非常的简单, 每个岔路口两步,一个岔路口两步,一个岔路口两步,一个岔路口再来两步又一个岔路口,深度也是一三五七啊,这是比较比较简单的,我们看一下来,再看下一题, 嗯,这道题就比较简单了,我们就略过啊,因为这道题没有任何的,没有任何的问题,直接就前进左转就可以了。 这道题和我们刚才做的岔路口问题其实是一样的问题啊,只不过它有一些,它有一,和那个题有一个根本性的区别,就是它不仅仅岔路口有递增关系,它岔路口之间的间距也是有递增关系的啊,也是有递增关系的,我们看一下, 它的叉路口也是有定向关系的。一步啊,这是一步一步到这个叉路口往前往里边也是走一步,再往前走两步,叉路口的深度是三,再往前走三步,叉路口的深度是多少?五,再往前走几步,五步,它的叉路口深度是 多少七,对吧?哎,这个部分剩下的部分我们就可以当做循环外来处理了。来,我们看一下啊,那么规律也非常明显的一二三四啊,这是四,搞错了,四, 一二三四也是说他的什么,他的路口间距是逐渐增长的,路口间距是这样逐渐增长的啊,路口间距每次就是等差一啊,差,等差数列差是一, 那么这个叉路口的深度反而不一样,叉路口的深度是一三五七,叉路口深度每次是增加二的,那也就是说你这个步数啊,间距是不能直接当做叉路口深度来使用的,所以我们在使用的时候,我们直接直接使用这个循环键啊,单循环,我们直接让这个循环每次增加一作为间距, 那么深度我们可以通过间距来求的啊,这是一个非常明明显的规律,就是什么二 n 减一、二乘 n 减一,你看一乘一,一乘二减一就是一,二乘二减一是三,三乘三减一,三乘二减一是六,对吧?二乘四减一是七, 那就是二 n 减一的一个规律啊,非常明显,这里要注意一二三四和一三五七他们两个数字之间的关系是关系,就是二 n 减一啊,这个要注意,可以稍稍问一下,这个关系非常的显著。那我们再看下一题, 来看这道题啊,这道题也是一个单循环问题,也是一个单循环问题。这道题很明显啊,这道题很有意思,我们把它放大一点, 这道题我们的标记点这里一个,这里一个,这里一个另一个在这,哎,唯独它是比较特殊的那个标记点。其他的规律是比较明显的,很明显就是我只需要走什么,我只需要走一个 l 型, 再走这个 l 型,再走这个 l 型啊,这是一个很明显的一个万字型,对吧?但偏偏这个 l 型是不行的,因为这个 l 这个位置没有东西啊,没有东西它反而在另一侧,所以我们先不考虑它,哎,这个比较特殊,我们就把它放在后面考虑,我们先考虑它们三或者听三次也是可以的,对吧? 我只需要走出这三步就可以了。那么同样的问题,你会发现我们人物一开始朝向了左侧,正左侧,那如果我现在直接开始万字形的一个走法, 那我会他又变成第一个,他变成第二个,那这个位置是第三个,这个位置是第三个,那这样就破坏了我们连续性的循环,那我们可以提前把人物向右转,让人物朝上开始走,第一个,把它挡到第二个,第三个,对吧? 三个程序走完之后,三个部分走完,这要注意,三个部分走完之后,接下来剩下的就是在反向走一个 l 型,走到这个位置就可以了,对吧?啊?这个问题你把它细拆开来看,还是比较简单的啊,比较简单的,大多数题目都是不能通过一个循环去直接搞定的,我们是可以通过一种通过一个循环接着一个独立的操作来解决的。 如果你发现他们的规律比较明显,比较明显还是比较好,那如果有一些不太明显的规律,我们要想办法去把没有规律的部分去单独提出来,那我们看下一题啊,这道题,这道题是一个比较难的题了,我们看一下这道题是比较难的题,这道题其实是一个等比数列啊,等比数列 这个规律比较难以发现啊。首先我们先看有载具啊,有载具,有载具, 这道题你要是说我直接去走,那肯定是不不难,但是你会发现它的代码数给的特别的少,只有十三步,那我们是可以通过 一种答题技巧来解决这个问题。第一个就是我不要求满分了,我不要求三个星了,我直接把所有的点标记点全部吃到,哎,我得两星的程序,我得两个星的得分也是可以的,这样会大大减少你的答题时间。那么如果时间允许,或者是你比较有灵感,我们可以看一下这道题到底应该怎么做。看一下 这道题,如果我们想以十三个啊程序来解决,十三个程序来解决的话,我们就需要一点特殊的技巧,我们把这道题 简单来说,就是首先啊,前方部分载具走这条路啊,我画红线的这部分,这道题是这个部分是这个题的难点,因为后面后面这个部分啊,这个部分是非常简单,这个部分还是比较简单的,我们先看,就看载具这部分,他非常的难,他的难点在哪呢?我们需要通过两个方式来解决,第一,如果我直接使用左转、 直行、左转直行右转这种方式,我的代码一定是不够的,那么我们就要把这个题目给拆开。其实扣丁这个东西,它实际上就是一个平面直角坐标系,我们只需要去确定一个问题,就是它的横向坐标,它的横向走和纵向走, 对吧?我们如果把它简化下,就是只有横向和纵向,横向和纵向,那么我们看一下,如果我们先看纵向,先看纵向的规律,我们先看纵向的规律啊,把它们都清除掉。来,我们再看一下这道题, 我们为了以最少的代码去完成这道题,我们就需要把这个题拆解开啊,拆解成最核心的方式就是减少转弯次数,减少转弯次数,我们看一下,如果我想要减少转弯次数,我的最核心问题就是我不能, 不能干什么?不能去逐渐的去回头玩啊,这个玩你看如果我前进右转、再右转,再往这 前进,再左转,那这个我们的转弯次数是很多的,而且左右左右右左,他没有连续的一个规律,那么我能不能把一个东西转变成最简单的 z 字型呢?转变成 z 字型的一个结构呢?能不能呢?也是可以。那这里我们就需要做一点 变化,什么变化呢?我们要把所有的啊,固定这个所有的二维平面,这东西,它实际上就一个二维的平面直角坐标系。那么我们把所有的前进,把所有的动向竖着,都认为它在前进啊,前进 我们都认为它在前进,那么横向呢?横向呢?我们也都认为它在前进,哎,那么我们就看一下它前进的距离就可以了。那么我把所有的方向都认为前进的之后,我们再看, 我们从这个人物上载具开始往前走,到第一个标记点,他前进了多少呢?一二前进了两步,对吧?那么我们先不看横向的,我们继续看纵向,当我们走到这个标记点的时候,往这个方向来走,对吧?那我们刚才说所有的方,所有的纵向,我们都认为在向上的前进的话,这里就不再是走一步了,而是走负一步, 对吧?是不走负一步,他后退了一步,就是 backward 后退了一步,我们是可以使用 forward 负一步来代替他,对吧?再往这个方向看,当我们到这个位置的时候,我还要往这个方向走,那我们还是一个问题,我要向上作为前进,那向后就是负数了,负多少呢?一二三四负四, 哎,能看到二负一负四,这是一个等差数列, 负三,哎,他们之间的差是负三,对吧?哎,他们之间的差是负三,那么也就是说实际上我只需要管向上的前进,他是一个等差数列,也就是所有的前进都是由负三啊,他每次差是不是负三的,对不对啊?有这个等差数列,我们纵向的规律,我们就找好了。接下来我们看横向啊,我们看横向,横向我们就需要注意的, 横向走这个位置多少?横向是没有后退的,横向是不需要复数。一二这里呢?一二三这里呢?一二三四五,哎,这个又不好找了,二三五他有什么规律呢? 我们看一下二三五,从数字上来看,它是没有规律的,但是它和另一个东西有规律,就是指数,那我们也叫密密的,这个二我们可以看成什么,我们可以看成什么?可以看成,是吧?二的零次方加一,二的零次方加一,任何的零次方都是 一,一加一,是不是二啊?那这里我们再看,他就是二,当一次方加一五呢?是二,当二次方加一,那么我们找不到数字本身的规律,我们就尝试找指数的规律。零一 二是不是正好是我们整个一个什么一个负循环的逆增的循环变量呢?啊?那有了这个作为保底,我们就可以开始写程序了, 走,直接做一个循环三次的,哎,一个三次的循环,对吧?哎,首先纵向的走不需要这个 i, 不 需要这个指数,纵向的是需要什么?是一个等差,它的差是负三,那我们就和负三去乘以这个 i 啊,它是第几次我们就乘以几个负三, 然后就加上谁,加上二,正好就是什么,正好就是我们这第一步的步骤,那你会发现后面的步数也是合理的,哎,也是合理的, 我们只需要负三乘以一,再去加二,就是负一,那就等于我们后退了一步,所以我们的等差,这个等差是可以去利用在这个里面的,这是我们的纵向坐标去管理,然后直接右转, 直接右转,直接右转什么呢?然后翻过来往哪走啊?走规律,规律已经写在这了,是吧?哎,指数不算破万数, 二, s 杠加一,然后再左转,那你知道我下次是不是还要右转了?不,下次我们还继续左转,哎,我们左转了之后,我就可以前进什么了,负数了,哎,我返回了负数,那这样我们就只有左转,右转,左转,右转,也就是说我们把这个图案啊,把这个规没有什么太大规律的图案 改成了什么?哎,有回头的弯。我们改成了最小的 z 字形问题啊,我们改成了最小的 z 字形问题,那这个 z 字形问题,我们就可以放肆的使用这个循环了,对吧?哎,去使用 z 字形的一个循环,找到规律可以了,当这个循环结束的时候,我们就已经走到这个位置了,那接下来就是谁了?接下来就是比较简单的,对吧?哎,就是多少, 这是多少?八,然后一二三四五,对吧?再然后呢?一二三四,然后呢一二,哎,我们找到这个规律就比较简单了,每次减四,然后,哎,再去减二啊,逐渐补充,去逐渐累积啊。这个角色的部分就比较简单,我们看一下, 哎,后面的个人物部分就是比较简单的啊,重要的就是前面这个等比的计算。那这道题,呃,如果在考试过程中如果出现这种问题,就不建议去先做,我们可以先做其他题。这道题我们可以先去代码,我们可以先硬做,去舍掉这个部分,什么?舍掉这个,什么舍掉这个代码部分的分数, 我们直接得道具分数和步数分数也是可以的,对吧?时间是很重要的啊,因为后续的题,你看下一道题有可能是更简单的啊。这个题目的分布是他没有这个说从简单到难,这个分布规律来说啊,他这个规律不确定,你看上一道题很难,这道题就非常简单,又是一个循环的,然后累增的一个题目去 完事了,对吧?我只需要循环每次加二,别循环每道每次加二就可以了,对吧?这规律二四六八十,对吧?非常非常的简单。十二,来我们再看下一题,所以不要在某一道题上浪费太多时间 来看下一道题啊。这道题还是一个循环检查的问题,还是一个循环检查问题。我们还是找最小单元,它的最小单元是什么? 它的最小单元就比较显眼啊,比较明显它的最小单元就是这个部分。我画一下,这里这里这里,这里出来好一个最小单元,一个九,对吧?这又是一个 九,这又是一个九,对吧?这边这个九比较不好看。然后这个部分一个大 l, 我 们可以把它单独放在循环外去执行。那这几个九其实你会发现都是直行左转、直行左转、直行左转,那么它的规律也比较明显,一二一二 一二三四一二三四一二三四五六一二三四五六,对吧?唯一的问题就是这个里面这个框那句话,就这个他那个小方块比别人的都大一点,那很简单了,我们只需要使用一个 f 去解决它就行了,如果它是第二次循环,我们就让这个框画大一点,对吧?哎,没有,呃,只能说稍微长一点,没有什么太多的为难的因素。所以你来看我们画出一个 l 型,然后 直接走里面的小正方形做一个区分,如果是什么?如果循环变量正好是四步,对吧?正好是四步这一次。好,那怎么 我就画一个大一点的啊,否则我就画一个小一点,对吧?哎,但是都左转是相同的,然后出门再右转,等会我出来之后再去右转,再去画下一个九,再去画下一个九,最后当我走到这个位置的时候执行这一部分啊,执行这一部分,画出最后一个 l 九就可以了,我们看一下。 哎,好,哎,下一题,哎。到这个 a m 部分的题目。 a m 部分的题目是比较特殊的啊,我们来看一下。首先比较简单,移动方式还是一样的,我们控制载具啊。移动到哪里?移动到这个 ai 身上啊,那移动到 ai 身上和之前不一样,它不会自动失去。我们需要去单独写一下这个啊,去写一下调用这个模型啊,我们去直接写下调用模型这个函数看一下。直接调用。那么直接使用了调用模型之后,这个模型部分的参数呢?标注在哪?标注在这我们点一下就有了,但是注意啊,如果你第一次写的话,这个模型的准确率是未知。 模型准确率是未知啊,你是没有准确率的,所以这个模型是需要我们去训练的啊。如何去训练模型的?我们看一下。如何去训练模型的啊?这个模型简单来说就是需要我们去进行筛选的啊,我不知道大家做过没有这种东西,没有就通过我们去筛选,进来之后选择这个框选,我们沿着这个虚线,他已经给出这个虚线了, 我们沿着这个虚线简单来说就是尽可能的,尽可能小的,但是呢,你要把这个车怎么样?全部位置全部筛选进来的一个位置去把这个车框起来啊,框的越精准越好啊,越精准越好,不要框的太多,因为这个识别它需要一点 数据啊,我们这样把它选精准的,选中这个数据,然后开始去调,开始去调试这个验证啊, 点击验证啊,它这个自动会开始进行一个验证啊,来模型训练,标准模型训练准确率百分之九十八啊,如果你还想优化,你就可以再去优化,再去重新选,那如果你觉得这个准确率可以了,那你就可以点结束训练,然后再去运行啊,再去运行啊,再去运行 啊,然后你的准确率就会直接影响到你最后的得分啊,你最后的得分啊,然后看下一期 来。这题还是一个 ai 训练的问题啊,首先路程我们就不说了,路程我们就不说了,我们看一下这个的模型调试啊,这个模型调试有些光卡是已经给你设置好,最后结果了,你就可以直接去配置参数, ai 的 配置参数有两个,一个是学习率,一个是 p s 大 小,这个逐渐增加还是减小,看你们自己啊,最开始都是空的,那么你自己去一个个去试 一个,问题是找到最小的啊,如果时间允许的话,找到最合适的配比啊,批次,每次批次就是每次去用多少,每次用多少,每次筛选多少次,之后再去调整参数啊,学习率啊,学习率是多少,就是决定了他走的快还是慢,稳不稳定直接就会影响。这个就需要你去前后啊去调整,调整好之后还是进行训练验证 啊,每次自己去尝试,自己去尝试,让这个,让这个数据线,让这个线段图啊,尽量平稳啊,尽量平稳啊,这个准确率百分之九十九十八,那我们就可以结束进来了,对不对?然后再去运行, 再去运行它,再调用这个我们调试的模型啊,乘以六点九啊,然后继续结束,那我们的所有三十七道题目我们就完成了,然后你可以直接结。

好,之前的话我们提到的两大核心的这个能力呢,其实不是说凭空而来的,他是建立在五个基础之上的这种,呃,思维能力之上的啊,我说的五个这个基础思维能力是什么的?比较分类、推理, 然后还有这个想象拆解。你说咱们天天说这个学编程能锻炼思维,到底锻炼的是什么?其实就是这五样。 比较什么呢?是比较两个算法,哪个更快分类什么?就我把一堆的数据,我按照规则去给他分组推理是什么, 从你的条件推导出结果。想象就是在脑子里面去跑遍程序拆解,就把问题给切成这种小步骤。 其实这种能力练好了,说孩子他不管说是解数学题,写作文还是做项目,他都是游刃有余的。所以说,嗯,总是在问这编程学什么?编程学什么?其实学的就是让孩子变聪明的这种底层的能力。

你觉得手搓一个豆包 app 要多久?我跟你说一下午就够了。我用扣子编程加命令 max 模型手搓了一个豆包,我叫他豆骚包感受一下。嘿,骚包,你在干什么呢?哈哈哈,你这语气飘的跟我一样,我正揣着小本本蹲点等你发话呢, 快说,今儿是要唠八卦还是找乐子?看到没?这是我做的一个豆包 app, 它可以语音对话,最重要的是它会笑会叹气,不是那种非常生硬的 dts, 是真的带情绪的那种。今天我就来告诉你这东西背后是怎么做的,其实非常简单,那就是扣子编程的 recording, 加上 mini max 最新的 speak 二点八语音模型,一个人从零就可以搞出来。欢 迎大家回到我们的我看是不是扣子二点零的进阶课。今天我们要学用扣子编程做移动端的 app。 那 先说一下我们,我之前就尝试过用扣子编程去搓一个类似豆包一样的东西,但他给出的语音迹象很重,有点像片剧爆,所以我想要的是这种有情绪、像真人说话,我自己能控制的语音能力。 于是我又找了一个好帮手,它是迷你 max 的 语音模型,再加上 cos 编程的 webcnc 能力。今天把全流程给大家讲一遍,看完今天课,你将会学会三件事。第一是用 cos 编程一句话生成一个移动端的对话 app, 它是真的可以打包下载到你的手机上的 app, 标准化的 prom 也会提供给大家。 第二,我们会接入 mini max 语音模型,这是我目前提供下来效果最好的语音模型。第三,展示一个普通 t s 办不到的能力,就是让 ai 说话的时候拥有情绪和语气。 我们直接进演示。 ok 用 pos 编程开发一个小产品,这个大家绝对不陌生了,那我这里直接给你套固定的 prompt, 拿着 prompt 直接生成就好了。 注意,我推荐生成页面的时候美商最高的模型,我觉得目前是 mini max 二点七模型,咱来个原汤化原食,用他自己家的大原模型,给他家最好的语音模型做壳子,好一个指令发出去,他就开始为我们拉沙箱构建整个项目的框架了。 那这里的流程大家非常熟悉了,因为我们这里没有给他任何的 prompt 提示,所以他应该默认会调用自带的语音大模型去帮我们识别,那这里他语音识别没问题,但是他语音生成的这个模型, 我觉得效果有点偏普通了。语音模型这件事,市面上有不少的选择,差距还是非常大的,我实测过几个之后发现现在 mini max 二点八的能力是最强的,最重要的是它有一个别家没有的能力,待会我演示给你看。 ok, 兄弟们,当你的扣子快速的帮你构建出了你的 app 的 框架之后,下面我就会干一个非常重要的事,就是替换掉它的语音模块, prompt 也直接给你写好了。 首先你要复制这条 prompt 到你的扣子里,然后告诉他把语音模块替换成 mini max speech speech 二点八的 a p i 模型,然后告诉他一个基本的接口和调用模型的配置,并且加上一处安全限制,是后端调用 a p i 的 时候不要把 p 暴露在前端。 好到这还没完,为了方便他更清晰地调用我们 mini max 的 模型,我们再给他附上一个 mini max 调用的接口文档,你可以在这个地址找到,直接把这个页面复制下来给他就行。 那我这里已经直接保存好了,直接喂给他。好,那最后是要提供你的 api 点击发送,我们把该准备的信息给他准备好。好在他生成的时候,我们来讲一下为什么选择这个模型。你看 api 应用参数里有一个参数,它叫做语气标签词,这个标签词是只有最新的模型才有的,那 这些标签词怎么理解呢?我们来到他的首页去测试一下。你们看到我这里加入了一个笑声,让他生成。好问题,哼,我想了一下,注意听。好问题,哼, 我想了一下,注意到了没有?我这里的好问题。后面有个括号,笑声。这是一个语气标签词二点八的模型,支持文字中输入这样的标签,在生成音频的时候,它真的会笑出来。好问题,哼, 我想了一下,支持的标签词有这些,你可以随意的去替换,我们这里换一个标签词再试试,比如说把这个笑声改成咳嗽,来,再来一遍。好问题,哼,我想了一下,注意听。好问题, 哼,我想了一下,这就是同样一句话,加上不同的判刑词,语气是不是变了?这就是差距,不是更清楚,也不是更自然,而是 ai 有 了人说话的这种细节。所以接下来我们可以进一步的对我们的 app 进行优化,你可以给他备注这句话, 告诉他我们在生成语音的时候,要自然的加入一下这些标签词,让说话变得更加自然,这样我们生成的 app 能力就更强了,它会自动的根据我们的文本识别不同的情绪,并且根据我们的情绪手动的加入一些标签词, 比如说开心时我们加入一些大笑的,悲伤时加入一些叹气,同时还会加入语法停顿的功能,比如说他觉得这里需要思考,他会停顿个零点几秒,那当你把这些内容都实现之后,你就会得到一个和我一样的烧包。我们再来完整演示一遍流程烧包我,你觉得当独立创业者很累吗? 那必须累,天天当爹又当妈,既要当业务员又要当清洁工,不过熬过来就是自己的天下了, 要不要我给你打个欠?兄弟们,觉得效果怎么样?那我们完整流程就是用扣子编程本身的文本解析能力,把你的话转成文本,然后由我们构建好的这个智能体,用工程法的方式去调用他本地的模型,去帮你生成这样的 加入标签词和停顿的语音文本,然后在迷你 max 二点八的语音去合成,最后在 app 上播放出来。 一个人一台 macbook 直接就能跑。如果你想在手机上调试,你可以扫码右下角这个二维码,你就会得到你的烧包手机版,你以为到这就完了吗?兄弟们,还没有呢! mini max 还有一个非常强大的功能,是一键复刻自己的声音,那这里你只需要读一个文本,就可以把自己的声线刻浓出来, 我这里就复制了一个我自己。那当你复制好你自己的声音之后,你可以点击右侧这三个点,然后复制你的声音 id, 那 这个声音 id 我 们同样可以查到我们的烧包里面去用, 点开我们的烧包,在这里帮我们的 id 输入点击应用完成。那现在他可以用我的声音来回复我,我们试一下。嘿,烧包,你觉得麦当帅吗?注意听,那必须帅到掉渣。 一头金发自带高光,甩起双截棍,帅到我想原地转三圈,谁看了不喊一句麦哥,牛逼,这个声音你觉得像不像呢?那当你复刻了自己的声音的豆包 app 是 不是还挺有意思的? 那最后讲件事,兄弟们,豆包的语音模型背后有一个大团队在维护,我们今天做的就是用一个人外部 coding 加一个模型 a p i 拼出来。不是说你功能一样,一个人可以吊打自己整个团队,而是一个人能做到的事情。边界在变, pos 编程解决了我们怎么开发的问题, 那 mini max 的 语音模型解决了声音像不像人的问题?这两件事跟之前都挺难的,但现在都不难了, 你想做什么,取决于有没有这个想法,不再取决于你会不会写代码,有没有录音棚。那感兴趣的小伙伴可以去 mini max 官网去看它语音魔性的文档,扣字二点零的完整教程在我的支持站,欢迎大家去看。今天的内容就到这里,我是麦当,带你玩点神奇的点赞关注。

好,接下来我跟大家分享一下长春市第五届编程大赛小学低龄组图形化的前十五道题。那么我们现在开始分析啊,首先在做题之前,要求孩子们必须要调整好一个自己能够看的非常清晰的视角,这样的话你才能够分析出他的路径。第一题非常简单啊,让我们扣的,然后转向,然后走到这个位置就可以了, 然后首先右转,然后前进一二三四五六七八八步,然后前进八步就可以了。看见了,再来看一下。第二题,同样也是先调整一个方向,然后前进右转, 首先让他前进三步,然后右转,再前进两步,没问题。第四题 同样也是我们先来分析路径啊,左转,然后右转,前进一二三四,然后左转,然后前进一二三,然后再右转一二两步,然后再右转前进一步。 好,看一下这一题啊,这个题非常简单,先让我们的 q 的 后退,然后再前进就可以了。二三三步,然后再前进一二三四五六七八八步。 继续这一步也比较简单啊,就是上一上一关的这个简化版,直接让他后退,从他的位置出发,后退到这一二三四五六七八八步就可以了。 后退。好,接下来我们进入第六关,同样也是先调整一下视角,然后先分析一下这个关卡啊,首先上车勾的前进,左转,然后前进,然后再后退就可以了。 一步上车,然后再去前进一二三四五六七七步,然后再左转,左转之后需要再前进一二三四五步,然后直接后退就可以了。 从这个地方退到这地方一二三四五六七八九十十步,这个重点要讲一下啊,如果大家再遇到类似的,哪边的步数少,就先走哪一边,然后退到多的那一步, 快一点。好。第七题,同样是大家先调整一下视角,然后我们这个这个视角会看的比较清晰一下啊。首先勾兑左转,然后前进。我们要先让他上车两步,然后再右转前进一步,勾兑上车,然后控制载距 前进一二三四,前进四步,然后右转一二三四五,前进五步, 然后再让它转弯右转再前进。先从这个位置要让它直接到这个位置,一二三四五五,然后再次让它转弯左转,然后左转之后扣字,前进两步就可以了。 好,大家第八关,同样也是先调整一下视角, 这关呢,先让扣的上车,然后到这个位置,再去左转,人物后退,然后重复这个动作就可以了。扣的一步,上车,再去前进一二两步,然后再去左转,然后左转之后人物前进一二三三步,然后后退三步,然后再次上到再去再去右转,继续前进 一二,还是同样的两步,然后载具要右转了,面向我们的道具,然后扣对前进三步,然后再后退三步,然后载具左转,因为他已经上了左转之后前进到这个位置,然后继续重复刚刚的动作 一二两步,然后再次左转,扣对前进三步。 这个步数少了。好,按下第九题,从第九题开始,我们就要用到循环了, 这个位置出发到这,然后左转循环就可以了。首先两个企鹅,我们要循环两次,要重复两次的动作,然后前进。首先呢要让他左转,面向我们的道具,二三四五六七八八步, ok 了,然后左转,再走八步, 看一下。第十题,同样是循环的一个题,和刚刚的非常非常的相似啊,只不过就是方向转变了一下,看一下同样两只起,我们循环两次,然后现在要换做右转,然后前进数项步数,一二三四五六七八九九步,看一下。 好,接下来第十一题,第十一题我们要重点看一下啊,这个大家分析一下思路。首先 coder 要前进,吃到这个道具,那么这个一共走了多少步?一二三四四步,然后如果 coder 直接走到这的话,是一二三四五六七八,一共是八步, 这样的话我们就会出现一个问题,是什么呢?代码数量会超,那么这个怎么做呢?我们可以把路线拆分一下,因为它是八步嘛,我们就先让他走到这里,然后走到这里,然后这样的拆分,这样的拆分, 这样的话我们来看一下规律,一二三四四步,一二三四四步,一二三四四四四。这样的去做,首先前进四步,然后左转,再前进四步,然后套一个循环, 三次循环,然后看一下啊,为什么要这样做?那么首先前进四步,运行第一个代码是不是到这里了,然后左转,那么这个需要走八步,先走四步,然后再循环走四步,然后再左转,然后八步,这样的就走,现在已经到这个位置啊,到这个位置之后,他同样也要左转,然后前进,前进看一下步数,二三三步, 运行一下,结果好,没问题。十二题,同样也是一个循环的题啊,看一下啊,首先我们来分析一下路径, 只有分析完路径你才知道它的规则规律啊,一二三四五,这是五步,一二三四五五,一二三四五,后面就不用数了,都是五步, 我们再加啊,加一个循环,就让他重复执行四次,四个角都要走。首先前进五步,然后左转,然后继续再前进,再前进五步,因为五五加十嘛,没问题,看一下第十三题啊, 十三题,我们来分析一下路径,前进一步,到这再前进一步,再到这再前进,是这样的,每每次都走一步,然后前进一步,对不对?然后再右转,再前进一步,然后再左转,因为他要转到这个位置,然后这就是初始位置, 看一下循环的次数,一二三四五六六至九,循环六次,试一下。好,接下来我们进入第十四题,大家看一下啊,先分析下路径。前进,前进,前进到这,这是一个循环的题啊,看一下,一二三四五 一二三四五,这是五,这同样是五,首先人物上车,循环三次,然后再去前进五步,然后右转。 第十五题,我们来先分析下路径啊,先让 code 后退,吃到企鹅,然后从这个地方前进,然后再转过来,然后再后退,这是一个循环的题,我们来看一下啊, 首先他要后退一二两步,然后需要前进一二三四五六七八八步,然后再左转加循环四次,看一下啊, ok, 没问题,这个就是我们前十五道题的分享。