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

下載本文檔

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

文檔簡介

1、課程設(shè)計說明書 no.27推箱子小游戲1.課程設(shè)計的目的 隨著科技水平的發(fā)展,人們的生活,工作節(jié)奏越來越快,同時人們的各方面的壓力也越來越大。在社會的條件下,壓力給人們帶來很多煩惱,所以合理的解壓,但又不會浪費很多時間的方式成為現(xiàn)代人的共同心愿。游戲隨之產(chǎn)生,他的娛樂性和有趣性也越來越被大家所認可,小游戲可以安裝在手機里,讓人們無論何時何地都能玩到游戲?;谶@樣的目的, 我們在本次課程設(shè)計中為大家開發(fā)了一款適合休閑娛樂的小游戲推箱子趣味游戲。他不僅可以幫助人們消磨時間,還可以在一定程度上開發(fā)智力,通過課程設(shè)計,鞏固java基礎(chǔ)知識,增進編程基本功,熟練eclipse 和 editplus 的使

2、用方法,通過該系統(tǒng)的設(shè)計與開發(fā),將所學知識真正的應(yīng)用于實踐當中,培養(yǎng)實際動手能力。并在設(shè)計實踐過程中,學習到更深的知識,掌握先進的java技術(shù),從而來增強對一個系統(tǒng)設(shè)計的整體認識,熟悉軟件開發(fā)過程,更深刻的理解軟件工程的知識2.設(shè)計方案論證 2.1設(shè)計思路 經(jīng)典的推箱子是一個來自日本的古老游戲,目的是在訓練人的邏輯思考能力。在一個狹小的倉庫中,要求把木箱從開始位置推放到指定的位置。在倉庫有障礙物,稍不小心就會出現(xiàn)箱子無法移動或者通道被堵住的情況,而且箱子只能推,不能拉,所以需要巧妙的利用有限的空間和通道,合理安排移動的次序和位置,才能順利的完成任務(wù)。本游戲一共50關(guān),由易到難,每一關(guān)都有初化、

3、按鍵處理、重置及退出功能。 (1)初始化包括屏幕初始化和每一關(guān)卡的初始化,屏幕被初始化寬80像素,高25像素。 (2)按鍵處理包括移動小人和移動箱子,通過移動上下左右鍵來控制小人的移動,從而推動箱子,以把箱子推到指定的目的地為過關(guān)。(3)每一關(guān)都可以重置,按選項重新開始可以重置當前關(guān)。 (4)可以進行選關(guān)操作,按選項選關(guān)可以選擇1-10關(guān)的任一關(guān)。 (5)可以返回至上一位置,按選項返回可以退回到上一位置,相當于悔一步。(6)按選項退出鍵可以在任何時候退出游戲。2.2系統(tǒng)總體設(shè)計在此游戲中本著娛樂為目的,游戲者不僅可以在玩游戲還可以享受音樂,游戲界面簡單,操作容易,在玩游戲的同時還可以鍛煉大家的

4、反應(yīng)速度及靈敏程度,在游戲中設(shè)置關(guān)數(shù),級別由低到高,一關(guān)比一關(guān)難,提高大家的興趣,玩家可以自由的選關(guān),并設(shè)置了分數(shù)的存儲系統(tǒng)。系統(tǒng)中又增加了音樂的設(shè)置可以讓玩家享受音樂。通過對小人移動箱子是否到達墻邊進行判斷決定勝負及是否可以進入下一關(guān)。2.2.1系統(tǒng)模塊圖本程序包括5個模塊,分別是初始化模塊、畫圖模塊、移動箱子模塊、移動小 模塊和功能控制模塊,如圖1所示。各個模塊的功能描述如下: (1)初始化模塊。 該模塊包括屏幕初始化和游戲第一關(guān)的初始化。屏幕初始化用于輸出歡迎信息和操作提示,游戲每一關(guān)的初始化是構(gòu)建每一關(guān)的關(guān)卡。 (2)畫圖模塊。 該模塊主要是被其它模塊調(diào)用,用于畫墻、在空地畫箱子、在目

