萬坤 蘇雪蓮 冉瑞生



摘要:五子棋是一項簡單有趣的益智游戲。為了讓五子棋游戲愛好者能夠更加便捷地進行游戲,因此設計并開發了一款基于C/S(客戶端/服務器)架構的五子棋游戲軟件。該軟件使用了統一建模語言,MYSQL數據庫,V-Play開發框架對游戲進行設計與實現。軟件有三種游戲模式:雙人對戰模式、聯機對戰模式與人機對戰模式,玩家可以根據自己的需要選擇不同的模式進行游戲,并可以和網絡上的其他玩家對弈。該軟件使得五子棋游戲玩家之間的對弈不再受到時空的限制。
關鍵詞:C/S;UML;V-Play;C++;五子棋游戲
中圖分類號:TP311? ? ? 文獻標識碼:A
文章編號:1009-3044(2019)22-0094-03
開放科學(資源服務)標識碼(OSID):
Design and Implementation of Gobang Game Software Based on C/S Structure
WAN Kun, SU Xue-lian, RAN Rui-sheng
(Chongqing Normal University, Chongqing 401331, China)
ABSTRACT: Gobang is a simple and interesting puzzle game. In order to make it more convenient for gobang fans to play games, a gobang game software based on C/S (client/server) architecture was developed. The software was designed and implemented by UML (Unified Modeling Language), MYSQL database and V-Play development framework. The gobang game has three modes: two-player mode, on-line mode and man-machine mode. Players can choose different modes to play games according to their own needs and play the game with other players on the Internet. This software makes the player of gobang free of time and space restrictions.
Key words: C/S; UML; V-Play; C++; gobang
1 背景
五子棋游戲是一款兩人對弈的策略型棋類游戲,其歷史悠久,相傳起源于四千多年前的堯帝時期,深受世界各地不同年齡的人的喜歡,五子棋游戲規則十分簡單,游戲雙方分別采用黑色或白色棋子,先使棋子形成五子連線者獲勝。隨著互聯網的快速發展,越來越多的工作都可以使用計算機完成,為了能夠讓人們更加方便、快捷地進行五子棋游戲,因此設計并開發五子棋游戲軟件。該軟件的開發不僅能夠讓用戶隨時隨地地進行游戲,還可以促進五子棋游戲的進一步發展,讓更多的人認識這一款簡單好玩的益智游戲。
該軟件采用C/S(Client/Server,客戶/服務器)架構作為軟件的體系結構;在軟件設計時采用UML(Unified Modeling Language,統一建模語言);在軟件實現時采用了OO(Object Oriented,面向對象)軟件開發方法,以MYSQL數據庫存儲數據,用C++編寫軟件主要邏輯,QML(Qt Meta Language)編寫軟件界面。
該軟件有三種游戲模式:雙人對戰模式、聯機對戰模式與人機對戰模式。玩家可以選擇雙人對戰與朋友在同一臺設備上進行游戲,也可以通過聯機對戰和不同地方的人對弈,或者選擇人機對戰與計算機進行游戲。
2 C/S體系結構
C/S體系結構即Client/Server(客戶機/服務器)體系結構,是基于資源不對等,且為實現共享而提出來的,是20世紀90年代成熟起來的技術。一般情況下,客戶機與服務器相距很遠,客戶機向服務器請求服務,服務器為客戶機提供服務,C/S體系結構定義了客戶機如何與服務器協作,以實現數據和程序分布到多臺計算機上。
軟件采用三層C/S結構(也稱多層C/S結構)風格,即把用戶界面和應用的業務邏輯分離,讓表示層在客戶端上運行,功能層在應用服務器上運行,數據層在數據庫服務器上運行,這也稱為“瘦客戶機(thin client)”,“胖服務器(fat server)”體系結構。
三層C/S結構中的功能層是應用的主體,它包括系統中所有重要的和易變的企業邏輯,應用服務器是應用邏輯處理的核心,它是具體業務的實現。客戶端將請求信息發送給應用服務器,應用服務器返回數據和結果,應用服務器和數據庫服務器有密集的數據交往,應用服務器向數據庫服務器發送SQL請求,數據庫服務器將數據訪問結果返回給應用服務器。當應用邏輯變得復雜或增加新的應用時,可增加新的應用服務器,它可與原應用服務器駐留于同一主機或不同主機上。三層C/S體系結構的處理流程如圖1所示[1]:
3 技術簡介
該軟件采用 Qt Creator集成開發環境進行開發。在開發過程中,主要采用了如下幾個技術:
3.1 UML
統一建模語言(Unified Moding Language,UML)提供了用于交流的詞匯表和在詞匯表中組合詞匯的規則,而建模語言的詞匯表和規則注重對系統進行概念上和物理上的描述,因而像UML這樣的建模語言是用于軟件藍圖的標準語言[2]。
在五子棋軟件中,對對象的建模讓開發人員更好的理解軟件,同時還把軟件的結構和行為進行聯通。
3.2 V-Play開發框架
V-Play是構建于Qt商業版本之上的跨平臺開發框架,它將許多實用的第三方庫、開源項目和常用功能集成進來,極大地提高了開發者的工作效率。開發者可以直接使用QML或C++中的相關元素進行調用,可以使用QML或Qt/C++進行跨平臺開發。QML是一種多泛型語言,能夠根據屬性以及與其他對象的關聯來定義對象,并對其他對象的變化做出響應。同時 QML是一種聲明性的語言,可以用來定義應用的外觀和引用的行為。在五子棋游戲中,利用QML技術編寫游戲界面以及控件之間的關聯。
3.3 MySQL 數據庫技術
MYSQL是一個高性能的且相對簡單的關系數據庫系統,相對于其他數據庫來說,其復雜性相對較低。在本軟件中,MYSQL數據庫主要用于存儲的用戶賬戶相關信息。
3.4 JSON數據傳輸技術
JSON全稱為JavaScript Object Notation,是一種輕量級的數據交換格式,由名字可知,JSON就是JAVASRCIPT中的對象和數組,通過對象和數組這兩種結構可以表示各種復雜的結構,這也是選擇使用JSON傳輸格式的主要原因。JSON數據傳輸技術用于在聯機對戰模式中,通過互聯網傳輸和JSON數據傳輸技術實現兩個玩家之間的對弈。將棋子的數據封裝成JSON數據,方便在網絡中傳輸,接收端接收到數據后利用JSON數據解析技術將接收到的的數據解析出來。以這種方式傳送數據能使傳輸數據更加的快捷、迅速,降低了傳輸時間與程序的復雜度,提了整個軟件的性能。
4 系統設計
4.1 系統總體架構
本軟件基于三層C/S體系結構設計了系統的總體架構。系統的總體架構包圖如圖2所示:
Game UI與Game Control Client為表示層,是軟件的用戶接口,即人機交互界面,是用戶與軟件交互的窗口。表示層運行在客戶機上,它不擁有任何業務邏輯,只有一些簡單的應用邏輯。
Game Control Server與Game Entity為功能層,是軟件的主體。功能層運行在應用服務器上,它擁有軟件中所有重要的業務邏輯,包括接收數據輸入、進行邏輯處理并返回處理結果。
Game DataBase為數據層,是由數據庫管理系統(DataBase Management System,DBMS)負責管理。數據層運行在數據庫服務器上,主要負責對數據庫中數據的存儲、讀、寫和維護數據存儲、數據訪問、數據完整性約束等工作。
軟件界面由QML腳本語言實現,其他部分均由C++程序設計語言實現。應用服務器與數據庫服務器位于同一計算機上,這種方式使應用服務器與數據庫服務器不需要網絡就能進行通信,極大地提高了應用服務器與數據庫服務器之間的通信效率,使系統具有更好的性能。
4.2 業務邏輯類設計
通過對功能層的設計,軟件的實體類包括:User、SystemSetting、Game、Tile、Network、Server,它們主要負責數據管理和業務邏輯處理。如下圖3為業務邏輯層部分類圖,該圖表示了功能層中實體類之間關系。
上圖中的實體類說明如下:
User:負責玩家賬號相關的數據管理和業務邏輯處理,其中id為游戲賬號,password為賬號密碼,nickname為玩家昵稱,avatar為玩家頭像;
SystemSetting:負責系統設置相關的數據管理和業務邏輯處理,其中volumn為游戲音量大小;
Game:負責具體游戲相關的數據管理和業務邏輯處理,其中mode為游戲模式,chessboardSize為棋盤大小,field為棋盤區域所有棋子的具體位置;
Tile:負責一個具體的棋子相關的數據管理和業務邏輯處理,其中type為棋子類型(白子或黑子),row為棋子所在的行號,column為棋子所在的列號;
Network:負責網絡相關的數據管理和業務邏輯處理,其中socket為套接字;
Server:負責服務相關的數據管理和業務邏輯處理,其中tcpServer為QTcpServer的實例。
5 游戲模式
5.1 雙人對戰
該模式下,兩個玩家可以在同一設備上進行游戲,該模式與實體五子棋游戲類似。玩家可以選擇中途退出游戲或開始新游戲。
5.2 聯機對戰
該模式下,軟件會通過玩家的游戲記錄匹配到與玩家水平相當的另一個玩家,兩個玩家通過網絡在不同的設備上進行游戲。玩家可以選擇中途退出游戲或開始新游戲,但選擇退出游戲或開始新游戲的一方算作失敗,另一方算作勝利。
5.3 人機對戰
該模式下,只需要一個游戲玩家即可進行游戲,另一個玩家由軟件模擬。玩家可以選擇中途退出游戲或開始新游戲,但選擇退出游戲或開始新游戲均算作失敗。
6 系統實現
6.1 登錄界面
玩家輸入賬號、密碼后點擊登錄,軟件對輸入的賬號和密碼與數據庫中存儲的賬號信息進行匹配,若匹配成功,則登錄成功,反之,登錄失敗。玩家不進行登錄也可使用軟件進行游戲,此時,軟件會為玩家生成一個游客賬號。為了更好的游戲體驗,建議玩家登錄軟件。
6.2 主界面
主界面是模式選擇界面,主要展示對玩家所提供的三種游戲模式:雙人對戰、聯機對戰、人機對戰。玩家可根據自己需要選擇相應的模式。
6.3 匹配隊友界面
在聯機對戰模式中,匹配隊友界面展示了玩家匹配對方玩家的情況。在匹配成功之前玩家可以終止匹配。匹配成功之后兩個匹配上的玩家一起開始新游戲。
6.4 游戲界面
游戲界面展示了游戲背景以及游戲實時情況。棋盤大小為17x17,玩家可選擇“無子”的“+”處落子;界面顯示了棋局形式、當前落子方、對方上次落子位置。除此之外,界面提供了結束游戲和重新開始按鈕。在游戲過程中,玩家可以根據需求設置游戲,如音效設置。
6.5 游戲結束界面
游戲結束界面顯示了游戲結束時的狀態。當游戲結束時,高亮“五子一線”的棋子,游戲操作界面失去焦點,玩家不可再落子,同時應用顯示游戲結束框,提示游戲獲勝(或失敗)。游戲結束后,玩家可選擇返回主菜單或重新開始游戲。
7 結論
本文介紹了基于C/S結構的五子棋游戲軟件設計與實現,在五子棋游戲的設計中,以三層C/S結構為總體架構,在游戲的開發與實現中,采用了UML 建模語言、 V-Play開發框架、MySQL 數據庫技術和JSON數據傳輸技術。對于游戲界面的實現,我們使用的QML腳本語言進行實現,使得游戲界面美觀簡潔,易于使用。本軟件有三種模式可供選擇,并且玩家可以在網絡上和其他玩家對弈,提高了五子棋游戲的趣味性。
參考文獻:
[1] 李金剛, 趙石磊, 杜寧. 軟件體系結構理論與應用[M]. 北京: 清華大學出版社, 2013: 66-67.
[2] Grady Booch, James Rumbaugh, Lvar Jacobson. UML用戶指南[M]. 2版. 北京: 人民郵電出版社, 2006.
[3] 張有聲. 軟件體系結構原理、方法與實踐[M]. 2版. 北京: 清華大學出版社, 2016.
[4] Simon Bennett, Steve McRobb, Ray Farmer. Object-Oriented Systems Analysis and Design Using UML[M]. 4th ed. McGraw-Hill Education(Asia), 2013.
[5] Michael Blaha, James Rumbaugh. UML面向對象建模與設計[M]. 2版. 北京: 人民郵電出版社, 2006.
【通聯編輯:謝媛媛】