2015-05-05 54 views
1

我爲我的編程課在C中做遊戲,我必須在遊戲中放置一個時間倒計時,但是我不能使它正確工作,因爲如果提供倒計時功能和延遲(1000),它適用於倒數計時,但不適用於遊戲,因爲它使得每次移動都等待1秒。同時爲一個遊戲運行兩個循環 - C

到目前爲止我的代碼是

while(tempo > 0) 
{ 
    tempo_na_tela(&tempo); 
    contador_tempo(&tempo); 
    if(kbhit()) 
    { 
     mover_refem(getch(), p_refem, &refem.px, &refem.py, 
        numero_inimigos_na_tela(n, in1)); 
    } 
    mover_inimigo(n, p_terrorista, in1); 
} 

功能tempo_na_tela(..)把時間字符串在屏幕上時,contador_tempo(..)是倒計時,mover_refem(...)是移動遊戲角色的功能,並且mover_inimigo(..)是隨機移動屏幕上敵人的功能。

我需要將tempo_na_telacontador_tempo函數放在一個循環中,與另一個循環同時運行,運行移動函數。

我該怎麼辦?

+1

歡迎來到StackOverflow!請嘗試正確設置代碼的樣式(如果需要,請在編輯器中使用幫助) – Eregrith

+1

聽起來像需要將程序構建爲事件循環。 –

+1

「我需要將tempo_na_tela和contador_tempo函數放在一個循環中」 - 嗯,它們在*一個循環*(while(tempo> 0)'構造)中。至少看起來真正的問題是'contador_tempo' *等待一秒鐘,從而拖延了這個循環的目的。如果您可以建立起始時間,根據該時間計算到期時間,然後檢測*當前時間*何時達到或超過您的到期時間並相應地中斷循環,則根本不需要延遲。 – WhozCraig

回答

1

你正在試驗我認爲的XY problem

您不需要同時運行兩個功能。你試圖完成的是一個遊戲循環,這在視頻遊戲中非常普遍,尤其是早期的。

問問自己,你什麼時候需要重新繪製元素?答案可能是在更新了所有數據(時間,敵方位置,並記錄了你的玩家的動作)

所以,你不需要同時循環(即我會建議的線程,即使它不是真的。同時,但這是另一回事)

相反,你可以用一個循環堅持,但你必須做一些事情以這種方式:

while (game_not_ended()) 
{ 
    update_data(); 
    repaint_data(); 
} 

我希望您能重新考慮你的代碼的時間和你問題的範圍。