【mod介绍】电脑mod——只有码农知道的世界
刚才这个小程序主要是为了引出变量和循环两个概念,有了这两个概念可以干什么?你可以用它来挖矿!!!
是的,你没有听错,只需要这两个概念,不需要指针数组结构体类这些复杂的知识,只需要这两个最基础的概念你就可以制造出自动挖矿机!只需要配合电脑mod赠送你的turtle操作代码
,你就可以实现解放双手梦想!!不要998,也不要98,更不需要9.8,你只需要看完我接下来的教程,自动挖矿机属于你!!!
是的,你没有听错,只需要这两个概念,不需要指针数组结构体类这些复杂的知识,只需要这两个最基础的概念你就可以制造出自动挖矿机!只需要配合电脑mod赠送你的turtle操作代码
,你就可以实现解放双手梦想!!不要998,也不要98,更不需要9.8,你只需要看完我接下来的教程,自动挖矿机属于你!!!
首先打开action,然后把里面的代码都删掉(这些代码没有实际意义,纯属用来卖萌的),当然也可以新开一个文件,在里面输入如图所示的代码。。。
那个for循环就不用说了,来看一下新的代码:
print("start...") 输出“start...”,提示程序开始运行
turtle.dig() 挖掉turtle前面的方块
turtle.digUp() 挖掉上面的方块(注意这里代码的大小写)
turtle.forward() turtle前进一格
加上for循环的话机器人就可以一直挖掘1*2的方块并且一直前进
ps:其实这里的代码有点问题,应该要把turtle.forward()和turtle.digUp() 位置呼互换下,至于原因,想象一下开始运行和结束运行时turtle的动作就行了,虽然这个无伤大雅
尝试一下~~~
开始了。。。
那个for循环就不用说了,来看一下新的代码:
print("start...") 输出“start...”,提示程序开始运行
turtle.dig() 挖掉turtle前面的方块
turtle.digUp() 挖掉上面的方块(注意这里代码的大小写)
turtle.forward() turtle前进一格
加上for循环的话机器人就可以一直挖掘1*2的方块并且一直前进
ps:其实这里的代码有点问题,应该要把turtle.forward()和turtle.digUp() 位置呼互换下,至于原因,想象一下开始运行和结束运行时turtle的动作就行了,虽然这个无伤大雅
尝试一下~~~
开始了。。。
这个是前进20格的代码,既然进去了就应该向办法让它出来,是吧。。。
(见上图)还是说明下新出现的代码:
turtle.turnLeft()
这个还需要解释吗啊喂,turn left 就是向坐转啊,小学生都知道的英语啊喂!咳咳,严肃点,这个代码的作用是使机器人向左转(摔!)
接下来看一下效果
它在深处
看到他回来了。。。
壮士回来了!
看看收获如何,都是一些没用的东西。。。(废话,这个高度哪来好东西)
(见上图)还是说明下新出现的代码:
turtle.turnLeft()
这个还需要解释吗啊喂,turn left 就是向坐转啊,小学生都知道的英语啊喂!咳咳,严肃点,这个代码的作用是使机器人向左转(摔!)
接下来看一下效果
它在深处
看到他回来了。。。
壮士回来了!
看看收获如何,都是一些没用的东西。。。(废话,这个高度哪来好东西)
但是看看挖的坑。。。
好♂黑啊(为什么加个哲学符号就变得哲♂学了呢→_→,这是个问题)
因此,我们需要利用turtle给我们自动插♂火♂把(果然很好用。。。)
好♂黑啊(为什么加个哲学符号就变得哲♂学了呢→_→,这是个问题)
因此,我们需要利用turtle给我们自动插♂火♂把(果然很好用。。。)
代码如下。。。新加的代码写在哪里应该能看出来吧
按照惯例解释下新出现的代码。。。
turtle.select(16) 为了说明这条代码的作用,就先来看看turtle右边自带的物品栏(下图更清晰)。是不是能看到第一个有个加量的框框呢?那个就是选中的格子,利用该代码可以把选框移动到任意格,格子的编号从上到下,从左到右为1~16,turtle.select(16)就是选中第16格(即火把所在的位置)。那么为什么要修改选中的格子呢?因为后面的放置代码需要会向上放置选中的方块,然后选中火把所在的格子就可以放置火把了。。。
if i%10 == 1 then … end
这个叫做条件语句里面有个 i%10 == 1 公式,它的意思的i除以10的商数为1,(这里的i就是for循环里面的i,然后每循环一次i的数值就会加1),把整个条件语句翻一下就是 如果i除以10的商数为1,那么就执行里面的代码,否则结束。配合i值的变化,就可以做到每前进10格turtle就会向上放置一个火把
turtle.placeUp()
向上放置方块(还是注意大小写)。
代码写好并保存后就在第16格放置足够的火把。
按照惯例解释下新出现的代码。。。
turtle.select(16) 为了说明这条代码的作用,就先来看看turtle右边自带的物品栏(下图更清晰)。是不是能看到第一个有个加量的框框呢?那个就是选中的格子,利用该代码可以把选框移动到任意格,格子的编号从上到下,从左到右为1~16,turtle.select(16)就是选中第16格(即火把所在的位置)。那么为什么要修改选中的格子呢?因为后面的放置代码需要会向上放置选中的方块,然后选中火把所在的格子就可以放置火把了。。。
if i%10 == 1 then … end
这个叫做条件语句里面有个 i%10 == 1 公式,它的意思的i除以10的商数为1,(这里的i就是for循环里面的i,然后每循环一次i的数值就会加1),把整个条件语句翻一下就是 如果i除以10的商数为1,那么就执行里面的代码,否则结束。配合i值的变化,就可以做到每前进10格turtle就会向上放置一个火把
turtle.placeUp()
向上放置方块(还是注意大小写)。
代码写好并保存后就在第16格放置足够的火把。
部分有编程基础的或者喜欢多想想的同学可能会问,为什么要先用digit来定义挖矿的距离然后再使用digit吗?其实这个涉及到了一个代码修改难度的问题,也就是做软件会遇到的软件的“健壮性”问题。。。比如我觉得一次只挖20格太少了,想要挖100格怎么破?
在这个代码里面只需要把20改成100就行了呐~~~(见下图)
在这个代码里面只需要把20改成100就行了呐~~~(见下图)
今天的介绍就发到这里吧。。。额,最后在放出一个东西来
喜闻乐见的TNT轰炸机!!!
哼,我才不会在这里放出教程呢,要做自己写代码去,给一个提示吧,rs.setOutput("bottom",true)给下面的方块通红石信号rs.setOutput("bottom",false)关闭下面的红石信号。
嗯,就是这样,以上!
喜闻乐见的TNT轰炸机!!!
哼,我才不会在这里放出教程呢,要做自己写代码去,给一个提示吧,rs.setOutput("bottom",true)给下面的方块通红石信号rs.setOutput("bottom",false)关闭下面的红石信号。
嗯,就是这样,以上!
继续开始教程。。。
上回讲到,那个挖矿的代码还有很多的不稳定性,那么在挖矿的过程中会出现哪些问题呢?让我们来看一下以下的几种情况。。。
1.如下图,当你的turtle挖到前方砂砾的时候,由于砂砾会掉下来形成阻碍,导致turtle前进的代码无效,turtle前进的步数就会变少,然而回去的时候turtle的前进步数没有变化。以上这些会导致一种结果,挖掘的深度不会到达预期值,而且回来的时候会超过出发的点
2.如下图所示,当上方石头的上面为砾石的时候,挖掉石头砾石就会掉下来,然后就会如下下图所示。。。
然后当turtle回来的时候就会被砾石所困住。。。由于回来的路上turtle不会挖掘前方的方块,导致的结果为turtle直接困在这里。
3.这也是最最心酸的bug,这货会直接挖掉钻石,如果你有一把时运3的镐子,那么直接用turtle挖钻石就是极大的浪费,用时运3的镐子平均可以获得3颗钻石,而turtle只能获得一颗,因此这个问题也必须要解决掉。
上回讲到,那个挖矿的代码还有很多的不稳定性,那么在挖矿的过程中会出现哪些问题呢?让我们来看一下以下的几种情况。。。
1.如下图,当你的turtle挖到前方砂砾的时候,由于砂砾会掉下来形成阻碍,导致turtle前进的代码无效,turtle前进的步数就会变少,然而回去的时候turtle的前进步数没有变化。以上这些会导致一种结果,挖掘的深度不会到达预期值,而且回来的时候会超过出发的点
2.如下图所示,当上方石头的上面为砾石的时候,挖掉石头砾石就会掉下来,然后就会如下下图所示。。。
然后当turtle回来的时候就会被砾石所困住。。。由于回来的路上turtle不会挖掘前方的方块,导致的结果为turtle直接困在这里。
3.这也是最最心酸的bug,这货会直接挖掉钻石,如果你有一把时运3的镐子,那么直接用turtle挖钻石就是极大的浪费,用时运3的镐子平均可以获得3颗钻石,而turtle只能获得一颗,因此这个问题也必须要解决掉。
对于前2种情况,可以归结为一种情况:在前进时受到了砾石的阻碍。因此我们只需要在turtle前进的时候判断是否前进成功,这个代码的逻辑是这样的:
1.判断是否前进成功,如果成功的话就结束(因为已经前进了,所以不需要有其他的改动),否则转到2
2.挖掘前面的方块(这里假设阻碍前进的是砾石,而且大多数情况都是这样),然后执行1
通过这个逻辑就能够解决问题了。
由于这个代码在挖掘和回来的时候都要用到,所以我会在修改原来的代码是用到“函数”这个概念(不是数学里的函数,是指编程里面的函数)。具体的就在接下来的教程中。
ps:刚才寝室有点事,所以更新地有点慢,不要在意。。。
1.判断是否前进成功,如果成功的话就结束(因为已经前进了,所以不需要有其他的改动),否则转到2
2.挖掘前面的方块(这里假设阻碍前进的是砾石,而且大多数情况都是这样),然后执行1
通过这个逻辑就能够解决问题了。
由于这个代码在挖掘和回来的时候都要用到,所以我会在修改原来的代码是用到“函数”这个概念(不是数学里的函数,是指编程里面的函数)。具体的就在接下来的教程中。
ps:刚才寝室有点事,所以更新地有点慢,不要在意。。。
根据前面的逻辑可知,turtle在每次前进的时候都需要进行判断,因此我们可以把原来的turtle.forward()替换掉,我在这里换成forward()(见下图)
这里的forward就是我准备要定义的“函数”
这里的forward就是我准备要定义的“函数”
如图所示,我在一开始的digit = 10 下面加了一段forward()代码。
forward()前面有一个关键字“function”,这个关键字就说明后面的forward()是一个函数,你可以理解为下面的forward()被该函数里面的代码所代替。
function的用法:function fucName (这里可以不加变量,该变量用于函数的计算) 函数体 end
这里的函数体就是while语句。while语句和for语句差不多都是循环语句,只不过循环结束的条件不太一样,这里的代码可以这么翻译:当(while)turtle没有(not)前进(turtle.forward())的时候,就执行(do)下面的代码。这个“下面的代码”就是里面的"turtle.dig()",挖掘前面方块。。。
于是乎,这整段代码的意思就是“当turtle无法前进的时候,就挖掉前面的方块,直到可以前进”,这样两个问题就解决了
前进时可能遇到的问题已经差不多解决了,现在需要解决的是钻石的问题。。。
不过还好电脑mod的作者给我们了一个比较方块的函数:turtle.compare(),这个函数可以比较turtle前面的方块于自己物品栏里面选中的方块(就是之前提到的加亮边框的栏位),有了这个函数就可以完成这个任务了。
我们现在再来分析下何时需要进行比较,其实也就是两种情况下:①挖矿时向前挖②挖矿时向上挖,因此我们需要把这两个turtle.dig 和turtle.digUp()替换成自己的函数(见下图和下下图)
dig(0)为向前挖的情况,dig(1)为向上挖的情况,括号里的0和1就是前面提到过的参数,具体的用法看接下来的教程吧。。。
不过还好电脑mod的作者给我们了一个比较方块的函数:turtle.compare(),这个函数可以比较turtle前面的方块于自己物品栏里面选中的方块(就是之前提到的加亮边框的栏位),有了这个函数就可以完成这个任务了。
我们现在再来分析下何时需要进行比较,其实也就是两种情况下:①挖矿时向前挖②挖矿时向上挖,因此我们需要把这两个turtle.dig 和turtle.digUp()替换成自己的函数(见下图和下下图)
dig(0)为向前挖的情况,dig(1)为向上挖的情况,括号里的0和1就是前面提到过的参数,具体的用法看接下来的教程吧。。。