Конвертировать 2d координаты матрицы алмазов в 1d индекс и обратно - PullRequest
0 голосов
/ 15 октября 2018

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

Поэтому я подумал, что спиральная матрица с бриллиантами будет наиболее эффективным способом хранения доски, но я не могу найти способпреобразуйте координаты x, y в индекс массива 1d или в обратную операцию.

как этот макет

  X -3 -2 -1  0  1  2  3
Y 3          13
  2       24  5 14
  1    23 12  1  6  15  
  0 22 11  4  0  2   7 16
 -1    21 10  3  8  17
 -2       20  9 18
 -3          19

Плитка 1 всегда будет в позиции 0, плитка 2 будет в 1,2,3 или 4, фрагмент 3 где-то от 1 до 12 и т. Д.

Поэтому мне нужен алгоритм, который переходит от X, Y к индексу и от индекса обратно к исходным X и Y.

Кто-нибудь знает, как это сделать, или порекомендует другой алгоритм заполнения пространства, который соответствует моим потребностям.Я, вероятно, собираюсь использовать Java, но предпочел бы что-то не зависящее от языка.

Спасибо

1 Ответ

0 голосов
/ 15 октября 2018

Как я понимаю из формулировки проблемы, нет никакой гарантии, что плитки будут равномерно заполнены по бокам.например:

  X -3 -2 -1  0  1  2  3
Y 3                 6
  2           3  4  5
  1           1      
  0           0  2  
 -1    

Итак, я думаю, что алмазная матрица не будет лучшим выбором.Я бы предложил хранить их в хэш-карте, например, реализовать словарь для двухбуквенных слов.Example for a hash-map dictionary.[1] Кроме того, вам нужно быть более точным в соответствии с вашими требованиями.Мол, вы со временем отдаете предпочтение сложности пространства?Или вам нужно быстрое время доступа, и вам не нужно слишком много использовать память.

ВАЖНО:

Кроме того, что такое

  • Максимальное количество плиток, которые мы должны держать
  • Максимальная ширина и высота доски.
...