推箱子java課程設計_第1頁
推箱子java課程設計_第2頁
推箱子java課程設計_第3頁
推箱子java課程設計_第4頁
推箱子java課程設計_第5頁
已閱讀5頁,還剩15頁未讀, 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、推箱子趣味游戲1. 課程設計的目的 隨著科技水平的發展,人們的生活,工作節奏越來越快,同時人們的各方面的壓力也越來越大。在社會的條件下,壓力給人們帶來很多煩惱,所以合理的解壓,但又不會浪費很多時間的方式成為現代人的共同心愿。游戲隨之產生,他的娛樂性和有趣性也越來越被大家所認可,小游戲可以安裝在手機里,讓人們無論何時何地都能玩到游戲。基于這樣的目的, 我們在本次課程設計中為大家開發了一款適合休閑娛樂的小游戲推箱子趣味游戲。他不僅可以幫助人們消磨時間,還可以在一定程度上開發智力, 此游戲的挑戰性更加激發大家玩此游戲的熱情。此課設計是配合 JAVA 程序設計課程,深入學習掌握 JAVA 語言,熟練運

2、用 Java 工具對系統的編寫。通過課程設計各個項目的綜合訓練,培養學生實際分析問題,編程和動手能力,提高學生的綜合素質。2. 系統總體設計 在此游戲中本著娛樂為目的,游戲者不僅可以在玩游戲還可以享受音樂,游戲界面簡單,操作容易,在玩游戲的同時還可以鍛煉大家的反應速度及靈敏程度,在游戲中設置關數,級別由低到高,一關比一關難,提高大家的興趣,玩家可以自由的選關,并設置了分數的存儲系統。系統中又增加了音樂的設置可以讓玩家享受音樂。通過對小人移動箱子是否到達墻邊進行判斷決定勝負及是否可以進入下一關。2.1系統功能模塊劃分 在該系統中總共劃分了五個模塊 (1)初始化模塊,對游戲界面進行初始化操作,對各

3、個按鈕的功能進行操作使之當動作發生時有一定的反應及相應。 (2)畫圖模塊,主要是對地圖的繪制進行畫圖的操作,在此游戲中不同的數字代表不同的含義。 (3)移動箱子模塊,在推箱子游戲中最主要的模塊,用戶可以移動箱子到界面中的各個地方,以完成游戲設定的任務。 (4)移動小人模塊,同過對小人的操作使之小人能夠操作木塊到各個位置。 (5)功能控制模塊,通過對此功能的設置,可以對游戲的功能進行設置,可以設置背景音樂,及通過的關數進行一些必要的設定。2.2系統功能結構圖 推箱子游戲主要分為初始化模塊, 畫圖模塊, 移動箱子模塊, 移動小人模塊, 功能控制模塊.推箱子游戲功能模塊圖如圖1 所示。系統功能模塊畫

4、圖模塊移動箱子模塊移動小人模塊功能控制模塊初始化模塊圖1. 功能模塊圖2.3系統流程圖 推箱子游戲由功能和規則的確定。系統流程圖如下圖2所示。 第一關 開始游戲 是否成 功? 否 是 顯示通關信息 是否繼續闖關? 選下一關 是 否 結束游戲 圖2. 系統執行流程圖3. 詳細設計3.1程序中自定義類說明 (1)重來:重新開始當前關; (2)悔一步:返回上一移動狀態(可以連續返回多步) ; (3)第一關:游戲系統默認開始關為第一關,此按鈕可以將關從其它關跳躍到第一關; (4)上一關:返回到當前關的上一關; (5)下一關:返回到當前關的下一關; (6)最終關:跳躍到最后一關,即第五十關; (7)選關

5、:選擇想要玩的關; (8)音樂關(開) :默認為開,點擊自動關閉音樂和開啟音樂; (9)更換音樂:從不同的音樂中選取適合玩家的音樂。 3.2程序中主要方法說明 (1)界面框架與按鈕設計界面設計中包括了,所有你所直觀見到的圖形界面,窗體的大小,下拉菜單中的功能菜單。使得玩家能夠很直觀的見到所有游戲中的功能,界面中有菜單, 包括:“選項”“設置音樂”“幫助”,按鈕包括:“重來”“悔一步”“第一關”“上一關”“下一關”“最終關”“選關”“音樂”。 部分代碼如下:Menu setmuc=new Menu("設置音樂");setmuc.add(nor);setmuc.add(qin)

