推箱子--Java課程設(shè)計(jì)_第1頁(yè)
推箱子--Java課程設(shè)計(jì)_第2頁(yè)
推箱子--Java課程設(shè)計(jì)_第3頁(yè)
推箱子--Java課程設(shè)計(jì)_第4頁(yè)
推箱子--Java課程設(shè)計(jì)_第5頁(yè)
已閱讀5頁(yè),還剩45頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、 面向?qū)ο蟪绦蛟O(shè)計(jì)課程設(shè)計(jì)報(bào)告題 目: 經(jīng)典推箱子趣味游戲設(shè)計(jì)與實(shí)現(xiàn) 院 (系): 信息科學(xué)與工程學(xué)院 專(zhuān)業(yè)班級(jí): 計(jì)算機(jī)科學(xué)與技術(shù)1201班 學(xué)生姓名: 程偉 學(xué) 號(hào): 20121183011 指導(dǎo)教師: 吳奕 20 14 年 12 月 29 日至20 15 年 1 月 9 日華中科技大學(xué)武昌分校制 面向?qū)ο蟪绦蛟O(shè)計(jì) 課程設(shè)計(jì)任務(wù)書(shū)一、設(shè)計(jì)(調(diào)查報(bào)告/論文)題目經(jīng)典推箱子趣味游戲設(shè)計(jì)與實(shí)現(xiàn)二、設(shè)計(jì)(調(diào)查報(bào)告/論文)主要內(nèi)容內(nèi)容:本游戲要求用戶(hù)將游戲地圖中所有放置著的箱子推到指定的地點(diǎn)來(lái)完成游戲,用戶(hù)通過(guò)繞開(kāi)地圖中的障礙物將可移動(dòng)的箱子推到目的地,游戲的難度在于要求用戶(hù)通過(guò)合理的路徑安排來(lái)使所

2、有的箱子最后都到達(dá)目的地。游戲一共50關(guān),隨著關(guān)數(shù)的升高,游戲的難度隨之增大。 基本功能與要求:1初始化游戲界面設(shè)計(jì)2地圖的繪制3每一關(guān)都按照數(shù)組重新繪制地圖4小人與箱子的移動(dòng)5完成"悔一步"的操作。三、原始資料1.面向?qū)ο蟪绦蛟O(shè)計(jì)課程設(shè)計(jì)指導(dǎo)書(shū)2. 耿祥義JAVA大學(xué)實(shí)用教程北京:清華大學(xué)出版社,2009四、要求的設(shè)計(jì)(調(diào)查/論文)成果1.課程設(shè)計(jì)報(bào)告2.課程設(shè)計(jì)軟件五、進(jìn)程安排布置任務(wù),查找資料、需求分析1天總體設(shè)計(jì)1天詳細(xì)設(shè)計(jì)1.5天編制源程序?qū)崿F(xiàn)3.5天測(cè)試與修改1天撰寫(xiě)課設(shè)報(bào)告2天六、主要參考資料1 張廣彬. Java課程設(shè)計(jì)案例精編(第二版).北京:清華大學(xué)出版

3、社, 2011. 2 耿祥義. Java課程設(shè)計(jì)(第二版).北京:清華大學(xué)出版社, 2008.3 耿祥義JAVA大學(xué)實(shí)用教程北京:清華大學(xué)出版社,20094 鄒林達(dá)陳國(guó)君 Java2程序設(shè)計(jì)基礎(chǔ)北京:清華大學(xué)出版社,20105 鄒林達(dá)Java2程序設(shè)計(jì)基礎(chǔ)實(shí)驗(yàn)指導(dǎo)北京:清華大學(xué),2010指導(dǎo)教師(簽名): 20 年 月 日目 錄1需求與總體設(shè)計(jì)11.1需求分析11.2總體設(shè)計(jì)22詳細(xì)設(shè)計(jì)42.1 mainFrame類(lèi)42.2 mainpanel類(lèi)52.3 Sound類(lèi)72.4 Readmap類(lèi)73 編碼實(shí)現(xiàn) 93.1游戲源碼94系統(tǒng)測(cè)試42總結(jié)451需求與總體設(shè)計(jì)1.1需求分析1.1.1功能結(jié)

