管敏
摘 要:文章基于JAVA的拼圖游戲開(kāi)發(fā)進(jìn)行設(shè)計(jì),主要運(yùn)用JAVA中繪制圖形界面的Swing包進(jìn)行拼圖游戲界面設(shè)計(jì),通過(guò)設(shè)計(jì)圖片移動(dòng)算法實(shí)現(xiàn)拼圖游戲主體功能滑塊移動(dòng)的實(shí)現(xiàn)以獲得圖片按鈕移動(dòng)功能。在進(jìn)行菜單功能設(shè)計(jì)時(shí),使用了監(jiān)聽(tīng)方法使得菜單按鈕能夠正常使用,并使用lang包中的異常處理類(lèi)以及線(xiàn)程類(lèi)進(jìn)一步優(yōu)化拼圖游戲界面,最后提出了一些界面算法優(yōu)化的問(wèn)題。
關(guān)鍵詞:Swing包;拼圖游戲;圖片移動(dòng)算法;lang包
中圖分類(lèi)號(hào):TP312 文獻(xiàn)標(biāo)識(shí)碼:A文章編號(hào):1674-1064(2021)03-044-02
DOI:10.12310/j.issn.1674-1064.2021.03.020
拼圖游戲的趣味源遠(yuǎn)流長(zhǎng)[1]。拼圖游戲深受大眾喜愛(ài),不僅有趣休閑,還能鍛煉人的思維能力。隨著計(jì)算機(jī)、手機(jī)的普及,人們已不再滿(mǎn)足于線(xiàn)下拼圖游戲。從玩家角度來(lái)看,線(xiàn)上拼圖游戲不僅操作方便,而且可以通過(guò)提升游戲難度激起讀者的挑戰(zhàn)心。拼圖游戲?qū)和某砷L(zhǎng)十分有利,在娛樂(lè)游戲盛行的游戲市場(chǎng),拼圖等益智類(lèi)小游戲似乎更適合兒童使用。從編程初學(xué)者來(lái)說(shuō),課堂上以做拼圖游戲項(xiàng)目為中心進(jìn)行有關(guān)JAVA的學(xué)習(xí),更加吸引人,有利于提高學(xué)生的學(xué)習(xí)興趣[2],進(jìn)而對(duì)JAVA進(jìn)行深入研究[3]。
1 JAVA Swing簡(jiǎn)介
其是用來(lái)設(shè)計(jì)界面的工具包,是對(duì)AWT包的擴(kuò)展,組件以J開(kāi)頭,并且Swing界面在不同平臺(tái)上的外觀(guān)完全一樣,真正做到了平臺(tái)獨(dú)立,可以用來(lái)對(duì)拼圖游戲的圖形用戶(hù)界面進(jìn)行設(shè)計(jì)[4-5]。
2 拼圖游戲的設(shè)計(jì)過(guò)程及功能驗(yàn)證
2.1 拼圖游戲設(shè)計(jì)流程
首先,采用從整體到局部的面向?qū)ο笤O(shè)計(jì)方法,以拼圖游戲軟件功能為核心,對(duì)拼圖游戲軟件進(jìn)行分析、設(shè)計(jì)、實(shí)現(xiàn)。
其中,搭建游戲界面使用的是容器知識(shí)點(diǎn),容器使用頂級(jí)容器和中層容器進(jìn)行搭建。其次,使用布局進(jìn)行界面劃分,拼圖需要把圖分成等分的幾部分。要使得拼圖游戲能夠進(jìn)行,就必須使各個(gè)部分的圖片發(fā)生交換,這時(shí)需要設(shè)計(jì)圖片交換算法。
最后,對(duì)功能部分進(jìn)行設(shè)置。首先設(shè)置的就是菜單欄,以及菜單欄中的菜單項(xiàng),包括菜單、菜單中的開(kāi)始、結(jié)束、查看背景圖片以及選擇等五個(gè)按鈕鍵。而在程序設(shè)計(jì)時(shí),分四個(gè)部分寫(xiě)程序,分別為圖片切割程序、頂級(jí)容器界面、中級(jí)容器界面、按鈕界面。然后就是計(jì)算時(shí)間以及步數(shù)。計(jì)算時(shí)間以及步數(shù)需要用到線(xiàn)程知識(shí),注意一下小細(xì)節(jié),就是需要設(shè)置更換圖片以及進(jìn)行等級(jí)后清零的設(shè)置,拼圖游戲設(shè)計(jì)流程如圖1所示。
2.2 拼圖游戲界面設(shè)計(jì)
首先進(jìn)行整體面板布局。直接使用Jframe類(lèi)下的setTitle()、setDefaultCloseOpearation()、setLocationRelativeTo()、setSize()、setResizable()方法分別設(shè)置窗口的標(biāo)題、關(guān)閉圖標(biāo)、在屏幕的位置、窗口大小以及是否由用戶(hù)更改窗口的大小。然后創(chuàng)建中間容器,添加到頂層容器內(nèi),再創(chuàng)建基本組件,添加到中間容器內(nèi)。整體界面搭建好后,對(duì)游戲界面進(jìn)行布局,此次拼圖游戲采用網(wǎng)格布局GridBayLayout,即將中間容器設(shè)置為表格布局,然后設(shè)置按鈕的圖片背景,最后添加按鈕組件至中間容器。
其次,進(jìn)行圖片切割算法設(shè)計(jì)。使用圖片切割方法cutImage,先創(chuàng)建相應(yīng)的圖片文件夾,放置原始圖片至文件夾,然后調(diào)用方法,生成切割文件至相應(yīng)目錄。
在進(jìn)行圖片移動(dòng)算法設(shè)計(jì)前,先用random隨機(jī)生成器隨機(jī)打亂圖片的順序。先創(chuàng)建放置圖片順序的隨機(jī)數(shù)組,根據(jù)隨機(jī)數(shù)組生成圖片位置,創(chuàng)建按鈕組件,并為按鈕設(shè)置圖表,添加按鈕組件至中間容器Jpanel。實(shí)現(xiàn)按鈕組件的移動(dòng),根據(jù)拼圖游戲的規(guī)則,就是點(diǎn)擊空白按鈕相鄰的圖片按鈕,使得空白按鈕和圖片按鈕發(fā)生交換。移動(dòng)算法設(shè)計(jì)的步驟:
按鈕對(duì)象設(shè)計(jì)繼承于JButton,使得其具有橫縱坐標(biāo)屬性,主要用于判斷空白按鈕的周邊按鈕是否為鄰近按鈕;
獲得空白按鈕的橫縱坐標(biāo);
獲得點(diǎn)擊按鈕的橫縱坐標(biāo);
判斷點(diǎn)擊按鈕是否與空白按鈕相鄰[6]。
下一步進(jìn)行菜單組件的繪制。首先創(chuàng)建菜單JMenu、菜單欄JMenubar以及菜單項(xiàng)JMenuItem,然后進(jìn)行菜單各功能的設(shè)計(jì)。為了實(shí)現(xiàn)功能,對(duì)菜單和菜單項(xiàng)添加監(jiān)聽(tīng)。
最后一步在設(shè)置時(shí)間和步數(shù)的顯示前,先對(duì)菜單欄的開(kāi)始和結(jié)束按鈕功能進(jìn)行設(shè)計(jì)。開(kāi)始按鈕可獲得設(shè)置的圖片及難度級(jí)別,進(jìn)行圖片切割,然后為按鈕設(shè)置監(jiān)聽(tīng)。而結(jié)束按鈕則是當(dāng)所有按鈕的坐標(biāo)位置和隨機(jī)數(shù)組的位置相符時(shí),則拼圖成功,游戲結(jié)束。時(shí)間和步數(shù)就是設(shè)置兩個(gè)菜單項(xiàng),然后對(duì)其進(jìn)行線(xiàn)程設(shè)置,能夠使其在開(kāi)始游戲時(shí)進(jìn)行執(zhí)行。而在開(kāi)始后,能夠重置時(shí)間與步數(shù)[7]。
2.3 拼圖游戲功能實(shí)現(xiàn)及驗(yàn)證
在進(jìn)行拼圖游戲的過(guò)程中,程序運(yùn)行結(jié)果框中出現(xiàn)了圖片的原始順序,但是在移動(dòng)滑塊的時(shí)候,并沒(méi)有根據(jù)算法的基本思路運(yùn)行,而是未完成拼圖就顯示了“拼圖完成”的消息框。原算法的思路如下:隨機(jī)打亂圖片順序,然后移動(dòng)圖片滑塊,當(dāng)圖片滑塊的順序與按鈕的順序相同時(shí),即按鈕的順序是0~9,而圖片滑塊的順序是亂序。當(dāng)亂序變成順序,與按鈕順序一一對(duì)應(yīng)時(shí),則表示拼圖完成,如圖2所示。
在進(jìn)行拼圖游戲的過(guò)程中,時(shí)間與步數(shù)正常顯示。
選擇另一個(gè)能夠正常進(jìn)行拼圖游戲的代碼進(jìn)行算法思路比較。
對(duì)比結(jié)果顯示:數(shù)組維度的區(qū)別。
點(diǎn)擊“菜單”下的“背景”,則背景圖片正常顯示。
點(diǎn)擊“選擇”,然后點(diǎn)擊“圖片更換”,最后點(diǎn)擊“開(kāi)始”,則此功能正常使用、無(wú)異常,并且時(shí)間與步數(shù)會(huì)清零。
點(diǎn)擊“選擇”,然后進(jìn)行“等級(jí)”切換,點(diǎn)擊“開(kāi)始”,切換正常,并且時(shí)間與步數(shù)正常清零。
3 結(jié)語(yǔ)
目前,對(duì)于拼圖游戲的開(kāi)發(fā)并不局限于JAVA,還包括各類(lèi)語(yǔ)言如C#、matlab等,不過(guò)主要以JAVA為主。但是,JAVA在開(kāi)發(fā)拼圖游戲時(shí)還存在一些算法優(yōu)化問(wèn)題:判斷游戲是否結(jié)束的算法,以及圖片問(wèn)題:圖片大小根據(jù)窗口大小進(jìn)行縮放。
在開(kāi)發(fā)JAVA的過(guò)程中,出現(xiàn)了必須要將窗口大小設(shè)置成圖片大小的情況,當(dāng)插入的圖片大小不同時(shí),怎么控制圖片大小根據(jù)窗口大小進(jìn)行調(diào)整呢?再者,判斷拼圖游戲完成的算法在思路上并未有什么問(wèn)題,但是在實(shí)施的情況下,卻出現(xiàn)了圖片還未拼成原圖就顯示“拼圖完成”的信息提示框。
根據(jù)第二個(gè)問(wèn)題,對(duì)比了一個(gè)拼圖游戲開(kāi)發(fā)的代碼,發(fā)現(xiàn)兩者的區(qū)別在于數(shù)組維度的區(qū)別,兩者都是通過(guò)位置對(duì)比的算法進(jìn)行判斷拼圖是否完成。而通過(guò)二維數(shù)組進(jìn)行位置對(duì)比時(shí),游戲能夠正常識(shí)別出拼圖是否完成。而一維數(shù)組卻不能識(shí)別,甚至出現(xiàn)任意位置都可顯示拼圖完成。
由于開(kāi)發(fā)游戲時(shí)使用的是JAVA語(yǔ)言,所以這個(gè)拼圖軟件可以在很多平臺(tái)上運(yùn)行,比如PC端以及安卓系統(tǒng)等,在各個(gè)系統(tǒng)上都可兼容。
參考文獻(xiàn)
[1] 宋愛(ài)新,桂鵬飛.基于MFC的數(shù)字拼圖游戲設(shè)計(jì)與實(shí)現(xiàn)[J].智慧密集,2015(18):35-38.
[2] 劉立云,趙慧勤.基于自主探究理念的拼圖教育游戲的設(shè)計(jì)開(kāi)發(fā)[J].數(shù)字社區(qū),2017(20):70-71.
[3] 余戰(zhàn)秋.基于A(yíng)pp Inventor的九宮格拼圖游戲設(shè)計(jì)與實(shí)現(xiàn)[J].智慧密集,2017(18):34-36.
[4] 茍雨晴,蘭全祥.基于Java的拼圖游戲設(shè)計(jì)與實(shí)現(xiàn)[J].電腦知識(shí)與技術(shù),2019,2(15):45-47.
[5] 秦鵬珍.基于Java的拼圖游戲?qū)崿F(xiàn)[J].電子技術(shù)與軟件工程,2019(13),237-238.
[6] 張國(guó)榮.拼圖游戲APP的設(shè)計(jì)與實(shí)現(xiàn)[J].電腦知識(shí)與技術(shù),2019,3(15):1009-3044.
[7] 劉丹.基于A(yíng)ndroid的拼圖游戲設(shè)計(jì)與實(shí)現(xiàn)[J].湖北理工學(xué)院學(xué)報(bào),2019,6(35):2095-4565.