Ход компьютера 🔗

Теперь перейдём к ходу компьютера.

По задумке компьютер будет «глупым»: он будет ходить в случайную свободную клетку и не будет стараться обыграть пользователя. При желании можно дописать алгоритм поиска оптимального хода. Нам же достаточно, чтобы он ходил хоть как‑то.

Разрабатывать метод для обработки хода компьютера начнём с известного заранее поведения.

Напишем метод createComputerMove, который будет всегда ходить в левую верхнюю клетку доски.

test/game.js
test('Computer moves in top left cell', () => { game.createComputerMove() const board = game.getState() expect(board[0][0]).toEqual('o') })
src/Game.js
+ createComputerMove() { + + }

Создаём ход компьютера 🔗

Компьютер ходит ноликами. Ставим нолик в левую верхнюю клетку доски.

Проверяем, чтобы тесты проходили.

createComputerMove() { + this._board[0][0] = 'o' }

…и рефакторим 🔗

Метод для обновления доски _updateBoard у нас уже есть, но он работает только с крестиком. Доработаем его, добавив третьим параметром объект с настройками.

Нолик вынесем в константу _computerMoveSymbol.

И как обычно проверяем, что ничего не сломалось.

constructor() { this._userMoveSymbol = '×' + this._computerMoveSymbol = 'o' //... } // ... createComputerMove() { - this._board[0][0] = 'o' + this._updateBoard(0, 0, { + symbol: this._computerMoveSymbol + }) } - _updateBoard(x, y) { - this._board[x][y] = this._userMoveSymbol - } + _updateBoard(x, y, config={}) { + const {symbol=this._userMoveSymbol} = config + this._board[x][y] = symbol + }