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