版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、推箱子趣味游戲1. 課程設(shè)計的目的隨著科學(xué)技術(shù)的發(fā)展,人們的生活水平越來越繁忙,在充滿競爭的社會條件下,壓力往往帶給人們很多煩惱,所以合理的解壓方式稱為現(xiàn)代人的共同心愿. 為了給大家提供一個合理的解壓平臺, 我們在本次課程設(shè)計中為大家開發(fā)了一款適合休閑娛樂的小游戲, 本次課程設(shè)計是配合 JAVA 程序設(shè)計課程,深入學(xué)習(xí)掌握 JAVA 語言,熟練 運用 Java 工具對系統(tǒng)的編寫.通過課程設(shè)計各個項目的綜合訓(xùn)練,培養(yǎng)學(xué)生實 際分析問題,編程和動手能力,提高學(xué)生的綜合素質(zhì).2. 設(shè)計方案論證2.1概要設(shè)計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詳細設(shè)計2.2.1 程序流程圖推箱子游戲主要分為初始化模塊, 畫圖模塊, 移動箱子模塊, 移動小人模塊, 功能控制模塊.推箱子游戲功能模塊圖如圖 3.1 所示.圖 3.1 功能模塊圖2.2.2程序中自定義類說明(1)重來:重新開始當前關(guān); (2)悔一步:返回上一移動狀態(tài)(可以連續(xù)返回多步) ;(3)第一關(guān):游戲系統(tǒng)默認開始關(guān)為第一關(guān),此按鈕可以將關(guān)從其它關(guān)跳躍到第一關(guān). (4)上一關(guān):返回到當前關(guān)的上一關(guān); (5)下一關(guān):返回到當前關(guān)的下一關(guān); (6)最終關(guān):跳躍到最后一關(guān),
3、即第五十關(guān);(7)選關(guān):選擇想要玩的關(guān); (8)音樂關(guān)(開) :默認為開,點擊自動關(guān)閉音樂和開啟音樂. (9)更換音樂:從不同的音樂中選取適合玩家的音樂. 2.2.3程序中主要方法說明(1)界面框架與按鈕設(shè)計界面設(shè)計中包括了,所有你所直觀見到的圖形界面,窗體的大小,下拉菜單 中的功能菜單,使得玩家能夠很直觀的見到所有游戲中的功能.界面中有菜單, 包括:"選項""設(shè)置音樂""幫助", , .按鈕包括:"重來""悔一步""第一關(guān)", , ,"上一關(guān)""
4、;下一關(guān)""最終關(guān)""選關(guān)""音樂", , , , . 詳細代碼:(2)地圖的繪制形成地圖以二維數(shù)組的形式進行存儲的,不同的數(shù)字有著不同的含義.在地圖當中不同的數(shù)字代表不同的含義我當時是將 09 解讀成為不同的圖形與圖像."0"代表"地圖以內(nèi)的空位""1"代表"地圖中的邊緣""2"代表"地圖以內(nèi)的空位非點位;"3"代表"地圖中的箱子""4"代表"點
5、位""5"代表"小人面部朝下""6"代表"小人面部朝左""7"代表"小人面部朝右""8"代表"小人面部朝上""9"代表"箱子已經(jīng)到達點位。(3)推箱子游戲的游戲性其主要功能是給用戶一個友好的游戲界面,游戲中包括 50 關(guān)的地圖,推箱 子這個游戲的 50 個地圖是事先完成的,將所有地圖上面的信息以數(shù)字的形式儲 存在一個 20*20 的二維數(shù)組當中;然后,每一關(guān)都按照數(shù)組重新繪制地圖,這樣 就擁有了
6、50 張地圖(4)小人與箱子移動的算法 移動中包括正移動,與"悔一步"的負移動. 正移動:小人上下左右的移動是由本組咸英智組員所做,歸結(jié)起來上下左右是一個判斷的算法,判斷都是通過判斷小人前面是否是空位箱子或者是墻,如果 沒有,就移動;有的話,據(jù)判斷箱子是否可以移動,最后討論箱子推過的,小人 移動,以及被遮擋住點的圖形變化,重新繪制地圖,算法判斷完畢.傳出數(shù)據(jù)記 錄在,一個棧當中,以備"悔一步"使用. 負移動:通過記錄在棧中的數(shù)據(jù)判斷,前一步是的移動方向以及移動使用過 的算法,逆向?qū)⒋a重新運行,同時繪制地圖以達到前一步的狀態(tài).(5)移動的代碼 在本游戲系
7、統(tǒng)中,給人的視覺感受應(yīng)該是能感受都動作的變化,逼真的人物 動作會使系統(tǒng)更有效.通過控制人物,箱子,空地,障礙物在數(shù)組中的位置的改 變來控制移動動作.(6)棧的應(yīng)用 推箱子中的數(shù)據(jù)存儲是很重要的,不然無法進行"悔一步"的操作.本系統(tǒng) 采用棧的存儲方式來存儲并控制人物,箱子的移動和地圖的變換.悔一步操作讓 玩家有了反悔的一步,這節(jié)省玩家的時間,避免因錯位導(dǎo)致重新開始3. 設(shè)計結(jié)果與分析3.1 程序運行結(jié)果程序的運行結(jié)果如下圖所示:圖二 推箱子游戲第一關(guān)界面圖三 推箱子游戲第一關(guān)界面3.2 尚需解決的問題游戲的背景音樂比較單一,可以通過在“選項”模式中添加“背景音樂導(dǎo)入”模塊,導(dǎo)
8、入玩家自己喜歡的音樂3.3 程序部分代碼(1)界面框架與按鈕設(shè)計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(" 默認");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(" 選項");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("默認");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è)計體會通過這次課程設(shè)計我充分了解了理論與課程設(shè)計相結(jié)合的重要性, 理論基礎(chǔ)上必須有實際上的應(yīng)用,在實際的應(yīng)用中才能發(fā)現(xiàn)個種問題,再靈活的應(yīng)用理論知識去解決它們.在這一周的學(xué)習(xí)過程中,我不僅能夠把以前所學(xué)知識聯(lián)系起來,并且還學(xué)會了一些新的知識. 在此期間通過對 JAVA 設(shè)計的系統(tǒng)訓(xùn)練,使我基本上達到了這周的課程設(shè)計 目的,并且懂得了要想學(xué)好課,除了要有扎實的基礎(chǔ)知識
20、的功底深厚外,還需要 有一定的實踐動手能力,操作能力.我們要學(xué)習(xí)別人的長處,改掉自己的缺點, 要懂得用網(wǎng)絡(luò),現(xiàn)在的網(wǎng)絡(luò)包括的知識很多,就是看你能不能把握住,有沒有那個心.在網(wǎng)絡(luò)上要善于討論,在論壇里向那些高人學(xué)習(xí),學(xué)習(xí)他們學(xué)習(xí)的方法和思想. 雖然課程設(shè)計已經(jīng)完事,可是我們覺得應(yīng)該繼續(xù)努力,自己做點東西,增加自己的學(xué)習(xí)經(jīng)歷和學(xué)習(xí)經(jīng)驗,不斷的深入,了解它的內(nèi)部,借助它創(chuàng)造財富.課程設(shè)計之所以進行的如此順利,得力于老師的信任和支持,得力于同學(xué)們的真誠配合和勤勉不斷的努力!為此,我們深深地感恩!感謝老師諄諄教導(dǎo),感恩同學(xué)們間的互幫互助.5. 參考文獻1 馬朝暉(譯).JAVA教程(第4版).北京:人民
21、郵電出版社,20072 王國輝等.JAVA程序設(shè)計自學(xué)手冊.北京:人民郵電出版社,20083 耿祥義.JAVA2 實用教程.北京:清華大學(xué)出版社,20064 朱仲杰.JAVA2 全方位學(xué)習(xí).北京:機械工業(yè)出版社,2006 5 張思民.JAVA程序設(shè)計實踐教程.北京:清華大學(xué)出版社,20066 湯一平.Java 語言程序設(shè)計.北京:科學(xué)出版社,20067 劉藝.Java 程序設(shè)計大學(xué)教程. 北京:機械工業(yè)出版社,20068 耿祥義.Java課程設(shè)計.北京:清華大學(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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025至2030年中國卡套內(nèi)絲彎頭數(shù)據(jù)監(jiān)測研究報告
- 2025至2030年中國鑿銼兩用工具數(shù)據(jù)監(jiān)測研究報告
- 2025年中國無紡織物市場調(diào)查研究報告
- 2025年中國彎肶機市場調(diào)查研究報告
- 2025至2031年中國郵件過濾器行業(yè)投資前景及策略咨詢研究報告
- 2025至2031年中國石棉膠乳抄取板行業(yè)投資前景及策略咨詢研究報告
- 2025至2031年中國玻璃鋼衛(wèi)生筒行業(yè)投資前景及策略咨詢研究報告
- 2024年無人駕駛汽車技術(shù)應(yīng)用合作合同
- 城管協(xié)管員聘用合同
- 高速公路建設(shè)投資合同
- 民航概論5套模擬試卷考試題帶答案
- 2024屆中國電建地產(chǎn)校園招聘網(wǎng)申平臺高頻500題難、易錯點模擬試題附帶答案詳解
- 名表買賣合同協(xié)議書
- COCA20000詞匯音標版表格
- 滬教版七年級數(shù)學(xué)上冊專題06圖形的運動(原卷版+解析)
- JTG-T-F20-2015公路路面基層施工技術(shù)細則
- 光伏發(fā)電站集中監(jiān)控系統(tǒng)通信及數(shù)據(jù)標準
- 建筑垃圾減排及資源化處置措施
- 2024年遼寧石化職業(yè)技術(shù)學(xué)院單招職業(yè)適應(yīng)性測試題庫附答案
- 中西方校服文化差異研究
- 2024年一級建造師考試思維導(dǎo)圖-市政
評論
0/150
提交評論