Не могу понять часть кода
Изучаю с++ по книге Майкла Доусона, не могу понять конкретно эти строки:
Функция 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 шт):
Сначала я перебираю в цикле все возможные варианты хода от 0 до 8. Проверяю, не противоречит ли каждый из ходов правилам. Если ход допустим правила ми, то я ставлю фигуру компьютера в выбранную клетку и проверяю, приводит ли такой ход компьютер к победе. Если этот ход не дает победы, пробую поставить фигуру в следующую свободную клетку. Однако если ход привел компьютер к по беде, то цикл завершается. Я нашел ход (found равно true ), который должен сделать компьютер (занять клетку номер move), чтобы победить.
Тут у вас как-бы всё написано.
isLegal(move, board)это проверка на соответствие правилам.board[move] = computerфигура компьютера ставится в выбранную клетку.winner(board)эта функция сообщает, кто будет победителем при данном ходе.winner(board) == computerданное условие говорит о том, приведёт ли данный ход к победе компьютера.board[move] = EMPTYудаляет фигуру компьютера из выбранной клетки!foundпроверяет был ли найден выиграшный ход, т.е. равно ли выражениеwinner(board) == computertrue++moveпереходит к следующей клетке, если выиграшный ход не был найден!found && move < board.size()это условие означает, что цикл будет продожаться пока не будет найден выиграшный ход или move не дойдёт до последней клетки.
Единственное, в данной функции не очень понятно, что будет происходить, если выиграшного хода нет...