【问题标题】:C++ real time snake like game console without multithreading没有多线程的C++实时蛇形游戏机
【发布时间】:2015-12-14 19:36:29
【问题描述】:

我想使用 c++ 在控制台中制作蛇游戏,但我不想等待每个“帧”等待用户输入。 如果我使用 cin 或 getch(),程序将每帧等待玩家输入:

while (game)
{
    c = getch (); //input
    snake.move (c); //moving
    draw (); //drawing
}

如何移动蛇并在控制台中绘制它而不是等待每一帧输入?

有没有办法做到这一点而无需多威胁? 也许像在代码中的cin缓冲区中放入一些东西而不是使用控制台?可行吗?

【问题讨论】:

  • 查看 SFML 阅读教程,尤其是图形和事件。
  • 我不想使用 SFML。我只想要标准 C++
  • 没有标准的非阻塞读取 AFIAK。这就是为什么你会使用两个线程。
  • c++ 中是否有内置的威胁支持? C++ in code::blocks 不完全支持 c++ 11,所以新线程不可用。
  • C++ 标准库提供了各种任务所需工具集的交集,而不是它们的联合。 Bjarne Stroustrup 在他的“C++ 编程语言第 4 版”中提到,它可能只适用于非常低级的嵌入式开发和系统编程/OS 开发。如果你想制作一款简约的游戏,只是为了咧嘴而笑,祝你好运。请记住,无论多么低级,openGL 都不是标准 C++ 的一部分

标签: c++ input console cin


【解决方案1】:

您不能使用标准 C++,因为不能保证当用户按下某个键时,该键按下会立即得到确认。许多实现等待 Enter 键被按下,然后处理输入缓冲区。

您将需要一个事件驱动系统。您希望操作系统或硬件通知您的程序发生了按键事件。在这种系统中,您将在事件处理程序期间移动蛇。

另一种方法是轮询开关状态。松开钥匙后,您可以移动蛇。

上述所有解决方案都需要特定于平台或操作系统的功能。

【讨论】:

  • conio.h getch () 无需输入即可工作 我使用的是 Windows,所以就足够了。我只想通过代码而不是控制台向缓冲区添加一些东西。
  • conio.h 文件不是标准 C++ 的一部分。
  • 它是windows c++的一部分,但它附属于每一个好的编译器。
  • 对不起,我有几个很好的编译器,比如 IAR、Greenhills、Mingw、GNU。这些没有附加conio.h。所以,我猜他们不是好的编译器。
  • 你在使用 linuks 吗?
猜你喜欢
  • 1970-01-01
  • 2014-09-20
  • 2017-12-09
  • 1970-01-01
  • 1970-01-01
  • 2014-08-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多