Как я могу заставить программу ждать в OCaml? - PullRequest
1 голос
/ 08 марта 2019

Я пытаюсь сделать тетрис в ocaml, и мне нужно, чтобы часть двигалась по графическому экрану с определенной скоростью. Я думаю, что лучший способ сделать это - создать рекурсивную функцию, которая рисует кусок в верхней части экрана, ждет примерно полсекунды, удаляет этот фрагмент с экрана и перерисовывает его на 50 пикселей ниже. Я просто не знаю, как заставить программу ждать. Я думаю, что вы можете сделать это с помощью модуля Unix, но idk как ..

1 Ответ

1 голос
/ 08 марта 2019

Предположим, вы хотите использовать довольно простой подход, то есть подход, который работает без многопоточности.

Предположительно, когда ваша игра запущена, она тратит практически все свое время на ожидание ввода от пользователя, то есть на ожидание нажатия пользователем клавиши. Скорее всего, для этого вы используете блокирующее чтение. Поскольку пользователь может набрать любое количество времени, прежде чем что-то набирать (до минут или лет), это несовместимо с обновлением графической части игры.

Очень простое решение - установить тайм-аут на операцию чтения. Вместо того чтобы ждать, пока пользователь нажимает клавишу, вы можете подождать максимум (скажем) 10 миллисекунд.

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

...