信息中心 发表于 2023-3-8 11:42:14

使用 Scratch 在 Minecraft 中编码



https://content.instructables.com/FCL/ZNLW/KI09Z3CL/FCLZNLWKI09Z3CL.png?auto=webp&frame=1&width=295&fit=bounds&md=e5674873e11449f534af1be83172e6aa

https://content.instructables.com/FAF/MDHT/KIBPIA9M/FAFMDHTKIBPIA9M.png?auto=webp&frame=1&crop=3:2&width=295&fit=bounds&md=beecea0e35f73e59676fef2e03c4a670

https://content.instructables.com/FDU/QY5K/KI34UUEK/FDUQY5KKI34UUEK.png?auto=webp&frame=1&crop=3:2&width=295&fit=bounds&md=13007d9aec7847d9c1fc0d8098062061






https://content.instructables.com/FE4/KE19/GRFN1OXD/FE4KE19GRFN1OXD.jpg?auto=webp&crop=1%3A1&frame=1&width=130由arpruss跟随

更多作者:https://content.instructables.com/F9Y/O9KT/LEVELVCO/F9YO9KTLEVELVCO.jpg?auto=webp&crop=1%3A1&frame=1&width=130

https://content.instructables.com/FNX/HVM2/LCOTDSWN/FNXHVM2LCOTDSWN.jpg?auto=webp&crop=1%3A1&frame=1&width=130

https://content.instructables.com/FUD/GQ5G/LCG8QOE5/FUDGQ5GLCG8QOE5.png?auto=webp&crop=1%3A1&frame=1&width=130




几年前,我编写了 RaspberryJamMod,这是一个专为用 Python 编写 Minecraft 程序而设计的模组。我现在写了一个基于浏览器的 Scratch 3.0 扩展,它与 RaspberryJamMod 交互,让你(或你的孩子或学生)制作在 Minecraft 中运行的基于块的程序,包括海龟图形。这些说明将主要围绕 Windows 设计,但应该适用于可以运行 Java 版 Minecraft 的任何其他系统。我假设您已经安装了 Minecraft。RaspberryJamMod 仅适用于 Java Minecraft 1.12.2(和一些更早版本)。但是,我将包含一个附录,解释如何将 Minecraft Scratch 扩展与 Raspberry PI Minecraft 一起使用,以及一个 Python 代理脚本。如果您还可以在您的服务器上设置一个 websockets-to-tcp 代理,您也许可以使用带有 RaspberryJuice 插件的 Spigot 服务器而不是 Minecraft+Forge+RaspberryJamMod。但我没试过。该 Instructable 涵盖了安装和设置,并描述了许多示例程序。注意: Microsoft为其 Windows 10 Minecraft:教育版提供了自己的基于块的编程系统。我没试过。
添加提示问问题评论下载
第 1 步:安装 Forgehttps://content.instructables.com/FKS/8HJD/KHT4S2BT/FKS8HJDKHT4S2BT.jpg?auto=webp&frame=1&crop=3:2&width=800&fit=bounds&md=a749111f3050c8a8358f6ea56c653da2

https://content.instructables.com/F93/8DY1/KHT4S2P8/F938DY1KHT4S2P8.jpg?auto=webp&frame=1&crop=3:2&width=400&fit=bounds&md=415e060a0c06ab4f1fc8f0381e0ba087

https://content.instructables.com/FEV/IZLP/KHT4S2BS/FEVIZLPKHT4S2BS.jpg?auto=webp&frame=1&crop=3:2&width=400&fit=bounds&md=bd17990c3409ffc4cc43f5e69eca8b78






Forge 管理 Minecraft 模组,并且是 Raspberry Jam 模组所必需的。我假设你已经安装了 Minecraft。
[*]您需要运行一次 Minecraft 1.12.2(版本很重要)。为此,启动 Minecraft Launcher,登录后单击“安装”,然后按“新建”按钮创建配置文件。从下拉列表中选择“Release 1.12.2”,保存配置文件(你可以给它起一个像“1.12.2”这样的名字),开始一个世界并确保它能正常工作。
[*]退出 Minecraft 和 Minecraft Launcher。
[*]下载1.12.2 的 Forge 安装程序。
[*]运行 Forge 安装程序。默认设置应该有效。
[*]启动我的世界。您现在将在“播放”按钮左侧的下拉框中拥有一个新的 Forge 1.12.2 配置文件。选择它。

