2016-03-08 128 views
0

首先让我说我是C++的新手。我收到了一个小型“蛇”游戏的任务,这意味着我需要制作一个网格并在其中移动一个盒子。这是一个简单的1x1盒子,没有水果可以捕捉或任何东西。继续等待输入的程序C++

我能够创建网格,并有一个框可以使用用户输入向上,向下,向左,向右移动。我的问题是我需要这个盒子每秒自动向它所朝向的方向移动。我对睡眠命令没有任何问题(我认为),我的问题是当我等待用户输入他的方向时,程序会停止,直到输入为止。我需要一种方法让盒子在等待输入时继续移动。为此,我需要在等待输入的同时让代码继续,或者在等待输入时将其重定向到执行某个功能。

我一直在googling这个,现在尝试几个小时的事情,所有我一直发现的是多线程。我尝试过使用线程,pthread,boost/thread.hpp,但是我不能让它们中的任何一个工作。

在任何情况下,多线程都比我的班级做得更先进,没有机会成为我的教授想要我们做的。他说了一些有关cin功能的东西,但是我无法在任何地方找到它。

有没有简单的方法来做到这一点?

+2

这在标准C++中不存在,但各种平台可能提供各自的方式。你在使用什么平台和编译器? –

+0

如果您希望尽快得到输入(例如不等待或“”),则它取决于平台。在Windows上,我使用了'',但我不知道在Linux上会使用什么。也许是诅咒或类似的。 – Zeta

+4

跟踪“非阻塞IO”的轨道... –

回答

0

从我对这个问题的理解中,你似乎需要实现一个计时器来移动每秒移动的方块。我不确定g ++是否具有与Visual Studio类似的System :: Timers类似的功能,但是here's是一个显示如何自己制作计时器的链接(虽然它是用C编写的)。使用定时器(创建,启动,并且您的代码在定时器的滴答函数内发生输入和移动框),您可以使用if语句继续移动框。 Here's指向.NET计时器的链接,以获取有关其工作原理的更多信息。 This拥有Matthew Hoggan在Linux中为C++创建的定时器类的代码。希望这可以帮助。

if (user input) 
{ 
    change direction 
} 
move the box 
+0

感谢您的回答,但我仍然认为我会陷入同样的​​问题。我的问题并不是每秒都在移动,我的问题是我需要每秒都会移动,而我正在等待输入。 即使使用你的定时器,我仍然必须使用多线程来让它们在后台运行,而我等待输入,不是吗? –

+0

是的,计时器将运行在一个单独的线程上,但它应该是自动运行的,除非包括类并创建一个计时器对象并启动它,否则不必执行其他操作。从查看Matthew的代码,你将不得不创建一个函数来移动盒子并检查用户的输入,然后将函数传递给定时器。像t.addTimer(秒,函数); –