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

昨天说到为了能够探测钻石矿我们需要改装下dig函数,首先我们需要整理下dig函数的逻辑,在向前挖的情况下:
①将前面方块与钻石矿进行比较,如果发现为钻石矿的话就返回真,程序调用结束,否则执行第二步
②挖掘前面的方块
在向上挖的情况下:
①将上面方块与钻石矿进行比较,如果发现为钻石矿的话就返回真,程序调用结束,否则执行第二步
②挖掘上面的方块
逻辑就是这么简单,那么接下来就是程序代码




楼主 无¨名¨氏  发布于 2013-09-24 19:10:00 +0800 CST  
阿勒,貌似程序代码略长,放不下了。。。那么把程序导出来用第三方软件打开吧(其实就是用word打开文件。。
这个有编程基础的然后又看过我之前教程的同学应该已经知道这个什么用了吧。。。这里有一个新的知识点(为什么我想起了老师上课时手点着黑板的样子 罒ω罒),就是两个if的嵌套(就当在mc吧普及编程知识吧。。。)。
可以看到第二行的if语句下面还有一条if语句,这种情况在实际编程也经常出现,我们可以把下面那个if语句当做第一个if语句的子语句。
用文字来描述是这样子的:当flag的值为0的时候(就是向前挖掘的情况),然后当探测到前面有钻石的时候(if turtle.compare()),就返回为真(return true),否则就把它挖掉(turtle.dig())。
其实这里还涉及到了两个概念,返回值和形式参数,具体的解释还是得上百度百科或者翻阅相应的编程书籍,我就笼统得解释下。。。

楼主 无¨名¨氏  发布于 2013-09-24 19:22:00 +0800 CST  
首先来说明一下形式参数,形式参数是参数的一种,它在上面这段代码中是在函数传递值的过程中产生,在dig()函数里面flag就是一个形式参数,我这里就简单得说明下形式参数的赋值(这段话中有些概念写的不是很清晰,有编程大大看到了不要喷我)。
比如上面的例子,在dig函数的定义中(function dig(flag))flag放置在了括号里面,然后在后面的使用该函数的时候(dig(0))括号里的数字就会把数值赋值为前面的flag(这时flag的值就为0了)比如调用时写了dig(20)那么flag的值就会变成20(先不管值是不是有意义)

!!因此总结来说在使用函数的时候括号里写了什么数字函数里相应的变量就会变成什么值,如果有多个变量和数字的话那么数字就与变量一一对应(比如dig(a,b,c)、dig(1,2,3))

还有一个返回值的概念。。。可以这么理解,返回值就是这个函数的数值(或者字符),比如test()函数return 25,那么这个函数的数值就是1,然后i = test(),那么i的值也会变成25,如果return true那么返回值也就会变成true,于是就可以用于判断,这个用于判断的功能接下来就会用到。。。

PS:语死早。。。还算清晰的概念怎么描述都描述不清楚,果然得多练练了

楼主 无¨名¨氏  发布于 2013-09-24 19:43:00 +0800 CST  
不过比较函数有个特点,就是只能与物品栏内选中的物品进行比较,那么如何做到与钻石矿比较的效果呢???不要忘了,我们有这个turtle.select()函数
如图,在turtle第15格放置钻石矿(至于如何获得钻石矿。。。先附魔出精准采集吧)在turtle开始工作前选中第15格,这样就可以与钻石矿进行比较了。。。

PS:不可以放置钻石,而是要放置钻石矿,比较的本质是对前面物品的id与选中物品栏里面的物品id进行比较,因此直接放钻石是行不通的

楼主 无¨名¨氏  发布于 2013-09-24 19:58:00 +0800 CST  
现在看上去是已经完成了。。。。不对,现在的确是可以探测钻石了,但是应该要停止挖掘并且返回啊,而且现在返回时还是按照原来的距离返回的啊!好,那么现在就把这些问题都解决掉吧。。。
首先来看一下这个,我把两个dig()函数都写成了一个if语句,dig()写在if的判断条件里面,这里就要涉及到前面所说的返回值的概念,如果返回值为true(即if条件成立),那么就定义一个变量j,并赋值为(i-1)(至于为什么是i-1,,看一下下面的说明然后自己模拟去走走看就行了),然后执行break语句,break语句的作用是跳出循环,也就是可以停止前进。。。最后把后面返回时for循环的判定条件改一下(见下图)
把digit改成了j(现在可以试着模拟下turtle返回的步数为多少了)。
现在还有一个问题。。。是的,还有,写代码的都不简单呐~~~,既要有充分的想象力又要有严密的逻辑还要天天加班工资也不算高。。。好吧,说多了。总之,现在还有个问题,如果turtle没有挖到钻石的话j的值就不存在了,因此,我们需要在一开始就定义好j的数值。
让j = digit ,那么当turtle没有挖到钻石的时候返回时就走和原来一样的步数了

楼主 无¨名¨氏  发布于 2013-09-24 20:13:00 +0800 CST  
至此这个程序就已经写完了,现在来测试下效果
如果turtle安全回来的话我就把代码文件发出来,如果无法回来的话。。。那就继续找bug吧→_→

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

顺利回来了~~~看一下收获

由于高度比较高,所以说收获不是很好,不过至少说明能够完善得运行了。。。那么接下来就开始放程序文件吧。。。

楼主 无¨名¨氏  发布于 2013-09-24 20:25:00 +0800 CST  
http://pan.baidu.com/s/1iPssp
刚才这边下雨了,于是江湖救急。。。给室友送伞去了,所以发得有点慢

楼主 无¨名¨氏  发布于 2013-09-24 21:10:00 +0800 CST  
有人在问我为什么写代码时不一开始就去想可能会出现的问题然后一次性都解决呢?这里我要说一下写代码的流程:首先我们要确定我们写代码的目的是什么,比如这里的代码主要目的就是挖矿,于是我就写好了相应的核心代码,接下来才是发现问题,turtle不会回来,于是写了回来的函数,接着发现挖出来的矿洞太黑了,所以写下的放置火把的代码。再数次实验的过程中又发现砾石会影响turtle工作,于是又继续修改代码把这个问题解决了。最后有觉得用turtle挖钻石是很大的浪费,于是乎,我有做了个钻石的检测。。。
根据我上面所说的就可以看出来,大多数程序都是不可能一蹴而就的,都是通过不断地修改、找bug、做优化,最后才能够完成整个程序。。。
以上,算是写给对编程有兴趣的同学和观众吧。。。

楼主 无¨名¨氏  发布于 2013-09-24 21:32:00 +0800 CST  
最后在来放一个东西吧








回旋式轰炸机,可以在目标上空回旋投放TNT欧什么,你想要?自己写去,哼

楼主 无¨名¨氏  发布于 2013-09-24 21:57:00 +0800 CST  
鉴于部分少年不知道把写好的代码文件放到哪里,我就在这里写一个小教程吧。。。
首先找到saves文件夹。如果这个都不知道的话。。。就先不要玩这个mod了

找到你在玩的世界,并打开

里面会有这个computer文件夹,双击打开

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

点开来就可以看到这些文件(夹),上面这些数字名称的文件夹就对应着你的电脑id了,打开相应的文件夹就可以看到相应的文件,(查看电脑的id方法:直接在电脑主界面输入“id”)自己用第三方软件写的代码也可以直接放到这里(运行的时候注意后缀,或者直接把后缀删去)

这个就是里面的文件了,右击使用记事本打开就可以看到里面的代码。。。

还有一种情况就是程序写在游戏的软盘里面,这个时候就需要打开disk文件夹(见上图)

打开相应id的文件夹就可以看到里面的代码了,需要的程序也可以放置在这里

楼主 无¨名¨氏  发布于 2013-09-24 22:20:00 +0800 CST  
首先确定mod是否正确安装,该md只要把那个压缩包直接拖进mods文件夹即可,然后在电脑主界面输入edit test创建test文件,在出来的那个界面就可以输入代码了

楼主 无¨名¨氏  发布于 2013-09-25 11:24:00 +0800 CST  
于是我又出现了。。。那么今天就带来利用电脑控制外围设备(包括屏幕)的教程吧。。。额,总感觉昨天讲的东西可能会看不太懂呐→→_

楼主 无¨名¨氏  发布于 2013-09-25 19:52:00 +0800 CST  
屏幕这个东西我想会有很多人对它有兴趣吧,首先来看一下屏幕(Monitor)的一些特性

这是一个单独放置的monitor

然后如果有monitor放置在一个monitor旁边而且朝向一致的话那么两个屏幕就会组合在一起。。。

当然也可以向上合并

monitor最大的大小限制为高6宽8

总感觉讲了些不重要的东西。。。总之,接下来开始介绍下monitor的用法吧

楼主 无¨名¨氏  发布于 2013-09-25 20:03:00 +0800 CST  
首先,我们来写一个简单的程序来作为测试。(见下图),命名为“test”

然后我们输入programs来看看和monitor相关的指令吧,哎~~~正好看到有一个“monitor”指令

如下图,这个是“monitor”指令的用法“monitor right test”后面带了两个参数,第一个为monitor相对于computer的位置,第二个参数为需要执行的程序名字,输入这个指令后computer就会执行程序,然后显示相关的内容就会显示到屏幕上。

运行后computer的界面里就会有相应的提示(见下图)


可以看到,文字已经正常得打印到屏幕上了

楼主 无¨名¨氏  发布于 2013-09-25 20:11:00 +0800 CST  
monitor指令不单可以运行自己写的代码,还可以运行自带的指令。
比如这个,clear是自带的一条指令,他的作用是清空电脑屏幕,当这条指令运行在monitor上时,该指令就会清空右边的屏幕。。。

就是这样,刚才打印出来的“Hello world!”就被清空了

楼主 无¨名¨氏  发布于 2013-09-25 20:17:00 +0800 CST  
不过这种方法还不是很完善,就是每次运行相应的程序的时候都需要输入monitor指令,我们希望得到这样一个程序,当运行某个程序时,该程序就可以直接在屏幕上打印出相应的文字。
为了实现这个功能,所以我们在这里需要引入一个新的API:peripheral,这个API可以用于处理各种外围设备,这个monitor是外围设备,所以也是可以通过这个API来使用的,那么接下来就来看看这个API的用法吧。。。
代码如上图,peripheral.wrap("right")可以把右边(方向由后面的参数决定)的外围设备封装起来并用前面的变量表示,handle.write("Hello world!")可以在封装的外围设备中输出Hello world!

楼主 无¨名¨氏  发布于 2013-09-25 20:41:00 +0800 CST  



效果就是这样,优点很明显,不需要再输入前面那个冗长的代码,而且可以实现monitor和computer两个位置的双重输出(直接用print函数就可以在computer端输出)

楼主 无¨名¨氏  发布于 2013-09-25 20:47:00 +0800 CST  
我们现在知道了monitor的一个使用方法,但是我们还知道其它的屏幕相关的操作函数吗?不过还好,电脑mod的作者给我们了相应的函数来获取外围设备的操作方法,这个函数就是peripheral.getMeathods(side),该函数具体使用方法见下图
这段代码可以直接获取右边外围设备的操作代码,现在来执行一下该代码来看看效果如何
效果拔群!!!

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

楼主:无¨名¨氏

字数:37940

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

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

评论数:3365条评论

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

 

热门帖子

随机列表

大家在看