翻译:树莓派版Minecraft入门大揭秘

正版我的世界一是要收费,二是游戏性过强,编写Mod门槛高,树莓派版Minecraft免费,且能够很容易的与python交互,是非常好的学习工具,学生对Minecraft有非同一般的热情,结合python,让学生体会码创一切的魅力。本文翻译自树莓派官方网站,大家将就看(已经被吐槽翻译的像人机了)。

翻译:树莓派版Minecraft入门大揭秘_第1张图片
封面

树莓派官方的教程,格式比较统一,适合作为学习资料,是写作教程类资料很好的参考。

最终成果

你将探索树莓派定制版本Minecraft中的虚拟世界。将会学习如何用控制玩家,手动搭建积木块,用python控制游戏中的一切。

学习目标

使用树莓派学习本资料你将会掌握:

  • 如何启动Minecraft Pi并创建一个新的世界
  • 如何用IDLE Python编程环境连接Minecraft Pi
  • 如何用Minecraft Python API向聊天窗口发送消息,确定玩家坐标,实现传送并搭建建筑
  • 如何利用变量保存不同种类方块的的ID
  • 尝试使用有特殊属性的不同类型方块

本资料涵盖了树莓派数字创客课程中以下课程涉及到的要求:

  • 用基本程序结构编写简单的程序
    翻译:树莓派版Minecraft入门大揭秘_第2张图片
    image.png

树莓派有一套自己的数字创客课程标准,这套课程标准跟CAD公司的TinkerCAD中体现的思想有异曲同工之处,也可以说TinkerCAD为树莓派课程的落地提供了更好的支持。

翻译:树莓派版Minecraft入门大揭秘_第3张图片
image.png

需求清单

软件

软件安装

自2014年9月开始,树莓派系统Raspbian默认安装Minecraft。双击快捷方式就可以启动。mimmi


image.png

如果你用的是老版本的树莓派系统,打开命令行窗口,输入以下命令:

sudo apt-get update
sudo apt-get install minecraft-pi

命令执行完毕后,就成功安装了Minecraft Pi和相关的Python库会。

我记得以前树莓派系统自带了一些游戏,五子棋、记忆游戏啥的,我现在的树莓派用NOOBS刷的系统,反而没有了。

测试Minecraft是否安装成功

双击桌面Minecraft的图表或者在命令行窗口输入minecraft-pi均可启动我的世界

翻译:树莓派版Minecraft入门大揭秘_第4张图片
image.png

注意

翻译:树莓派版Minecraft入门大揭秘_第5张图片
image.png

如果你安装Minecraft Pi得到了以上提示信息,并且菜单或者桌面没有Minecraft图表,那么尝试在命令行输入以下指令就可以启动Minecraft:

minecraft-pi

命令行可能会持续输出一堆很奇怪的信息,不用理会。

Minecraft加载完毕后,单击Start Game开始游戏按钮。游戏窗口可能会轻微有一点便宜。如果你想拖动窗口,你拖动游戏窗口后面的标题栏。

翻译:树莓派版Minecraft入门大揭秘_第6张图片
image.png

看,你现在就在Minecraft游戏中了。

测试Python

启动并运行树莓派,创建一个世界,按Tab,树莓派失去焦点,从游戏中释放鼠标,打开Python3 IDLE,单击开始按钮,然后选择编程,Python 3(IDLE),然后让IDLE窗口和Minecraft并排。

你也可以直接在python交互式命令行中输入指令,或者新建一个python文件,方便以后直接使用文件控制Minecraft。

如果你想新建文件,单击File > New wind或者File > Save。你可以把python 文件保存在home文件夹或者新建一个文件夹。

首先,我们需要导入Minecraft库,然后建立一个代码文件和游戏的连接,通过向游戏窗口发送Hello world来测试Minecraft库。

from mcpi import minecraft

mc = minecraft.Minecraft.create()

mc.postToChat("Hello world")

如果你在python交互式命令行输入上述命令,每条命令后面要敲回车。如果你新建了一个python文件,按Ctrl + S快捷键保存文件,按F5运行文件。代码运行后,你会再游戏的界面看到消息。

翻译:树莓派版Minecraft入门大揭秘_第7张图片
image.png

如果Minecraft界面出现Hello world,你就可以继续进行下一步了。

开始探索Minecraft Pi

Minecraft是一个非常流行的开放世界的沙盒游戏,Minecraft为树莓派开发了免费版本,同时提供了专门的编程接口。也就是说,你可以用python编写命令和脚本自动在游戏里搭建你想搭建的东西。这是个非常棒的学习Python的方式。

image.png

