网络版控制台三国杀结构图
一、簡介
這個網絡版控制臺三國殺是在原來單機版上加入網絡通信功能制作出來的,從第一版到第三版用了大半年時間,也算是我大一學習C++歷程的里程碑吧。
它可以選擇進行幾人局的游戲(2~10人),所用游戲包為標準包+EX,游戲流程以及身份分配按照三國殺多人局的一般規則進行。所有標準包+EX涉及的功能、概念全部實現,對輸入輸出進行檢測,提高程序的魯棒性。
二、架構
在原來單機版三國殺的Service層外部加入GameServer層,負責建立游戲并組織與外界的輸入輸出。客戶端和服務器用tcp協議通信。
三、模塊功能講解
1、服務器
deskPoker桌牌,提供桌面上未用牌堆、已用牌堆、正在處理牌堆的功能。
Player玩家,是流程進行的基本單位,提供單個玩家的所有功能,用多態性實現武將技能。
Poker牌,用多態性實現不同牌的功能。
Service服務,掌管游戲進程,集中處理殺、錦囊、求無懈可擊、求桃、判斷游戲勝負等等功能。
GameServer游戲服務器,負責調配Service啟動與結束、掌管所有客戶端的Socket數據、負責分發接受各種消息等等功能。
2、客戶端
IO解析,負責判斷一條消息是否要求回復。因為在三國殺中有些消息僅僅算作提示,例如某某人對某某人出了一張殺;有些消息需要回復,例如某某人對自己出了一張殺,自己須響應此消息,回復自己是否打出某一張閃。
GameClient游戲客戶端,負責把IO解析出來的數據提供用戶,用戶在此進行輸入操作,接受輸出結果。
詳見我“自己寫三國殺之架構分析”文章。
四、缺點以及改進措施
首先請原諒一下,我們學校一直到大二都還沒有正式講解過GUI方面的知識,而且這個三國殺開始編寫時我并沒有掌握GUI的任何知識,思維固定在控制臺上面,所有的輸入輸出最終都是cin cout。界面問題雖然是個絕對硬傷,但是我會爭取在下一個版本做出GUI的。
其他可以改進的缺點:
1、只能支持單局游戲。這是由于Service只是負責掌管某一局游戲的流程,從開始游戲到結束游戲而已,而在學習并寫出網絡功能時,沒有足夠的時間研究多場游戲如何實現,GameServer里只有一個Service。以我目前的知識,我認為每一局游戲應該開多個線程,玩家游戲結束后并不退出而是可以選擇進行下一場游戲。
2、玩家意外斷線后游戲停止響應。一開始做單機版的時候只有cin、cout,并不會出現某一玩家失去響應的問題;做出網絡版后出現這個問題,在現有架構上沒有辦法解決。在下一個版本中要把流程和輸入輸出分離更徹底,并加入超時則返回默認值的功能。
3、擴展性不高。就是因為“玩家”和“武將技能”兩個概念耦合度太高,導致原架構不能適應新武將技能涉及的概念(尤其是山包武將,可以讓武將技能動態添加刪除改變)當時在CSDN論壇上發帖子求助,也沒有起到多大作用,糾結了很長時間。最后因為趕時間就把這兩個概念結合在一起了。在下一個版本中架構已經經過重新設計,支持多擴展包、武將技能和流程上新的概念。
五、下一版的計劃
下一版要做出跨平臺的服務器,讓程序有更強的魯棒性,而且要有GUI。
寫這個三國殺只是個人愛好,而且現在要參加的比賽要寫的其他程序也很多,課程也需要我花時間學好,所以下一版的開發進度很慢,到現在僅僅完成設計以及初步編碼階段,核心部分還有很多很多的問題沒有解決,所以發布時間將會遙遙無期。
總結
以上是生活随笔為你收集整理的网络版控制台三国杀结构图的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Python tkinter 设置主题
- 下一篇: linux学习笔记 linux内核6.0