萬坤 蘇雪蓮 冉瑞生
摘要:五子棋是一項(xiàng)簡單有趣的益智游戲。為了讓五子棋游戲愛好者能夠更加便捷地進(jìn)行游戲,因此設(shè)計(jì)并開發(fā)了一款基于C/S(客戶端/服務(wù)器)架構(gòu)的五子棋游戲軟件。該軟件使用了統(tǒng)一建模語言,MYSQL數(shù)據(jù)庫,V-Play開發(fā)框架對(duì)游戲進(jìn)行設(shè)計(jì)與實(shí)現(xiàn)。軟件有三種游戲模式:雙人對(duì)戰(zhàn)模式、聯(lián)機(jī)對(duì)戰(zhàn)模式與人機(jī)對(duì)戰(zhàn)模式,玩家可以根據(jù)自己的需要選擇不同的模式進(jìn)行游戲,并可以和網(wǎng)絡(luò)上的其他玩家對(duì)弈。該軟件使得五子棋游戲玩家之間的對(duì)弈不再受到時(shí)空的限制。
關(guān)鍵詞:C/S;UML;V-Play;C++;五子棋游戲
中圖分類號(hào):TP311? ? ? 文獻(xiàn)標(biāo)識(shí)碼:A
文章編號(hào):1009-3044(2019)22-0094-03
開放科學(xué)(資源服務(wù))標(biāo)識(shí)碼(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 背景
五子棋游戲是一款兩人對(duì)弈的策略型棋類游戲,其歷史悠久,相傳起源于四千多年前的堯帝時(shí)期,深受世界各地不同年齡的人的喜歡,五子棋游戲規(guī)則十分簡單,游戲雙方分別采用黑色或白色棋子,先使棋子形成五子連線者獲勝。隨著互聯(lián)網(wǎng)的快速發(fā)展,越來越多的工作都可以使用計(jì)算機(jī)完成,為了能夠讓人們更加方便、快捷地進(jìn)行五子棋游戲,因此設(shè)計(jì)并開發(fā)五子棋游戲軟件。該軟件的開發(fā)不僅能夠讓用戶隨時(shí)隨地地進(jìn)行游戲,還可以促進(jìn)五子棋游戲的進(jìn)一步發(fā)展,讓更多的人認(rèn)識(shí)這一款簡單好玩的益智游戲。
該軟件采用C/S(Client/Server,客戶/服務(wù)器)架構(gòu)作為軟件的體系結(jié)構(gòu);在軟件設(shè)計(jì)時(shí)采用UML(Unified Modeling Language,統(tǒng)一建模語言);在軟件實(shí)現(xiàn)時(shí)采用了OO(Object Oriented,面向?qū)ο螅┸浖_發(fā)方法,以MYSQL數(shù)據(jù)庫存儲(chǔ)數(shù)據(jù),用C++編寫軟件主要邏輯,QML(Qt Meta Language)編寫軟件界面。
該軟件有三種游戲模式:雙人對(duì)戰(zhàn)模式、聯(lián)機(jī)對(duì)戰(zhàn)模式與人機(jī)對(duì)戰(zhàn)模式。玩家可以選擇雙人對(duì)戰(zhàn)與朋友在同一臺(tái)設(shè)備上進(jìn)行游戲,也可以通過聯(lián)機(jī)對(duì)戰(zhàn)和不同地方的人對(duì)弈,或者選擇人機(jī)對(duì)戰(zhàn)與計(jì)算機(jī)進(jìn)行游戲。
2 C/S體系結(jié)構(gòu)
C/S體系結(jié)構(gòu)即Client/Server(客戶機(jī)/服務(wù)器)體系結(jié)構(gòu),是基于資源不對(duì)等,且為實(shí)現(xiàn)共享而提出來的,是20世紀(jì)90年代成熟起來的技術(shù)。一般情況下,客戶機(jī)與服務(wù)器相距很遠(yuǎn),客戶機(jī)向服務(wù)器請(qǐng)求服務(wù),服務(wù)器為客戶機(jī)提供服務(wù),C/S體系結(jié)構(gòu)定義了客戶機(jī)如何與服務(wù)器協(xié)作,以實(shí)現(xiàn)數(shù)據(jù)和程序分布到多臺(tái)計(jì)算機(jī)上。
軟件采用三層C/S結(jié)構(gòu)(也稱多層C/S結(jié)構(gòu))風(fēng)格,即把用戶界面和應(yīng)用的業(yè)務(wù)邏輯分離,讓表示層在客戶端上運(yùn)行,功能層在應(yīng)用服務(wù)器上運(yùn)行,數(shù)據(jù)層在數(shù)據(jù)庫服務(wù)器上運(yùn)行,這也稱為“瘦客戶機(jī)(thin client)”,“胖服務(wù)器(fat server)”體系結(jié)構(gòu)。
三層C/S結(jié)構(gòu)中的功能層是應(yīng)用的主體,它包括系統(tǒng)中所有重要的和易變的企業(yè)邏輯,應(yīng)用服務(wù)器是應(yīng)用邏輯處理的核心,它是具體業(yè)務(wù)的實(shí)現(xiàn)。客戶端將請(qǐng)求信息發(fā)送給應(yīng)用服務(wù)器,應(yīng)用服務(wù)器返回?cái)?shù)據(jù)和結(jié)果,應(yīng)用服務(wù)器和數(shù)據(jù)庫服務(wù)器有密集的數(shù)據(jù)交往,應(yīng)用服務(wù)器向數(shù)據(jù)庫服務(wù)器發(fā)送SQL請(qǐng)求,數(shù)據(jù)庫服務(wù)器將數(shù)據(jù)訪問結(jié)果返回給應(yīng)用服務(wù)器。當(dāng)應(yīng)用邏輯變得復(fù)雜或增加新的應(yīng)用時(shí),可增加新的應(yīng)用服務(wù)器,它可與原應(yīng)用服務(wù)器駐留于同一主機(jī)或不同主機(jī)上。三層C/S體系結(jié)構(gòu)的處理流程如圖1所示[1]:
3 技術(shù)簡介
該軟件采用 Qt Creator集成開發(fā)環(huán)境進(jìn)行開發(fā)。在開發(fā)過程中,主要采用了如下幾個(gè)技術(shù):
3.1 UML
統(tǒng)一建模語言(Unified Moding Language,UML)提供了用于交流的詞匯表和在詞匯表中組合詞匯的規(guī)則,而建模語言的詞匯表和規(guī)則注重對(duì)系統(tǒng)進(jìn)行概念上和物理上的描述,因而像UML這樣的建模語言是用于軟件藍(lán)圖的標(biāo)準(zhǔn)語言[2]。
在五子棋軟件中,對(duì)對(duì)象的建模讓開發(fā)人員更好的理解軟件,同時(shí)還把軟件的結(jié)構(gòu)和行為進(jìn)行聯(lián)通。
3.2 V-Play開發(fā)框架
V-Play是構(gòu)建于Qt商業(yè)版本之上的跨平臺(tái)開發(fā)框架,它將許多實(shí)用的第三方庫、開源項(xiàng)目和常用功能集成進(jìn)來,極大地提高了開發(fā)者的工作效率。開發(fā)者可以直接使用QML或C++中的相關(guān)元素進(jìn)行調(diào)用,可以使用QML或Qt/C++進(jìn)行跨平臺(tái)開發(fā)。QML是一種多泛型語言,能夠根據(jù)屬性以及與其他對(duì)象的關(guān)聯(lián)來定義對(duì)象,并對(duì)其他對(duì)象的變化做出響應(yīng)。同時(shí) QML是一種聲明性的語言,可以用來定義應(yīng)用的外觀和引用的行為。在五子棋游戲中,利用QML技術(shù)編寫游戲界面以及控件之間的關(guān)聯(lián)。
3.3 MySQL 數(shù)據(jù)庫技術(shù)
MYSQL是一個(gè)高性能的且相對(duì)簡單的關(guān)系數(shù)據(jù)庫系統(tǒng),相對(duì)于其他數(shù)據(jù)庫來說,其復(fù)雜性相對(duì)較低。在本軟件中,MYSQL數(shù)據(jù)庫主要用于存儲(chǔ)的用戶賬戶相關(guān)信息。
3.4 JSON數(shù)據(jù)傳輸技術(shù)
JSON全稱為JavaScript Object Notation,是一種輕量級(jí)的數(shù)據(jù)交換格式,由名字可知,JSON就是JAVASRCIPT中的對(duì)象和數(shù)組,通過對(duì)象和數(shù)組這兩種結(jié)構(gòu)可以表示各種復(fù)雜的結(jié)構(gòu),這也是選擇使用JSON傳輸格式的主要原因。JSON數(shù)據(jù)傳輸技術(shù)用于在聯(lián)機(jī)對(duì)戰(zhàn)模式中,通過互聯(lián)網(wǎng)傳輸和JSON數(shù)據(jù)傳輸技術(shù)實(shí)現(xiàn)兩個(gè)玩家之間的對(duì)弈。將棋子的數(shù)據(jù)封裝成JSON數(shù)據(jù),方便在網(wǎng)絡(luò)中傳輸,接收端接收到數(shù)據(jù)后利用JSON數(shù)據(jù)解析技術(shù)將接收到的的數(shù)據(jù)解析出來。以這種方式傳送數(shù)據(jù)能使傳輸數(shù)據(jù)更加的快捷、迅速,降低了傳輸時(shí)間與程序的復(fù)雜度,提了整個(gè)軟件的性能。
4 系統(tǒng)設(shè)計(jì)
4.1 系統(tǒng)總體架構(gòu)
本軟件基于三層C/S體系結(jié)構(gòu)設(shè)計(jì)了系統(tǒng)的總體架構(gòu)。系統(tǒng)的總體架構(gòu)包圖如圖2所示:
Game UI與Game Control Client為表示層,是軟件的用戶接口,即人機(jī)交互界面,是用戶與軟件交互的窗口。表示層運(yùn)行在客戶機(jī)上,它不擁有任何業(yè)務(wù)邏輯,只有一些簡單的應(yīng)用邏輯。
Game Control Server與Game Entity為功能層,是軟件的主體。功能層運(yùn)行在應(yīng)用服務(wù)器上,它擁有軟件中所有重要的業(yè)務(wù)邏輯,包括接收數(shù)據(jù)輸入、進(jìn)行邏輯處理并返回處理結(jié)果。
Game DataBase為數(shù)據(jù)層,是由數(shù)據(jù)庫管理系統(tǒng)(DataBase Management System,DBMS)負(fù)責(zé)管理。數(shù)據(jù)層運(yùn)行在數(shù)據(jù)庫服務(wù)器上,主要負(fù)責(zé)對(duì)數(shù)據(jù)庫中數(shù)據(jù)的存儲(chǔ)、讀、寫和維護(hù)數(shù)據(jù)存儲(chǔ)、數(shù)據(jù)訪問、數(shù)據(jù)完整性約束等工作。
軟件界面由QML腳本語言實(shí)現(xiàn),其他部分均由C++程序設(shè)計(jì)語言實(shí)現(xiàn)。應(yīng)用服務(wù)器與數(shù)據(jù)庫服務(wù)器位于同一計(jì)算機(jī)上,這種方式使應(yīng)用服務(wù)器與數(shù)據(jù)庫服務(wù)器不需要網(wǎng)絡(luò)就能進(jìn)行通信,極大地提高了應(yīng)用服務(wù)器與數(shù)據(jù)庫服務(wù)器之間的通信效率,使系統(tǒng)具有更好的性能。
4.2 業(yè)務(wù)邏輯類設(shè)計(jì)
通過對(duì)功能層的設(shè)計(jì),軟件的實(shí)體類包括:User、SystemSetting、Game、Tile、Network、Server,它們主要負(fù)責(zé)數(shù)據(jù)管理和業(yè)務(wù)邏輯處理。如下圖3為業(yè)務(wù)邏輯層部分類圖,該圖表示了功能層中實(shí)體類之間關(guān)系。
上圖中的實(shí)體類說明如下:
User:負(fù)責(zé)玩家賬號(hào)相關(guān)的數(shù)據(jù)管理和業(yè)務(wù)邏輯處理,其中id為游戲賬號(hào),password為賬號(hào)密碼,nickname為玩家昵稱,avatar為玩家頭像;
SystemSetting:負(fù)責(zé)系統(tǒng)設(shè)置相關(guān)的數(shù)據(jù)管理和業(yè)務(wù)邏輯處理,其中volumn為游戲音量大小;
Game:負(fù)責(zé)具體游戲相關(guān)的數(shù)據(jù)管理和業(yè)務(wù)邏輯處理,其中mode為游戲模式,chessboardSize為棋盤大小,field為棋盤區(qū)域所有棋子的具體位置;
Tile:負(fù)責(zé)一個(gè)具體的棋子相關(guān)的數(shù)據(jù)管理和業(yè)務(wù)邏輯處理,其中type為棋子類型(白子或黑子),row為棋子所在的行號(hào),column為棋子所在的列號(hào);
Network:負(fù)責(zé)網(wǎng)絡(luò)相關(guān)的數(shù)據(jù)管理和業(yè)務(wù)邏輯處理,其中socket為套接字;
Server:負(fù)責(zé)服務(wù)相關(guān)的數(shù)據(jù)管理和業(yè)務(wù)邏輯處理,其中tcpServer為QTcpServer的實(shí)例。
5 游戲模式
5.1 雙人對(duì)戰(zhàn)
該模式下,兩個(gè)玩家可以在同一設(shè)備上進(jìn)行游戲,該模式與實(shí)體五子棋游戲類似。玩家可以選擇中途退出游戲或開始新游戲。
5.2 聯(lián)機(jī)對(duì)戰(zhàn)
該模式下,軟件會(huì)通過玩家的游戲記錄匹配到與玩家水平相當(dāng)?shù)牧硪粋€(gè)玩家,兩個(gè)玩家通過網(wǎng)絡(luò)在不同的設(shè)備上進(jìn)行游戲。玩家可以選擇中途退出游戲或開始新游戲,但選擇退出游戲或開始新游戲的一方算作失敗,另一方算作勝利。
5.3 人機(jī)對(duì)戰(zhàn)
該模式下,只需要一個(gè)游戲玩家即可進(jìn)行游戲,另一個(gè)玩家由軟件模擬。玩家可以選擇中途退出游戲或開始新游戲,但選擇退出游戲或開始新游戲均算作失敗。
6 系統(tǒng)實(shí)現(xiàn)
6.1 登錄界面
玩家輸入賬號(hào)、密碼后點(diǎn)擊登錄,軟件對(duì)輸入的賬號(hào)和密碼與數(shù)據(jù)庫中存儲(chǔ)的賬號(hào)信息進(jìn)行匹配,若匹配成功,則登錄成功,反之,登錄失敗。玩家不進(jìn)行登錄也可使用軟件進(jìn)行游戲,此時(shí),軟件會(huì)為玩家生成一個(gè)游客賬號(hào)。為了更好的游戲體驗(yàn),建議玩家登錄軟件。
6.2 主界面
主界面是模式選擇界面,主要展示對(duì)玩家所提供的三種游戲模式:雙人對(duì)戰(zhàn)、聯(lián)機(jī)對(duì)戰(zhàn)、人機(jī)對(duì)戰(zhàn)。玩家可根據(jù)自己需要選擇相應(yīng)的模式。
6.3 匹配隊(duì)友界面
在聯(lián)機(jī)對(duì)戰(zhàn)模式中,匹配隊(duì)友界面展示了玩家匹配對(duì)方玩家的情況。在匹配成功之前玩家可以終止匹配。匹配成功之后兩個(gè)匹配上的玩家一起開始新游戲。
6.4 游戲界面
游戲界面展示了游戲背景以及游戲?qū)崟r(shí)情況。棋盤大小為17x17,玩家可選擇“無子”的“+”處落子;界面顯示了棋局形式、當(dāng)前落子方、對(duì)方上次落子位置。除此之外,界面提供了結(jié)束游戲和重新開始按鈕。在游戲過程中,玩家可以根據(jù)需求設(shè)置游戲,如音效設(shè)置。
6.5 游戲結(jié)束界面
游戲結(jié)束界面顯示了游戲結(jié)束時(shí)的狀態(tài)。當(dāng)游戲結(jié)束時(shí),高亮“五子一線”的棋子,游戲操作界面失去焦點(diǎn),玩家不可再落子,同時(shí)應(yīng)用顯示游戲結(jié)束框,提示游戲獲勝(或失?。?。游戲結(jié)束后,玩家可選擇返回主菜單或重新開始游戲。
7 結(jié)論
本文介紹了基于C/S結(jié)構(gòu)的五子棋游戲軟件設(shè)計(jì)與實(shí)現(xiàn),在五子棋游戲的設(shè)計(jì)中,以三層C/S結(jié)構(gòu)為總體架構(gòu),在游戲的開發(fā)與實(shí)現(xiàn)中,采用了UML 建模語言、 V-Play開發(fā)框架、MySQL 數(shù)據(jù)庫技術(shù)和JSON數(shù)據(jù)傳輸技術(shù)。對(duì)于游戲界面的實(shí)現(xiàn),我們使用的QML腳本語言進(jìn)行實(shí)現(xiàn),使得游戲界面美觀簡潔,易于使用。本軟件有三種模式可供選擇,并且玩家可以在網(wǎng)絡(luò)上和其他玩家對(duì)弈,提高了五子棋游戲的趣味性。
參考文獻(xiàn):
[1] 李金剛, 趙石磊, 杜寧. 軟件體系結(jié)構(gòu)理論與應(yīng)用[M]. 北京: 清華大學(xué)出版社, 2013: 66-67.
[2] Grady Booch, James Rumbaugh, Lvar Jacobson. UML用戶指南[M]. 2版. 北京: 人民郵電出版社, 2006.
[3] 張有聲. 軟件體系結(jié)構(gòu)原理、方法與實(shí)踐[M]. 2版. 北京: 清華大學(xué)出版社, 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面向?qū)ο蠼Ec設(shè)計(jì)[M]. 2版. 北京: 人民郵電出版社, 2006.
【通聯(lián)編輯:謝媛媛】