实时控制Windows控制台游戏

时间:2010-06-18 22:22:51

标签: console

另一个快速问题,我想制作简单的基于游戏机的游戏,没有什么太花哨,只是为了让周末项目更熟悉C.基本上我想制作俄罗斯方块,但我最终遇到了一个问题:

如何让游戏引擎走,同时等待输入?显然,cin或scanf对我来说毫无用处。

3 个答案:

答案 0 :(得分:2)

您正在寻找ncurses等图书馆。

许多Rogue类游戏都是使用ncurses或类似游戏编写的。

答案 1 :(得分:1)

有两种方法可以做到:

第一个是运行两个线程;一个人等待输入并相应地更新状态,而另一个则运行游戏。

另一种(在游戏开发中更常见)方式是将游戏编写为一个大循环,每秒执行多次,更新游戏状态,重绘屏幕和检查输入。

但是当您获得键输入时,不是阻塞,而是检查是否存在待处理的按键,如果没有发生任何事情,您只需继续循环。如果你有多个输入源(键盘,网络等),它们都会被放在循环中,一个接一个地检查。

是的,这叫做民意调查。不,它效率不高。但高端游戏通常都是为了将​​最高性能和帧率从计算机中拉出来,而不是很酷。

为了提高效率,您可以选择阻止超时 - 说“等待按键,但不超过300毫秒”,这样您就可以继续循环。

我想到了{p> select(),但还有其他等待或检查输入的方法。

答案 2 :(得分:0)

你可以弄清楚如何将stdin更改为非阻塞,这样你就可以编写像俄罗斯方块这样的东西,但游戏可能会更直接地表达在事件驱动的范例中。也许这是学习Windows编程的一个很好的借口。

无论如何,如果您想要使用控制台路由,如果您使用的是Microsoft软件编译器,那么您应该kbhit()可用(通过conio.h),它可以告诉您是否调用了{{ 1 {} fgetc会阻止。

实际上应该提到MinGW gcc编译器3.4.5也支持stdin