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

下載本文檔

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

文檔簡介

1、推箱子趣味游戲1. 課程設(shè)計(jì)的目的隨著科學(xué)技術(shù)的發(fā)展,人們的生活水平越來越繁忙,在充滿競爭的社會條件下,壓力往往帶給人們很多煩惱,所以合理的解壓方式稱為現(xiàn)代人的共同心愿. 為了給大家提供一個(gè)合理的解壓平臺, 我們在本次課程設(shè)計(jì)中為大家開發(fā)了一款適合休閑娛樂的小游戲, 本次課程設(shè)計(jì)是配合 JAVA 程序設(shè)計(jì)課程,深入學(xué)習(xí)掌握 JAVA 語言,熟練 運(yùn)用 Java 工具對系統(tǒng)的編寫.通過課程設(shè)計(jì)各個(gè)項(xiàng)目的綜合訓(xùn)練,培養(yǎng)學(xué)生實(shí) 際分析問題,編程和動手能力,提高學(xué)生的綜合素質(zhì).2. 設(shè)計(jì)方案論證2.1概要設(shè)計(jì)2.1.1 系統(tǒng)功能描述2.1.2 系統(tǒng)開發(fā)環(huán)境(1) 硬件環(huán)境CPU:PentiumIII

2、600 以上內(nèi)存要求:600MB 以上 內(nèi)存剩余資源:128MB 以上(2) 軟件環(huán)境JDK 1.6 及其以上版本2.2詳細(xì)設(shè)計(jì)2.2.1 程序流程圖推箱子游戲主要分為初始化模塊, 畫圖模塊, 移動箱子模塊, 移動小人模塊, 功能控制模塊.推箱子游戲功能模塊圖如圖 3.1 所示.圖 3.1 功能模塊圖2.2.2程序中自定義類說明(1)重來:重新開始當(dāng)前關(guān); (2)悔一步:返回上一移動狀態(tài)(可以連續(xù)返回多步) ;(3)第一關(guān):游戲系統(tǒng)默認(rèn)開始關(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),

3、即第五十關(guān);(7)選關(guān):選擇想要玩的關(guān); (8)音樂關(guān)(開) :默認(rèn)為開,點(diǎn)擊自動關(guān)閉音樂和開啟音樂. (9)更換音樂:從不同的音樂中選取適合玩家的音樂. 2.2.3程序中主要方法說明(1)界面框架與按鈕設(shè)計(jì)界面設(shè)計(jì)中包括了,所有你所直觀見到的圖形界面,窗體的大小,下拉菜單 中的功能菜單,使得玩家能夠很直觀的見到所有游戲中的功能.界面中有菜單, 包括:"選項(xiàng)""設(shè)置音樂""幫助", , .按鈕包括:"重來""悔一步""第一關(guān)", , ,"上一關(guān)""

4、;下一關(guān)""最終關(guān)""選關(guān)""音樂", , , , . 詳細(xì)代碼:(2)地圖的繪制形成地圖以二維數(shù)組的形式進(jìn)行存儲的,不同的數(shù)字有著不同的含義.在地圖當(dāng)中不同的數(shù)字代表不同的含義我當(dāng)時(shí)是將 09 解讀成為不同的圖形與圖像."0"代表"地圖以內(nèi)的空位""1"代表"地圖中的邊緣""2"代表"地圖以內(nèi)的空位非點(diǎn)位;"3"代表"地圖中的箱子""4"代表"點(diǎn)

5、位""5"代表"小人面部朝下""6"代表"小人面部朝左""7"代表"小人面部朝右""8"代表"小人面部朝上""9"代表"箱子已經(jīng)到達(dá)點(diǎn)位。(3)推箱子游戲的游戲性其主要功能是給用戶一個(gè)友好的游戲界面,游戲中包括 50 關(guān)的地圖,推箱 子這個(gè)游戲的 50 個(gè)地圖是事先完成的,將所有地圖上面的信息以數(shù)字的形式儲 存在一個(gè) 20*20 的二維數(shù)組當(dāng)中;然后,每一關(guān)都按照數(shù)組重新繪制地圖,這樣 就擁有了

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

