我的第一個問題在這裏,網絡通信,所以請不要在惡劣的,如果出事了:)一個回合的棋盤遊戲
我目前一個CS的學生(來自德國,如果這個信息是任何使用;)),我們得到了一個可自由選擇的編程任務,我們必須在C++/CLI Windows窗體應用程序中編寫這些任務。
我的團隊,其他兩個人和我決定去參加一個網絡兼容的棋盤遊戲風險端口。
我們將工作分爲3部分,即UI,遊戲邏輯和網絡。現在我們正在努力讓所有的東西一起工作,而最大的問題在於如何讓客戶端彼此同步?
我們的方法到目前爲止,每個客戶端都具有計算和/或執行所有可能操作所必需的所有信息。事實上,除了遊戲初始化階段(添加玩家,選擇地圖等)之外,客戶端可以獲得所有信息,這需要一個「超級客戶端」和一些額外的東西來控制事物。
這是我們的做法的標準場景:
- 玩家進行行動,行動是有效的,玩家客戶端
- 動作是在網絡上執行
- 行動派出上得到執行其他客戶
到目前爲止我們提出的設計(即沒有或代碼到目前爲止),就像下面的僞序列圖。
桂,控制器和網絡工具所有可能的操作(即,其改變數據的所有行動),如從一個接口的方法。所以每個部分都可以通過一種方式來實現這個方法來完成他們的工作。
例與行動():
者側的客戶:
Player-->Gui.Action()
Gui-->Controller.Action()
Controller-->Logic.Action
(Logic.Action() == NoError)?
Controller-->Network.Action()
Network-->Parser.ParseAction()
Network.Send(msg)
在所有其他客戶端:
Network.Recv(msg)
Network-->Parser.Deparse(msg)
Parser-->Logic.Action()
Logic-->Gui.Action()
的問題:
這是一個可行的方法來完成我們的任務嗎?
任何更好/更簡單的方法呢?
建議,批評?
我們的知識(這樣你就可以更好地針對您的答案):
我們對初學側,與一個小團隊關於編程的一個稍大的項目。 我們都有一些一般的編程經驗和.Net庫和Windows窗體的基本理解。
如果您需要更多信息,請隨時詢問。
嗨, 感謝您的回答。 問題是,我們必須使用這些技術,即C++/CLI和.Net Windows窗體。甚至不可能使用其他.Net語言,我們的教授在這方面非常嚴格:)(不要問我爲什麼。) 我想說的是,初學者的事情是,我們所有人都知道C++和.NET的東西,至少理論方面。但是我們都沒有任何「真實世界」編程經驗,更不用說這個規模的項目了。 – randooom 2010-06-03 07:11:51
是的,我們使用服務器/客戶端方法。上例中的網絡類只是整個網絡的抽象概念。 但服務器只是在那裏管理連接和客戶端,並將傳入的操作廣播到所有其他客戶端。通過上述方法,我們認爲不需要給服務器更多的權力,因爲每個客戶都可以自己做計算和工作。 – randooom 2010-06-03 07:18:49
當然聽起來像你知道你在做什麼。我只是抱歉,我沒有任何現實世界的建議給你 - 這似乎適用。 – 2010-06-03 08:54:11