趙海國, 屈 洋
(湖南理工學(xué)院 數(shù)學(xué)學(xué)院, 湖南 岳陽 414006)
連連看游戲的設(shè)計及其實(shí)現(xiàn)
趙海國, 屈 洋
(湖南理工學(xué)院 數(shù)學(xué)學(xué)院, 湖南 岳陽 414006)
連連看游戲是一款界面友好、操作簡單、趣味性強(qiáng)的經(jīng)典小游戲. 本文闡述了基于圖形用戶界面的連連看游戲的算法設(shè)計思想和游戲開發(fā)流程, 對開發(fā)其他各類游戲有一定的借鑒價值.
連連看小游戲; 圖形用戶界面; 圖形小方塊
連連看游戲是一款界面友好, 操作簡單, 無需安裝客戶端, 深受大眾喜愛的經(jīng)典趣味小游戲. 任何用戶都能在電腦、手機(jī)等各類客戶端上輕松地登錄游戲并進(jìn)行游戲操作, 所以該游戲迅速躋身為全球最受歡迎的游戲之一. 基于連連看游戲的經(jīng)典性和應(yīng)用廣泛性, 本文使用Java語言設(shè)計了一個基于圖形用戶界面的連連看游戲, 著重闡述了連連看游戲的算法設(shè)計思想和游戲開發(fā)流程, 對開發(fā)其他各類游戲有一定的借鑒價值.
連連看游戲設(shè)計分為三個主要部分: 游戲主菜單設(shè)計, 游戲圖形界面設(shè)計、游戲算法設(shè)計, 如圖1所示.
圖1 游戲模塊設(shè)計圖
連連看游戲用戶登陸游戲頁面后, 選擇開始按鈕便能進(jìn)入游戲. 系統(tǒng)將游戲難度分為1至9個不同的等級, 用戶可以自行選擇游戲難度, 用戶選擇任意難度等級后直接進(jìn)入游戲界面. 游戲界面由若干行若干列成對出現(xiàn)的圖形小方塊組成. 根據(jù)游戲難易程度不同, 圖形小方塊中放置著不同數(shù)量的成對圖形, 用戶通過鼠標(biāo)點(diǎn)擊的方式選擇界面中不同位置的兩個相同圖片. 如果這兩個圖片在中間沒有障礙的情況下可以連線成功, 則系統(tǒng)會實(shí)現(xiàn)圖片消除, 否則界面不變化, 用戶需重新選擇重新判斷, 直到界面中所有圖片都被消除完畢, 則表明游戲成功. 用戶如果是新手則可以先看游戲演示, 了解游戲的操作過程, 再自己進(jìn)行游戲操作. 如果選擇的游戲難度太大, 則用戶可以選擇提示按鈕, 系統(tǒng)會提示用戶進(jìn)行下一步的正確操作. 如果用戶覺得本次游戲界面上圖片排列太雜亂, 則可以選擇刷新按鈕重新生成界面再繼續(xù)游戲操作,
具體操作流程如圖2所示.
圖2 游戲流程圖
連連看游戲的主要算法包括游戲開始階段的數(shù)據(jù)初始化算法, 圖片加載顯示算法, 游戲過程中的圖片連線成功判別及圖片消除算法, 游戲成功判別算法等等. 游戲主體程序如下:
const int ROW=8;//定義二維數(shù)組的行數(shù)
const int COL=8;// 定義二維數(shù)組的列數(shù)
int gameData[ROW][COL]; // 定義用于存放圖形的二維數(shù)組
void initData( );//數(shù)據(jù)初始化函數(shù): 將32對圖片順序存入二維數(shù)組, 用隨機(jī)函數(shù)打亂元素位置
void displayData( );// 加載游戲數(shù)據(jù), 圖片顯示函數(shù): 使用循環(huán)語句顯示二維數(shù)組中各個圖片
bool canClear(int x1,int y1,int x2,int y2);
//連線判別消除函數(shù): 圖片配對成功并連線成功則返回1, 否則返回0
bool isVictory( ); //游戲成功判別函數(shù): 游戲成功則返回1, 否則返回0
int main(int argc, char *argv[])
{
initData( );//生成游戲數(shù)據(jù), 完成游戲數(shù)據(jù)初始化
void displayData( ); //加載游戲數(shù)據(jù), 顯示游戲界面
int x1,y1,x2,y2;
while(true) //循環(huán)選擇并消除圖形配對成功并連線成功的圖形小方塊, 直到游戲結(jié)束
{選擇不同位置的兩個圖形小方塊, 將坐標(biāo)記入(x1,y1)和(x2,y2)
if canClear(int x1,int y1,int x2,int y2)
{ 消除圖片 }
if isVictory( ) break; //游戲結(jié)束則跳出while( )循環(huán)
}
}
連連看游戲開始階段的數(shù)據(jù)初始化算法initData( )實(shí)現(xiàn)并不復(fù)雜: 由于整個游戲界面采用的是地圖設(shè)計, 地圖采用GUI編程的網(wǎng)格布局, 以八行八列的地圖網(wǎng)格布局為例, 即將整個游戲操作區(qū)域看作是由8 864×=個小方塊組成的一幅地圖, 每一個小方塊放置著相應(yīng)的圖案, 稱為圖案小方塊[1]. 這些圖案小方塊都是成對出現(xiàn)并隨機(jī)分布在地圖的各個位置, 初始化算法中需要先定義一個存放圖片數(shù)據(jù)的二維數(shù)組gameData[8][8], 注意二維數(shù)組的下標(biāo)要和網(wǎng)格布局的行數(shù)和列數(shù)相同, 通過使用循環(huán)語句將8 864×=張且為32對圖片依次順序存放在二維數(shù)組中, 再使用隨機(jī)函數(shù)打亂二維數(shù)組中各個圖形元素的位置, 從而完成游戲數(shù)據(jù)的初始化.
連連看游戲的核心算法是游戲過程中的圖片連線成功判別及圖片消除算法canClear(int x1,int y1,int x2,int y2), 該算法實(shí)現(xiàn)過程為: 從游戲界面的圖形小方塊中選擇具有相同圖案的圖案小方塊, 若它們符合連線消除算法要求, 通過點(diǎn)擊選中圖案就會消失, 實(shí)現(xiàn)連連看操作. 連連看游戲運(yùn)行過程中, 若游戲愛好者選中的兩個圖案小方塊配對成功了, 并且選中的兩個圖案小方塊在中間沒有任何障礙物阻礙的情況下,可以通過直線直接, 或者有一個折點(diǎn)的垂直線段組合連接, 或者有兩個折點(diǎn)的垂直線段組合連接[3], 則這兩個圖案小方塊可以消除, 游戲繼續(xù)進(jìn)行, 直至界面中所有圖形小方塊都被消除完畢. 可見, 實(shí)現(xiàn)連連看操作的核心算法就是要先檢測到具有相同圖案的圖案小方塊, 再檢驗(yàn)這兩個方塊能否消除. 也就是說兩個圖案小方塊要能真正實(shí)現(xiàn)消除, 不僅需要圖片配對成功, 還需要連接成功, 兩個條件缺一不可:
(1) 圖片配對成功: 選擇的不同位置上的兩個圖案小方塊有完全相同的兩幅圖案.
(2) 圖片連接成功: 用戶通過鼠標(biāo)點(diǎn)擊選擇了兩個不同位置的圖案小方塊, 這兩個圖案小方塊在中間沒有障礙物阻礙的情況下, 可以用水平或堅直的直線段連接起來; 或者是連接這兩個圖案小方塊的水平或豎直的直線段組合的折點(diǎn)個數(shù)不超過兩個.
成功實(shí)現(xiàn)圖片配對非常簡單, 只要在二維數(shù)組所對應(yīng)的八行八列網(wǎng)格中對不同的圖片定義不同的名稱, 檢測名稱相同則表示圖片相同;
成功實(shí)現(xiàn)圖片連接過程: 判斷連線能否成功要看連接兩個相同圖案小方塊的直線組合, 若連接兩個相同圖案小方塊的直線組合為以下三種類型則連線成功[2]:
(1) 直線連接圖片方式, 如圖3中第一個, 第二個子圖的類型;
(2) 一個折點(diǎn)的垂直線段組合連接圖片方式[3], 如圖3中第三個的類型;
(3) 兩個折點(diǎn)的垂直線段組合連接圖片方式[3], 如圖3中第四個, 第五個, 第六個子圖的類型.
圖3 圖片連接方式圖
連連看游戲的第三塊主要算法為游戲界面上圖片連線消除后的游戲結(jié)束判別算法isVictory( ). 連連看游戲運(yùn)行后, 游戲界面中所有圖形小方塊的連接都已經(jīng)完成了之后, 最終需要判斷游戲是否勝利. 判斷的方法為: 程序?yàn)槊總€圖形小方塊設(shè)計了消除標(biāo)志并初始化, 每次被消除后則修改消除標(biāo)志, 最后檢測地圖網(wǎng)格中的所有圖片的消除標(biāo)志, 只要檢測到地圖中有一個圖案方塊還沒有被消除, 則證明游戲沒有結(jié)束; 若檢測到地圖中每一個圖案方塊都已經(jīng)被消除, 則游戲結(jié)束.
(1) 系統(tǒng)環(huán)境創(chuàng)建
在windows7操作系統(tǒng)下安裝JDK7.0, 配置系統(tǒng)環(huán)境變量.
安裝MyEclipse 10并且安裝相配套的插件.
(2) 連連看游戲運(yùn)行及測試
設(shè)計相關(guān)的類[4], 設(shè)計相應(yīng)的算法, 數(shù)據(jù)初始化算法, 圖片加載算法, 圖片消除算法, 游戲成功判別算法等等. 完成界面設(shè)計, 調(diào)試算法,初始化進(jìn)入游戲界面進(jìn)行游戲測試. 點(diǎn)擊開始游戲進(jìn)入游戲初始戶界面, 效果如圖4所示.
圖4 游戲操作界面圖
連連看游戲操作簡單, 游戲規(guī)則也簡單, 游戲測試中用戶自行選擇1到9級任意難度進(jìn)入游戲開始測試, 用戶選擇界面內(nèi)可以用直線連接并相互匹配的兩個圖片, 點(diǎn)中這兩個圖片實(shí)現(xiàn)消除; 用戶選擇界面內(nèi)可以用不多于兩個折點(diǎn)的垂直線段組合連接的兩個圖片, 點(diǎn)中這兩個圖片實(shí)現(xiàn)消除; 用戶點(diǎn)擊刷新隨機(jī)改變界面內(nèi)所有圖片位置重新開始游戲; 用戶點(diǎn)擊游戲提示, 系統(tǒng)提示用戶一組可以消除的圖片實(shí)現(xiàn)消除; 用戶點(diǎn)擊系統(tǒng)演示, 電腦自動消除界面內(nèi)圖形小方塊中所有配對圖片直至游戲結(jié)束. 通過用戶測試, 游戲的各項(xiàng)功能皆已實(shí)現(xiàn).
連連看游戲不僅滿足了日常生活中的常用游戲功能需求, 而且具有操作簡單, 界面美觀, 功能齊全, 趣味性強(qiáng)等優(yōu)點(diǎn), 是一款深受大眾喜愛的經(jīng)典趣味小游戲.
[1] James Cohoon, Jack Davidson. Java程序設(shè)計[M]. 北京: 清華大學(xué)出版社, 2005
[2] 吳其慶. Java程序設(shè)計經(jīng)典教程[M]. 北京: 冶金工業(yè)出版社, 2005
[3] 夏先波. Java JDK實(shí)例寶典[M]. 北京: 電子工業(yè)出版社, 2007
[4] Bruce Eckel. Java編程思想[M]. 北京: 機(jī)械工業(yè)出版社, 2007
Design and Implementation of Lianliankan Game
ZHAO Hai-guo, QU Yang
(College of Mathematics, Hunan Institute of Science and Technology, Yueyang 414006, China)
Lianliankan (a matching game) is a kind of classic games with friendly interface, simple operation and strong interest. This paper describes the algorithm design idea and development process of Lianliankan game based on graphical user interface, which has some reference value for developing other games.
Lianliankan game; Graphical User Interface(GUI); graphic squares
TP317.6
A
1672-5298(2015)03-0039-03
2015-06-18
趙海國(1980- ), 女, 湖南邵陽人, 碩士, 湖南理工學(xué)院數(shù)學(xué)學(xué)院講師. 主要研究方向: 計算機(jī)應(yīng)用