6、;setmuc.add(po); 音樂調用代碼如下:void mystop()midi.stop();midi.close();sign=false;boolean isplay()return sign; (2)地圖的繪制形成地圖以二維數組的形式進行存儲的,不同的數字有著不同的含義。在地圖當中不同的數字代表不同的含義我當時是將 09 解讀成為不同的圖形與圖像。"0"代表"地圖以內的空位";"1"代表"地圖中的邊緣";"2"代表"地圖以內的空位非點位;"3"代表&q

7、uot;地圖中的箱子";"4"代表"點位";"5"代表"小人面部朝下";"6"代表"小人面部朝左";"7"代表"小人面部朝右";"8"代表"小人面部朝上";"9"代表"箱子已經到達點位。 (3)推箱子游戲的游戲性其主要功能是給用戶一個友好的游戲界面,游戲中包括 50 關的地圖,推箱 子這個游戲的50 個地圖是事先完成的,將所有地圖上面的信息以數字的形式儲 存

8、在一個 20*20 的二維數組當中;然后,每一關都按照數組重新繪制地圖,這樣就擁有了50 張地圖。 (4)游戲規則的設置在游戲中要保證箱子不能重疊,箱子不能碰到墻壁,在設置過程中一定要將移動一次箱子的位置后位置的布爾值要設置為 true,不然移動一次箱子后不能再移動。 (5)小人與箱子移動的算法 移動中包括正移動,與"悔一步"的負移動。正移動:小人上下左右的移動是,歸結起來上下左右是一個判斷的算法,判斷都是通過判斷小人前面是否是空位箱子或者是墻,如果沒有,就移動;有的話,據判斷箱子是否可以移動,最后討論箱子推過的,小人移動,以及被遮擋住點的圖形變化,重新繪制地圖,算法判斷完

9、畢.傳出數據記錄在一個棧當中,以備“悔一步”使用。負移動:通過記錄在棧中的數據判斷,前一步是的移動方向以及移動使用過的算法,逆向將代碼重新運行,同時繪制地圖以達到前一步的狀態。 (6)移動的代碼 在本游戲系統中,給人的視覺感受應該是能感受都動作的變化,逼真的人物 動作會使系統更有效。通過控制人物,箱子,空地,障礙物在數組中的位置的改變來控制移動動作。 (7)的應用 推箱子中的數據存儲是很重要的,不然無法進行“悔一步”的操作本系統。采用棧的存儲方式來存儲并控制人物,箱子的移動和地圖的變換,悔一步操作讓 玩家有了反悔的一步,這節省玩家的時間,避免因錯位導致重新開始。4. 設計結果與分析4.1 程序

10、運行結果 程序編譯無錯誤,單擊運行按鈕,運行通過,開始時彈出該游戲的頁面,然后開始游戲。一般的會顯示出第一關的游戲,玩家可以根據自己的實際水平去操作,而后選擇適于自己水平的關卡來玩。一開始運行程序,顯示該頁面時,會在頁面的正中央顯示出該關為第一關,以提醒玩家。第一關如下圖3所示。圖3. 推箱子游戲第一關界面 當玩家想選關時,可以根據自己的意愿去選關闖。選第50關,如下圖4所示。圖4. 推箱子游戲第50關頁面4.2 尚需解決的問題游戲的背景音樂比較單一,可以通過在“選項”模式中添加“背景音樂導入”模塊,導入玩家自己喜歡的音樂。在此次課程設計中,我遇到了一些問題,如:對于面向對象的方法了解不夠透徹

11、,運用到實際的軟件開發中存在著困難;對于Java語言,只學習到了一些最基本的知識,這導致編寫程序時經常出現一些語法錯誤,而且要在短時間內用Java語言來設計一個具體的系統是一個較大的挑戰;還有對于正規開發一個系統的流程不熟悉,適應起來比較慢,編寫各個模塊相對應的操作時,自己感覺難以動手,這表明所學的知識不能靈活運用到實際中。 對于以上的問題,自己有清楚的認識,解決辦法是需要大量閱讀相關的書籍,對于書上以及網站上下載的資料中的Java實例必須有清楚的理解,還有就是多跟精通此方面的老師和同學交流,取其精華。對于實際動手能力與系統開發的流程的適應,必須多進行實際的練習與操作,才能有大的進步。5. 設

