ETW_Derp
本帖最后由 wangtianen 于 2016-9-14 23:09 编辑

畅游Minecraft Pi 的世界!
Minecraft是一个流行的开放式沙盒建筑类的游戏。在Raspberry PiMinecraft有一个免费的版本;当然,这个版本也有一个可供编程的平台。这意味着你能用Python语言来书写命令和代码,以实现在游戏中建筑的自动化。在这个平台上,学习Python语言真的是再好不过的了~


启动Minecraft
为了让Minecraft启动,请在菜单中运行它,或者在TX终端输入minecraft-pi并回车。
Minecraft Pi 启动完成后,单击 Start Game ,之后单击 Create new 。你将会注意到游戏画面相对于窗口而言会有轻微的偏移。这意味着如果你想拖动窗口的话就必须拖动在Minecraft游戏画面后的标题栏。

你现在已经进入游戏了!到处走走,破坏以及创造点什么东西!
使用鼠标来环视四周,以及使用下面的按键操作:
按键
动作
W
A
S
D
E
背包
空格
跳跃
双击空格
飞翔/掉落
ESC
暂停
Tab
释放鼠标(可以让鼠标移到游戏窗口之外)
你可以用鼠标滚轮在物品栏中选择物品(也可以用键盘上的数字键),或者按E键打开背包来选择物品。

你也可以双击空格键在空中飞翔。当你松开空格键时你可以停留在空中,而在此时双击空格键,你会落回地面。
当你手中拿着剑时,你可以单击前方的方块来破坏(或挖掘)它们。当你手中拿着方块时,你可以对着前面的空地单击右键来放置它们,或者单击来破坏方块。

使用Python编程界面
Minecraft运行且世界被生成时,可以按Tab键来释放鼠标,以进行游戏外的操作。在菜单里打开Python 3 并将窗口拖动至与Minecraft窗口并排的位置。
你不仅可以直接向Python窗口输入命令,而且还可以创建一个文件,以便多次运行。
如果你想创建文件,请转至File > New window File > Save。你应该将这个文件存储在Home(应该存放至Home/pi 文件夹——译者注)文件夹或一个专门存放工程的文件夹。
通过载入Minecraft的库,你可以建立程序与Minecraft游戏的连接,下面的代码在连接游戏的同时并且在屏幕上输出“Hello world”信息:
  1. from mcpi.minecraft import Minecraft
复制代码
如果你直接在Python窗口输入命令行,可以直接在每行的最后回车。如果你保存为文件,先Ctrl+S 保存然后按F5运行。当你的代码运行时,你可以看到你的信息在游戏的界面中显示。

获取你的位置
如果你想获取你的位置,输入下面的代码:
  1. pos = mc.player.getPos()
复制代码
pos这个变量现在包含了你的位置信息;x轴、y轴、z轴的数据分别储存在pos.xpos.ypos.z里。
或者,还有一种很好的方法,就是用分离的变量来获取坐标。下面的代码演示了Python的拆分变量的一种方式:
  1. x, y, z = mc.player.getPos()
复制代码

现在xyz包含了你所处位置的坐标。xz是你行走的方向(即前/后和左/右),y是你的上/下位置。
小结:getPos()这个函数的功能是返回玩家当前的位置,如果你进行移动的话,你就被迫再次执行函数,或者使用已经被存储的位置(数据)。
传送
当你获得你的正确的位置时,你可以输入一个具体的位置传送。
  1. x, y, z = mc.player.getPos()
  2. mc.player.setPos(x, y+100, z)
复制代码
这将会使你的操控的玩家上升100格。这意味着你将被传送到半空中,之后会掉回到你原来的地方。(实际上,当你的头上存在方块时,你不可能回到原来的地方。——译者注)
试试传送到别的地方!
放置方块
在一个坐标点上,你可以用mc.setBlock()函数来放置单个方块:
  1. x, y, z = mc.player.getPos()
  2. mc.setBlock(x+1, y, z, 1)
复制代码

现在一个石头方块应该在你的旁边出现了。如果它没有立刻在你的面前出现,那么它可能会在你的左右两侧或者在你的后面。回到Minecraft的游戏窗口,然后你用鼠标转动视角,直到看见一个灰色的方块在你的正前方。

提交到set block函数(应该是setBlock函数,但是原文就是如此。——译者注)的参数为x, y, zidx, y, z代表的是地图上的一个坐标(我们刚才指定的那个方块的位置就是玩家的位置x坐标加一格的地方),而id 则是代表我们想放置方块的种类。代码中的1代表的是石头。
你也可以试试其他的方块:
  1. 空气:0
  2. 草方块:2
  3. 泥土:3
