Skip to content

Instantly share code, notes, and snippets.

@astynax
Last active October 8, 2019 08:50
Show Gist options
  • Save astynax/1eb88e195c4bab2b8d31d04921b18dd0 to your computer and use it in GitHub Desktop.
Save astynax/1eb88e195c4bab2b8d31d04921b18dd0 to your computer and use it in GitHub Desktop.

"Столбики"

Будем моделировать настольную игру на два игрока.

Инвентарь игры

  • доска 4x4 ячейки (четверть шахматной)
  • 4 красные фишки (плоские как шашки)
  • 4 синие фишки

Стартовая позиция

|---+---+---+---|
| R | R | R | R |
|---+---+---+---|
|   |   |   |   |
|---+---+---+---|
|   |   |   |   |
|---+---+---+---|
| B | B | B | B |
|---+---+---+---|

Ход игрока

Игрок в свой ход может

  • переместить фишку на другую свою фишку (положить сверху) в соседнем поле - так получается столбик (т.о. столбики состоят более чем из одной фишки)
  • переместить свою фишку / свой столбик на соседнее свободное поле
  • атаковать фишку / столбик противника, находящуюся в соседней клетке

Атака состоит из поочерёдных ударов атакующей и защищающейся сторон. Начинает атакующая сторона - снимает одну фишку со столбика атакуемой стороны. Затем атакуемая совершает контр-удар - снимает одну фишку со столбика агрессора. Если фишки атакуемой стороны кончаются раньше, чем у атакующей, то оставшийся столбик занимает освобождённое место. Если же атакующая сторона раньше остётся без фишек, остаток фишек защищающейся стороны остаётся на прежнем месте.

Окончание игры

Один игрок побеждает другого, если на доске остаются только его фишки.

Задания

1

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

2

Реализовть функцию

move :: ЧемХодим -> КудаХодим -> Game -> Maybe Game

Maybe в рузельтате необходима потому, что не каждый ход допустим - нельзя ходить несвоими фишками, перемещать фишки/столбики можно только на соседние поля и т.д.

Также, очевидно, потребуется функция вида

gameIsOver :: Game -> Maybe КтоТоВыиграл
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment