1. Основы typescript

Цель работы - изучить особенности использования основных элементов структурного программирования (переменные, типы данных, управляющие конструкции, функции) на языке 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.

Вопросы и комментарии