0

У меня возникли проблемы с выяснением того, как обращаться с обертыванием краевых дел 2-мерного массива назад, чтобы число за границей обернулось на противоположный край сетки.Обертывание по краям в 2-м массиве (игра жизни)?

Это мой текущий код, он работает несколько, но я заметил, что он фактически не обертывает вокруг сетки.

wrap: function (x, min, max){ 
    if (x < min) { 
     return max + x 
    } 
    else if (x === min) { 
     return max - 10 
    } 
    else if (x > max) { 
     return min + 10 
    } else if (x <= max){ 
     return max % x 
    } 
    // return x < 0 ? max + x : min 
}, 



get_neighbour:function(x, y) { 
    if (g.grid[x] && g.grid[x][y]){ 
     return g.grid[x][y].state 
    } else { 
     (g.grid[x]) ? x = x : x = g.func.wrap(x, 0, 500) ; 
     (g.grid[y]) ? y = y : y = g.func.wrap(y, 0, 500) ; 
     return g.grid[x][y].state 
    } 
}, 

Что я здесь делаю неправильно?

+0

Где константа '10' приходит? – hobbs

+0

Если бы не этот странный 10, обертка могла бы быть «return ((x-min)% (max-min)) + min', что становится еще проще, если вы даете' min' всегда быть 0. – hobbs

+0

10 - размер сетки или ширина ячейки. Я буду менять его по отношению к размеру ячейки позже, но теперь мне легче думать в константах. как в 10 будет изменен на cell.width позже, если это ясно? – AndyB

ответ

0

Ваша wrap функция неполна. Он обрабатывает случай, когда x меньше 0, но когда x не меньше 0, он всегда возвращает min. В этот момент есть два случая: x меньше или равно max, или x больше, чем max, и вам нужно будет обрабатывать их. Это может сделать проще, если вы используете if и else if, чем оператор ?: - код определенно будет более читаемым, и ошибки будут легче обнаружить.

(Кроме того, в коде выше min всегда 0, но в принципе, вы должны проверить, является ли x меньше min вместо 0.)

+0

Спасибо - это действительно помогло мне увидеть, где я ошибся. Я обновил OP с помощью моего теперь действующего защищенного кода. – AndyB

Смежные вопросы