12、計體會通過這次課程設計我充分了解了理論與課程設計相結合的重要性,理論基礎上必須有實際上的應用,在實際的應用中才能發現個種問題,再靈活的應用理論知識去解決它們。在這一周的學習過程中,我不僅能夠把以前所學知識聯系起來,并且還學會了一些新的知識,在此期間通過對 JAVA 設計的系統訓練,使我基本上達到了這周的課程設計目的,并且懂得了要想學好課,除了要有扎實的基礎知識的功底深厚外,還需要有一定的實踐動手能力,操作能力.我們要學習別人的長處,改掉自己的缺點, 要懂得用網絡,現在的網絡包括的知識很多,就是看你能不能把握住,有沒有那個心在網絡上要善于討論,在論壇里向那些高人學習,學習他們學習的方法和思想.。

13、雖然課程設計已經完事,可是我們覺得應該繼續努力,自己做點東西,增加自己的學習經歷和學習經驗,不斷的深入,了解它的內部,借助它創造財富。課程設計之所以進行的如此順利,得力于老師的信任和支持,得力于同學們的真誠配合和勤勉不斷的努力!為此,我們深深地感恩!感謝老師諄諄教導,感恩同學們間的互幫互助。6. 參考文獻1 文杰書院.JAVA程序設計完全自學手冊M.北京:機械工業出版社,20102 張永常.JAVA2 程序設計實用教程M.北京:電子工業出版社,20103 朱仲杰.JAVA2 全方位學習M.北京:機械工業出版社,2008 4 張永常等.JAVA程序設計實踐教程M.北京:清華大學出版社,20105

14、 梁勇.Java 語言程序設計M.北京:機械工業出版社,20116 鄭莉.Java 程序設計M. 北京:清華大學出版社,20117 張廣彬.Java課程設計M.北京:清華大學出版社,20118 狄祥義. Java面向對象程序設計M. 北京:清華大學出版社,2010附錄程序具體代碼:(1)主界面設置代碼如下:class mainFrame extends JFrame implements ActionListener,ItemListenerprivate static final long serialVersionUID = 1L;JLabel lb;JLabel lb2;JButton

15、btnrenew,btnlast,btnnext,btnchoose,btnfirst,btnover,btnmuc,btnback;mainpanel panel;Sound sound;JComboBox jc=new JComboBox();MenuItem renew=new MenuItem("重新開始");MenuItem back=new MenuItem("悔一步");MenuItem last=new MenuItem("上一關");MenuItem next=new MenuItem("下一關"

16、);MenuItem choose=new MenuItem("選關");MenuItem exit=new MenuItem("退出");MenuItem qin=new MenuItem("琴蕭合奏");MenuItem po=new MenuItem("泡泡堂");MenuItem guang=new MenuItem("灌籃高手");MenuItem nor=new MenuItem("默認");MenuItem eye=new MenuItem(" eye

17、s on me");MenuItem about=new MenuItem("關于推箱子.");mainFrame()super("推箱子v2.0");setSize(720,700);setVisible(true);setResizable(false);setLocation(150,10);setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);Container cont=getContentPane();cont.setLayout(null);cont.setBackground(Color.

18、black);Menu choice=new Menu("選項");choice.add(renew);choice.add(last);choice.add(next);choice.add(choose);choice.add(back);choice.addSeparator();choice.add(exit);renew.addActionListener(this);last.addActionListener(this);next.addActionListener(this);choose.addActionListener(this);exit.addAc

19、tionListener(this);back.addActionListener(this);Menu setmuc=new Menu("設置音樂");setmuc.add(nor);setmuc.add(qin);setmuc.add(po);setmuc.add(guang);setmuc.add(eye);nor.addActionListener(this);qin.addActionListener(this);po.addActionListener(this);guang.addActionListener(this);eye.addActionListen

