Перейти к содержимому
  • 0
BenniShifer919

Некорректно рабочая функция

Вопрос

У меня есть такая функция:

function shiftMap(direction)
    if direction == "down" then
        for y=2,sizeY,1 do
            for x=1,sizeX,1 do
                map[y][x] = map[y-1][x]
            end
        end
        for x=1,sizeX,1 do
            map[1][x] = nil
        end
    elseif direction == "right" then
        for y=1,sizeY,1 do
            for x=2,sizeX,1 do
                map[y][x] = map[y][x+1]
            end
        end
        for y=1,sizeY,1 do
            map[y][sizeX] = nil
        end
    elseif direction == "top" then
        for y=sizeY-1,1,-1 do
            for x=1,sizeX,1 do
                map[y][x] = map[y+1][x]
            end
        end
        for x=1,sizeX,1 do
            map[sizeY][x] = nil
        end
    elseif direction == "left" then
        for y=1,sizeY,1 do
            for x=sizeX-1,1,-1 do
                map[y][x] = map[y][x-1]
            end
        end
        for y=1,sizeY,1 do
            map[y][1] = nil
        end
    end
end

Так вот, если я сдвигаю вправо/влево - все отлично! Но когда я пытаюсь вверх/вниз - это заставляет ВСЮ карту загенерироватся заново, хотя оно генерирует заново только пустые клетки. А также впринципе некорректно работает.

 

Скрытый текст

2023-11-05-163316.png
Начальная позиция
2023-11-05-163407.png
Влево +1
2023-11-05-163443.png
Влево +2
2023-11-05-163509.png
Вправо +1
2023-11-05-163549.png
Вверх +1
2023-11-05-163627.png
Вниз +1

Немогу понять причину возникновения бага.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Рекомендуемые сообщения

@BenniShifer919 Не вполне понимаю проблему.

 

Картинки бесполезны из-за их размера. Чтобы увидеть различия между ними, приходится скролллить их вверх-вниз, удерживая детали в памяти. К таким усилиям я не готов, поэтому прекратил попытки ориентации по ним. Предлагаю вырезать из картинок всё несущественное, оставив только значимую часть. А подписи к картинкам имеет смысл как-то группировать, чтобы понимать принадлежность подписи к верхней или нижней картинке.

 

Описание проблемы непонятное:

19 минут назад, BenniShifer919 сказал:

 когда я пытаюсь вверх/вниз - это заставляет ВСЮ карту загенерироватся заново, хотя оно генерирует заново только пустые клетки. А также впринципе некорректно работает.

Что значит "генерируется заново"? Как это проявляется? Что значит "в принципе некорректно работает"?

 

Код я не стал читать полностью, но вижу странность в первых строчках. Предполагаю наличие аналогичной проблемы и в остальных участках.

    if direction == "down" then
        for y=2,sizeY,1 do
            for x=1,sizeX,1 do
                map[y][x] = map[y-1][x]
            end
        end
        for x=1,sizeX,1 do
            map[1][x] = nil
        end

Если развернуть этот цикл, то получим следующее:

  • Строка с номером 2 заполняется значениями из предыдущей строки, то есть из строки с номером 1.
  • Строка с номером 3 заполняется значениями из строки с номером 2, а по сути всё из той же строки с номером 1.
  • ...
  • Строка с номером sizeY заполняется значениями из строки с номером sizeY-1, а в конечном итоге из строки с номером 1.
  • Строка с номером 1 очищается.

Результат работы этого кода можно сформулировать так: первая строка копируется в остальные строки, а сама она очищается. Это не похоже на сдвиг.

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
1 минуту назад, eu_tomat сказал:

Картинки бесполезны из-за их размера. Чтобы увидеть различия между ними, приходится скролллить их вверх-вниз, удерживая детали в памяти. К таким усилиям я не готов, поэтому прекратил попытки ориентации по ним. Предлагаю вырезать из картинок всё несущественное, оставив только значимую часть. А подписи к картинкам имеет смысл как-то группировать, чтобы понимать принадлежность подписи к верхней или нижней картинке.

Да, действительно, может потом вырежу самую нужную часть
 

 

2 минуты назад, eu_tomat сказал:

Описание проблемы непонятное:

Что значит "генерируется заново"? Как это проявляется? Что значит "в принципе некорректно работает"?

Под "генерируется заново", я имею ввиду что мне кажется что карта генерируется вся с нуля, а "некорректно работает" я имею ввиду что оно по какой-то причине делает дубляжи, однако я уже понял почему прочитав твой пост

 

 

3 минуты назад, eu_tomat сказал:

Код я не стал читать полностью, но вижу странность в первых строчках. Предполагаю наличие аналогичной проблемы и в остальных участках.


    if direction == "down" then
        for y=2,sizeY,1 do
            for x=1,sizeX,1 do
                map[y][x] = map[y-1][x]
            end
        end
        for x=1,sizeX,1 do
            map[1][x] = nil
        end

Если развернуть этот цикл, то получим следующее:

  • Строка с номером 2 заполняется значениями из предыдущей строки, то есть из строки с номером 1.
  • Строка с номером 3 заполняется значениями из строки с номером 2, а по сути всё из той же строки с номером 1.
  • ...
  • Строка с номером sizeY заполняется значениями из строки с номером sizeY-1, а в конечном итоге из строки с номером 1.
  • Строка с номером 1 очищается.

Результат работы этого кода можно сформулировать так: первая строка копируется в остальные строки, а сама она очищается. Это не похоже на сдвиг.

Да, действительно, спасибо что указал. Я попробую исправить данную проблему

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
1 минуту назад, BenniShifer919 сказал:

Да, действительно, спасибо что указал. Я попробую исправить данную проблему

Проверь остальные участки кода. Просто проговори своими словами, что делает каждая отдельная операция и группы операций. То есть прочитай код. Возможно, таким образом найдёшь и другие ошибки. Это один из стандартных способов поиска ошибок в коде.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
19 минут назад, eu_tomat сказал:

Проверь остальные участки кода. Просто проговори своими словами, что делает каждая отдельная операция и группы операций. То есть прочитай код. Возможно, таким образом найдёшь и другие ошибки. Это один из стандартных способов поиска ошибок в коде.

Спасибо за совет! Объязательно проверю и буду следовать ему в будущем

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Присоединяйтесь к обсуждению

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

Гость
Ответить на вопрос...

×   Вы вставили отформатированное содержимое.   Удалить форматирование

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отобразить как ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.


×
×
  • Создать...