首發:我的博客,更新&糾錯&回覆java
客戶端採用C#開發,服務器使用java開發,通訊方式爲socket。git
1.首先決定交互協議github
客戶端指令協議:服務器
getgames:要求服務端發送games指令eclipse
creategame:name=xx:新建一個遊戲,並指定當前玩家名稱,該名稱也被用做遊戲名稱socket
joingame:game=xx,name=yy:加入一個已有的遊戲,指定遊戲名稱和當前玩家名稱測試
bp:hero=vs:進行BP,表示禁用英雄復仇之魂或選擇英雄復仇之魂spa
服務端指令協議:.net
games:games=xx|nn:告之客戶端「在服務端有多少個能夠加入的遊戲」,即已有人建主且房間未滿的遊戲線程
game:turn=1,p1=xx,p2=yy:告之客戶端「你當前加入的遊戲的信息」,p1和p2分別是兩個玩家的名稱,turn是進行到bp的哪一個階段
bp:hero=vs:告之客戶端「正在進行的遊戲的新進度」,如對方剛剛下了禁用了vs的命令
gameover:msg=對方退出遊戲:告之客戶端「當前遊戲結束」的信息,讓客戶端返回空閒狀態
2.決定協議以後,根據協議完成服務端的實現——
服務端模型:
server與service一對多,每一個service是個線程,負責管理一個客戶端鏈接的工做
game與player一對(1..2),每一個game有兩個玩家,即現實中的兩個BP手,也存在已新建遊戲,並沒人加入遊戲的狀態,這時只有一個玩家
當服務端接收到客戶端命令,整體上進行兩個動做,一是改變服務端狀態,即修改以上模型的屬性,二是(改變完狀態以後)由服務端向客戶端發送命令,分爲響應/向當前遊戲玩家廣播/向全部玩家廣播三種發送方式(見Service類中的response/game/all分支)。具體的響應命令的策略見RequestDealer類。
服務端的調試簡單的寫個java控制檯客戶端來交互,用以前的這個就能夠,肯定服務端對命令處理的業務邏輯以及響應的命令正確。
3.服務端完成以後進行客戶端的開發——
客戶端界面(xaml文件在這裏):
客戶端的工做包括:
1)有服務端命令到來的時候,根據命令改變客戶端狀態,再根據客戶端狀態改變界面顯示。
2)玩家在界面上進行操做時,發送客戶端命令到服務器。
其中第一步的先改狀態再改顯示,就是典型的將命令改變到model,再將model渲染到view。
第二步則僅僅作發送命令的操做,不作客戶端狀態的改變。只有服務器命令能讓客戶端的狀態和顯示變化,這樣讓職責更清晰。
代碼在這裏,其中dealRequest方法是完成上面1)的工做,方法體內調用setStateMsg方法進行根據狀態改變界面的工做;而createGame_Click等響應按鈕事件的方法完成上面2)的工做。
總結一下——
1)研究問題領域,進行整體設計(在紙上進行的工做,包括服務器、客戶端狀態、客戶端界面)
2)決定交互協議,服務器、客戶端的命令格式,本質爲方法名、參數列表的定義。
3)服務端開發,使用模擬客戶端進行測試和調試。
4)客戶端開發
服務器在182.92.10.238服務器的42769接口,歡迎用socket鏈接實驗,其源碼在這裏。
客戶端在這裏,360會報木馬,最好關閉360再下載。若是不放心能夠自行使用源碼編譯。
最後給本身記的:
1)跑jar包的方法:eclipse導出可執行jar,而後寫個bat腳本,內容爲call java -jar bpServer.jar。
2)本地項目上傳github:先在github上建項目,而後本地新建個文件夾,而後git clone,而後將項目拷貝到出現的子文件夾裏,cd進去,git add .,git -commit -m "init",最後git push便可。個人腦子最不擅長記這種機械的東西了……