5、的地畫箱子、畫小人和畫目的地。 (3)移動箱子模塊。 該模塊用于移動箱子,包括目的地之間、空地之間和目的地與空地之間的箱子移動。 (4)移動小人模塊。 該模塊用于控制小人移動,從而推動箱子到目的地。(5)功能控制模塊。 該模塊是幾個功能函數(shù)的集合,包括屏幕輸出功能、指定位置狀態(tài)判斷功能和關(guān)卡重置功能。推箱子游戲 功能控制模塊 移動小人模塊 移動箱子模塊 畫圖模塊初始化模塊圖1 游戲運行界面2.22任務(wù)執(zhí)行流程圖 游戲從第一關(guān)開始,按上下左右方向鍵控制小人移動來推動箱子,可以在游戲中的任何時候按退出鍵退出。如果游戲無成功希望,可以按空格鍵回到當前任務(wù)的開始狀態(tài);如果成功完成當前關(guān),則顯示通關(guān)信息

6、,如果想繼續(xù)闖,按回車闖下一關(guān),否則結(jié)束游戲。游戲同時還具有時間和步數(shù)的記錄,在開始游戲之前首先把圖片添加到pic目錄下,程序會自動獲取該目錄下的所有文件。標有 數(shù)字 4 的位置表示 該位置是游戲主角的初始位置開始游戲第一關(guān)開始是否成功?否是顯示通關(guān)信息是否繼續(xù)闖選下一關(guān)是結(jié)束游戲否圖2 游戲運行流程圖3. 課程設(shè)計內(nèi)容3.1程序中自定義類說明 (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)最終

7、關(guān):跳躍到最后一關(guān),即第五十關(guān); (7)選關(guān):選擇想要玩的關(guān); (8)音樂關(guā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.ad

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

9、位非點位;"3"代表"地圖中的箱子";"4"代表"點位";"5"代表"小人面部朝下";"6"代表"小人面部朝左";"7"代表"小人面部朝右";"8"代表"小人面部朝上";"9"代表"箱子已經(jīng)到達點位。 (3)推箱子游戲的游戲性其主要功能是給用戶一個友好的游戲界面,游戲中包括 50 關(guān)的地圖,推箱 子這個游戲的50 個地圖是事先完

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

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

12、位導致重新開始。4. 設(shè)計結(jié)果與分析4.1 程序運行結(jié)果程序編譯無錯誤,單擊運行按鈕,運行通過,開始時彈出該游戲的頁面,然后開始游戲。一般的會顯示出第一關(guān)的游戲,玩家可以根據(jù)自己的實際水平去操作,而后選擇適于自己水平的關(guān)卡來玩。第一關(guān)如下圖3所示圖3 游戲第一關(guān)界面當玩家想選關(guān)時,可以根據(jù)自己的意愿去選關(guān)闖。選第50關(guān),如下圖4所示圖4 游戲成功界面。圖4 游戲第50關(guān)界面4.2尚需解決的問題游戲的背景音樂比較單一,可以通過在“選項”模式中添加“背景音樂導入”模塊,導入玩家自己喜歡的音樂。在此次課程設(shè)計中,我遇到了一些問題,如:對于面向?qū)ο蟮姆椒私獠粔蛲笍?,運用到實際的軟件開發(fā)中存在著困難;

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

14、,回顧這一周,累并快樂著。從老師開始給布置課程設(shè)計的題目、內(nèi)容及要求到自己廣泛借助互聯(lián)網(wǎng)查閱資料并獨立完成java推箱子小應(yīng)用程序;從兩周前剛接到任務(wù)時的茫然與無助到兩周后的清晰與明了;從對java的編輯器editplus和eclipse初步了解到熟練運用,歷經(jīng)了太多的困難。對于環(huán)境變量的配置,我做到了知其然,知其所以然,對editplus的了解也完全上升了一個層次從課堂上老師教給的在dos 界面中輸入javac 文件名.java編譯、java 文件名 運行到在editplus中選中“工具”、“配置用戶組“,設(shè)置編譯和執(zhí)行相關(guān)參數(shù),按快捷鍵ctrl+1編譯、ctrl+2運行,節(jié)省了大量時間,使

