我正在编写类似roguelike游戏的代码,代码的这一部分使用getch()接受用户输入,以指示角色下一步要移动的位置。据我了解,getch()将暂停程序,直到收到用户的输入为止,但是我的代码在到达该行时不会暂停。这是代码
uint32_t pc_next_pos(dungeon *d)
{
char comm;
comm = getch();
command_move(d, comm);
}
整个程序可以正确编译,只是它没有暂停程序让我移动角色,而是继续运行直到游戏中的所有怪物死亡后程序终止。该代码不包含在内,因为它在此方法中不起作用。
我在此方法中做错了什么而不允许getch()暂停程序,还是我误解了getch()的作用?
最佳答案
getch()
可以阻断或非阻塞(或甚至与一个超时阻塞),这取决于输入选项。你想阻止;您将获得无阻碍的体验。问题不在此函数中,而是在curses初始化代码中的某个位置(未显示)-您可能在nodelay(stdscr, TRUE)
之后不久调用诸如timeout()
或上述initscr()
之类的东西。如果不是,您可能需要添加类似nodelay(stdscr, FALSE)
的内容,尽管这应该是默认行为。
您还应该阅读halfdelay()
和cbreak()
(通常与nodelay()
和timeout()
在同一手册页上)。
关于c - 程序不会在getch()处暂停,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/42617937/