Не могу понять часть кода

Изучаю с++ по книге Майкла Доусона, не могу понять конкретно эти строки:

Функция computerMove(), игра крестики нолики, глава 6

unsigned int move = 0;
bool found = false;
while(!found && move < board.size())
{
    if(isLegal(move, board))
    {
        board[move] = computer;
        found = winner(board) == computer;
        board[move] = EMPTY;
    }
    if(!found)
    {
        ++move;
    }
}

//фрагмент из книги

Сначала я перебираю в цикле все возможные варианты хода от 0 до 8. Проверяю, не противоречит ли каждый из ходов правилам. Если ход допустим правила ми, то я ставлю фигуру компьютера в выбранную клетку и проверяю, приводит ли такой ход компьютер к победе. Если этот ход не дает победы, пробую поставить фигуру в следующую свободную клетку. Однако если ход привел компьютер к по беде, то цикл завершается. Я нашел ход (found равно true ), который должен сделать компьютер (занять клетку номер move), чтобы победить. //

Как именно показано в коде как фигура компьютера ставится в следующую свободную клетку? Я вижу только то, что клетка которую выбрал компьютер обнуляется. Помогите пожалуйста, уже давно не могу понять! И что делает конкретно это условие:

if (!found)

{

++move;

}

Ссылка на книгу: https://readli.net/izuchaem-c-cherez-programmirovanie-igr/ 206 страница


Ответы (1 шт):

Автор решения: NunOfIt

Сначала я перебираю в цикле все возможные варианты хода от 0 до 8. Проверяю, не противоречит ли каждый из ходов правилам. Если ход допустим правила ми, то я ставлю фигуру компьютера в выбранную клетку и проверяю, приводит ли такой ход компьютер к победе. Если этот ход не дает победы, пробую поставить фигуру в следующую свободную клетку. Однако если ход привел компьютер к по беде, то цикл завершается. Я нашел ход (found равно true ), который должен сделать компьютер (занять клетку номер move), чтобы победить.

Тут у вас как-бы всё написано.

  • isLegal(move, board) это проверка на соответствие правилам.
  • board[move] = computer фигура компьютера ставится в выбранную клетку.
  • winner(board) эта функция сообщает, кто будет победителем при данном ходе.
  • winner(board) == computer данное условие говорит о том, приведёт ли данный ход к победе компьютера.
  • board[move] = EMPTY удаляет фигуру компьютера из выбранной клетки
  • !found проверяет был ли найден выиграшный ход, т.е. равно ли выражение winner(board) == computer true
  • ++move переходит к следующей клетке, если выиграшный ход не был найден
  • !found && move < board.size() это условие означает, что цикл будет продожаться пока не будет найден выиграшный ход или move не дойдёт до последней клетки.

Единственное, в данной функции не очень понятно, что будет происходить, если выиграшного хода нет...

→ Ссылка