15、編程效率有了很大的提高。 對于推箱子游戲,更是有了進一步的了解,其中用到了9張圖片,用戶可以通過改變圖片來改變游戲的顯示界面,當然,這個是不被允許的,因為每個程序的代碼都有版權(quán),但對于設(shè)計者而言,卻可以更加清楚的了解代碼的內(nèi)部構(gòu)造,達到熟能生巧的效果。 游戲的幫助和關(guān)于設(shè)計人性化,在寫代碼是遇到了很多問題,通過和同學們的交流以及在百度知道里的提問,最終達到了理想的效果通過此次課程設(shè)計,將我本周所學的java知識得到鞏固和應(yīng)用,在設(shè)計的過程中我遇到了很到問題,不過在老師和同學們的幫助和自己的思考下還是很好的完成了。這此課程設(shè)計還讓我懂得了寫程序不能閉門造車,要努力拓寬知識面,開闊視野,拓展思維。

16、它還讓我學會了在網(wǎng)上查閱那些無限的資料。通過對推箱子游戲的開發(fā),使我對用eclipse開發(fā)平臺和editplus編輯器有了一個比較清楚的認識,體會到理論和實踐的重要性。6.參考文獻1 張永常等.java程序設(shè)計實踐教程m.北京:清華大學出版社,2010,155-1582 梁勇.java 語言程序設(shè)計m.北京:機械工業(yè)出版社,2011,89-913 鄭莉.java 程序設(shè)計m. 北京:清華大學出版社,2011,85-904 張廣彬.java課程設(shè)計m.北京:清華大學出版社,2011,189-1935 文杰書院.java程序設(shè)計完全自學手冊m.北京:機械工業(yè)出版社,2010,97-101 附錄程序

17、具體代碼:(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();menuitem ren

18、ew=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("琴蕭合奏");me

19、nuitem 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(720,700);setvisible(true);s

20、etresizable(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(choose);choice.add(back);choi

21、ce.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.add(qin);setmuc.add(po);se

22、tmuc.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 menubar();bar.add(choice);bar.

23、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,20);lb2.setforeground(color

24、.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)");btnmuc=new jbutton("音樂關(guān)&quo

25、t;);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,30);btnfirst.addactionliste

26、ner(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);btnmuc.setbounds(625,450,8

27、0,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();sound.loadsound();panel=new m

28、ainpanel();add(panel);panel.tuixiangzi(panel.level);panel.requestfocus();validate();(2)音樂調(diào)用代碼如下: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

29、);midi=midisystem.getsequencer();midi.open();midi.setsequence(seq);midi.start();midi.setloopcount(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;(3)規(guī)則代碼如下:publ

30、ic 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); walllist.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,

31、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 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); walllis

32、t.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); walllist.add(new node(8, 10); / 將墻壁的對象置為true for (int i = 0; i < walllist.size(); i+) node n = (node) walllist.get(i); an.xn.y = t

33、rue; 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 -= 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

34、: 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-1manx=4)if(maptmpmanymanx=4|maptmpmanymanx=9)mapmanymanx=4;else mapmanymanx=2;mapmany-1manx=8;repaint();many-;mystack.push(10);else if(mapma

35、ny-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|maptmpmanymanx=9)mapmanymanx=4;else mapmanymanx=2;mapmany-1manx=8;mapmany-2manx=3;repaint()

36、;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-;mystack.push(11);else if(mapmany-2manx=2)if(maptmpmanymanx=4|maptmpmanymanx=9)mapmanym

37、anx=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(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;c

溫馨提示

  • 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)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論