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