复制代码
现在保持观察刚才的石头方块,尝试换一种方块:
  1. mc.setBlock(x+1, y, z, 2)
复制代码
你应该能看见眼前的石头方块变成了泥土方块!

方块名称常量
如果你知道方块的名称,你就可以使用内置的方块名称常量。你仅需要在开头添加一行额外的import的命令行。
  1. from mcpi import block
复制代码
现在你可以写入下面的代码行来放置一个方块:
  1. mc.setBlock(x+3, y, z, block.STONE.id)
复制代码
方块的id很容易去推测,它们的名字的字母全部大写,但是这里是一些不能通过这种方式就能找到的方块:
  1. WOOD_PLANKS
  2. WATER_STATIONARY
  3. GOLD_ORE
  4. GOLD_BLOCK
  5. DIAMOND_BLOCK
  6. NETHER_REACTOR_CORE
复制代码

方块作为变量
如果你知道方块的id,你就可以让这个id设置成变量。你可以使用声明它的名称或者它的(整数的)id
  1. dirt = 3
  2. mc.setBlock(x, y, z, dirt)
复制代码
或者:
  1. dirt = block.DIRT.id
  2. mc.setBlock(x, y, z, dirt)
复制代码

特殊的方块
有一些方块有额外的数据值,就像羊毛方块,你能够通过修改额外的设置来指定羊毛的颜色。为了设置它你就得使用可选的第四个参数:
  1. wool = 35
  2. mc.setBlock(x, y, z, wool, 1)
复制代码
这里,第四个参数1设置了羊毛的颜色为橙色。没有第四个参数,函数会将第四个参数设置为0,即为白色的羊毛。还有更多的颜色可以选择:
  1. 2: Magenta  #品红
  2. 3: Light Blue    #亮蓝
  3. 4: Yellow      #黄色
复制代码
试试更多的数字,看看方块的变化!
其他的还有额外的数据时的方块还有:木头(17):橡木、云杉木、桦树,等等;草(31):灌木、青草、蕨类植物;火把(50):指向东、西、北、南;以及等等。查阅 API参考资料来获取更多的信息。

放置多个方块
除了用setBlock放置单个方块,你还可以用setBlocks函数来用方块填充一大块立体区域:
  1. stone = 1
  2. x, y, z = mc.player.getPos()
  3. mc.setBlocks(x+1, y+1, z+1, x+11, y+11, z+11, stone)
复制代码
上面的代码执行完成后会生成一个10 x 10 x 10实心的石头大的立方体。
你也可以用setBlocks函数创建更大体积的立方体,但这可能会花费更长的时间去生成!

在你走路的时候(自动)放置方块
现在你知道怎样去放置方块了,那就让我们通过行走以便移动自己的位置来放置方块。
下面的代码将会在你行走时在你的后面生成花朵:
  1. from mcpi.minecraft import Minecraftfrom time import sleep

  2. mc = Minecraft.create()

  3. flower = 38
  4. while True:
  5.     x, y, z = mc.player.getPos()
  6.     mc.setBlock(x, y, z, flower)
  7.     sleep(0.1)
复制代码
现在,向前走一会儿,然后再转过身子,看一下在你身后你已经生成的花朵。
当我们用while True这个循环时,这个循环将会永远执行下去。想让它停止的话,在Python窗口中按Ctrl + C即可。
试试在天上飞一会儿,然后看你留在天空中的花朵:

如果我们只想让玩家走在草地上时才能生成花朵呢?我们可以使用getBlock函数来获取你脚底下的方块的种类:
  1. x, y, z = mc.player.getPos()  # 玩家的位置 (x, y, z)
  2. this_block = mc.getBlock(x, y, z)  # 方块 ID
  3. print(this_block)
复制代码

上面的代码将会返回你所在的方块的种类(返回0,空气方块)。而我们想获取的是玩家所站在的方块的种类。为了达到这个目的,我们可以将y的值减1,然后再使用getBlock()函数来判断我们站在那种方块上:
  1. x, y, z = mc.player.getPos()  # 玩家的位置 (x, y, z)
  2. block_beneath = mc.getBlock(x, y-1, z)  # 方块 ID
  3. print(block_beneath)
复制代码
上面的代码将会返回你所站在的方块的种类。
那么,为了测试一下效果,执行一个loop循环来输出你当前所站在的方块的ID
  1. while True:
  2.         x, y, z = mc.player.getPos()
  3.         block_beneath = mc.getBlock(x, y-1, z)
  4.         print(block_beneath)
复制代码

