Есть два способа сделать это:
Первый - запустить два потока;один ожидает ввода и обновляет состояние соответственно, в то время как другой запускает игру.
Другой (более распространенный в разработке игр) способ - написать игру как один большой цикл, который выполняется много раз в секунду, обновляя состояние игры.перерисовка экрана и проверка ввода.
Но вместо блокировки, когда вы получаете ввод с клавиатуры, вы проверяете наличие ожидающих нажатий клавиш, а если ничего не произошло, вы просто продолжаете цикл.Если у вас есть несколько источников ввода (клавиатура, сеть и т. Д.), Все они помещаются туда в цикл, проверяя один за другим.
Да, это называется опрос.Нет, это не эффективно.Но в высококлассных играх обычно все сводится к извлечению максимальной производительности и частоты кадров из компьютера, а не круче.
Для повышения эффективности вы можете при желании заблокировать с тайм-аутом, говоря «подождите нажатия клавиши,но не более 300 миллисекунд ", чтобы вы могли продолжить цикл.
select()
приходит на ум, но есть и другие способы ожидания или проверки ввода.