树莓派版本的Minecraft可以联机,我们的两个小朋友联机,而且两个人分工还挺好,一个建筑师,一个执行,实际测试很多同学联机,不限制人数,爽歪歪! 这跟scratch社区中为了做复杂作品而自动出现的分工是一致的,这在scratch官方的论文**《scratch:programming for all》 **中有非常详细的描述。`
树莓派的wifi不稳定,如果有条件最好使用有线网,无线网的话,不要使用5G无线频段,用2.4G会稳定许多,联机的搜索速度快。

image.png

运行我的世界

从桌面上的菜单或者在命令行输入minecraft-pi可以启动Minecraft。

翻译:树莓派版Minecraft入门大揭秘_第8张图片
image.png

我的世界启动后,单击游戏开始按钮Start Game,然后创建新的世界Create new。我的世界窗口有一点偏移。

翻译:树莓派版Minecraft入门大揭秘_第9张图片
image.png

这个地方官方资料也重复了,可能是觉得测试,和正式启动是两件事,所有过程重复说了2遍吧。

从下图找亮点:


image.png

树莓派是非常好的学习平台,而且可玩儿性极高,可以说是从3岁到99岁都可以玩儿了。非常好的编程、开源硬件、创客学习平台。小学生可以玩儿scratch,初中生python和开源硬件,高中生学AI,大学生学底层知识,厉害的。而且一个树莓派加一套键鼠300,现在32寸的电视也不过七八百,1000块就能拼凑一个非常好的学习平台,真的是划算至极,比买苹果划算。苹果可没有暴露的GPIO引脚,嘿嘿嘿。

image.png

上课场景,小朋友们联机玩儿Minecraft,体现出了很好的合作分工意识,非常融洽,小朋友们操作的熟练程度让人惊叹,手眼配合,双手配合操作极佳,比如双手生成已房间框架的手续 比打字的手续不知道快了多少,游戏果然是孩子的天性啊。
image.png

移动鼠标可以切换视角,常用快捷键如下:

翻译:树莓派版Minecraft入门大揭秘_第10张图片
image.png

树莓派版本可以说是教育版或者阉割版,操作很少,不过我们的学生照样玩儿的很开心,分工合作也棒棒的,还有学生把握用石块包起来了,哈哈哈,我出去了20分钟,竟然把握推到虚无里了,这帮小坏蛋。

你可以用鼠标滚轮在快捷菜单选择不同的物品,或者是按键盘上的快捷键,或者按E键,从仓库选择你想要的东西。

翻译:树莓派版Minecraft入门大揭秘_第11张图片
image.png

快速双击空格键可以飞。松开空格键停止飞行,悬浮在空中。再次双击空格键降落到地面。

翻译:树莓派版Minecraft入门大揭秘_第12张图片
image.png

树莓派计算能力有限,所以如果你搭建的东西过大,可能会显示不全,我用代码生成就是如此。
树莓派联网功能很有趣,如果家里孩子玩儿树莓派版本的我的世界,两个孩子一起玩儿会更有趣。
Minecraft Pi的一个缺点是加入的名字都是StevePi,没有区分,且加入同一个游戏的人物外观相同,没有标签,是开源项目,等哪天有时间的时候,自己改下代码(就是没有时间)。

剑在手,可以摧毁面前的方块或者挖坑。如果你手里是方块,右键在你正前方放置方块,左键销毁方块。

使用Python编程接口

跟前面测试的时候相同,启动我的世界,创建世界并进入游戏界面,按Tab键让游戏窗口失去焦点,释放鼠标。打开Python3 IDLE并且移动两个窗口使之并排。

可以通过在交互式命令行编写命令或者创建一个python文件留待以后使用。

如果创建文件,单击File > Save,保存在合适的位置。

开始的时候,需要导入Minecraft库,建立和游戏的联系,并通过向游戏界面发送Hello world!测试。

from mcpi.minecraft import Minecraft

mc = Minecraft.create()

mc.postToChat("Hello world")

如果是在命令行输入,每行代码智慧敲回车。如果是文件,按Ctrl + S快捷键保存文件,按F5运行文件。大概代码运行的时候,你能够看到屏幕上出现消息。

确定自己的位置

为了确定你在游戏的位置,可以输入以下代码:

pos = mc.player.getPos()

运行智慧pos变量中会保存你的位置。通过pos.x,pos.y,pos.z,来访问你坐标的每部分。

我的世界是三维游戏,需要3个坐标确立位置,可以用房间墙角3条正交的线做例子,加强理解。

用Python的解包语法把坐标分别保存到三个变量也是一个非常好的办法(但是不如上面直观):

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

这样,x,y,z三个变量分别保存变量的一部分了。xz表示行走的方向,前进,后退,左边或者右边,y表示上或者下。

注意getPos()方法,返回的是玩家代码运行时候的坐标,如果你移动了,你必须重新通过这个函数来获取位置信息,或者用已经存储的信息。

如果是pc版本的Minecraft,可以通过F3查看当前的坐标。Minecraft对于培养孩子的创造力、空间想象能力非常有帮助。

传送

既然可以获取当前位置的坐标,那么也可以移动到特定的坐标,就像传送一样。

x, y, z = mc.player.getPos()
mc.player.setPos(x, y+100, z)

孩子们要用方块把握的角色包起来,那么,我用这个命令,他们怎么也包不住我。

上述代码,将会把你的玩家传送到比当前位置高100个方块的空中。你会被传送到半空中,然后径直下落到地面。

尝试下传送到其他的位置。

生成代码块

如果手里是方块,我们左键会生成方块,但是我们可以通过mc.setBlock(),生成方块,需要提供新方块的坐标和类型id。

x, y, z = mc.player.getPos()
mc.setBlock(x+1, y, z, 1)

运行上述代码,你所立之地一侧会出现一块大石头。如果你没有看到石块,用鼠标移动游戏的视角,知道你能够看到你前面灰色的石头。

生成代码块的setBlock需要4个参数,x, y, zid(x, y, z)代表游戏世界里的坐标,x+1意味着玩家当前位置旁边,id表示方块的类型,1代表石块。

其他类型的方块有:

  • Air: 0
  • Grass: 2
  • Dirt: 3

保持石块在你的视野范围之内,试着生成其他类型的方块:

mc.setBlock(x+1, y, z, 2)

你会发现,灰色的石块眼睁睁的变成了玻璃方块。

方块常量

如果你知道方块的名称(英文),可以用内置的方块常量生成方块(这比记忆数字方便多了)。你需要添加新的一行倒入库的import代码。

from mcpi import block

现在你可以生成新的代码块了:

mc.setBlock(x+3, y, z, block.STONE.id)

方块di很好猜,都是大写,这里有一些帮助你理解和习惯方块明明的例子:

WOOD_PLANKS
WATER_STATIONARY
GOLD_ORE
GOLD_BLOCK
DIAMOND_BLOCK
NETHER_REACTOR_CORE

用变量表示方块

如果你清楚的知道方块的id,你可以用变量来表示代码块,这很有用。你可以用证书id的变量名来代替方块id。

dirt = 3
mc.setBlock(x, y, z, dirt)

或者

dirt = block.DIRT.id
mc.setBlock(x, y, z, dirt)

这次夏令营,失败在没有给学生准备足够的文字材料,下次开课给学生准备文字材料。学生学会更加方便,不过这篇文章也可以给学生看。

特殊方块

有些方块有额外的属性,比如可以设置颜色的羊毛。可以通过setBlock函数的第四个可选参数来设置这些额外信息。

wool = 35
mc.setBlock(x, y, z, wool, 1)

数字1把木块的颜色设置为橙色。如果不设置第4个参数,默认值是0,是白色。其他颜色的例子如下:

2: Magenta
3: Light Blue
4: Yellow

其他有额外信息的代码块是17木块:橡木板,杉木板,桦木板等;很高的草31,灌木丛,蕨类植物;火把50:可以设置指向东西南北,更多的可以阅读https://www.stuffaboutcode.com/p/minecraft-api-reference.htmlAPI参考手册。

生成多个方块

利用setBlock可以生成单个方块,setBlocks可以生成多个方块组成的立方体。

stone = 1
x, y, z = mc.player.getPos()
mc.setBlocks(x+1, y+1, z+1, x+11, y+11, z+11, stone)

这将会生成10x10x10的石头立方体。

翻译:树莓派版Minecraft入门大揭秘_第13张图片
image.png

setBlocks函数可以生成比较大的立方体,但是需要花费更多的时间。

边走边生成方块

现在我们已经知道如何生成方块了,接下来,我们实现,边走,变生成方块(这个在创建方块的时候非常有用)。

下面代码会实现边走边种花:

from mcpi.minecraft import Minecraft
from time import sleep

mc = Minecraft.create()

flower = 38

while True:
    x, y, z = mc.player.getPos()
    mc.setBlock(x, y, z, flower)
    sleep(0.1)

现在,四处走两步,然后回头看,会发现你真的是步步生莲啊哦不是花。

翻译:树莓派版Minecraft入门大揭秘_第14张图片
image.png

因为我们用的是 while True所以代码会一直运行,你走的时候始终会生成花。在Python窗口按 Ctrl + C键可以停止程序。

你也可以试着飞起来,可以看到一番天女散花的景象。

如果我们想实现只有玩家走在草地上的时候才生成话怎么办?我们可以用getBlock获取方块的类型。

x, y, z = mc.player.getPos()  # player position (x, y, z)
this_block = mc.getBlock(x, y, z)  # block ID
print(this_block)

这段代码能够返回你所在的位置,是那种类型的代码块,如果是0,那就意味着你是在空中。我们想知道我们站在那种方块上面,我们就需要把当前位置坐标的y坐标减去1,再用getBlock方法返回我们站在那种类型的方块上面:

x, y, z = mc.player.getPos()  # player position (x, y, z)
block_beneath = mc.getBlock(x, y-1, z)  # block ID
print(block_beneath)

上面的代码会告诉我们我们站在那种方块上面。

我们用循环来打印出你所站在的任何方块的类型id:

while True:
    x, y, z = mc.player.getPos()
    block_beneath = mc.getBlock(x, y-1, z)
    print(block_beneath)

我们可以用if条件判断语句来决定是否要种一朵花:

grass = 2
flower = 38

while True:
    x, y, z = mc.player.getPos()  # player position (x, y, z)
    block_beneath = mc.getBlock(x, y-1, z)  # block ID

    if block_beneath == grass:
        mc.setBlock(x, y, z, flower)
    sleep(0.1) # 别种的太快,程序会崩

国家重视环保,大力退耕护岸林,三倍防护栏,治理沙漠,那么我们完全可以把我们站在的方块变成草方块,那么就实现了退耕还林了,哈哈哈。

grass = 2
flower = 38

while True:
    x, y, z = mc.player.getPos()  # player position (x, y, z)
    block_beneath = mc.getBlock(x, y-1, z)  # block ID

    if block_beneath == grass:
        mc.setBlock(x, y, z, flower)
   else:
       mc.setBlock(x, y-1, z, grass)
    sleep(0.1)

现在我们走两步试试看,如果我们走在草地上,我们就会在深厚留下一朵芬芳,如果下一个方块不是草方块,我们把它变成草方块。当我们回过头来看的时候,我们在我们后面种了一朵花。

翻译:树莓派版Minecraft入门大揭秘_第15张图片
image.png

玩下TNT炸药

另外一种很有趣的方块就是炸药了!普通的炸药如下:


翻译:树莓派版Minecraft入门大揭秘_第16张图片
image.png

当然这种炸药太稀松平常,很没意思。我们给炸药的data数据属性设置为1,也就是setBlock的第四个参数设置为1

tnt = 46
mc.setBlock(x, y, z, tnt, 1)

现在当你用的剑左键单击炸药块的时候,会过一会才才爆炸,相当于延时炸药了。

现在试着搭建一个大大的炸药立方体:

tnt = 46
mc.setBlocks(x+1, y+1, z+1, x+11, y+11, z+11, tnt, 1)
翻译:树莓派版Minecraft入门大揭秘_第17张图片
image.png

现在,你将看到一个满是炸药的立方体。点燃其中的一个炸药块,马上跑开,观察壮观的爆炸场景吧。因为爆炸的时候,同时改变的东西太多了,图形渲染起来会很卡,也就是画面会很卡,树莓派的性能还是有点弱的。

尝试下熔岩的乐趣

还有一个非常有趣的方块是熔岩:

from mcpi.minecraft import Minecraft

mc = Minecraft.create()

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

lava = 10

mc.setBlock(x+3, y+3, z, lava)

找到你刚才放置的代码块,你会看到熔岩流向地面。

熔岩在冷却的时候,会变成岩石,真的是太酷了。换个位置,尝试下下面的代码:

from mcpi.minecraft import Minecraft
from time import sleep

mc = Minecraft.create()

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

lava = 10
water = 8
air = 0

mc.setBlock(x+3, y+3, z, lava)
sleep(20)
mc.setBlock(x+3, y+5, z, water)
sleep(4)
mc.setBlock(x+3, y+5, z, air)

调整sleep的参数,调整时间长短,改变熔岩流淌的时间。

翻译:树莓派版Minecraft入门大揭秘_第18张图片
image.png

进阶学习

当你搞清楚如何用python来操控我的世界的时候,你可以做的事情可就太多了,你可以用python代码创建任何你想创建的东西。

联机游戏

如果多个树莓派连接同一个局域网,可以加入彼此的Minecraft世界一起玩耍。玩家在Minecraft可以彼此看到。

API接口

访问API查看方块ID的详细列表,以及更多API的详细解释,我有时间也会介绍更多的API和案例。

翻译:树莓派版Minecraft入门大揭秘_第19张图片
image.png

粗略翻译,有的地方按照自己的意思来了,点击阅读原文,阅读原版英文资料。

你可能感兴趣的:(翻译:树莓派版Minecraft入门大揭秘)