2010-05-19 133 views
1

所以我只想對我必須爲編程類構建的遊戲的整體結構提出一些意見。本質上 - 我正在構建兩個程序 - 一個客戶和一個戰艦遊戲服務器。我已經編寫了玩戰艦遊戲的實際程序。我寫的程序是讀入地圖和規則文件的地方,用戶試圖猜測船隻的位置,直到他們沉沒所有的船隻。C CLI遊戲概念

對於這個新的程序 - 服務器必須允許兩個人的團隊使用戰列艦遊戲相互對抗。客戶使用遊戲名稱連接到遊戲,一旦遊戲接收到兩個客戶端,它就可以開始。我們需要在本地機器上使用TCP來在服務器和客戶機之間進行通信,並且至少在服務器中使用線程。

這就是我的想法..

一旦客戶端連接 - 檢查自己要連接到哪個遊戲。如果它是一款新遊戲 - 爲該遊戲創建一個新線程併爲第一個客戶端提供套接字描述符。否則,如果遊戲中已經有一個人,請提醒新參與者的遊戲線程,並且可以開始遊戲。

當遊戲開始時 - 遊戲線程將不得不產生兩個線程..每個玩家的戰艦遊戲的一個實例。每個玩家的實例都將放置在他們的船上。然後線程會依次監聽來自每個客戶端的輸入並將該信息傳遞到相應的遊戲。

這個解釋是否正確?每個運行遊戲需要3個線程?另外,是否可以在線程中使用exec()來運行新的戰列艦實例,然後使用線程將信息傳遞給該實例的stdin(並獲取stdout)?

請讓我知道,如果我什麼都朦朧,我會澄清。提前感謝您提供任何幫助!

+0

這不是一個真正的問題。 – 2010-05-19 08:09:17

+1

@Tadeusz A. Kadlubowski:這是一堆模糊的問題,但它們絕對是真實的*。 – ereOn 2010-05-19 08:15:57

+0

對不起,沒有真正考慮一個明確的問題。我們可以說我的問題是:我的解釋是否有效?是否包含一些問題? – Gary 2010-05-19 09:39:27

回答

1

我會使用盡可能多的線程作爲連接的客戶端,並將它們僅用於處理連接。遊戲本身只是數據/對象,不需要特定的線程。

+0

但我怎麼會真的從程序運行遊戲。我需要以某種方式使用某個exec()函數來開始戰艦計劃,不是嗎? – Gary 2010-05-19 08:16:47

+0

認爲MVC模式。連接是觀點,遊戲是模型。您需要一個控制器來連接視圖和模型,但它可以從主線程運行並控制許多遊戲和連接。 – mouviciel 2010-05-19 08:25:36

+0

我不得不不同意。我之前嘗試過,失敗了。當你有1000個連接時會發生什麼?這意味着操作1000個線程,因此會減慢一切。但這只是我的看法 – Sanctus2099 2010-05-19 10:17:08