Какую структуру данных я могу использовать для настольной игры Nine men’s morris?

#java

Вопрос:

Я пытаюсь запрограммировать игру Девять мужских моррисов (https://en.wikipedia.org/wiki/Nine_men’s_morris). Но я не знаю, какая структура данных библиотеки коллекций лучше всего подходит для сохранения фигур и их положения на доске. Моей первой идеей для структуры данных было: Доска = фрагменты массива = список массивов, но тогда было трудно проверить, есть ли 3 в строке.

Ответ №1:

Я бы выбрал три списка:

По одному для каждого «кольца»: Давайте представим, что вы начинаете каждый список в левом нижнем углу и продолжаете по часовой стрелке.

 -> List#1 contains A1, A4, A7, D7, G7, G4, G1, D1 // outer ring
-> List#2 contains B2, B4, B6, D6, F6, F4, F2, D2 // middle ring
-> List#3 contains C3, C4, C5, D5, E5, E4, E3, D3 // inner ring
 

Чтобы проверить, есть ли три в ряд в кольце:
Для каждого списка проверьте элементы списка

 0 == 1 == 2 (lower left to upper left) or 
2 == 3 == 4 (upper left to upper right) or
4 == 5 == 6 (upper right to lower right) or 
6 == 7 == 0 (lower right to lower left)
 

Для «соединений» между кольцами вы должны проверить, совпадают ли нечетные записи в каждом списке, например

 list1[1] == list2[1] == list3[1]
list1[3] == list2[3] == list3[3]
...
list1[7] == list2[7] == list3[7]
 

Это должно быть довольно легко реализовано на java

Комментарии:

1. Я думаю, что это прагматичная, разумная реализация. Другой, более «чистой» версией был бы график узлов с метками на соединениях, указывающими направление соединения. Гораздо проще распространить на другие формы досок, но гораздо сложнее реализовать и понять в конкретном случае.