2017-10-22 44 views
0
from mcpi.minecraft import Minecraft 

mc = Minecraft.create() 

import time 

pos = mc.player.getTilePos() 
x = pos.x + 1 
y = pos.y 
z = pos.z 

# Add 10 glass blocks (ID 20) to this empty list 
blocks = [20, 20, 20, 20, 20, 20, 20, 20, 20, 20] 
barBlock = 22 # Lapis lazuli 


count = 0 
while count <= len(blocks): # len (the number of items) of an object 

    mc.setBlock(x, y, z, blocks[0]) 
    mc.setBlock(x, y + 1, z, blocks[1]) 
    mc.setBlock(x, y + 2, z, blocks[2]) 
    mc.setBlock(x, y + 3, z, blocks[3]) 
    mc.setBlock(x, y + 4, z, blocks[4]) 
    mc.setBlock(x, y + 5, z, blocks[5]) 
    mc.setBlock(x, y + 6, z, blocks[6]) 
    mc.setBlock(x, y + 7, z, blocks[7]) 
    mc.setBlock(x, y + 8, z, blocks[8]) 
    mc.setBlock(x, y + 9, z, blocks[9]) 

    count += 1 

    # Delete the last block in the list 
    del blocks[9] 
    # Insert a lapis lazuli block at the first position in the list 
    blocks.insert(0, barBlock) 
    time.sleep(.5) 

该代码将十个玻璃立方体(下面的图片1)堆叠起来,然后立方体用蓝色(barBlock)填充以给出进度条(下面的图片2)的外观。进度条只会向上计数,并在满时停止。此代码运行得非常好。我现在想要做的是编写代码,说'一旦进度条填满,使进度条向相反的方向倒数。请帮帮我。如何在列表完成计数后操作列表进行倒计时?

这段代码是关于操纵列表的。我试过用block.append(barBlock)添加一个项目。我试过用block.insert(9, barBlock)插入一个项目。我尝试使用del block[9]删除一个项目。我试过使用block[9] = barBlock更改列表项。让我说清楚。我迄今为止的代码是正确的。我知道这一点,因为我正在阅读一本书,他们给出的意见作为提示,我已经做到了这一点。现在,他们添加了这个额外的目标,即在相反的方向上倒数进度条。所以,解决办法是增加一点点代码,这就是你进来的地方。请帮助我。先谢谢你。

Progress bar not filled up

Progress bar filled up

+0

你意思就像'while count> 0:...; count - = 1'? – chepner

+0

我不太清楚我理解你的问题,但也许可以参考https://stackoverflow.com/questions/869885/loop-backwards-using-indices-in-python或https://stackoverflow.com/questions/3476732 /如何对循环向后的 - 蟒蛇。我认为你正在寻找的是一个递减循环。 – Gaboik1

回答

0

我想通了。这是完整的代码。去我!

mcpi.minecraft进口的Minecraft MC = Minecraft.create()

进口时间

pos = mc.player.getTilePos() 
x = pos.x + 1 
y = pos.y 
z = pos.z 

# Add 10 glass blocks (ID 20) to this empty list 
blocks = [20, 20, 20, 20, 20, 20, 20, 20, 20, 20] 
barBlock = [22, 22, 22, 22, 22, 22, 22, 22, 22, 22] # Lapis lazuli 
glass = 20 # glass 

count = 0 
while count <= len(blocks): # len (the number of items) of an object 

    mc.setBlock(x, y, z, blocks[0]) 
    mc.setBlock(x, y + 1, z, blocks[1]) 
    mc.setBlock(x, y + 2, z, blocks[2]) 
    mc.setBlock(x, y + 3, z, blocks[3]) 
    mc.setBlock(x, y + 4, z, blocks[4]) 
    mc.setBlock(x, y + 5, z, blocks[5]) 
    mc.setBlock(x, y + 6, z, blocks[6]) 
    mc.setBlock(x, y + 7, z, blocks[7]) 
    mc.setBlock(x, y + 8, z, blocks[8]) 
    mc.setBlock(x, y + 9, z, blocks[9]) 

    count += 1 

    # Delete the last block in the list 
    del blocks[9] 
    # Insert a lapis lazuli block at the first position in the list 
    blocks.insert(0, barBlock) 
    time.sleep(.2) 

count = 10 

while count >= 0: 

    mc.setBlock(x, y + 9, z, blocks[0]) 
    mc.setBlock(x, y + 8, z, blocks[1]) 
    mc.setBlock(x, y + 7, z, blocks[2]) 
    mc.setBlock(x, y + 6, z, blocks[3]) 
    mc.setBlock(x, y + 5, z, blocks[4]) 
    mc.setBlock(x, y + 4, z, blocks[5]) 
    mc.setBlock(x, y + 3, z, blocks[6]) 
    mc.setBlock(x, y + 2, z, blocks[7]) 
    mc.setBlock(x, y + 1, z, blocks[8]) 
    mc.setBlock(x, y, z, blocks[9]) 

    count -= 1 
    blocks.insert(0, glass) 
    time.sleep(.2) 
    print("Is this code being reached") 
0

这仅仅是一个清理你的代码的版本:

from mcpi.minecraft import Minecraft 
import time 

mc = Minecraft.create() 

pos = mc.player.getTilePos() 
x = pos.x + 1 
y = pos.y 
z = pos.z 


def stack(delay, block, direction): 
    for count in range(10) if direction == 1 else range(9, -1, -1): 
     print(count) 
     mc.setBlock(x, y + count, z, block) 
     time.sleep(delay) 

stack(0, 20, 1) 
stack(0.5, 22, 1) 
stack(0.5, 20, -1)