有没有办法在同一个循环中呈现我的 Termbox 游戏和处理键盘事件?

Is there a way to render my Termbox game and handle keyboard events in the same loop?

我的 termbox 程序在渲染屏幕和处理键盘事件时遇到问题。最近,我在我的大学完成了 C 和 C++ class。我想通过创建一个基本的贪吃蛇游戏来展示我的知识。第一步,我想要一个简单的渲染循环,让一段文本简单地向左移动并在到达第 0 个 x 坐标时退出游戏。继续下一个渲染帧时会出现问题,因为游戏是 运行ning 单线程,在接受新的键盘事件之前不会渲染下一帧。通常,我希望游戏继续渲染,而不管事件,影响新帧的新事件。

至于可能的解决方案,我考虑过使用多线程 运行 游戏循环和处理键盘事件。但是,我认为这对于这么小的问题来说太过分了,可能有比为一个简单的贪吃蛇游戏管理多个线程更简单的替代方案。

至于代码,就这么简单:

while (1)
{
    tb_clear();
    draw(gameState);
    tb_present();

    struct tb_event event;
    tb_poll_event(&event);

    if (event.ch == 'q')
        break;
}

深入研究头文件后,我发现了一种不会永远等待的方法。

/* Wait for an event up to 'timeout' milliseconds and fill the 'event'
 * structure with it, when the event is available. Returns the type of the
 * event (one of TB_EVENT_* constants) or -1 if there was an error or 0 in case
 * there were no event during 'timeout' period.
 */
SO_IMPORT int tb_peek_event(struct tb_event *event, int timeout);