【问题标题】:How do I manipulate a list to count down once it has finished counting up?完成计数后,如何操作列表进行倒计时?
【发布时间】:2018-04-02 19:40:01
【问题描述】:
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 更改列表项。让我说清楚。到目前为止我的代码是正确的。我知道这一点是因为我正在读一本书,他们给了 cmets 作为提示,我已经有效地做到了。现在,他们添加了这个奖励目标,即在相反方向的进度条上倒计时。所以,解决方案是添加更多代码,这就是你进来的地方。请帮助我。提前谢谢你。

Progress bar not filled up

Progress bar filled up

【问题讨论】:

标签: python arrays list indexing


【解决方案1】:

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

从 mcpi.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")

【讨论】:

    【解决方案2】:

    这只是您的代码的清理版本:

    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)
    

    【讨论】:

      猜你喜欢
      • 2016-04-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-06-05
      相关资源
      最近更新 更多