2014-02-12 60 views
0

我希望實現一個簡單的多人Hang子手遊戲,規則稍微彎曲。是否可以避免多人遊戲中的線程?

規則: 所有玩家必須同時猜測單詞中的字母。無論誰玩家猜出正確的字母表都會得到一個分數,並且放置結尾字母的玩家會得到獎勵分數。 這將是關於速度。更快的正確猜測讓你領先於其他人。

我打算有一個基於Qt/QML的GUI,編程語言是C++。平臺將是Linux。

我想我會需要:
- 一個用於處理用戶輸入的線程。
- 第二個線程用於並行顯示其他玩家正在輸入的內容。
- 在每個玩家的屏幕上平行顯示每個玩家得分的第三個線程。

我需要這3個線程還是我吠叫錯了樹?

+1

你不需要這個線程。可以在一個線程中使用'boost :: asio'來完成。但是,幾乎所有的UI框架都喜歡有一個專用線程來保持對用戶輸入的響應(在存在長度的後臺任務時)。因此,對於這種情況,我會建議兩個線程,一個用於'Qt',另一個用於以異步方式實現的「遊戲邏輯」。 – Chad

+0

@Chad感謝您的回覆。 '因此,對於這種情況,我會建議兩個線程,一個用於Qt,另一個用於以異步方式實現的「遊戲邏輯」。「請在」答案「中以一種更詳細的方式解釋上述引用。其次,如果我不使用boost庫,那麼是否有必要使用線程? –

+3

不,你不需要這些輕量級任務的線程。對於典型的Qt應用程序,您也不需要Boost。 Qt是一個完整的(有些會說是臃腫的)框架,而Qt :: Application有一個事件循環,所以請使用它。 –

回答

0

這聽起來像你打算讓這個遊戲通過網絡進行通信,每個玩家都使用他們自己的電腦並運行該程序的副本。

您應該只需要一個應用程序線程,但您可能會決定使用更多的線程可以讓您更輕鬆。

您可以輕鬆連接玩家輸入的信號(或者使用事件處理程序,或者將小部件的「editingDone」信號連接到適當的邏輯),以更新分數並顯示其他玩家的答案。

我認爲在決定如何正確地將應用程序連接到所有實例時,您會遇到最多的問題,假設您正在嘗試這樣做。但是Qt網絡堆棧可以讓您進行異步網絡通信,而無需手動創建新線程。