Console Windows游戏机的实时控制

Console Windows游戏机的实时控制,console,Console,另一个快速的问题,我想做一个简单的基于控制台的游戏,没有什么太花哨的,只是为了有一些周末项目来更熟悉C。基本上我想做俄罗斯方块,但我最终遇到了一个问题: 如何让游戏引擎运行,同时等待输入?显然,cin或scanf对我来说毫无用处。您正在寻找一个库,例如 许多类似的游戏都是使用或类似的方法编写的。您可以研究如何将stdin更改为非阻塞,这将使您能够编写类似俄罗斯方块的内容,但游戏可能更直接地用事件驱动的范例来表达。也许这是学习windows编程的好借口 无论如何,如果您想使用控制台路径,如果您使用

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


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

您正在寻找一个库,例如


许多类似的游戏都是使用或类似的方法编写的。

您可以研究如何将stdin更改为非阻塞,这将使您能够编写类似俄罗斯方块的内容,但游戏可能更直接地用事件驱动的范例来表达。也许这是学习windows编程的好借口

无论如何,如果您想使用控制台路径,如果您使用的是microsoft编译器,那么应该通过conio.h提供kbhit,它可以告诉您在stdin上对fgetc的调用是否会被阻止


实际上应该提到的是,MinGW gcc编译器3.4.5也支持kbhit。

有两种方法可以做到这一点:

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

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

但是,当您获得按键输入时,您不需要阻塞,而是检查是否存在挂起的按键,如果什么都没有发生,您只需继续循环。如果你有多个输入源,比如键盘、网络等等,它们都会被放在循环中,一个接一个地检查

是的,这叫投票。不,效率不高。但高端游戏通常都是为了最大限度地提高电脑的性能和帧率,而不是让电脑运行得很酷

为了提高效率,您可以选择使用超时来阻止,比如等待按键,但不超过300毫秒,这样您就可以继续循环


选择出现在脑海中,但也有其他等待或检查输入的方法

哪种方法更有效?线程还是大循环?我的猜测是线程,因为从所有后台运行的进程中,当进行多任务处理时,您会获得更多的CPU时间,但这只是我的猜测。最终,任何一种编程方法都可能导致完全相同的结果,但线程可能对大多数人来说更容易编程,因此可能会更高效。大循环方法在高端游戏中更为常见,因为程序员希望绝对控制程序流,线程可能导致一定程度的不可预测性。