添加提示问问题评论下载
第 2 步:安装 RaspberryJamModhttps://content.instructables.com/FXU/97JG/KHT4S4BC/FXU97JGKHT4S4BC.jpg?auto=webp&frame=1&width=559&fit=bounds&md=6518d2e2082d067fc4ec74d3725b5cd6

https://content.instructables.com/FJ9/MND5/KHT4S4TI/FJ9MND5KHT4S4TI.jpg?auto=webp&frame=1&crop=3:2&width=641&fit=bounds&md=b9c37280363870e330fca8ce0bb5ee4b





您可以从其发布页面获取 RaspberryJamMod 。在 Windows 上,你可以只下载RaspberryJamMod 的简易.exe 安装程序。除了 mod 之外,这还将安装 Python,一旦 Scratch 不可用,就可以进行更高级的 Minecraft 编程。如果您使用不同的操作系统(或喜欢手动操作),请下载mods.zip。转到您的.minecraft目录(Windows 上为%APPDATA%\.minecraft ),创建一个mods子目录,并将mods.zip的内容复制到那里。如果您需要 Python 支持,请下载 Python 脚本包并将内容(一个mcpipy子目录)放入您的.minecraft目录中。如果你有 Python 支持,你可以在不与 Scratch 交互的情况下快速测试 mod 是否正常工作。使用 Forge for 1.12.2 开始安装 Minecraft,开始一个新的单人游戏世界(推荐使用创意和超平坦),然后输入/py donut并按回车键。这应该运行一个 Python 脚本来创建一个装满水的大玻璃甜甜圈。
添加提示问问题评论下载
第 3 步:使用 RaspberryJamMod 扩展开始使用 Scratchhttps://content.instructables.com/FHT/4F9D/KHT4S5MN/FHT4F9DKHT4S5MN.png?auto=webp&frame=1&crop=3:2&width=600&fit=bounds&md=892578634a2ad9ea5981d4d57bb89a7a

https://content.instructables.com/FSG/34I3/KHT4S5HD/FSG34I3KHT4S5HD.png?auto=webp&frame=1&crop=3:2&fit=bounds&md=367a3708eaa18b12a6225a736cdadcdb





启动 Minecraft 并使用 Forge 和 RaspberryJamMod mod 激活创建一个超平坦的创意世界(最容易编程)。在单独的窗口中运行 Minecraft 和浏览器。转到浏览器并单击此链接以转到预加载了 RaspberryJamMod 扩展的 Scratch 3.0 版本。我建议为链接添加书签。对于最简单的程序:
[*]进入Scratch左侧栏的事件,将“当绿色旗帜被点击”拖到你的编程区域(有虚线网格的区域)。
[*]转到左侧栏中的Minecraft ,然后拖动“连接到 Minecraft”以将其捕捉到“单击绿旗时”块下方。
[*]拖动“在聊天中说”块并将其附加到“连接”块下。
[*]单击绿色旗帜(红色停车标志旁边的旗帜)。
[*]切换到 Minecraft 窗口,看到“Hello, World!” 在 Minecraft 聊天中(您可能需要单击“返回游戏”)。
对于未来的程序,请记住这一点:其他特定于 Minecraft 的块只有在“连接到 Minecraft”块首先被执行时才有效。
添加提示问问题评论下载
第 4 步:海龟图形:介绍https://content.instructables.com/FN0/MGYN/KHT4S7KE/FN0MGYNKHT4S7KE.png?auto=webp&frame=1&fit=bounds&md=cd69719ba3d75affc202b28385219c83

https://content.instructables.com/F73/2IAB/KHT4S7KF/F732IABKHT4S7KF.png?auto=webp&frame=1&width=369&fit=bounds&md=cd2cb72a2c57ec03d543cc338de542da

https://content.instructables.com/FFD/4XTX/KHT4SYHF/FFD4XTXKHT4SYHF.png?auto=webp&frame=1&fit=bounds&md=38cdb43379c2c2e03fad6dea25a25df23 更多图像