4、構(gòu)圖推箱子游戲的功能結(jié)構(gòu)圖如圖1.1所示。在系統(tǒng)中,編寫(xiě)4個(gè)Java類(lèi):mainFrame,mainpanel,Sound,Readmap;分別對(duì)應(yīng)初始化游戲界面,游戲操作,背景音樂(lè),繪制地圖。 圖1.11.1.2 UML類(lèi)圖推箱子系統(tǒng)除了上述4個(gè)Java類(lèi)外,還需要Java系統(tǒng)提供的一些重要的類(lèi)。這些類(lèi)之間的UML圖如圖1.2所示。圖1.21.2總體設(shè)計(jì)1.2.1 mainFrame類(lèi)mainFrame類(lèi)負(fù)責(zé)創(chuàng)建系統(tǒng)的主窗口。mainFrame類(lèi)有多種重要類(lèi)型的對(duì)象,這些對(duì)象構(gòu)成了游戲界面的簡(jiǎn)明與美觀,并且通過(guò)監(jiān)聽(tīng)實(shí)現(xiàn)方法賦予了這些組件的相應(yīng)功能。MainFrame類(lèi)通過(guò)調(diào)用Readmap類(lèi)

5、來(lái)實(shí)現(xiàn)將地圖繪制在游戲主界面,通過(guò)調(diào)用Sound類(lèi)來(lái)實(shí)現(xiàn)對(duì)背景音樂(lè)的管理,實(shí)現(xiàn)音樂(lè)開(kāi)關(guān)以及選擇上一曲下一曲的操作。設(shè)計(jì)中包括了所有你所能直觀見(jiàn)到的圖形界面,窗體的大小,下拉菜單中的功能菜單,使得玩家能夠很直觀的見(jiàn)到所有游戲中的功能.界面中有菜單, 包括:"選項(xiàng)""設(shè)置音樂(lè)""幫助"。按鈕包括:"重來(lái)""悔一步""第一關(guān)""上一關(guān)""下一關(guān)""最終關(guān)""選關(guān)""音樂(lè)"等。1.2.

6、2 mainpanel類(lèi)Mainpanel類(lèi)中集成了小人與箱子的移動(dòng)規(guī)則,并且還包含了對(duì)鍵盤(pán)操作移動(dòng)的響應(yīng)方法。在本游戲系統(tǒng)中,給人的視覺(jué)感受應(yīng)該是能感受都動(dòng)作的變化,逼真的人物動(dòng)作會(huì)使系統(tǒng)更有效.通過(guò)控制人物,箱子,空地,障礙物在數(shù)組中的位置的改變來(lái)控制移動(dòng)動(dòng)作.小人與箱子移動(dòng)的算法移動(dòng)中包括正移動(dòng),與"悔一步"的負(fù)移動(dòng). 正移動(dòng):小人上下左右的移動(dòng)是由本組咸英智組員所做,歸結(jié)起來(lái)上下左右是一個(gè)判斷的算法,判斷都是通過(guò)判斷小人前面是否是空位箱子或者是墻,如果沒(méi)有就移動(dòng);有的話(huà),據(jù)判斷箱子是否可以移動(dòng),最后討論箱子推過(guò)的,小人移動(dòng),以及被遮擋住點(diǎn)的圖形變化,重新繪制地圖,算

7、法判斷完畢. 1.2.3 Sound類(lèi) Sound類(lèi)主要功能是播放背景音樂(lè),包含了一些對(duì)音樂(lè)的操作方法。在玩游戲的同時(shí)聽(tīng)一聽(tīng)動(dòng)聽(tīng)的音樂(lè),有助于舒緩疲勞,放松心情。1.2.4 Readmap類(lèi)Readmap類(lèi)是繪制地圖的類(lèi),將已經(jīng)制作好的地圖繪制在游戲界面上。其主要功能是給用戶(hù)一個(gè)友好的游戲界面,游戲中包括50 關(guān)的地圖,推箱子這個(gè)游戲的50 個(gè)地圖是事先完成的,將所有地圖上面的信息以數(shù)字的形式儲(chǔ)存在一個(gè)20*20 的二維數(shù)組當(dāng)中;然后,每一關(guān)都按照數(shù)組重新繪制地圖,這樣就擁有了50 張地圖。2詳細(xì)設(shè)計(jì)2.1 mainFrame類(lèi)MainFrame類(lèi)用于初始化屏幕。該類(lèi)首先用兩個(gè)for循環(huán)初始化

