【mod介绍】电脑mod——只有码农知道的世界

现在来看看效果。。。
上去啦~~~


下来啦~~~


安全着陆~~~
就是这样

楼主 无¨名¨氏  发布于 2013-09-22 20:53:00 +0800 CST  
刚才这个小程序主要是为了引出变量和循环两个概念,有了这两个概念可以干什么?你可以用它来挖矿!!!
是的,你没有听错,只需要这两个概念,不需要指针数组结构体类这些复杂的知识,只需要这两个最基础的概念你就可以制造出自动挖矿机!只需要配合电脑mod赠送你的turtle操作代码
,你就可以实现解放双手梦想!!不要998,也不要98,更不需要9.8,你只需要看完我接下来的教程,自动挖矿机属于你!!!

楼主 无¨名¨氏  发布于 2013-09-22 21:01:00 +0800 CST  
首先打开action,然后把里面的代码都删掉(这些代码没有实际意义,纯属用来卖萌的),当然也可以新开一个文件,在里面输入如图所示的代码。。。

那个for循环就不用说了,来看一下新的代码:
print("start...") 输出“start...”,提示程序开始运行
turtle.dig() 挖掉turtle前面的方块
turtle.digUp() 挖掉上面的方块(注意这里代码的大小写)
turtle.forward() turtle前进一格

加上for循环的话机器人就可以一直挖掘1*2的方块并且一直前进
ps:其实这里的代码有点问题,应该要把turtle.forward()和turtle.digUp() 位置呼互换下,至于原因,想象一下开始运行和结束运行时turtle的动作就行了,虽然这个无伤大雅

尝试一下~~~

开始了。。。

楼主 无¨名¨氏  发布于 2013-09-22 21:11:00 +0800 CST  
这个是前进20格的代码,既然进去了就应该向办法让它出来,是吧。。。
(见上图)还是说明下新出现的代码:
turtle.turnLeft()
这个还需要解释吗啊喂,turn left 就是向坐转啊,小学生都知道的英语啊喂!咳咳,严肃点,这个代码的作用是使机器人向左转(摔!)

接下来看一下效果

它在深处

看到他回来了。。。

壮士回来了!

看看收获如何,都是一些没用的东西。。。(废话,这个高度哪来好东西)

楼主 无¨名¨氏  发布于 2013-09-22 21:27:00 +0800 CST  
但是看看挖的坑。。。
好♂黑啊(为什么加个哲学符号就变得哲♂学了呢→_→,这是个问题)
因此,我们需要利用turtle给我们自动插♂火♂把(果然很好用。。。)

楼主 无¨名¨氏  发布于 2013-09-22 21:32:00 +0800 CST  
代码如下。。。新加的代码写在哪里应该能看出来吧

按照惯例解释下新出现的代码。。。
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格放置足够的火把。



楼主 无¨名¨氏  发布于 2013-09-22 21:47:00 +0800 CST  
test it!!!


很好,可以运行

楼主 无¨名¨氏  发布于 2013-09-22 21:52:00 +0800 CST  
部分有编程基础的或者喜欢多想想的同学可能会问,为什么要先用digit来定义挖矿的距离然后再使用digit吗?其实这个涉及到了一个代码修改难度的问题,也就是做软件会遇到的软件的“健壮性”问题。。。比如我觉得一次只挖20格太少了,想要挖100格怎么破?

在这个代码里面只需要把20改成100就行了呐~~~(见下图)




楼主 无¨名¨氏  发布于 2013-09-22 21:57:00 +0800 CST  
今天的介绍就发到这里吧。。。额,最后在放出一个东西来

喜闻乐见的TNT轰炸机!!!






哼,我才不会在这里放出教程呢,要做自己写代码去,给一个提示吧,rs.setOutput("bottom",true)给下面的方块通红石信号rs.setOutput("bottom",false)关闭下面的红石信号。

嗯,就是这样,以上!

楼主 无¨名¨氏  发布于 2013-09-22 22:04:00 +0800 CST  
额,今天已经很晚了,就先更新到这里吧,顺便求精@天空之城TCD

楼主 无¨名¨氏  发布于 2013-09-22 22:06:00 +0800 CST  
继续开始教程。。。
上回讲到,那个挖矿的代码还有很多的不稳定性,那么在挖矿的过程中会出现哪些问题呢?让我们来看一下以下的几种情况。。。
1.如下图,当你的turtle挖到前方砂砾的时候,由于砂砾会掉下来形成阻碍,导致turtle前进的代码无效,turtle前进的步数就会变少,然而回去的时候turtle的前进步数没有变化。以上这些会导致一种结果,挖掘的深度不会到达预期值,而且回来的时候会超过出发的点


2.如下图所示,当上方石头的上面为砾石的时候,挖掉石头砾石就会掉下来,然后就会如下下图所示。。。



