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

下載本文檔

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

文檔簡介

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

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

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

4、圖模塊移動箱子模塊移動小人模塊功能控制模塊初始化模塊圖1. 功能模塊圖2.3系統(tǒng)流程圖 推箱子游戲由功能和規(guī)則的確定。系統(tǒng)流程圖如下圖2所示。 第一關(guān) 開始游戲 是否成 功? 否 是 顯示通關(guān)信息 是否繼續(xù)闖關(guān)? 選下一關(guān) 是 否 結(jié)束游戲 圖2. 系統(tǒng)執(zhí)行流程圖3. 詳細(xì)設(shè)計3.1程序中自定義類說明 (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),即第五十關(guān); (7)選關(guān)

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

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

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

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

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

10、運(yùn)行結(jié)果 程序編譯無錯誤,單擊運(yùn)行按鈕,運(yùn)行通過,開始時彈出該游戲的頁面,然后開始游戲。一般的會顯示出第一關(guān)的游戲,玩家可以根據(jù)自己的實際水平去操作,而后選擇適于自己水平的關(guān)卡來玩。一開始運(yùn)行程序,顯示該頁面時,會在頁面的正中央顯示出該關(guān)為第一關(guān),以提醒玩家。第一關(guān)如下圖3所示。圖3. 推箱子游戲第一關(guān)界面 當(dāng)玩家想選關(guān)時,可以根據(jù)自己的意愿去選關(guān)闖。選第50關(guān),如下圖4所示。圖4. 推箱子游戲第50關(guān)頁面4.2 尚需解決的問題游戲的背景音樂比較單一,可以通過在“選項”模式中添加“背景音樂導(dǎo)入”模塊,導(dǎo)入玩家自己喜歡的音樂。在此次課程設(shè)計中,我遇到了一些問題,如:對于面向?qū)ο蟮姆椒私獠粔蛲笍?/p>

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

12、計體會通過這次課程設(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)練,使我基本上達(dá)到了這周的課程設(shè)計目的,并且懂得了要想學(xué)好課,除了要有扎實的基礎(chǔ)知識的功底深厚外,還需要有一定的實踐動手能力,操作能力.我們要學(xué)習(xí)別人的長處,改掉自己的缺點(diǎn), 要懂得用網(wǎng)絡(luò),現(xiàn)在的網(wǎng)絡(luò)包括的知識很多,就是看你能不能把握住,有沒有那個心在網(wǎng)絡(luò)上要善于討論,在論壇里向那些高人學(xué)習(xí),學(xué)習(xí)他們學(xué)習(xí)的方法和思想.。

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

14、 梁勇.Java 語言程序設(shè)計M.北京:機(jī)械工業(yè)出版社,20116 鄭莉.Java 程序設(shè)計M. 北京:清華大學(xué)出版社,20117 張廣彬.Java課程設(shè)計M.北京:清華大學(xué)出版社,20118 狄祥義. Java面向?qū)ο蟪绦蛟O(shè)計M. 北京:清華大學(xué)出版社,2010附錄程序具體代碼:(1)主界面設(shè)置代碼如下: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("上一關(guān)");MenuItem next=new MenuItem("下一關(guān)"

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

17、s on me");MenuItem about=new MenuItem("關(guān)于推箱子.");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("設(shè)置音樂");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("上一關(guān)");btnnext=new JButton("下一關(guān)");btnchoos

22、e=new JButton("選關(guān)");btnfirst=new JButton("第關(guān)");btnover=new JButton("最終關(guān)");btnmuc=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.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("默認(rèn)");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)音樂調(diào)用代碼如下: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)規(guī)則代碼如下: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. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(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)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論