在“我的世界”的天空里创建一个大表,来显示真实世界的时间。这样不仅可以使天空更加多彩,而且还能作为一个地标。当你浪的离家太远找不到归家的路了,只要在天空中看见它,你就会知道离家不远了。
Python语言现在很火爆,都火爆到了我的世界里来了。这样也给了玩家在命令方块外多了一种选择。废话少说,上代码:
import mcpi.minecraftstuff as minecraftstuf
minecraftstuff模块是Minecraft的一个扩展模块,专门用来处理2D和3D技术,可以用来画线、画圆、画球体啥的~~。所以,我们先要导入“import”这个模块。
def findPointOnCircle(cx, cy, radius, angle):x = cx + math.sin(math.radians(angle)) * radius y = cy + math.cos(math.radians(angle)) * radius x = int(round(x, 0)) y = int(round(y, 0)) return(x,y)
创建一个函数,用于取得点在圆上的X、Y、Z坐标。这里需要使用三角函数(同学要好好学数学哟)。传入的参数是圆心的坐标,半径与角度。由于计算三角函数用到的是弧度,所以需要进行角度与弧度的转换。
mc = minecraft.Minecraft.create() mcdrawing = minecraftstuff.MinecraftDrawing(mc)
联接Minecraft,并创建出mcdrawing对象。以后画线的事就靠着这个的对象了。
pos = mc.player.getTilePos() clockMiddle = pos clockMiddle.y = clockMiddle.y + 25
取得玩家的位置坐标,然后在Y坐标上增加25个方块,来作为这个大钟的圆心坐标。
CLOCK_RADIUS = 20 HOUR_HAND_LENGTH = 10 MIN_HAND_LENGTH = 18 SEC_HAND_LENGTH = 20
定义时钟的圆半径以及时钟的时针、分针、秒针的长度。
mcdrawing.drawCircle(clockMiddle.x, clockMiddle.y, clockMiddle.z,CLOCK_RADIUS, block.DIAMOND_BLOCK.id)
调用mcdrawing函数将表盘画出来。这里是使用钻石方块完成的这件事。强烈建议玩我的世界时用英文,这样会提高使用命令方块与Python时的效率。
while True:
创建一下循环体。在循环体里面绘制时钟的时针、分针与秒针。
timeNow = datetime.datetime.now()
取得当前的时间,是真实世界的时间哟,可不是我的世界里的时间~~。
hours = timeNow.hour if hours >= 12: hours = timeNow.hour - 12 minutes = timeNow.minute seconds = timeNow.second
分别取得时、分、秒。
hourHandAngle = (360 / 12) * hours
根据当前的小时所处的时间换算出其偏转的角度。
hourHandX, hourHandY = findPointOnCircle(clockMiddle.x, clockMiddle.y,HOUR_HAND_LENGTH, hourHandAngle)
调用前面的findPointOnCircle函数,传入的参数是时钟的圆心X、Y坐标,时针的长度和当前偏转的角度。
mcdrawing.drawLine(clockMiddle.x, clockMiddle.y, clockMiddle.z,hourHandX, hourHandY,clockMiddle.z,block.DIRT.id)
调用画线函数,从圆心到上一步取得的坐标画出时针。这里使用的材料是泥块,你可以根据个人喜好调整为其他的砖块。以此类推分别用自己喜欢的方块画出分针与秒针,注意分针与秒针取角度都是360/60。
time.sleep(1)
系统“睡”一秒钟,然后开始用空气方块替代掉原先的时、分、秒针。
mcdrawing.drawLine(clockMiddle.x, clockMiddle.y, clockMiddle.z,hourHandX, hourHandY, clockMiddle.z,block.AIR.id)
分针与秒针的思路一样,不再重复。然后是没完没了的循环~~