gpt4 book ai didi

c - 如何使用 ncurses 同时打印两件事

转载 作者:行者123 更新时间:2023-11-30 17:31:20 25 4
gpt4 key购买 nike

我正在 ncurses 中制作一款类似于太空入侵者的游戏。

到目前为止,我已经开始移动并击落,但遇到了问题。

当玩家发射激光时,我使用 usleep 调用来延迟激光在屏幕上移动,这样它就不会只从屏幕的一端显示到另一端。

使用 usleep 延迟激光的问题意味着,当激光穿过屏幕时,玩家无法移动,直到循环退出。

我的问题是,是否有另一种方法可以打印在屏幕上移动的激光,同时通过用户输入移动播放器/光标?

当用户按下“f”键时,以下代码将在屏幕上移动线条(激光)。但是,在激光离开屏幕之前,用户无法再次移动:

void combat(int y, int x)
{
do
{
mvprintw(y -1, x, "|");
refresh();
y--;
usleep(50000);
mvprintw(y , x, " ");
}
while(y>0);
}

最佳答案

如果没有外部线程,这个问题就很难解决。通过将激光的运动绑定(bind)到输入(以便仅当屏幕应由外部输入刷新时更新位置)来删除 sleep 功能是行不通的,因为您需要激光独立于其他一切。

一个肮脏的黑客可能是:

  • 通过 int nodelay(WINDOW *win, bool bf) 实现非阻塞输入函数,这样输入函数就不会阻塞任何内容
  • 给定(足够高)的刷新率,例如 10 FPS( sleep 100 毫秒)
  • 每一定数量的帧仅更新一次激光位置,使其移动得足够慢,但能够足够频繁地轮询输入

关于c - 如何使用 ncurses 同时打印两件事,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24666939/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com