7、統(tǒng)中,給人的視覺感受應(yīng)該是能感受都動作的變化,逼真的人物 動作會使系統(tǒng)更有效.通過控制人物,箱子,空地,障礙物在數(shù)組中的位置的改 變來控制移動動作.(6)棧的應(yīng)用 推箱子中的數(shù)據(jù)存儲是很重要的,不然無法進(jìn)行"悔一步"的操作.本系統(tǒng) 采用棧的存儲方式來存儲并控制人物,箱子的移動和地圖的變換.悔一步操作讓 玩家有了反悔的一步,這節(jié)省玩家的時(shí)間,避免因錯(cuò)位導(dǎo)致重新開始3. 設(shè)計(jì)結(jié)果與分析3.1 程序運(yùn)行結(jié)果程序的運(yùn)行結(jié)果如下圖所示:圖二 推箱子游戲第一關(guān)界面圖三 推箱子游戲第一關(guān)界面3.2 尚需解決的問題游戲的背景音樂比較單一,可以通過在“選項(xiàng)”模式中添加“背景音樂導(dǎo)入”模塊,導(dǎo)

8、入玩家自己喜歡的音樂3.3 程序部分代碼(1)界面框架與按鈕設(shè)計(jì)class mainFrame extends JFrame implements ActionListener,ItemListenerprivate static final long serialVersionUID = 1L;JLabel lb;JLabel lb2;JButton btnrenew,btnlast,btnnext,btnchoose,btnfirst,btnover,btnmuc,btnback;mainpanel panel;Sound sound;JComboBox jc=new JComboBox(

9、);MenuItem renew=new MenuItem(" 重新開始");MenuItem back=new MenuItem(" 悔一步");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(

10、" 琴蕭合奏");MenuItem po=new MenuItem(" 泡泡堂");MenuItem guang=new MenuItem(" 灌籃高手");MenuItem nor=new MenuItem(" 默認(rèn)");MenuItem eye=new MenuItem(" eyes on me");MenuItem about=new MenuItem(" 關(guān)于推箱子.");mainFrame()super("推箱子v2.0");setSize(72

11、0,700);setVisible(true);setResizable(false);setLocation(150,10);setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);Container cont=getContentPane();cont.setLayout(null);cont.setBackground(Color.black);Menu choice=new Menu(" 選項(xiàng)");choice.add(renew);choice.add(last);choice.add(next);choice.add(cho

12、ose);choice.add(back);choice.addSeparator();choice.add(exit);renew.addActionListener(this);last.addActionListener(this);next.addActionListener(this);choose.addActionListener(this);exit.addActionListener(this);back.addActionListener(this);Menu setmuc=new Menu(" 設(shè)置音樂");setmuc.add(nor);setmuc

13、.add(qin);setmuc.add(po);setmuc.add(guang);setmuc.add(eye);nor.addActionListener(this);qin.addActionListener(this);po.addActionListener(this);guang.addActionListener(this);eye.addActionListener(this);Menu help=new Menu(" 幫助");help.add(about);about.addActionListener(this);MenuBar bar=new Me

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

15、,20);lb2.setForeground(Color.white);btnrenew=new JButton("重來");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)");btnm