Scratch Minecraft 方块支持乌龟图形:一只假想的(而且是看不见的!)乌龟通过放下方块用假想的笔在绘图周围移动。您可以旋转海龟、更改块、向上移动笔(不绘图)和向下移动(绘图)以及更改绘图线的粗细。让我们先画一个金色的六边形。为此,您让乌龟向前移动,转 60 度(即 360/6),重复六次。
[*]从Events中,将“When green flag clicked”拖出到编程区域。
[*]在Minecraft中,在事件块下链接“连接到 Minecraft”。
[*]在“connect”块下链接一个“turtle pen block”,并将块更改为“gold block”(或任何你想要的)。
[*]在Control中,链接“turtle pen”块下的“repeat”块。单击块中的10并将其更改为6。
[*]在Minecraft中,将“turtle forward”链接到“repeat”块内并将距离更改为5。
[*]将“turtle turn left”链接到“repeat”块内的“turtle forward”块下,并将角度更改为60。
[*]点击绿旗。
注意:乌龟总是从玩家所在的位置开始,并且它开始时面向玩家所面对的最近的罗盘方向。要制作五边形星形,请使用六边形代码,将重复计数更改为5,增加海龟前进距离(例如,更改为40),并将旋转角度更改为144。我还插入了“龟笔积木”,并在重复之前选择了一个海灯笼积木,让它更有趣一点。要用乌龟做一个圆圈,只需做一个有很多边的图形:例如,一个 36 图形,中间有 10 度的转角。对于装满水的玻璃甜甜圈,可以先做笔粗大的玻璃圈,再做笔粗细的水圈。然而,还有最后一个技巧。由于乌龟是从玩家开始的,所以一旦画出甜甜圈,玩家就会被困在甜甜圈里面!因此,在程序的末尾,添加一个“将玩家移动到顶部”块以解开玩家并将它们移动到那里的任何结构的顶部(如果您为 RaspberryJamMod 安装了 Python,您也可以运行 Python 脚本来完成在 Minecraft 中输入/py top即可)。请参见上面代码的屏幕截图。
添加提示问问题评论下载
第 5 步:海龟图形:全 3Dhttps://content.instructables.com/FAX/UD3H/KHT4SSIC/FAXUD3HKHT4SSIC.png?auto=webp&frame=1&fit=bounds&md=2cbba2004b49db7e27d7676a334a1dba

https://content.instructables.com/FVN/FJ9H/KHT4STO1/FVNFJ9HKHT4STO1.png?auto=webp&frame=1&fit=bounds&md=ffd24701ed38a48e4f6ee98aa67eb3c1

https://content.instructables.com/FVB/R1WX/KHT4STO2/FVBR1WXKHT4STO2.png?auto=webp&frame=1&width=327&fit=bounds&md=adcb9ac45930754f05ef97322a59ca352 更多图像







“海龟左转/右转”块让您可以在一个二维平面内移动海龟。但您也可以使用“turtle pitch/yaw/roll”块(您可以从下拉列表中选择 pitch/yaw/roll)上下旋转乌龟并沿其轴旋转。上面的美国宇航局图片显示了三个旋转的含义。当您在块中选择“偏航”时,这与向右转相同(向左使用负角)。当你选择“俯仰”时,就是让乌龟的鼻子上下转动(向上为正)。而“roll”让你可以在它的轴上乌龟。例如,如果您想让甜甜圈倾斜 45 度,只需在绘制甜甜圈之前插入一个“turtle roll 45 degrees”方块。上面的屏幕截图显示了如何制作带有经度网格线的球体。首先,制作一个 36 边形的垂直“圆圈”,这次将海龟在每一边后向上倾斜 10 度。然后在每个圆圈后偏航 20 度,并重复 18 次。
添加提示问问题评论下载
第 6 步:坐标https://content.instructables.com/FAK/UIJ7/KHT4SZN0/FAKUIJ7KHT4SZN0.png?auto=webp&frame=1&fit=bounds&md=4d4d1ba3ac24a79ef0479405177c12fa

https://content.instructables.com/FYN/7A2J/KHT4T0DD/FYN7A2JKHT4T0DD.png?auto=webp&frame=1&fit=bounds&md=0aee47de7bb70ea6a30561c842f4db71





您还可以使用Minecraft (x,y,z) 坐标系。Minecraft x 坐标是东西向,y 坐标是向下向上,z 坐标是南北向。但是,由于 RaspberryJamMod 模拟了 Raspberry PI Minecraft 的很多功能,因此坐标与标准 Minecraft 坐标有一个区别:坐标是相对于生成点的,因此生成点位于 x=0 和 z=0。如果您使用超平坦世界(如推荐的那样),那里的 y=0 也是。例如,上面的第一个示例使用“在 (x,yz) 处放置方块”循环遍历三个坐标以制作一个 10x10x10 的 TNT 立方体。(你应该首先在 Scratch 的变量部分点击“创建一个变量”三次来创建 x、y 和 z 变量。)您还可以使用“(x,y,z) 处的块 ID”获取特定坐标处块的块ID 。我们将在下一站使用它。
添加提示问问题评论下载
第 7 步:与玩家互动https://content.instructables.com/FXV/HSJ9/KHUK7REZ/FXVHSJ9KHUK7REZ.png?auto=webp&frame=1&fit=bounds&md=852ac66324d819f15250014c1f6740a3