然后当turtle回来的时候就会被砾石所困住。。。由于回来的路上turtle不会挖掘前方的方块,导致的结果为turtle直接困在这里。

3.这也是最最心酸的bug,这货会直接挖掉钻石,如果你有一把时运3的镐子,那么直接用turtle挖钻石就是极大的浪费,用时运3的镐子平均可以获得3颗钻石,而turtle只能获得一颗,因此这个问题也必须要解决掉。



楼主 无¨名¨氏  发布于 2013-09-23 20:46:00 +0800 CST  
对于前2种情况,可以归结为一种情况:在前进时受到了砾石的阻碍。因此我们只需要在turtle前进的时候判断是否前进成功,这个代码的逻辑是这样的:
1.判断是否前进成功,如果成功的话就结束(因为已经前进了,所以不需要有其他的改动),否则转到2
2.挖掘前面的方块(这里假设阻碍前进的是砾石,而且大多数情况都是这样),然后执行1
通过这个逻辑就能够解决问题了。

由于这个代码在挖掘和回来的时候都要用到,所以我会在修改原来的代码是用到“函数”这个概念(不是数学里的函数,是指编程里面的函数)。具体的就在接下来的教程中。

ps:刚才寝室有点事,所以更新地有点慢,不要在意。。。

楼主 无¨名¨氏  发布于 2013-09-23 21:10:00 +0800 CST  
根据前面的逻辑可知,turtle在每次前进的时候都需要进行判断,因此我们可以把原来的turtle.forward()替换掉,我在这里换成forward()(见下图)

这里的forward就是我准备要定义的“函数”

楼主 无¨名¨氏  发布于 2013-09-23 21:17:00 +0800 CST  

如图所示,我在一开始的digit = 10 下面加了一段forward()代码。

forward()前面有一个关键字“function”,这个关键字就说明后面的forward()是一个函数,你可以理解为下面的forward()被该函数里面的代码所代替。
function的用法:function fucName (这里可以不加变量,该变量用于函数的计算) 函数体 end

这里的函数体就是while语句。while语句和for语句差不多都是循环语句,只不过循环结束的条件不太一样,这里的代码可以这么翻译:当(while)turtle没有(not)前进(turtle.forward())的时候,就执行(do)下面的代码。这个“下面的代码”就是里面的"turtle.dig()",挖掘前面方块。。。

于是乎,这整段代码的意思就是“当turtle无法前进的时候,就挖掉前面的方块,直到可以前进”,这样两个问题就解决了

楼主 无¨名¨氏  发布于 2013-09-23 21:32:00 +0800 CST  
先来做一下测试吧~~~






perfect!!!

楼主 无¨名¨氏  发布于 2013-09-23 21:38:00 +0800 CST  
不知道是度娘抽了还是学校的网络不行,帖子一直都发不出去。。。总之尽量先写吧~~~

楼主 无¨名¨氏  发布于 2013-09-23 21:42:00 +0800 CST  
一定是度娘抽了。。。在我发出这条信息的时候刚才发的类似信息我这里还看不到。。。

楼主 无¨名¨氏  发布于 2013-09-23 21:46:00 +0800 CST  
前进时可能遇到的问题已经差不多解决了,现在需要解决的是钻石的问题。。。
不过还好电脑mod的作者给我们了一个比较方块的函数:turtle.compare(),这个函数可以比较turtle前面的方块于自己物品栏里面选中的方块(就是之前提到的加亮边框的栏位),有了这个函数就可以完成这个任务了。
我们现在再来分析下何时需要进行比较,其实也就是两种情况下:①挖矿时向前挖②挖矿时向上挖,因此我们需要把这两个turtle.dig 和turtle.digUp()替换成自己的函数(见下图和下下图)

dig(0)为向前挖的情况,dig(1)为向上挖的情况,括号里的0和1就是前面提到过的参数,具体的用法看接下来的教程吧。。。

楼主 无¨名¨氏  发布于 2013-09-23 21:56:00 +0800 CST  
那个。。。还是明天有空的时候更新吧。。。度娘这个状态担心会坑啊。。。吞楼就麻烦了→_→

楼主 无¨名¨氏  发布于 2013-09-23 22:22:00 +0800 CST  
由于度娘出了点问题,所以我上回更新到一半就没有继续更了,于是我今天早点来继续更新。。。



楼主 无¨名¨氏  发布于 2013-09-24 18:53:00 +0800 CST  

楼主:无¨名¨氏

字数:37940

发表时间:2013-09-22 03:09:00 +0800 CST

更新时间:2016-03-08 01:09:35 +0800 CST

评论数:3365条评论

帖子来源:百度贴吧  访问原帖

 

热门帖子

随机列表

大家在看