Предположим, вы хотите использовать довольно простой подход, то есть подход, который работает без многопоточности.
Предположительно, когда ваша игра запущена, она тратит практически все свое время на ожидание ввода от пользователя, то есть на ожидание нажатия пользователем клавиши. Скорее всего, для этого вы используете блокирующее чтение. Поскольку пользователь может набрать любое количество времени, прежде чем что-то набирать (до минут или лет), это несовместимо с обновлением графической части игры.
Очень простое решение - установить тайм-аут на операцию чтения. Вместо того чтобы ждать, пока пользователь нажимает клавишу, вы можете подождать максимум (скажем) 10 миллисекунд.
Для этого вы можете использовать функцию Unix.select
. Самый простой способ сделать это - переключиться на использование файлового дескриптора Unix для ввода, а не канала OCaml. Если вы не можете понять, как это сделать, вы можете вернуться к StackOverflow с более конкретным вопросом.