https://content.instructables.com/FDY/SOX5/KHUK83U1/FDYSOX5KHUK83U1.png?auto=webp&frame=1&crop=3:2&width=351&fit=bounds&md=48d79b90456c6deba70af2c3250fd712

https://content.instructables.com/FHM/D5HK/KHUK8X73/FHMD5HKKHUK8X73.png?auto=webp&frame=1&width=351&fit=bounds&md=c48f1207b0f7cee89b98daaa5bfce762

https://content.instructables.com/FVH/DZWI/KHXF3NBA/FVHDZWIKHXF3NBA.png?auto=webp&frame=1&crop=3:2&width=351&fit=bounds&md=9b2fcf90be5efba3744729d26dfca603






有获取玩家坐标、将玩家移动到特定坐标以及将玩家移动特定量的块。获取玩家坐标的方块有一个下拉菜单可供选择,如果你想要像 (3,5,-8) 这样的方块坐标,或者你想要精确的数字坐标(玩家不必在方块上完全对齐),比如(3.2,5.7,-7.4)。上面的第一个示例获取玩家位置,存储它,然后循环遍历玩家周围的 20x20x20 立方体,并将每个不是空气的方块变成金子。要进入该程序,您将创建六个变量sourceX、sourceY、sourceZ、x、y和z。请注意它是如何使用“(x,y,z) 处的块 ID”并将结果与​​“空气块 ID”进行比较的。第二个例子是一个在空中建造一座无限延伸的桥的程序。在“when green flag checked”和“connect to Minecraft”块之后,我们放置了一个永远的循环。在该循环中,我们将 (x, y, z)(您需要创建这些变量)设置为玩家下方方块的坐标。然后我们获取玩家下方方块的 ID,并将其放入名为 block 的变量中(您需要创建一个名为block的变量)。如果那个方块是空气或流动的水,我们就在它的位置放一个玻璃方块。对于桥,我建议慢慢走,因为很容易走到桥的前面然后摔倒。偷偷摸摸的效果很好。
添加提示问问题评论下载
第 8 步:向量https://content.instructables.com/F2K/T5JE/KHXF3NB9/F2KT5JEKHXF3NB9.png?auto=webp&frame=1&width=573&fit=bounds&md=c68d731c1a08b28ed677c719fbda2e43

https://content.instructables.com/FQO/U4YN/KIKA4IVB/FQOU4YNKIKA4IVB.png?auto=webp&frame=1&width=627&fit=bounds&md=94fcc0ed93a8334d62d47226092b0f45





桥代码有一个小问题。玩家可能会在您设置的时间之间移动,例如,基于玩家 x 坐标的 x 变量和基于玩家 y 坐标的 y 变量。为避免此问题,您可以同时获取玩家的所有三个坐标作为三维向量(这在 Scratch 中存储为由逗号分隔的三个数字组成的字符串)。然后,您可以使用“-矢量坐标”块从矢量中提取坐标。第一个代码图像显示了这是如何完成的。所有采用 xyz 坐标的方块(例如,“将玩家移动到 (x,y,z)”和“将方块放在 (x,y,z)”)也有一个特殊的隐藏功能:您可以将一个向量提供给x 坐标,在这种情况下忽略 y 坐标和 z 坐标。并且有一个“矢量(x,y,z)”块,可以用三个数字组成一个矢量。向量使您可以方便地将位置存储在单个变量或列表的单个条目中。桥梁代码的最终版本利用这一点来制作一座桥梁,一旦您在它上面走得足够远,它就会自行删除。在“Forever...”循环中,我们读取玩家位置。然后我们创建一个新的向量来存储玩家下方方块的位置。然后除了在该位置绘制一个玻璃块之外,该矢量还被存储到一个列表中。(在变量下单击制作列表并给它一个名字,例如,“桥”。)然后,我们检查桥列表是否有超过七个条目。如果是这样,我们将一个空气块放在最旧的桥块的位置(更复杂的方法是使用第二个列表来存储原始块的内容,以防它是水而不是空气,但水应该流入空气中无论如何,如果它是一座水上桥,那么空间应该足够了,所以在大多数情况下空气应该足够好)并从桥梁列表中删除该位置。
添加提示问问题评论下载
第 9 步:与其他事件交互https://content.instructables.com/FA7/W8L8/KHYUJAD6/FA7W8L8KHYUJAD6.png?auto=webp&frame=1&crop=3:2&width=600&fit=bounds&md=f0a76489f50d857b42a4175661152e58