我们可以用if语句来判断我们是否该放置花:
  1. grass = 2
  2. flower = 38
  3. while True:
  4.     x, y, z = mc.player.getPos()  # player position (x, y, z)    block_beneath = mc.getBlock(x, y-1, z)  # block ID
  5.     if block_beneath == grass:
  6.         mc.setBlock(x, y, z, flower)
  7.     sleep(0.1)
复制代码
下一步,我们应该为程序添砖加瓦?,假如你将要站在的地方上不是草方块的话,就让它变成草方块吧:
  1. if block_beneath == grass:
  2.     mc.setBlock(x, y, z, flower)else:
  3.     mc.setBlock(x, y-1, z, grass)
复制代码
现在,我们可以向前走,假如我们走在草方块上,我们将会在这个草地上留下一朵花,如果下一个方块不是草方块的话,它将变成草方块。当我们转身并向后走,我们将会(在经过的草方块上)留下一朵花。

与方块玩耍
还有一种有意思的方块,那就是TNT!放置一个普通的TNT可以执行下面的语句:
  1. tnt = 46
  2. mc.setBlock(x, y, z, tnt)
复制代码

但是,这个TNT方块实在是太无聊了,试试将 data 变为1
  1. tnt = 46
  2. mc.setBlock(x, y, z, tnt, 1)
复制代码
现在使用你的先然后单击TNT方块,它将会被激活然后将会在大约几秒钟之内爆炸!

下面尝试制作一个由TNT组成的立方体!
  1. tnt = 46
  2. mc.setBlocks(x+1, y+1, z+1, x+11, y+11, z+11, tnt, 1)
复制代码

现在你会看到一个由TNT方块充斥的巨大立方体。走过去并激活其中的一个TNT然后跑到一边去看TNT的表演!你的树莓派将会非常缓慢地绘图,因为太多的事件在一瞬间改变(很多的TNT在同一时间爆炸)。

有趣的流动岩浆
有一种方块,它有很多的乐趣去让你玩耍,它就是流动的岩浆。
  1. from mcpi.minecraft import Minecraft

  2. mc = Minecraft.create()

  3. x, y, z = mc.player.getPos()

  4. lava = 10

  5. mc.setBlock(x+3, y+3, z, lava)
复制代码
找出你刚才放置的岩浆方块,然后你会看到岩浆从那个方块流向周围的地面。
还有一件很酷的,与岩浆有关的事情,就是当岩浆冷却下来时会变成石头(应该是原石。——译者注)。
在这个世界中移动到别的地方然后试试下面的语句:
  1. from mcpi.minecraft import Minecraftfrom time import sleep

  2. mc = Minecraft.create()

  3. x, y, z = mc.player.getPos()

  4. lava = 10
  5. water = 8
  6. air = 0

  7. mc.setBlock(x+3, y+3, z, lava)
  8. sleep(20)
  9. mc.setBlock(x+3,y+5, z, water)
  10. sleep(4)
  11. mc.setBlock(x+3, y+5, z, air)
复制代码
你可以调整sleep 的参数来调整岩浆流出的多与少。

接下来去哪里?
你现在可以做很多事情了,你现在知道了该怎样在Minecraft Pi的世界中冒险,以及如何使用Python编程界面。
局域网游戏
如果多台树莓派连接在同一个局域网,它们就可以加入同一个Minecraft世界而且一起愉快地玩耍。这些玩家可以在Minecraft世界里互相看到对方。
API参考资料
stuffaboutcode.com - 这里有非常多的函数的资料,还有一个很全面的方块ID列表。
制作一个游戏
试试另外的教程并制作一个打地鼠的游戏:Minecraft之打方块


后记&译者的一些废话



青木源
本帖最后由 XIAOMM 于 2016-8-30 21:56 编辑

火钳刘明!很详细的树莓派教程啊!
(树莓派的水居然比PC,PE和主机的都好看!
(人气什么的明天补……

ETW_Derp
XIAOMM 发表于 2016-8-30 21:55
火钳刘明!很详细的树莓派教程啊!
(树莓派的水居然比PC,PE和主机的都好看!
(人气什么的明天补……

这仅仅是MCPI 的入门级教程……

Magpi上个月刚出了一本关于MCPI的教程,有80多页……本来想翻译那本的,但想了一下,工作量太大了,还是等到高考完后再抽空翻译吧2333

今天把主楼更完了,明天补充一下与此相关的内容。

作为第一次发表翻译作品的人,我可以肯定这篇文章里有翻译不当的地方,望大家多多指出,互相提高:-P

虚伪的悲催
看起来好玩的样子

Super~作
感谢lz分享!

1443200445
感谢兰州烧饼分享

chcbclv
好厉害 学道了

第一页 上一页 下一页 最后一页