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

Я планирую сделать детскую версию пасьянса «Маджонг» (начиная с макета доски «Черепаха» и постепенно продвигаясь дальше). Я пытаюсь понять, как хранить данные для каждого слоя набора плиток макета черепахи. См. пример здесь: http://icarus.cs.weber.edu/~dab/cs3230/labs/lab.5/tile_layers.pdf

Обычно я бы использовал 2D-массив для каждого слоя и 1D-массив слоев от 0 (самый нижний) до 4 (самый верхний) с учетом слоев выше этого (5, 6, ...). Однако есть плитки, которые занимают более одной строки и/или столбца одновременно. Например, на слое 0 (самый нижний) крайняя левая плитка и две крайние правые плитки занимают две строки одновременно, а одна плитка на слое 4 (самая верхняя) занимает два столбца и два. ряды одновременно.

Какова наилучшая модель данных для хранения такого набора плиток? Должен ли каждый тайл иметь флаг для сдвига его наполовину в следующую строку и следующий столбец?

Я думаю, есть объект Tile, каждый экземпляр которого представляет 1 из 144 плиток на доске. Затем все тайлы упорядочиваются по слоям, как я описал выше (2D-массив для каждого слоя, все слои хранятся в 1D-массиве).

Примечание. Я рассматриваю возможность использования Javascript и HTML5 для этого проекта. Это не будет что-то, что я опубликую, просто упражнение по программированию.

Это лучший метод? Я что-то упускаю?


person TerranRich    schedule 01.06.2014    source источник


Ответы (2)


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

person Simon    schedule 04.06.2014
comment
Великолепно! Это должно решить проблему. Спасибо! - person TerranRich; 05.06.2014

Это можно реализовать несколькими способами, например, вы можете установить координаты x, y и z для каждой плитки.

class Tile {
    int x
    int y
    int z
}
person ali köksal    schedule 03.06.2014
comment
Это хороший способ сохранить все тайлы (сохранить значение оси Z, а не помещать их в одномерный массив слоев. Но это не отвечает на мой вопрос о том, как хранить размещение тайлов, когда некоторые тайлы сдвинуты на полпути в следующий столбец и/или строку. - person TerranRich; 04.06.2014
comment
Одним из решений было бы дублировать количество строк и столбцов. Используйте четные координаты для обычных тайлов. используйте нечетные координаты между ними для других. Другое решение — использовать более детализированную систему координат и использовать области плитки (x, y, ширина, высота) для определения перекрытия. - person ali köksal; 04.06.2014