https://content.instructables.com/FYI/IGFE/KHYUJAB0/FYIIGFEKHYUJAB0.png?auto=webp&frame=1&crop=3:2&width=600&fit=bounds&md=4125da1770960cba9c73a4908606bb3e





Scratch 具有检测各种事件的功能,例如击键。不幸的是,当您切换到 Minecraft 窗口时,击键检测不起作用,但您仍然可以在 Scratch 浏览器窗口中使用它。在 Minecraft 窗口(至少在 Windows 上)确实有效的一件有趣的事情是噪音检测。例如,这里有一段代码,只要有足够的噪音,就会在玩家附近的随机位置生成史莱姆。像往常一样,从“点击绿旗时”和“连接到 Minecraft”开始。然后从Sensing中拉出一个新的“When loudness”事件。30 的阈值对我有用。然后使用Minecraft “生成”块生成坐标等于玩家坐标加上随机偏移量的东西(您可以从头开始从运算符部分获得随机数)。然后稍等片刻,再做其他事情,以免被蜂拥而至。
添加提示问问题评论下载
第 10 步:制作您自己的临时块:模拟时钟





https://content.instructables.com/FGL/2XY0/KHYUJ09J/FGL2XY0KHYUJ09J.png?auto=webp&frame=1&fit=bounds&md=133aed52dc488a13b3a84117b5f6da59

https://content.instructables.com/FI6/W51J/KHYUJ1PC/FI6W51JKHYUJ1PC.png?auto=webp&frame=1&crop=2:3&width=234&fit=bounds&md=7ba4b1dfe84a84311f30ac3d4e3d47ca

https://content.instructables.com/F5W/80B6/KHYUJ09K/F5W80B6KHYUJ09K.png?auto=webp&frame=1&width=234&fit=bounds&md=12f1e0cb754e129d67c3451fb5cf0b932 更多图像







