嘿,欢迎访问!

这里是全球最大的Minecraft(我的世界)教育版中文论坛社区
覆盖100+国家,分享最新的资源和攻略

立即注册 购买教育版授权账户
  • 欢迎 游客 光临!为了营造一个安全、和谐的社区环境,请遵守平台规范,文明交流,友善互动!。
    ⚠️ 重要提示 ,警惕诈骗 本论坛未与任何其他团队或盈利单位合作,请认准唯一官方团队“基岩科技”。⚠️
  • 目前免费账户已经补充,可以正常领取啦

教程 植树造林解析I

主题 作者

TigerEE

LV
21
 
木头
10
65
25
勋章
8
黄金
1,125.00🍪
白银
0🎵
Points
0
上周,我发布了植树造林,今天,我来带大家写代码
导入项目的世界和代码,你需要在14x8范围里种树苗,且灰化土上不种植。
我们先来完成一列(14格)。
大家第一反应应该都是:
for i in range(13): agent.move(FORWARD, 1)
没错,但是我们还需要判断agent脚下是不是灰化土,然后种植树苗
首先,我们需要获取agent位置,这并不是agent.pos,而是:
agent.get_position() # position n.位置 代理机器人模块内
接下来,就要获取位置的x,y,z,我们需要使用如下语句/方法:
position.get_value(direction) # position指代任意位置 direction为Axis.X(x轴), Axis.Y(y轴), Axis.Z(z轴) 位置模块内
将他们结合到一起,就变成了:
agent.get_position().get_value(Axis.X) # 获取x轴坐标
为了将他们(x,y,z)重新组合到一起,我们需要用到world()语句:
world(x, y, z) # 位置模块内
此外,要注意,y轴要减一,在Python中,需要用-(0右边的那个键,不用按shift)来做减法运算:
number1 - number2 #求number1减去number2所得的差
综上所述,agent下方一格坐标为:
world(agent.get_position().get_value(Axis.X), agent.get_position().get_value(Axis.Y) - 1,\ agent.get_position().get_value(Axis.Z)) # 由于太长,分了两行
接着,我们就要检测这格是不是灰化土,可以用blocks.test_for_block()进行判断(你可以和/testforblock命令一起记):
blocks.test_for_block(block, position) # block指代任意方块,position指代任意位置,方块模块内
在Microsoft Makeblock for Minecraft的Python中,灰化土用PODZOL表示,我们便可以结合出这么一段代码:
blocks.test_for_block(PODZOL, world(agent.get_position().get_value(Axis.X), agent.get_position().get_value(Axis.Y) - 1,\ agent.get_position().get_value(Axis.Z)))
blocks.test_for_block()返回的是一个布尔值。布尔值只有两个,True和False(分别对应1和0),他们可以使用if进行条件判断,if格式如下:
if condition: # 你的代码,condition指代任意布尔值,你的所有在if内的代码前面要空4个空格
但是,我们判断的是是不是灰化土,我们又不能在灰化土上种。这时候,not就登场了。它的语法极其简单:
not condition
它可以把True变成False,把False变成True。
所以,判断灰化土的代码就出来了:
if not blocks.test_for_block(PODZOL, world(agent.get_position().get_value(Axis.X), agent.get_position().get_value(Axis.Y) - 1,\ agent.get_position().get_value(Axis.Z))):
接下来,如果if后的布尔值为True,就要放置一个树苗在脚下。
我们可以使用agent.place():
agent.place(direction) # direction指代方向,其值可以为:UP DOWN FORWARD BACK LEFT RIGHT
我们需要在脚下放置,所以填DOWN。
至于放什么,取决于agent此时手里拿的是什么,这部分我在初始化已经帮你写好了,就不需要管了。
把上面的代码全部放在一起,就是我们今天的成果:
for i in range(13): if not blocks.test_for_block(PODZOL, world(agent.get_position().get_value(Axis.X), agent.get_position().get_value(Axis.Y) - 1,\ agent.get_position().get_value(Axis.Z))): agent.place(DOWN) agent.move(FORWARD, 1)
好了,本周教程就到这里,这个项目的解析我会每周末写一篇,敬请期待第二部分。
(第一部分的代码我放在附件里了,自取)
 

附件

  • minecraft-Makeblock-Project-植树造林解析第一部分.zip
    1.7 KB · 查看: 250

BLANC

LV
20
 
泥土
10
14
3
勋章
7
黄金
180.00🍪
白银
0🎵
Points
0
哈哈哈,还有讲解。好有在线课堂的感觉。不过我们家小朋友现在还在用block的阶段。
 
评论
主题 作者

TigerEE

LV
21
 
木头
10
65
25
勋章
8
黄金
1,125.00🍪
白银
0🎵
Points
0
哈哈哈,还有讲解。好有在线课堂的感觉。不过我们家小朋友现在还在用block的阶段。
家长您好,本项目使用的是Microsoft Makeblock For Minecraft内的Python,您可以让您的孩子通过此系列教程逐渐进入Python的世界,大部分代码都是可以直接和方块直接互化的,可以对比着学习
 
评论

最新资源

顶部