16、uc=new JButton("音樂關(guān)");add(btnrenew);add(btnlast);add(btnnext);add(btnchoose);add(btnfirst);add(btnover);add(btnmuc);add(btnback);btnrenew.setBounds(625,100,80,30);btnrenew.addActionListener(this);btnback.setBounds(625,150,80,30);btnback.addActionListener(this);btnfirst.setBounds(625,200,80

17、,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.addActionListener(this

18、);btnmuc.setBounds(625,450,80,30);btnmuc.addActionListener(this);jc.setBounds(625,530,80,20);jc.addItem("默認(rèn)");jc.addItem("琴蕭合奏");jc.addItem("泡泡堂");-*jc.addItem("灌籃高手");jc.addItem("eyes on me");jc.addItemListener(this);cont.add(jc);sound=new Sound();s

19、ound.loadSound();panel=new mainpanel();add(panel);panel.Tuixiangzi(panel.level);panel.requestFocus();validate();4. 設(shè)計(jì)體會通過這次課程設(shè)計(jì)我充分了解了理論與課程設(shè)計(jì)相結(jié)合的重要性, 理論基礎(chǔ)上必須有實(shí)際上的應(yīng)用,在實(shí)際的應(yīng)用中才能發(fā)現(xiàn)個(gè)種問題,再靈活的應(yīng)用理論知識去解決它們.在這一周的學(xué)習(xí)過程中,我不僅能夠把以前所學(xué)知識聯(lián)系起來,并且還學(xué)會了一些新的知識. 在此期間通過對 JAVA 設(shè)計(jì)的系統(tǒng)訓(xùn)練,使我基本上達(dá)到了這周的課程設(shè)計(jì) 目的,并且懂得了要想學(xué)好課,除了要有扎實(shí)的基礎(chǔ)知識

20、的功底深厚外,還需要 有一定的實(shí)踐動手能力,操作能力.我們要學(xué)習(xí)別人的長處,改掉自己的缺點(diǎn), 要懂得用網(wǎng)絡(luò),現(xiàn)在的網(wǎng)絡(luò)包括的知識很多,就是看你能不能把握住,有沒有那個(gè)心.在網(wǎng)絡(luò)上要善于討論,在論壇里向那些高人學(xué)習(xí),學(xué)習(xí)他們學(xué)習(xí)的方法和思想. 雖然課程設(shè)計(jì)已經(jīng)完事,可是我們覺得應(yīng)該繼續(xù)努力,自己做點(diǎn)東西,增加自己的學(xué)習(xí)經(jīng)歷和學(xué)習(xí)經(jīng)驗(yàn),不斷的深入,了解它的內(nèi)部,借助它創(chuàng)造財(cái)富.課程設(shè)計(jì)之所以進(jìn)行的如此順利,得力于老師的信任和支持,得力于同學(xué)們的真誠配合和勤勉不斷的努力!為此,我們深深地感恩!感謝老師諄諄教導(dǎo),感恩同學(xué)們間的互幫互助.5. 參考文獻(xiàn)1 馬朝暉(譯).JAVA教程(第4版).北京:人民

21、郵電出版社,20072 王國輝等.JAVA程序設(shè)計(jì)自學(xué)手冊.北京:人民郵電出版社,20083 耿祥義.JAVA2 實(shí)用教程.北京:清華大學(xué)出版社,20064 朱仲杰.JAVA2 全方位學(xué)習(xí).北京:機(jī)械工業(yè)出版社,2006 5 張思民.JAVA程序設(shè)計(jì)實(shí)踐教程.北京:清華大學(xué)出版社,20066 湯一平.Java 語言程序設(shè)計(jì).北京:科學(xué)出版社,20067 劉藝.Java 程序設(shè)計(jì)大學(xué)教程. 北京:機(jī)械工業(yè)出版社,20068 耿祥義.Java課程設(shè)計(jì).北京:清華大學(xué)出版社,20039 Sharon Zakhour. Java教程. 北京:人民郵電出版社,20076. 附錄程序具體代碼:(1)音樂調(diào)

22、用代碼如下:class SoundString path=new String("musics");String file=new String("nor.mid");Sequence seq;Sequencer midi;boolean sign;void loadSound()try seq=MidiSystem.getSequence(new File(path+file);midi=MidiSystem.getSequencer();midi.open();midi.setSequence(seq);midi.start();midi.setLo

23、opCount(Sequencer.LOOP_CONTINUOUSLY);catch (Exception ex) ex.printStackTrace();sign=true;void mystop()midi.stop();midi.close();sign=false;boolean isplay()return sign;void setMusic(String e)file=e;(2)物移動代碼:void moveup()if(mapmanY-1manX=2|mapmanY-1manX=4)if(maptmpmanYmanX=4|maptmpmanYmanX=9)mapmanYman

24、X=4;else mapmanYmanX=2;mapmanY-1manX=8;repaint();manY-;mystack.push(10);else if(mapmanY-1manX=3)if(mapmanY-2manX=4)if(maptmpmanYmanX=4|maptmpmanYmanX=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|maptmp

25、manYmanX=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=4;else mapmanYmanX=2;mapmanY-1manX=8;mapmanY-2manX=9;repaint();manY-;m

26、ystack.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();if(mapmanY-1manX=1)mapmanYmanX=8;repaint();else if(e.getSource()=btnback|e.getSource()=back)if(p

27、anel.isMystackEmpty()JOptionPane.showMessageDialog(this, "您還未移動!");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 4

28、0:panel.backright(40);break;case 41:panel.backright(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);boolean isMystac

溫馨提示

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

最新文檔

評論

0/150

提交評論