制作您自己的 Scratch 积木可以让您反复使用您的一些代码。让我们制作一个可以工作的模拟时钟。这将需要绘制三只手,因此我们想要制作一个绘制一只手的块。这将是我将详细讨论的最先进的程序。转到变量并创建一个名为radius的新变量来存储时钟的总半径。转到我的块并单击创建块。调用块Hand。然后创建一个数字输入四次,并将输入命名为angle、length、depth和block。这些将让您指定指针所在的角度(0 表示 12 点钟)、相对于半径的长度乘数(例如,我在 0.6*radius 处设置时针)、这个层所在的层有多深手是相对于脸绘制的(我们将在不同的层绘制三只手,这样它们就不会相互碰撞),以及手的方块(我们将其设置为空气以擦除手用于动画)。现在您需要通过说明其中发生的操作来定义Hand块。从Control中拉出一个“if ... then ...”块并将其扣在 Hand 块标题下。填写检查角度是否不为空的条件:如图所示从Operators中拉入“not”和“=”块(您需要删除“=”块中的“50”,并且不放任何在其位置的东西——甚至没有空间)。手块将从钟面中间的海龟开始,面朝上,笔朝上(即不画图)。拉入Minecraft “turtle save”方块以保存开始的海龟位置,然后将其捕捉到“if ... then ...”方块内。然后将海龟倾斜 -90 度,使其面向水平,将其向前移动深度以将其移动到手所在的层(将深度变量从Hand标题拖动到“turtle forward”块中),倾斜海龟后退 90 度,然后将海龟向右旋转角度变量(将其从“手”标题中拖出)。放下乌龟笔,将乌龟块设置为块变量,然后按长度*半径前进(从Operators中拉出一个乘法块)。然后使用“turtle restore”块将 turtle 恢复到Hand块开始运行时的状态。现在,对于面部轮廓,我们需要一个Circle块:再次使用My Blocks创建它,并给它一个输入r。该块将在与Hand块相同的海龟条件下调用。对于圆形,我们保存海龟,将海龟块设置为黑色羊毛,将海龟向前移动 r ,将海龟向右转 90 度,然后绘制一个 72 边形的多边形。该多边形的每一边都是r* 0.087(圆的周长是 2πr,2π/72 大约是0.087)。然而,为了使多边形居中,我们首先后退该数量的一半。多边形重复72次完成,然后我们将海龟恢复到原来的状态。这段代码可能值得在其他项目中重复使用。现在,我们编写主要代码。再创建六个变量:h、m、s、h0、m0、s0。h 、m、s变量将存储时针、分针和秒针的当前角度。h0 、m0、s0变量将存储以前的角度,因此我们可以比较它们并只重绘那些在任何给定时间需要重绘的手。从通常的“当绿旗选中时”和“连接到 Minecraft”块开始。然后从Variables中拉出“set”块,并使用它们将h0、m0和s0变量设置为空(只需删除默认情况下在块的值槽中的“0”,什么都不放- - 甚至没有空间 - 在他们的位置)。将半径变量设置为您喜欢的任何值:我选择了 18。现在,将海龟向上倾斜 90 度,使其指向上方,将笔向上抬起,然后向前移动radius。您现在在钟面中间有了乌龟,笔朝上,指向上方,就像手和圆块需要的那样。调用Circle块(从My Blocks中拉出),将radius放入其输入中。现在从控件中拉出一个Forever块。其余代码都在其中。将h设置为“当前小时”(在Sensing中,默认情况下为“当前年份”,但您可以使用下拉列表将“年份”更改为“小时”)乘以 30(每次旋转 12 小时,360/12=30 度)。将m设置为“当前分钟”乘以 6(每转 60 分钟,360/60=6 度)。将s设置为“当前秒数”乘以 6。现在,您将拥有三个“如果……那么……”积木,每只手一个。第一个检查以确保h不等于h0,即时针自上次移动以来已经移动(请记住h0开始时为空白,因此它第一次运行时将算作已移动)。然后用角度h0调用Hand块,无论你喜欢什么长度乘数,深度为 0,并且块是空气(从Minecraft中拉出“block id”块并选择“air”)以擦除旧手(如果有是一个)。接下来用角度h和你真正想要它的任何块来调用它。然后将h0设置为h,这样您就可以监控手的运动。对分针和秒针执行相同的操作,但深度为 1 和 2,这样它们就不会相互干扰。为了获得更好的性能,在“永远”块的开头放置一个“暂停绘图”块,在它的末尾放置一个“恢复绘图”块。这使得所有的方块同时被绘制,以获得更流畅的动画和更高的效率(例如,有时一个手方块被擦除只是为了再次绘制,因为它仍然是手的一部分在新的位置;暂停/恢复方法意味着不需要擦除)..就是这样!在代码截图中,我将主要代码拆分为两张图片以适应。如果您更喜欢数字时钟,那将更加复杂,因为您必须对所有数字的形状进行编程。如果你愿意,你可以为此下载这个 Scratch 程序。
添加提示问问题评论下载
第 11 步:指出问题https://content.instructables.com/FHZ/87M3/KHXF3MQJ/FHZ87M3KHXF3MQJ.png?auto=webp&frame=1&fit=bounds&md=1733c4b063486fe3eabdd4b9b502de1c

https://content.instructables.com/FZT/WJPR/KHXF3MQK/FZTWJPRKHXF3MQK.png?auto=webp&frame=1&crop=3:2&width=694&fit=bounds&md=6f1ddf61d3ee2b7712afd9b21334cb32





“剑击中矢量位置”块返回被剑击中的 Minecraft 块的位置。如果有多个方块被击中,它们将被一个一个地返回。如果没有任何块被剑击中,或者如果所有块都已返回,则该块返回一个空字符串。上面的示例是一段代码,可以将您用剑击中的每个方块变成金块。在“when green flag checked”块和“connect to Minecraft”块之后,您从控制区域放入一个“forever”重复块。在 repeat 块中,您将一个名为h的新变量设置为“sword hit vector position”。然后检查该变量是否不为空。如果它不为空,则在h位置放置一个金块。(如果第一个槽中有向量,则“put block”块中的其他两个槽将被忽略。)您可以将此机制用于各种事情。给读者的一个练习:制作一个保存当前玩家位置的 Scratch 程序,然后等你用剑点击另一个位置,然后使用一个带有“block id at (x,y,z)”的三重嵌套循环并“在 (x,y,z) 放置方块”将第一个玩家位置的 Minecraft 环境复制到第二个位置。
添加提示问问题评论下载
第 12 步:将 Turtle 与坐标结合https://content.instructables.com/FGR/76I5/KI09Z38O/FGR76I5KI09Z38O.png?auto=webp&frame=1&width=478&fit=bounds&md=e54436c82d04241b375f9de3a2a8687a

https://content.instructables.com/FBY/YR16/KI09Z38P/FBYYR16KI09Z38P.png?auto=webp&frame=1&width=722&fit=bounds&md=4fd9f399951d6f3c6367af12b8dd960c





