2017-01-07 23 views
1

我一直在研究其中一種蛇形遊戲,並且我有一個switch語句,說明如果按某個鍵來將蛇沿某個方向通過增加/減少,但它只會這樣做,如果我拿着它。我正在尋找一種方法讓蛇的位置不斷遞增,而用戶不必拿着那把鑰匙。我把一個以下的情況下如何讓程序重複增加,直到在switch語句中按下另一個鍵爲止

if(_kbhit()) { 
    switch(_getch()) { 
     case 'a' : 
     dir = LEFT; 
     x--; 
+0

如果你發佈你必須調用'如果(的kbhit())'也許我可以擴大我的回答 – tinkertime

+0

代碼我將如何做一個後臺計時器線程@ yankee2905 –

回答

0

我正在尋找一種方式來擁有......保持未持有該密鑰的用戶 遞增。」

恕我直言,你應該考慮的‘選擇()’函數(如果是在您的操作系統提供)


很久以前,我用「選擇()」與VxWorks中,我從一個男人頁面看到這個功能也適用於Ubuntu Linux操作系統。(也許它是提供給你的系統?)

使用select語句,線程或程序可以「監視多個文件描述符,等待一個或多個文件描述符爲某類I/O操作變爲」準備就緒「。輸入可能)。如果可以執行相應的操作(例如,read()沒有阻塞,或者寫入足夠小的write()),則認爲文件描述符已準備就緒。「(來自手冊頁)

實際上,我工作的系統on有一個用戶界面線程(幾個中的一個)問題讀取並監視用戶輸入的輸入fd(通過select)。我們的選擇使用1/2秒超時(您選擇速率)。因此,如果沒有用戶輸入發生在該端口(即設備),超時將釋放程序檢查位中的fd_sets。

並不阻止代碼在超時做額外activites。

我會想你將只有ne編輯readfds,並可以將其他fds留空。

換句話說,通過選擇,您的代碼會監視某個用戶輸入的超時時間,並對用戶輸入(按鍵行程)或因超時而採取行動。

這聽起來像你正在尋找的 - 沒有按鍵的動作。

+0

忘了提到vxWorks提供了fd,FILE *和流(任何到任何)之間的簡單轉換。到目前爲止,我只發現「函數fileno()檢查參數流並返回其整數描述符。」在手冊頁。 (據報道是一個posix函數。) –

+0

這與關於C++的原始問題有什麼關係? – Soviut

+0

@Soviut在OP中,「我正在尋找一種方法來保持遞增,而不需要用戶持有該密鑰。」選擇是一種簡單的方法來實現這一點,但選擇使用fd's。 –

0

您目前的設計聽起來像它在新聞事件中移動蛇。

我認爲你正在修改設計,使按下事件更新一些當前方向標誌,而一些後臺計時器線程以某種常規幀速率移動蛇。

0

您的代碼只能在按鍵上移動蛇。你需要實現某種遊戲循環,它根據變量direction定期移動蛇。然後,您可以重構您的按鍵代碼以簡單更新direction

僞代碼:

while: # loop forever 
    # below could be your switch statement 
    if direction == 0: # north 
     y-- 
    if direction == 1: # east 
     x++ 
    if direction == 2: # south 
     y++ 
    if direction == 4: # west 
     x-- 

if _kbhit(): 
    if _getch() == 'a': 
     direction == 4 # west 
    # etc... 
相關問題