Луа за кругом помощь! - PullRequest
       4

Луа за кругом помощь!

1 голос
/ 17 апреля 2011

У меня есть следующий код

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 ]

5 голосов
/ 17 апреля 2011

Вот очищенная версия вашего кода.

Примечание изменений:

  1. Использование local переменных вместо глобальных.
  2. Использование #для размера таблицы вместо table.getn().
  3. Используйте числовой цикл for вместо while.
  4. Отсутствие точек с запятой.

Если выраскомментируйте io.write() звонки и комментируйте print s, вы распечатаете карту в удобочитаемом виде.

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

PS Убедитесь, что вы прочитали Программирование в Lua 2nd Edition книга.Обратите внимание, что версия, доступная онлайн, является первой редакцией и описывает более раннюю версию Lua 5.0.

0 голосов
/ 17 апреля 2011

Вы должны сбросить j на 1 после каждого внутреннего цикла. Потому что: после того, как внутренний цикл был завершен в первый раз, j будет увеличен в 64 раза. Но вы хотите начать заново с j, установленным в 1.

В коде другого языка программирования обратите внимание, что об этой переустановке j позаботились.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...