Lua for循环帮助!

时间:2011-04-17 03:54:53

标签: lua

我有以下代码

tile_width = 64;
tile_height = 64;

tile_map = {
    {1,1,1,1,1,1,1,1,1,1,1,1},
    {1,1,1,1,1,3,1,1,1,1,1,1},
    {1,1,1,1,1,3,1,1,1,1,1,1},
    {1,1,1,1,1,3,1,1,1,1,1,1},
    {1,1,1,1,1,3,1,1,1,1,1,1},
    {1,1,1,1,1,1,2,1,1,1,1,1},
    {1,1,1,1,1,1,1,1,1,1,1,1},
    {1,1,1,1,1,1,2,1,1,1,1,1}
}

i=1;
j=1;
while i<table.getn(tile_map) do
    while j<table.getn(tile_map[i]) do
        print(tile_map[i][j]);
        x = (j * tile_width / 2) + (i * tile_width / 2)
        y = (i * tile_height / 2) - (j * tile_height / 2)
        print(x);
        print(y);
        j = j+1;
    end
i = i+1;
end

它有效,但它只显示第一行值,而不会进入第二行,第三行等。

我想用另一种语言做什么

for (i = 0; i < tile_map.size; i++):
    for (j = 0; j < tile_map[i].size j++):
        draw(
            tile_map[i][j],
            x = (j * tile_width / 2) + (i * tile_width / 2)
            y = (i * tile_height / 2) - (j * tile_height / 2)
        )

知道我做错了吗?

谢谢!

2 个答案:

答案 0 :(得分:5)

以下是代码的清理版本。

注意更改:

  1. 使用local变量而不是全局。
  2. 使用#表格大小而不是table.getn()
  3. 使用数字for循环代替while
  4. 缺少分号。
  5. 如果您取消注释io.write()来电并注释掉print,您就会以可读的方式打印出您的地图。

    local tile_width = 64
    local tile_height = 64
    
    local tile_map = {
        {1,1,1,1,1,1,1,1,1,1,1,1},
        {1,1,1,1,1,3,1,1,1,1,1,1},
        {1,1,1,1,1,3,1,1,1,1,1,1},
        {1,1,1,1,1,3,1,1,1,1,1,1},
        {1,1,1,1,1,3,1,1,1,1,1,1},
        {1,1,1,1,1,1,2,1,1,1,1,1},
        {1,1,1,1,1,1,1,1,1,1,1,1},
        {1,1,1,1,1,1,2,1,1,1,1,1}
    }
    
    for i = 1, #tile_map do
      local row = tile_map[i]
      for j = 1, #row do
        --io.write(row[j])
        print(row[j])
        local x = (j * tile_width / 2) + (i * tile_width / 2)
        local y = (i * tile_height / 2) - (j * tile_height / 2)
        print(x)
        print(y)
      end
      --io.write("\n")
    end
    

    P.S。确保您已阅读Programming in Lua 2nd Edition本书。请注意,在线提供的版本是第一版,它描述了较旧的Lua 5.0。

答案 1 :(得分:0)

您必须在每个内部循环后将j重置为1。因为:内循环第一次完成后,j将增加64次。但是你想从j设置为1重新开始。

在其他编程语言的代码中,请注意j的这种重新设置。