迷宮游戲(java)

聲明:1.本文章為原創(chuàng)文章,轉(zhuǎn)載注明出處,蟹蟹~??

? ?2.初學(xué)java,水平有限,還有很多不足和應(yīng)當(dāng)修正的地方,歡迎評(píng)論指點(diǎn)? ?

寫這個(gè)小游戲是為了總結(jié)并實(shí)踐一下最近學(xué)的java用戶界面方面和按鍵監(jiān)聽的知識(shí),以及對(duì)下一章節(jié)IO流文件操作的入門練習(xí),也算是承上啟下吧。最開始本來想加入時(shí)間限制的,但貌似涉及到多線程(還沒學(xué)),就先簡(jiǎn)化了。游戲和代碼原創(chuàng),但玩法和普通迷宮也沒啥特別的,如有雷同純屬巧合。

首先曬一下游戲界面:


主界面


迷霧模式


道具模式

UI風(fēng)格看看就好,我也不知道怎么把它做的好看,就盡量用圖片去美化了。

這是大致框架:

框架

歡迎界面就是兩JLabel和兩按鈕控件披上了圖片的外衣,有人就會(huì)說啦,妖怪吧你的按鈕這么特別,其實(shí)就是將默認(rèn)的一些屬性給取消然后加上圖片再添加監(jiān)聽器而已。更細(xì)致一點(diǎn)話,由于設(shè)置成圖片沒有了默認(rèn)按鈕的按下去的效果,所以可以設(shè)置一下按下的時(shí)候更換一張按鈕圖片來模擬默認(rèn)按鈕按下去的效果。這里我就不具體展開了。

按鈕的美化具體如下:(添加監(jiān)聽器和放置位置部分等省略)

?//設(shè)定透明效果

按鈕名.setOpaque(false);

//去掉背景點(diǎn)擊效果

按鈕名 .setContentAreaFilled(false);

//去掉聚焦線

按鈕名 .setFocusPainted(false);

//去掉邊框

按鈕名 .setBorder(null);

//設(shè)置顯示的圖片

按鈕名 .setIcon(圖片位置和信息);

? ? ? 其實(shí)以上都是強(qiáng)行使用Jbutton,反正是用圖片,那標(biāo)簽不也行???是的,標(biāo)簽上放置圖片然后添加監(jiān)聽器達(dá)到的效果是一樣的,還更簡(jiǎn)潔,只是這里我想用一下Jbutton而已,僅此而已。

接下來就是游戲界面:

? ? ? ?模式特有的LOGO,模式信息提示,背景圖片都是標(biāo)簽放上圖片,這里不多贅述。(注意JFrame中先加的圖片在上層,所以背景圖片的初始化要放在最后)

? ? ? ?迷宮墻體實(shí)則也是一個(gè)一個(gè)的標(biāo)簽放置圖片,但不可能每個(gè)都用代碼去寫,太麻煩了。這里我事先將迷宮墻體在邏輯上用1表示,0則表示空白(可以走的地方)放到txt文件中。以下圖片是迷宮數(shù)據(jù)的一部分:

迷宮數(shù)據(jù)

? ? ? 其中1代表墻體,0代表空白,然后通過文件讀取,把這些數(shù)據(jù)存到事先定義好的數(shù)組中,這樣一來,邏輯上的迷宮地圖就完成了。這部分我也是現(xiàn)學(xué)現(xiàn)賣,這不,在mooc上看視頻截的圖還在,我也基本是按照視頻里老師說的寫的,只是視頻里是按行讀并輸出,我是改成了每個(gè)數(shù)都放到數(shù)組中而已。(圖中是往a.txt寫,從Main.java里面讀。)

mooc文本文件讀取

? ? ? ? 邏輯上的迷宮初始化還有人物和終點(diǎn)(對(duì)于道具模式還有紅藍(lán)寶石),這里我就是從空白處(數(shù)據(jù)上為0)隨機(jī)生成的。整個(gè)迷宮從數(shù)據(jù)上看是? 1:墻? ? ?2:人? ? 3:藍(lán)寶石? ? ?4:紅寶石? ? 5:終點(diǎn)? ? 6:燈? ? ? 7:勝利標(biāo)志(游戲狀態(tài)函數(shù)會(huì)用到)? ?其中燈是用戶按空格鍵才有的,勝利標(biāo)志則是是否到達(dá)終點(diǎn)的判斷標(biāo)志(數(shù)組上我設(shè)置的是到達(dá)終點(diǎn)將7賦值給數(shù)組的第一個(gè)元素)。

? ? ? ?接下來是圖形上的迷宮初始化,這里分為公共部分和模式專有(迷霧模式有視野初始化,道具模式有紅藍(lán)寶石),就是按照邏輯上的數(shù)組數(shù)據(jù)對(duì)應(yīng)的標(biāo)簽數(shù)組進(jìn)行初始化,是什么數(shù)字就往標(biāo)簽上加對(duì)應(yīng)的圖片就好了,至于迷霧模式的視野問題,反應(yīng)到標(biāo)簽上就是可視化的問題。

