Цель работы - изучить особенности использования основных элементов структурного программирования
(переменные, типы данных, управляющие конструкции, функции) на языке typescript
.
Реализуйте игру в крестики-нолики на доске 3 на 3, используя коды из исходного проекта.
Рекомендуется реализовывать функции из исходного проекта в описанном ниже порядке, сразу проверяя их с помощью
тестов. Для запуска отдельного теста используйте команду по образцу jest -t "Преобразования"
.
Функция function boardFromString(s: string): string[]
должна преобразовывать текущую позицию
из
строки (например 00__XX___
) в массив (например [
'0', '0', '_',
'_', 'X', 'X',
'_', '_', '_'
]
). В виде строки удобно задавать начальную позицию в коде. При выполнении кода, определении победителя и
др. удобнее использовать представлении в виде массива.
Функция function boardToString(b: string[]): string
должна выполнять обратное
преобразование
Функция function isFill(board: string[]): boolean
должна проверять, имеются ли на доске
свободные клетки. Если ни в одном из элементов массива board
нет элементов равных _
она возвращает true
.
Функция function isRightMove(move: number, board: string[]): boolean
должна проверять
свободно ли поле move
(равно ли ее значение _
) на доске board
.
Функция function checkWin(board: string[]): string
должна проверять,
имеется ли на доске выигрышная комбинация в виде ряда из трех одинаковых символов X
или
0
. В случае наличия такой комбинации функция должна вернуть X
или
0
соответственно, иначе нужно вернуть _
. Для этого нужно проверить все возможные
варианты рядов, которые перечисленны в winPos
.
В файле index.ts
переменная board
хранит текущее состояние доски, переменная
turn
- символ, который будет выставлен на доску при очередном ходе, переменная
gameOver
устанавливается в значение "истина" при окончании игры (кто-то выиграли или закончились
пустые поля).
Функция function step(cell: number): void
в случае, если игра не окончена и в клетку
cell
возможен ход, должна выполнить ход. При выполнении хода нужно заполнить соответствующие
элементы массивов board
и buttons
, затем проверить, на закончилась ли игра и, если
игра закончилась, обновить переменные gameOver
и info
.
Функция reset
должна установить в начальное состояние переменные board
,
turn
и gameOver
, а также установить в начальное состояние свойство
textContent
html элементов buttons
и info
.