@mrbudson

Не могу, понять как компьютер перемещает свой знак?

Ссылка на книгу: https://readli.net/izuchaem-c-cherez-programmirova... 206 страница функция computerMove()
Я пишу крестики-нолики по гайду из книги, и тут есть одна непонятная вещь:
//Книга
int computerMove(vecotr<char> board, char computer)
{
	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), чтобы победить.
//

Не понятно, говорится если ход не дает победы, то компьютер ставит фигуру в следующую клетку, так вот каким образом он ставит фигуру в другую свободную клетку, не понятно как он это делает в коде, если в коде я вижу только как очищается выбранная клетка компьютером. И что значит эта запись - found = winner(board) == computer; Это ли проверка победы компьютера?
Прошу помочь с данным кодом, чтобы понять что тут написано советую заглянуть в книгу, заранее спасибо!
  • Вопрос задан
  • 152 просмотра
Пригласить эксперта
Ответы на вопрос 2
wataru
@wataru Куратор тега C++
Разработчик на С++, экс-олимпиадник.
Не понятно, говорится если ход не дает победы, то компьютер ставит фигуру в следующую клетку,


Вот этот код ставит фигуру в текущую клетку: board[move] = computer;
Двумя строчками ниже этот ход откатывается: board[move] = EMPTY;

found = winner(board) == computer; - этот код присваивает булевой переменной found значение выражения winner(board) == computer.
Ответ написан
@Xiran
На мой взгляд, функция написана "лишь бы работало". Может для проекта за 3-значную сумму и сгодится, но никак не для книги, тем более для новичков.
Верно, winner(board) == computer проверяет, выигрывает ли компьютер при данном значении board. Если же да, то выходим из цикла. Если нет, перебираем дальше.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы