/Abalone

Учебная практика

Primary LanguageJavaScript

Abalone (учебная практика)

Абалон - это настольная стратегическая игра, придуманная французскими игровыми дизайнерами в 1987 году. Суть игры состоит в том, что нужно своими шариками (двигая их по определенным правилам) вытолкнуть за пределы игрового поля шесть шариков противника. Тот, кто первым сделал это, тот и побеждает в партии.

В игре используются шарики черного и желтого цветов (по 14 шаров каждого цвета) и игровое поле в виде шестиугольника, содержащего 61 ячейку. Шары устанавливаются в лунки и передвигаются по линиям игрового поля. Линия — это ряд попарно соседних лунок, расположенных на одной прямой, то есть через каждую лунку проходит три линии — одна горизонтальная и две диагональных. Каждый игрок имеет по 14 шариков своего цвета. Перед началом игры они располагаются на доске в симметричной начальной позиции. Игроки поочерёдно ходят; начинает игрок, имеющий чёрные шарики. За один ход игрок имеет право передвинуть на одну лунку в любом направлении один принадлежащий ему шар, либо группу из двух или трёх принадлежащих ему шаров, стоящих подряд на одной линии игрового поля.

Существует два типа ходов:

  • перемещение
  • сумито (выталкивание шара соперника)

Перемещение:

  • 1 шар может быть перемещён на любую пустую соседнюю лунку; перемещать шар на лунку, занятую своим или чужим шаром, запрещено.
  • Группа из двух или трёх шаров перемещается на расстояние одной лунки как единое целое, все шары в группе движутся в одном направлении.
  • Фронтальное перемещение: все шары перемещаются параллельно, в направлении, не совпадающем с линией, на которой стоит группа, не меняя положения относительно друг друга. При этом каждый шар группы переходит на соседнюю с ним свободную лунку. Для фронтального перемещения необходимо, чтобы все лунки, на которые перемещаются шары группы, были пусты.
  • Линейное перемещение: группа перемещается вдоль линии, на которой она стоит, при этом первый шар занимает ранее пустую лунку, а остальные сдвигаются за ним. Для линейного перемещения необходимо, чтобы лунка, соседняя с шаром, в сторону которого происходит перемещение была свободна. Исключением является сумито. Линейка из стоящих рядом четырёх и более шаров не может быть перемещена одним ходом, но любая её часть из двух или трёх шаров может быть перемещена как отдельная группа в любом разрешённом правилами направлении.

Сумито (выталкивание):

Группа игрока при перемещении может вытолкнуть стоящий вплотную к ней по направлению движения шар или группу противника. При выталкивании шар или группа противника сдвигается в направлении хода игрока на расстояние одной лунки. Такой ход называется «сумито».

Сумито возможно при соблюдении трёх условий:

  1. Сумито выполняется только при линейном перемещении группы. При фронтальном перемещении сумито невозможно.
  2. Группа игрока, которой он ходит, должна быть больше выталкиваемой группы противника. Таким образом, возможно сумито 2x1, 3x1, 3x2.
  3. За выталкиваемой группой по направлению хода должна быть пустая лунка либо край игрового поля.

В результате сумито группа противника сдвигается в направлении хода игрока на одну лунку. Если перед сумито за группой противника по линии хода находился край игрового поля, в результате сумито один шар из выталкиваемой группы выходит за пределы игрового поля. Такой шар удаляется с доски, перемещается на боковые панели. Вытолкнутые с поля шары более на него в течение партии не возвращаются. Партия заканчивается, как только с игрового поля будет вытолкнуто 6 шаров одного из соперников. Его противник становится победителем игры. Таким образом, в игре по оригинальным правилам не может быть ничейного результата.

Дальнейшие планы:

  1. Добавить настройки - выбор внешнего вида. Текущий вид неудобен на мобильных экранах.
  2. Нужно отвязаться от названия Абалон. Оставить только механику. Т.к. абалон - наверняка зерегистрированное название и просто так его использовать нельзя
  3. Верстка на таблицах - это как машина времени на 20 лет назад. Нужно переделать на flex или grid
  4. Подумать и исправить баги механики.
  5. Постараться отрисовать все при помощи css, а не вставляя картинки.