8、屏幕20*20范圍內(nèi)的狀態(tài),初始化為0,以后根據(jù)實(shí)際情況重新賦值;然后設(shè)置屏幕輸出狀態(tài),設(shè)置寄存器AX的高位為0,低位為3,表示以80*25的彩色方式顯示;最后移動(dòng)光標(biāo)到指定的位置輸出。設(shè)置界面的標(biāo)題,窗口大小,添加按鈕組件以及各種組件的布局super("推箱子咯");/設(shè)置標(biāo)題setSize(720,720);setVisible(true);/設(shè)置窗口可見(jiàn)setResizable(false);/創(chuàng)建按鈕btnrenew=new JButton("重來(lái)");btnback=new JButton("悔一步");btnlast=ne

9、w JButton("上一關(guān)");btnnext=new JButton("下一關(guān)");btnchoose=new JButton("選關(guān)");btnfirst=new JButton("第關(guān)");btnover=new JButton("最終關(guān)");btnmuc=new JButton("音樂(lè)關(guān)");actionPerformed(ActionEvent)itemStateChanged(ItemEvent)2.2 mainpanel類(lèi)該類(lèi)用于移動(dòng)箱子,包括目的地之間、空地

10、之間和目的地與空地之間的箱子移動(dòng)。小人與箱子移動(dòng)的算法移動(dòng)中包括正移動(dòng),與"悔一步"的負(fù)移動(dòng). 正移動(dòng):小人上下左右的移動(dòng)是由本組咸英智組員所做,歸結(jié)起來(lái)上下左右是一個(gè)判斷的算法,判斷都是通過(guò)判斷小人前面是否是空位箱子或者是墻,如果沒(méi)有就移動(dòng);有的話(huà),據(jù)判斷箱子是否可以移動(dòng),最后討論箱子推過(guò)的,小人移動(dòng),以及被遮擋住點(diǎn)的圖形變化,重新繪制地圖,算法判斷完畢.傳出數(shù)據(jù)記錄在,一個(gè)棧當(dāng)中,以備"悔一步"使用. 負(fù)移動(dòng):通過(guò)記錄在棧中的數(shù)據(jù)判斷,前一步是的移動(dòng)方向以及移動(dòng)使用過(guò)的算法,逆向?qū)⒋a重新運(yùn)行,同時(shí)繪制地圖以達(dá)到前一步的狀態(tài).Mainpanel類(lèi)中包

11、含了(1)重來(lái):重新開(kāi)始當(dāng)前關(guān); (2)悔一步:返回上一移動(dòng)狀態(tài)(可以連續(xù)返回多步) (3)第一關(guān):游戲系統(tǒng)默認(rèn)開(kāi)始關(guān)為第一關(guān),此按鈕可以將關(guān)從其它關(guān)跳躍到第一關(guān). (4)上一關(guān):返回到當(dāng)前關(guān)的上一關(guān); (5)下一關(guān):返回到當(dāng)前關(guān)的下一關(guān); (6)最終關(guān):跳躍到最后一關(guān),即第五十關(guān); (7)選關(guān):選擇想要玩的關(guān); (8)音樂(lè)關(guān)(開(kāi)) :默認(rèn)為開(kāi),點(diǎn)擊自動(dòng)關(guān)閉音樂(lè)和開(kāi)啟音樂(lè). (9)更換音樂(lè):從不同的音樂(lè)中選取適合玩家的音樂(lè).鍵盤(pán)操作的方法iswin()/判斷是否獲勝isMystackEmpty()paint(Graphics)箱子移動(dòng)與人物移動(dòng)的方法。該方法是實(shí)現(xiàn)箱子的移動(dòng)。根據(jù)游戲規(guī)則,箱子