20、er(this);Menu help=new Menu("幫助");help.add(about);about.addActionListener(this);MenuBar bar=new MenuBar();bar.add(choice);bar.add(setmuc);bar.add(help);setMenuBar(bar); nor.setEnabled(false);lb=new JLabel("推箱子",SwingConstants.CENTER);lb2=new JLabel("更換音樂",SwingConstants

21、.CENTER);add(lb);add(lb2);lb.setBounds(100,20,400,20);lb.setForeground(Color.white);lb2.setBounds(625,500,55,20);lb2.setForeground(Color.white);btnrenew=new JButton("重來");btnback=new JButton("悔一步");btnlast=new JButton("上一關");btnnext=new JButton("下一關");btnchoos

22、e=new JButton("選關");btnfirst=new JButton("第關");btnover=new JButton("最終關");btnmuc=new JButton("音樂關");add(btnrenew);add(btnlast);add(btnnext);add(btnchoose);add(btnfirst);add(btnover);add(btnmuc);add(btnback);btnrenew.setBounds(625,100,80,30);btnrenew.addActionL

23、istener(this);btnback.setBounds(625,150,80,30);btnback.addActionListener(this);btnfirst.setBounds(625,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,35

24、0,80,30);btnover.addActionListener(this);btnchoose.setBounds(625,400,80,30);btnchoose.addActionListener(this);btnmuc.setBounds(625,450,80,30);btnmuc.addActionListener(this);jc.setBounds(625,530,80,20);jc.addItem("默認");jc.addItem("琴蕭合奏");jc.addItem("泡泡堂");-*jc.addItem(&q

25、uot;灌籃高手");jc.addItem("eyes on me");jc.addItemListener(this);cont.add(jc);sound=new Sound();sound.loadSound();panel=new mainpanel();add(panel);panel.Tuixiangzi(panel.level);panel.requestFocus();validate();(2)音樂調用代碼如下:class SoundString path=new String("musics");String file=ne

26、w 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.setLoopCount(Sequencer.LOOP_CONTINUOUSLY);catch (Exception ex) ex.printStackTra

27、ce();sign=true;void mystop()midi.stop();midi.close();sign=false;boolean isplay()return sign;void setMusic(String e)file=e;(3)規則代碼如下:public void createWall() for (int i = 5; i < 12; i+) Node walls = new Node(i, 5); wallList.add(walls); for (int i = 11; i < 14; i+) Node walls = new Node(i, 6); w

28、allList.add(walls); wallList.add(new Node(13, 7); wallList.add(new Node(13, 8); wallList.add(new Node(13, 9); wallList.add(new Node(12, 9); wallList.add(new Node(12, 10); for (int i = 12; i > 4; i-) Node walls = new Node(i, 11); wallList.add(walls); wallList.add(new Node(5, 10); wallList.add(new

29、Node(4, 10); wallList.add(new Node(4, 9); wallList.add(new Node(4, 8); wallList.add(new Node(4, 8); wallList.add(new Node(4, 7); wallList.add(new Node(5, 7); wallList.add(new Node(5, 6); wallList.add(new Node(7, 7); wallList.add(new Node(8, 7); wallList.add(new Node(9, 7); wallList.add(new Node(8, 9

30、); wallList.add(new Node(8, 10); / 將墻壁的對象置為true for (int i = 0; i < wallList.size(); i+) Node n = (Node) wallList.get(i); an.xn.y = true; public void moveDisable(Node n, int d1, int d2) switch (direction) case 4: n.x -= d1; break; case 1: n.y -= d2; break; case 2: n.x -= d1; break; case 3: n.y -=

31、 d2; break; / public void moveDisable(Node n1, Node n2, int d1, int d2) switch (direction) case 4: n1.x -= d1; n2.x -= d1; break; case 1: n1.y -= d2; n2.y -= d2; break; case 2: n1.x -= d1; n2.x -= d1; break; case 3: n1.y -= d2; n2.y -= d2; break; (4)物移動代碼:void moveup()if(mapmanY-1manX=2|mapmanY-1man

32、X=4)if(maptmpmanYmanX=4|maptmpmanYmanX=9)mapmanYmanX=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)

33、;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=4;else mapmanYmanX=

34、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();if(mapmanY-1manX=1)mapmanYmanX=8;repaint();el

35、se if(e.getSource()=btnback|e.getSource()=back)if(panel.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 40:panel.backright(40);break;case 41:panel.backright(41);break;panel.requestFocus();else if(e.getSour

溫馨提示

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

評論

0/150

提交評論