select
ровно в одном потоке. main
должен стоять знак точки с запятой?board[move] = EMPTY;
должно выполняться только если !found
. Но, вероятнее всего в этом коде только проба шага и анализ на выигрыш, а фактический шаг должен делаться в коде дальше по тексту книги.
Сейчас твой вопрос больше напоминает проблему XY. Это все тебе не нужно.
Тебе не нужны какие-то там пакеты чего-либо. Тебе не нужны какие-либо библиотеки. Тебе на твоем уровне вообще рано думать о кроссплатформе, для тебя это неподъемная и необъятная задача. Ты не справишься. Ты задумываешься о кроссплатформе, как о какой-то базе. А это не так. Кроссплатформенность - это лишь далекое следствие грамотной топологии проекта, грамотной инфраструктуры проекта, грамотной макроархитектуры проекта, грамотной архитектуры элементов проекта и, в особенности, экспертных знаний всех языков, на которых написан код проекта. Не только C++ и не только пиона, обычно это от пяти языков.
Сейчас твоя задача - взять Visual Studio, именно ее и вообще ничто больше, и выштудировать все ее возможности вдоль и поперек.
Все возможности - это и C#, и C++/Cx, и UWP, и COM тоже, а не просто возможности C++ и Win32 API.
Лет на 5 следующих тебе этого фронта задач хватит.
В ином случае оставайся на питоне, бери PySide2 и делай себе спокойно GUI в более привычной обстановке. Это не плохо, есть задачи, для которых эта связка является оптимальной.