12、可以在空地之間、目的地之間、空地和目的地之間來(lái)回移動(dòng)。backright(int)/返回右移moveright()/右移操作backleft(int)/返回左移moveleft()/左移操作backdown(int)/返回下移movedown()/下移操作backup(int)/返回上移moveup()/上移操作remove()/移除返回back()/鍵盤(pán)監(jiān)聽(tīng)keyReleased(KeyEvent)/釋放鍵盤(pán)keyTyped(KeyEvent)/判斷鍵盤(pán)操作是否有效keyPressed(KeyEvent)/按下鍵盤(pán)2.3 Sound類(lèi)(1)將本地音樂(lè)讀取進(jìn)程序loadSound() (2)音

13、樂(lè)關(guān)(開(kāi)) :默認(rèn)為開(kāi),點(diǎn)擊自動(dòng)關(guān)閉音樂(lè)和開(kāi)啟音樂(lè). mystop()isplay()(3)更換音樂(lè):從不同的音樂(lè)中選取適合玩家的音樂(lè).setMusic(String)2.4 Readmap類(lèi)該模塊主要是被其它模塊調(diào)用,用于畫(huà)墻、在空地畫(huà)箱子、在目的地畫(huà)箱子、畫(huà)小人和畫(huà)目的地。形成地圖以二維數(shù)組的形式進(jìn)行存儲(chǔ)的,不同的數(shù)字有著不同的含義.在地圖當(dāng)中不同的數(shù)字代表不同的含義我當(dāng)時(shí)是將09 解讀成為不同的圖形與圖像. "0"代表"地圖以?xún)?nèi)的空位" "1"代表"地圖中的邊緣" "2"代表"地

14、圖以?xún)?nèi)的空位非點(diǎn)位; "3"代表"地圖中的箱子" "4"代表"點(diǎn)位" "5"代表"小人面部朝下" "6"代表"小人面部朝左" 課程設(shè)計(jì)說(shuō)明書(shū)"7"代表"小人面部朝右" "8"代表"小人面部朝上" "9"代表"箱子已經(jīng)到達(dá)點(diǎn)位。Readmap(int)/讀取地圖文件getmap()/獲取地圖用于在目的地畫(huà)箱子,傳入?yún)?shù)x、y指明位

15、置。該類(lèi)調(diào)用getmap()進(jìn)行輸出,3編碼實(shí)現(xiàn)3.1推箱子游戲設(shè)計(jì)源碼import javax.swing.*;import java.awt.event.*;import java.awt.*;import java.io.*;import javax.sound.midi.*;import java.util.Stack;public class hh/程序主方法,游戲由此開(kāi)始public static void main(String args)/創(chuàng)建游戲界面new mainFrame();/顯示游戲的主界面,一些常用組件的布局及其相應(yīng)功能的監(jiān)聽(tīng)與實(shí)現(xiàn)class mainFrame e

16、xtends JFrame implements ActionListener,ItemListenerJLabel lb;JLabel lb2;JButton btnrenew,btnlast,btnnext,btnchoose,btnfirst,btnover,btnmuc,btnback;mainpanel panel;Sound sound;JComboBox jc=new JComboBox();/主界面上的菜單和選項(xiàng)MenuItem renew=new MenuItem("重新開(kāi)始");MenuItem back=new MenuItem("悔一步&q

17、uot;);MenuItem last=new MenuItem("上一關(guān)");MenuItem next=new MenuItem("下一關(guān)");MenuItem choose=new MenuItem("選關(guān)");MenuItem exit=new MenuItem("退出");MenuItem qin=new MenuItem("琴蕭合奏");MenuItem po=new MenuItem("泡泡堂");MenuItem guang=new MenuItem(&quo

18、t;灌籃高手");MenuItem nor=new MenuItem("默認(rèn)");MenuItem eye=new MenuItem("eyes on me");MenuItem about=new MenuItem("關(guān)于推箱子");mainFrame()super("推箱子咯");/設(shè)置標(biāo)題setSize(720,720);setVisible(true);/設(shè)置窗口可見(jiàn)setResizable(false);setLocation(300,20);setDefaultCloseOperation(J

19、Frame.EXIT_ON_CLOSE);Container cont=getContentPane();cont.setLayout(null);cont.setBackground(Color.black);/選項(xiàng)菜單的菜單項(xiàng)的添加Menu choice=new Menu("選項(xiàng)");choice.add(renew);choice.add(last);choice.add(next);choice.add(choose);choice.add(back);choice.addSeparator();choice.add(exit);/給選項(xiàng)菜單的菜單項(xiàng)添加監(jiān)聽(tīng)rene