有一个块可以将海龟移动到特定的 (x,y,z) 坐标。这使您可以结合基于坐标和基于海龟的绘图。例如,这里的示例代码通过使乌龟笔变粗来绘制一个胖三叶结,然后使用参数公式将乌龟移动到结上的一系列坐标,然后将乌龟移动 0,这只是绘制了一个圆形斑点。为了速度,绘图在绘图之前暂停并在之后恢复,这节省了绘制许多块,因为斑点会重叠。
添加提示问问题评论下载
第 13 步:分形和递归https://content.instructables.com/FMS/1WPO/KHXF3ONB/FMS1WPOKHXF3ONB.png?auto=webp&frame=1&fit=bounds&md=36845409ce28b255b32b22a425cfe7a7

https://content.instructables.com/FQS/461V/KHXF3QXO/FQS461VKHXF3QXO.png?auto=webp&frame=1&width=238&fit=bounds&md=0f264b36d003b1297609e7eae6dbfbe1

https://content.instructables.com/FRC/XNOI/KHXF3QS6/FRCXNOIKHXF3QS6.png?auto=webp&frame=1&crop=3:2&width=238&fit=bounds&md=0f1b90f8fa03dbed0d27d611950036eb

https://content.instructables.com/FHQ/2TDO/KHYUK5LB/FHQ2TDOKHYUK5LB.png?auto=webp&frame=1&crop=2:3&width=238&fit=bounds&md=1dd401c9a0752b5baa6a5b266f3db0443 更多图像







一种更高级的技术是递归。假设你想画一棵树。一种方法是将其作为类似分形的对象。用乌龟画一个向上的树干,并在树干的末端画四个树枝(一种方法是将乌龟向下倾斜,画一个树枝,将乌龟向后倾斜,滚动并重复),而在两端在这些分支中,有四个更短的分支以相同的方式绘制,依此类推进行多次迭代。有关详细信息,请参阅代码。请注意,要创建分支代码,您需要单击我的块,然后制作一个块,为其命名(分支)并添加两个槽,一个称为计数器(计算我们迭代了多少次)和一个称为长度对于分支的当前长度。每次调用分支块时,计数器和长度都会减少。查看完整代码的屏幕截图。许多分形可以用类似的技术创建。例如,在上面您可以看到一条龙曲线的代码(基于维基百科中的Python 代码)。您还可以结合分形和随机性。这是一个 Scratch 文件(下载它,然后使用File | Load 从您的计算机中的Scratch 加载它)通过随机决定要跳过哪些分支(有时它会跳过所有内容甚至不做主干)来做一棵更漂亮的树,所以你可能需要多次运行它!),使树枝在末端变细,并添加叶子。
添加提示问问题评论下载
第 14 步:高级:将 L 系统分形转换为刮刮码https://content.instructables.com/F4P/FAYU/KI1PEUNN/F4PFAYUKI1PEUNN.png?auto=webp&frame=1&fit=bounds&md=bdca25cab4de8a2b4ffbb4f364ba8c7a

https://content.instructables.com/F3Q/C61F/KI1PEUNO/F3QC61FKI1PEUNO.png?auto=webp&frame=1&fit=bounds&md=9103b4c13041a27f713ded108dab3548

https://content.instructables.com/FQP/4O3A/KI1PEURG/FQP4O3AKI1PEURG.png?auto=webp&frame=1&crop=3:2&width=349&fit=bounds&md=2e33f420a63d6c9022c50914df981688

https://content.instructables.com/F7L/71YC/KI1PEV6H/F7L71YCKI1PEV6H.png?auto=webp&frame=1&crop=3:2&width=349&fit=bounds&md=aa64965a7bfd3e82ef83d04e9343cd7d






