Если я использую массив 1d для представления квадратной доски, как я могу взять свой индекс и проверить квадраты сверху, снизу и по бокам? - PullRequest
3 голосов
/ 19 апреля 2010

Если у меня есть игровая доска 4x4, которую я представляю в своей программе как целочисленный массив 1d размера 16.

Как я могу получить индексы квадратов выше, ниже, слева и справа от любого заданного индекса?

Так, например:

A = { 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 }

Который представляет эту доску

 0   1   2   3
 4   5   6   7
 8   9  10  11
12  13  14  15  

Допустим, я в настоящее время нахожусь в индексе № 8 на доске (значение = 7). Как я могу получить индекс для 4 (значение = 3), 5 (значение = 6), 10 (значение = 11) и понять, что справа нет квадрата, потому что он находится на правом краю доски.

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

Я думаю что-то вроде ...

if ((i % 4) + 1 < 3) right = i + 1;
if ((i % 4) - 1 > 0) left = i - 1;
if ((i % 4) + 4 < 15) bottom = i + 4;
if ((i % 4) - 4 > 0 ) top = i - 4;

Похоже, это правильный подход?

1 Ответ

7 голосов
/ 19 апреля 2010

Чтобы получить строку, столбец из вашего индекса, используйте следующее:

row = index/num_columns;
column = index % num_columns;

чтобы вернуться к индексу, используйте

index = row * num_columns + column;

Когда вы находитесь в строках и столбцах, легко найти окружающие позиции.

above = (row-1, column)
left = (row, column-1)
etc...
...