20、w.addActionListener(this);last.addActionListener(this);next.addActionListener(this);choose.addActionListener(this);exit.addActionListener(this);back.addActionListener(this);/給背景音樂(lè)菜單添加菜單項(xiàng)Menu setmuc=new Menu("設(shè)置音樂(lè)");setmuc.add(nor);setmuc.add(qin);setmuc.add(po);setmuc.add(guang);setmuc.add

21、(eye);/給背景音樂(lè)菜單項(xiàng)添加監(jiān)聽(tīng)nor.addActionListener(this);qin.addActionListener(this);po.addActionListener(this);guang.addActionListener(this);eye.addActionListener(this);/給幫助菜單添加菜單項(xiàng)及監(jiān)聽(tīng)Menu help=new Menu("幫助");help.add(about);about.addActionListener(this);MenuBar bar=new MenuBar();bar.add(choice);bar

22、.add(setmuc);bar.add(help);setMenuBar(bar); nor.setEnabled(false);lb=new JLabel("JAVA推箱子",SwingConstants.CENTER);lb2=new JLabel("更換音樂(lè)",SwingConstants.CENTER);add(lb);add(lb2);lb.setBounds(100,20,400,20);lb.setForeground(Color.white);lb2.setBounds(625,500,55,20);lb2.setForeground(

23、Color.white);/創(chuàng)建按鈕btnrenew=new JButton("重來(lái)");btnback=new JButton("悔一步");btnlast=new JButton("上一關(guān)");btnnext=new JButton("下一關(guān)");btnchoose=new JButton("選關(guān)");btnfirst=new JButton("第關(guān)");btnover=new JButton("最終關(guān)");btnmuc=new JButton(&qu

24、ot;音樂(lè)關(guān)");/添加按鈕組件到窗口add(btnrenew);add(btnlast);add(btnnext);add(btnchoose);add(btnfirst);add(btnover);add(btnmuc);add(btnback);/設(shè)置按鈕組件的大小及添加監(jiān)聽(tīng)btnrenew.setBounds(625,100,80,30);btnrenew.addActionListener(this);btnback.setBounds(625,150,80,30);btnback.addActionListener(this);btnfirst.setBounds(625

25、,200,80,30);btnfirst.addActionListener(this);btnlast.setBounds(625,250,80,30);btnlast.addActionListener(this);btnnext.setBounds(625,300,80,30);btnnext.addActionListener(this);btnover.setBounds(625,350,80,30);btnover.addActionListener(this);btnchoose.setBounds(625,400,80,30);btnchoose.addActionListen

26、er(this);btnmuc.setBounds(625,450,80,30);btnmuc.addActionListener(this);jc.setBounds(625,530,80,20);/添加背景音樂(lè)名到窗口jc.addItem("默認(rèn)");jc.addItem("琴蕭合奏");jc.addItem("泡泡堂");jc.addItem("灌籃高手");jc.addItem("eyes on me");jc.addItemListener(this);cont.add(jc);sou

27、nd=new Sound();sound.loadSound();panel=new mainpanel();add(panel);panel.Tuixiangzi(panel.level);panel.requestFocus();validate();/對(duì)主界面上的一些按鈕的功能的監(jiān)聽(tīng)及實(shí)現(xiàn)public void actionPerformed(ActionEvent e)if(e.getSource()=btnrenew|e.getSource()=renew)panel.Tuixiangzi(panel.level);panel.requestFocus();panel.remove(

28、);else if(e.getSource()=btnlast|e.getSource()=last)panel.level-;if(panel.level<1)panel.level+;JOptionPane.showMessageDialog(this,"本關(guān)是第一關(guān)");panel.requestFocus();else panel.Tuixiangzi(panel.level);panel.requestFocus();panel.remove();else if(e.getSource()=btnnext|e.getSource()=next)panel.l