這是初始化的結(jié)構(gòu):(JFrame中橫縱和數(shù)組相反,所以我從定義就開始反過來了,放置標(biāo)簽位置的時(shí)候同樣也要注意)

迷宮初始化

? ? ?初始化完成后就是按鍵監(jiān)聽了,也可說是數(shù)據(jù)處理。原理反映到圖形上無非就是空白處可以走,墻體不能走,紅藍(lán)寶石可以拾起等。反應(yīng)到數(shù)據(jù)上則是代表人物數(shù)據(jù)的2可以賦值給移動(dòng)方向上非1的數(shù)賦值為2,將原來的元素賦值為0.遇到3(藍(lán)寶石),4(紅寶石),5(終點(diǎn))的話額外做點(diǎn)對(duì)應(yīng)的事情就好啦。具體實(shí)現(xiàn)在本文不展開。另外在迷霧模式中空格鍵可以放燈,就是按空格時(shí)人物所在位置的周圍一圈的墻體上隨機(jī)放置一盞燈(數(shù)據(jù)上6代表燈),燈周圍方圓2格的墻體可視化。

至于迷霧模式的留燈次數(shù)為3的限制和道具模式的步數(shù)100的限制這里不展開講。

具體實(shí)現(xiàn)放燈的函數(shù)如下(數(shù)據(jù)上):

Random random = new Random();

for(int i=0;i<47;i++) {

? ? ?for(int j=0;j<37;j++) {

if(labyrinthData[i][j]==2)//找到人物放燈坐標(biāo)

? { int x,y;

? do {

? ? ? ? ? ?x=random.nextInt(3)-1;//-1,0,1

? ? ? ? ? ?y=random.nextInt(3)-1;//-1,0,1

? ? ? ?}while(labyrinthData[i+x][j+y]!=1);//放燈處合理性

? ? ? ? ? labyrinthData[i+x][j+y]=6;//6為燈

? ? ? ? ? labyrinthLable[j+y][i+x].setIcon(light);

? ? ?}

? ? }//內(nèi)for

}//外for?

? ? ? ? 同理,在對(duì)迷霧模式圖形上初始化時(shí)在視野控制也可以用此方法,先將整個(gè)標(biāo)簽數(shù)組的每一個(gè)元素setVisible(false); 然后在人物,終點(diǎn),燈所在坐標(biāo)方圓2格范圍內(nèi)數(shù)據(jù)上為1的標(biāo)簽數(shù)組元素setVisible(true);。

接下來便是更新函數(shù):不具體寫了直接看圖:

更新函數(shù)

最后一步,游戲狀態(tài)函數(shù):

模式公有:游戲勝利,有勝利標(biāo)志(數(shù)據(jù)上為7)? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 模式私有:迷霧模式?jīng)]有游戲失敗,道具模式步數(shù)為0時(shí)游戲失敗。? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?利用JOptionPane.showConfirmDialog(null, "對(duì)話框內(nèi)容", "對(duì)話框標(biāo)題",JOptionPane.YES_NO_OPTION);來實(shí)現(xiàn)重玩游戲。具體實(shí)現(xiàn)細(xì)節(jié)在源碼里。

文章末尾:由于該小游戲用到了多張圖片,包括多種類型的背景圖片,人物圖片,墻體圖片等等,圖片資源不好一一上傳,于是我把整個(gè)游戲項(xiàng)目文件放到了百度網(wǎng)盤上,有興趣的可以下載,這是免密下載鏈接:https://pan.baidu.com/s/1VJgkui6SwQWExE8pHGRsCQ

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 1、通過CocoaPods安裝項(xiàng)目名稱項(xiàng)目信息 AFNetworking網(wǎng)絡(luò)請(qǐng)求組件 FMDB本地?cái)?shù)據(jù)庫組件 SD...
    陽明AI閱讀 16,203評(píng)論 3 119
  • 回憶起大學(xué)時(shí)光 翻開久違的日記 那段曾經(jīng)瘋狂碼字的記憶 又浮現(xiàn)眼前 是什么讓我放棄了如此優(yōu)秀的習(xí)慣 是什么讓...
    lcqbeyond閱讀 104評(píng)論 0 0
  • 前天有幸接到我的心理學(xué)督導(dǎo)老師龔老師的電話,我高興極了。這也是我期盼以久的。我除了高興,更多地是感恩。感恩恩師在...
    王澤華wzh閱讀 232評(píng)論 0 0
  • 看到有個(gè)朋友給我發(fā)了一個(gè)心靈雞湯:本想把日子過成詩,時(shí)而簡(jiǎn)單,時(shí)而精致。不料日子卻過成了我的歌,時(shí)而不靠譜,時(shí)而不...
    巧笑嫣然兮閱讀 1,028評(píng)論 0 0
  • 上回說道:若晨來到客棧就遇到了生性好玩的薔薇,但沒等薔薇開始捉弄他們,接龍客棧的二當(dāng)家無戒就出來迎接他們了。當(dāng)紫雨...
    蘇寂然閱讀 475評(píng)論 3 5

友情鏈接更多精彩內(nèi)容