您经常可以找到在 Internet 上描述为L 系统的分形。L-系统是一个反复递归变换一系列符号的系统,最后的一系列符号代表乌龟的运动。例如,希尔伯特曲线由变换规则系统描述:L -> +RF-LFL-FR+
R -> -LF+RFR+FL-公理:大号这意味着我们从公理开始,重复变换直到达到所需的层数。因此,在第一层,我们的 L 变成:+RF-LFL-FR+然后在第二个下一级转换之后,我们有:+-LF+RFR+FL-F-+RF-LFL-FR+F+RF-LFL-FR+-F-LF+RFR+FL-+最后,在最后一层,我们执行与任何具有动作的符号相关联的动作。例如,习惯上,+ / -表示“龟右/左”,F表示“龟前”。L 系统通常指定转弯的角度:在这种情况下为 90 度。前进的距离取决于你。要将其转换为 Scratch 程序,您可以首先为每个具有转换规则的符号创建一个新的 Scratch 块。在上述情况下,即L和R。为了便于参考,您可以添加带有规则输出的标签。这些块中的每一个都必须有一个输入level,并且应该从检查 level 是否大于零开始。如果它大于零,那么我们在其转换规则中执行符号序列,这可能包括调用块本身或另一个块。但是,当您调用块时,将level-1而不是level传递给它。如果带有转换规则的块有一个动作,将该动作放在if level>0 ... then ... else块的 else 部分(本例中不需要)。然后像往常一样通过放置“当绿色标志被选中”,然后“连接到我的世界”,然后设置任何海龟参数(厚度和笔块)来制作你的主程序。然后放入公理的代码,调用任何块。例如,在此示例中,公理只是L,因此您只需调用L块。当你调用需要一个级别的块时,第一次运行它时,做一些像 4 这样的小事,因为分形绘制时间呈指数增长,然后逐渐增加。我还制作了一个3D 版本。
添加提示问问题评论下载
第 15 步:高级:限制和提示

据我所知,Scratch 不允许您拥有自定义块的任何本地变量。这使得递归代码比应有的更具挑战性。如果你在递归块中使用变量,你必须非常小心递归的下一层会修改这些变量,所以当你从块的递归调用返回后,变量将变得无效。所以仔细计划你的递归。有时这将需要在递归调用返回后低效地重新计算一些东西,尽管有时您可以通过创建另一个带有变量参数的自定义块并将值传递给自定义块来解决缺少局部变量的问题(不幸的是,您无法分配自定义块参数的新值,但是,一旦你在自定义块代码中)。将二维数据存储为 Minecraft 块有时是很自然的。例如,我使用递归回溯算法制作了一个迷宫。Scratch代码在这里。这个想法是你先画一块实心板。然后你递归调用一个带有起始位置的隧道块。该块首先在该位置擦除一个正方形。然后,您在四个主要方向上环顾四周,寻找距离为 2 的空白方块,如果没有,您就完成了。如果有一个空方块,你就挖到其中一个随机方块,然后在那个位置递归地调用黑色隧道。然后重复该过程,直到基本方向上距离为 2 的每个方块都被擦除。迷宫本身就是它自己的保存状态。
添加提示问问题评论下载
第 16 步:Raspberry PI 我的世界https://content.instructables.com/FZA/3JLW/KI09YRI9/FZA3JLWKI09YRI9.png?auto=webp&frame=1&crop=3:2&fit=bounds&md=e6169f65ab0f5d7b905dab798e0b4ecf

https://content.instructables.com/FY6/JY2S/KI09YRRC/FY6JY2SKI09YRRC.jpg?auto=webp&frame=1&width=400&height=1024&fit=bounds&md=38dd7f070fb8e2db1d6fbbbafebed844





Scratch Minecraft 扩展通过 WebSockets 连接到 Minecraft,RaspberryJamMod 支持但 Raspberry PI Minecraft 不支持。为了解决这个问题,我编写了一个 python3 脚本来在 WebSockets 和 Raspberry PI Minecraft 之间进行转换。第一次运行:pip3 安装 websocket 服务器在你的圆周率上。然后下载我的minecraftproxy.py脚本并启动它:python3 minecraftproxy.py(您可能希望将其设置为在启动 Minecraft 时启动。这取决于您。)如果您的 PI(也许是 RPI 4?)足够快以在浏览器中运行 Scratch,您现在可以像以前一样运行它。但如果不是,您将需要在另一台计算机或平板电脑上运行 Scratch。这就涉及到一个恼人的问题。Chrome(可能还有其他浏览器)拒绝通过 https 设备上运行的代码与其他设备(我正在使用的设备)建立不安全的 WebSockets 连接。因此,不要转到我之前在 Instructable 中提供的 https 链接,而是转到我的Scratch+Minecraft 页面的 http 版本。现在在“连接到 Minecraft”块中,将“localhost”更改为您的 PI 的 IP 地址。PI 不支持所有桌面版 Minecraft 方块,并且可能存在一些不受支持的命令。这里有两个副手:不支持生成生物,并且因为不支持player.getRotation()命令,海龟总是在开始时指向相同的方向,而不是匹配玩家的指向。我还没有用 PI 彻底测试这个扩展,所以如果有困难请告诉我。
页: [1]
查看完整版本: 使用 Scratch 在 Minecraft 中编码