2010-06-03 100 views
1

我的第一個問題在這裏,網絡通信,所以請不要在惡劣的,如果出事了:)一個回合的棋盤遊戲

我目前一個CS的學生(來自德國,如果這個信息是任何使用;)),我們得到了一個可自由選擇的編程任務,我們必須在C++/CLI Windows窗體應用程序中編寫這些任務。
我的團隊,其他兩個人和我決定去參加一個網絡兼容的棋盤遊戲風險端口。

我們將工作分爲3部分,即UI,遊戲邏輯和網絡。現在我們正在努力讓所有的東西一起工作,而最大的問題在於如何讓客戶端彼此同步?

我們的方法到目前爲止,每個客戶端都具有計算和/或執行所有可能操作所必需的所有信息。事實上,除了遊戲初始化階段(添加玩家,選擇地圖等)之外,客戶端可以獲得所有信息,這需要一個「超級客戶端」和一些額外的東西來控制事物。

這是我們的做法的標準場景:

  1. 玩家進行行動,行動是有效的,玩家客戶端
  2. 動作是在網絡上執行
  3. 行動派出上得到執行其他客戶

到目前爲止我們提出的設計(即沒有或代碼到目前爲止),就像下面的僞序列圖。


桂,控制器和網絡工具所有可能的操作(即,其改變數據的所有行動),如從一個接口的方法。所以每個部分都可以通過一種方式來實現這個方法來完成他們的工作。

例與行動():

者側的客戶:

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窗體的基本理解。

如果您需要更多信息,請隨時詢問。

回答

0

我所知道的是,我不會說C++是一種適合初學者的語言!我從來沒有用過它,但我的朋友們把它理解爲「一個人的語言」。我猜它會把毛髮放在胸前。

我從來沒有寫過這樣的應用程序,雖然有些人會說Winforms /厚客戶正在迴歸,但我認爲大多數人會做基於Web的開發。

我想WCF將是一個合乎邏輯的地方,但我之前沒有將它用於點對點的東西。

你怎麼知道哪些其他客戶在那裏,所以你可以和他們一起玩? 電話會議解決方案似乎使用集中式系統:撥打特定號碼,並告訴您您是第一個加入會議的人。如果有人離開其他人仍然在那裏。這可能更符合你的要求 - 讓中央系統調解數據。如果兩個客戶端發送衝突的操作會發生什麼?

有了一箇中央系統,你可以建立直接的規則來管理遊戲,而且管理起來會更容易。你可以在交易中包裝肌動蛋白的處理,這樣你就不會發生衝突。唯一的問題是保持所有的客戶端同步;他們所要做的就是從中央服務器獲得更新 - 但是他們什麼時候這樣做?他們是否只是輪詢它,或者當中央服務器發生變化時,他們會「告知」它們?後者可能要好得多 - 但我不知道如何使用你提出的技術來做到這一點。

我希望有幫助。

+0

嗨, 感謝您的回答。 問題是,我們必須使用這些技術,即C++/CLI和.Net Windows窗體。甚至不可能使用其他.Net語言,我們的教授在這方面非常嚴格:)(不要問我爲什麼。) 我想說的是,初學者的事情是,我們所有人都知道C++和.NET的東西,至少理論方面。但是我們都沒有任何「真實世界」編程經驗,更不用說這個規模的項目了。 – randooom 2010-06-03 07:11:51

+0

是的,我們使用服務器/客戶端方法。上例中的網絡類只是整個網絡的抽象概念。 但服務器只是在那裏管理連接和客戶端,並將傳入的操作廣播到所有其他客戶端。通過上述方法,我們認爲不需要給服務器更多的權力,因爲每個客戶都可以自己做計算和工作。 – randooom 2010-06-03 07:18:49

+0

當然聽起來像你知道你在做什麼。我只是抱歉,我沒有任何現實世界的建議給你 - 這似乎適用。 – 2010-06-03 08:54:11

0

通常這個想法看起來不錯。 爲了在僞代碼中證明這個想法,你可以設計一個小的原型。

因爲你想構建的遊戲是基於回合的 - 你需要保證網絡傳輸。 爲了簡化數據傳輸,您可以使用proto buff

+0

thx,如果只是爲了節省遊戲,我們必須仔細研究序列化。一些新的學習:) – randooom 2010-06-03 11:24:18