29、evel+;if(panel.level>panel.maxlevel()panel.level-;JOptionPane.showMessageDialog(this,"本關(guān)已是最后一關(guān)");panel.requestFocus();else panel.Tuixiangzi(panel.level);panel.requestFocus();panel.remove();else if(e.getSource()=exit)System.exit(0);else if(e.getSource()=about)JOptionPane.showMessageDialo

30、g(this, "JAVA推箱子");else if(e.getSource()=btnchoose|e.getSource()=choose)String lel=JOptionPane.showInputDialog(this,"請(qǐng)輸入您要轉(zhuǎn)到的關(guān)卡號(hào):(150)");panel.level=Integer.parseInt(lel);panel.remove();if(panel.level>panel.maxlevel()|panel.level<1)JOptionPane.showMessageDialog(this, "

31、沒(méi)有這一關(guān)!");panel.requestFocus();elsepanel.Tuixiangzi(panel.level);panel.requestFocus();else if(e.getSource()=btnfirst)panel.level=1;panel.Tuixiangzi(panel.level);panel.requestFocus();panel.remove();else if(e.getSource()=btnover)panel.level=panel.maxlevel();panel.Tuixiangzi(panel.level);panel.requ

32、estFocus();panel.remove();else if(e.getSource()=btnmuc)if(sound.isplay()sound.mystop();btnmuc.setLabel("音樂(lè)開(kāi)");else sound.loadSound();btnmuc.setLabel("音樂(lè)關(guān)");panel.requestFocus();else if(e.getSource()=btnback|e.getSource()=back)if(panel.isMystackEmpty()JOptionPane.showMessageDialog

33、(this, "您還未移動(dòng)!");elseswitch(panel.back()case 10:panel.backup(10);break;case 11:panel.backup(11);break;case 20:panel.backdown(20);break;case 21:panel.backdown(21);break;case 30:panel.backleft(30);break;case 31:panel.backleft(31);break;case 40:panel.backright(40);break;case 41:panel.backrigh

34、t(41);break;panel.requestFocus();else if(e.getSource()=nor)jc.setSelectedIndex(0);else if(e.getSource()=qin)jc.setSelectedIndex(1);else if(e.getSource()=guang)jc.setSelectedIndex(3);else if(e.getSource()=eye)jc.setSelectedIndex(4);else if(e.getSource()=po)jc.setSelectedIndex(2);/對(duì)音樂(lè)選項(xiàng)的操作實(shí)現(xiàn)public voi

35、d itemStateChanged(ItemEvent ie)int no=jc.getSelectedIndex();switch(no)case 0:sound.setMusic("nor.mid"); if(sound.isplay() sound.mystop(); sound.loadSound(); btnmuc.setLabel("音樂(lè)關(guān)"); nor.setEnabled(false); qin.setEnabled(true); guang.setEnabled(true); eye.setEnabled(true); po.setE

36、nabled(true); panel.requestFocus(); break; case 1:sound.setMusic("qin.mid"); if(sound.isplay() sound.mystop(); sound.loadSound(); btnmuc.setLabel("音樂(lè)關(guān)"); nor.setEnabled(true); qin.setEnabled(false); guang.setEnabled(true); eye.setEnabled(true); po.setEnabled(true); panel.requestF

37、ocus(); break; case 2:sound.setMusic("popo.mid");if(sound.isplay()sound.mystop();sound.loadSound();btnmuc.setLabel("音樂(lè)關(guān)");nor.setEnabled(true);qin.setEnabled(true);guang.setEnabled(true);eye.setEnabled(true);po.setEnabled(false);panel.requestFocus();break;case 3:sound.setMusic(&q

38、uot;guang.mid");if(sound.isplay()sound.mystop();sound.loadSound();btnmuc.setLabel("音樂(lè)關(guān)");nor.setEnabled(true);qin.setEnabled(true);guang.setEnabled(false);eye.setEnabled(true);po.setEnabled(true);panel.requestFocus();break;case 4:sound.setMusic("eyes on me.mid");if(sound.isp

39、lay()sound.mystop();sound.loadSound();btnmuc.setLabel("音樂(lè)關(guān)");nor.setEnabled(true);qin.setEnabled(true);guang.setEnabled(true);eye.setEnabled(false);po.setEnabled(true);panel.requestFocus();break;/游戲操作功能的實(shí)現(xiàn)class mainpanel extends JPanel implements KeyListenerint max=50;int map,maptmp;int ma

40、nX,manY,boxnum;Image myImage;Readmap Levelmap;Readmap Levelmaptmp;int len=30;public int level=1;Stack mystack=new Stack();mainpanel()/設(shè)置大小setBounds(15,50,600,600);/設(shè)置顏色setBackground(Color.white);addKeyListener(this);myImage=new Image10;for(int i=0; i<10; i+) myImagei = Toolkit.getDefaultToolkit()

41、.getImage("pic"+i+".gif");setVisible(true);/開(kāi)始繪制地圖void Tuixiangzi(int i)Levelmap=new Readmap(i);Levelmaptmp=new Readmap(i);map=Levelmap.getmap();manX=Levelmap.getmanX();manY=Levelmap.getmanY();maptmp=Levelmaptmp.getmap();repaint();int maxlevel()return max;public void paint(Graphi

42、cs g)for(int i=0; i<20; i+)for(int j=0; j<20; j+) g.drawImage(myImagemapji,i*len,j*len,this);/設(shè)置顏色g.setColor(new Color(0,0,0);/設(shè)置字體g.setFont(new Font("楷體_2312",Font.BOLD,30);/設(shè)置關(guān)數(shù)g.drawString("現(xiàn)在是第",150,40);g.drawString(String.valueOf(level),310,40);g.drawString("關(guān)&quo

43、t;,360,40);/實(shí)現(xiàn)鍵盤(pán)控制移動(dòng)的方法public void keyPressed(KeyEvent e)if(e.getKeyCode()=KeyEvent.VK_UP)/上移鍵實(shí)現(xiàn)上移方法moveup();if(e.getKeyCode()=KeyEvent.VK_DOWN)/下移鍵實(shí)現(xiàn)下移方法movedown();if(e.getKeyCode()=KeyEvent.VK_LEFT)/左移鍵實(shí)現(xiàn)左移方法moveleft();if(e.getKeyCode()=KeyEvent.VK_RIGHT)/右移鍵實(shí)現(xiàn)右移方法moveright();if(iswin()if(level=ma

44、x)/通過(guò)最后一關(guān)時(shí)顯示"恭喜您通過(guò)最后一關(guān)!"JOptionPane.showMessageDialog(this, "恭喜您通過(guò)最后一關(guān)!");else/通過(guò)非最后一關(guān)時(shí)顯示"恭喜您通過(guò)第""關(guān)!n是否要進(jìn)入下一關(guān)?"String msg="恭喜您通過(guò)第"+level+"關(guān)!n是否要進(jìn)入下一關(guān)?"int type=JOptionPane.YES_NO_OPTION;String title="過(guò)關(guān)"int choice=0;choice=JOption

45、Pane.showConfirmDialog(null,msg,title,type);/如果選擇取消,則退出游戲if(choice=1)System.exit(0);else if(choice=0)level+;Tuixiangzi(level);mystack.removeAllElements();public void keyTyped(KeyEvent e)public void keyReleased(KeyEvent e)/無(wú)鍵盤(pán)操作時(shí)返回?zé)o操作boolean isMystackEmpty()return mystack.isEmpty();int back()return (

46、Integer)mystack.pop();void remove()mystack.removeAllElements();/實(shí)現(xiàn)上移操作void moveup()if(mapmanY-1manX=2|mapmanY-1manX=4)if(maptmpmanYmanX=4|maptmpmanYmanX=9)mapmanYmanX=4;elsemapmanYmanX=2;mapmanY-1manX=8;repaint();manY-;mystack.push(10);else if(mapmanY-1manX=3)if(mapmanY-2manX=4)if(maptmpmanYmanX=4|m

47、aptmpmanYmanX=9)mapmanYmanX=4;else mapmanYmanX=2;mapmanY-1manX=8;mapmanY-2manX=9;repaint();manY-;mystack.push(11);else if(mapmanY-2manX=2)if(maptmpmanYmanX=4|maptmpmanYmanX=9)mapmanYmanX=4;else mapmanYmanX=2;mapmanY-1manX=8;mapmanY-2manX=3;repaint();manY-;mystack.push(11);else mapmanYmanX=8;repaint();else if(mapmanY-1manX=9)if(mapmanY-2manX=4)if(maptmpmanYmanX=4|maptmpmanYmanX=9)mapmanYmanX=

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論