Теперь перейдём к ходу компьютера.
По задумке компьютер будет «глупым»: он будет ходить в случайную свободную клетку и не будет стараться обыграть пользователя. При желании можно дописать алгоритм поиска оптимального хода. Нам же достаточно, чтобы он ходил хоть как‑то.
Разрабатывать метод для обработки хода компьютера начнём с известного заранее поведения.
Напишем метод createComputerMove, который будет всегда ходить в левую верхнюю клетку доски.
test/game.jstest('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
+ }