2016-03-08 130 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(秒,函數); –