版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
武漢理工大學(xué)課程設(shè)計(jì)課程名稱JAVA課程設(shè)計(jì)_題目貪吃蛇程序設(shè)計(jì)專業(yè)電子商務(wù)班級(jí)****學(xué)號(hào)*******姓名***成績(jī)__________________指導(dǎo)教師__________________20**年**月**日課程設(shè)計(jì)任務(wù)書設(shè)計(jì)題目:設(shè)計(jì)目的:1.鞏固和加深課堂所學(xué)知識(shí);2.學(xué)習(xí)掌握一般的軟件的設(shè)計(jì)方法和查閱、運(yùn)用資料的能力;3.掌握J(rèn)AVA程序設(shè)計(jì)語言,面向?qū)ο蟮能浖O(shè)計(jì)思想、方法。設(shè)計(jì)任務(wù):(在規(guī)定的時(shí)間內(nèi)完成下列任務(wù))1、任務(wù):設(shè)計(jì)一個(gè)貪吃蛇的游戲功能要求:能夠顯示貪吃蛇的運(yùn)動(dòng),能通過鍵盤控制貪吃蛇的運(yùn)行,能夠處理蛇在運(yùn)行中個(gè)各種情況,以及其它的輔助功能;要提供主要的設(shè)計(jì)思路、數(shù)據(jù)結(jié)構(gòu)的設(shè)計(jì)。2、設(shè)計(jì)任務(wù)要完成設(shè)計(jì)、編碼、測(cè)試等過程,給出設(shè)計(jì)思路、設(shè)計(jì)說明書、主要的代碼的說明、使用說明書。源代碼以及可運(yùn)行的貪吃蛇游戲。時(shí)間安排:12月28日布置題目,確定任務(wù)、查找相關(guān)資料12月28日~1月7日功能分析,系統(tǒng)設(shè)計(jì),編寫程序,調(diào)試程序、運(yùn)行系統(tǒng);1月8日答辯后撰寫設(shè)計(jì)報(bào)告。具體要求:設(shè)計(jì)報(bào)告撰寫格式要求(按提供的設(shè)計(jì)報(bào)告統(tǒng)一格式撰寫)具體內(nèi)容如下:①設(shè)計(jì)任務(wù)與要求②總體方案與說明③面向?qū)ο蟮脑O(shè)計(jì)(主要類的設(shè)計(jì))④源程序清單與注釋⑤軟件主要模塊流程圖⑥問題分析與解決方案(包括調(diào)式記錄、調(diào)式報(bào)告,即在調(diào)式過程中遇到的主要問題、解決方法及改進(jìn)設(shè)想);⑦小結(jié)與體會(huì)附錄:①源程序(必須有簡(jiǎn)單注釋)②使用說明③參考資料指導(dǎo)教師簽名:年月日教研室主任(或責(zé)任教師)簽名:年月日設(shè)計(jì)任務(wù)與要求1.1設(shè)計(jì)任務(wù)設(shè)計(jì)一個(gè)貪吃蛇的游戲功能要求:能夠顯示貪吃蛇的運(yùn)動(dòng),能通過鍵盤控制貪吃蛇的運(yùn)行,能夠處理蛇在運(yùn)行中個(gè)各種情況,以及其它的輔助功能;要提供主要的設(shè)計(jì)思路、數(shù)據(jù)結(jié)構(gòu)的設(shè)計(jì)。設(shè)計(jì)任務(wù)要完成設(shè)計(jì)、編碼、測(cè)試等過程,給出設(shè)計(jì)思路、設(shè)計(jì)說明書、主要代碼的說明、使用說明書。源代碼以及可運(yùn)行的貪吃蛇游戲。1.2具體要求:具體內(nèi)容如下:①設(shè)計(jì)任務(wù)與要求②總體方案與說明③面向?qū)ο蟮脑O(shè)計(jì)(主要類的設(shè)計(jì))④源程序清單與注釋⑤軟件主要模塊流程圖⑥問題分析與解決方案(包括調(diào)式記錄、調(diào)式報(bào)告,即在調(diào)式過程中遇到的主要問題、解決方法及改進(jìn)設(shè)想);⑦小結(jié)與體會(huì)附錄:①源程序(必須有簡(jiǎn)單注釋)②使用說明③參考資料2.總體方案與說明2.1總體方案我設(shè)計(jì)的貪吃蛇主要利用鍵盤控制蛇的前進(jìn)移動(dòng)方向,是否吃到食物,是否撞墻以及是否暫停、開始游戲等。當(dāng)吃到食物的時(shí)候,蛇就自動(dòng)長(zhǎng)大一格,在游戲中可進(jìn)行暫停和開始操作。中途若是撞到墻或是撞到自己,同樣也結(jié)束。背景和蛇的顏色可隨時(shí)更換。2.2系統(tǒng)模塊根據(jù)總體方案,我把貪吃蛇游戲分為:游戲界面設(shè)置(即繪圖)、貪吃蛇蛇身及運(yùn)動(dòng)設(shè)置和游戲龍之設(shè)置三大模塊來設(shè)計(jì)。2.2.1游戲界面設(shè)置游戲界面設(shè)置包括:游戲區(qū)設(shè)置、游戲幫助信息設(shè)置、游戲分?jǐn)?shù)查看區(qū)。游戲界面使用簡(jiǎn)單和直觀的布局設(shè)計(jì),游戲區(qū)放置在界面的主題位置上,在游戲區(qū)上部放置分?jǐn)?shù),在游戲區(qū)下部放置使用說明幫助,具體設(shè)計(jì)效果如圖2-1所示。圖2-1游戲主題界面設(shè)計(jì)效果2.2.2貪吃蛇蛇身及運(yùn)動(dòng)設(shè)置貪吃蛇的蛇身設(shè)置是整個(gè)游戲設(shè)計(jì)的關(guān)鍵。它的基本思路是:去掉蛇尾,顯示并移動(dòng)出蛇頭外蛇身,根據(jù)蛇身的運(yùn)動(dòng)方向,決定蛇頭的位置,完成蛇頭吃食物的處理操作,顯示蛇頭。而蛇運(yùn)動(dòng)的四個(gè)方向,則通過按鍵來控制。蛇吃到一個(gè)食物,就加分。每次食物出現(xiàn)的位置不能在蛇身上,如果蛇在運(yùn)動(dòng)的過程中撞到自己或者撞墻,則游戲結(jié)束,具體效果如圖2-2所示,圖2-2就是蛇撞到墻之后,提示游戲結(jié)束。圖2-2貪吃蛇撞墻后效果2.2.3游戲控制設(shè)置游戲控制設(shè)置就是控制游戲的暫停與開始。設(shè)置PageUp(加速),PageDown(減速)按鍵來控制速度,設(shè)置空格或著p按鍵來暫停進(jìn)行中的游戲,設(shè)置ENTER或著R或者S按鍵來開始暫停的游戲。3.面向?qū)ο蟮脑O(shè)計(jì)貪吃蛇游戲各模塊及程序流程有若干類實(shí)現(xiàn),下面闡述各個(gè)類的設(shè)計(jì)與實(shí)現(xiàn)。3.1GreedSnake類該類包含六個(gè)主要的功能方法,分別是:(1)構(gòu)造函數(shù)publicGreedSnake(),主要用來設(shè)置用戶控制界面。(2)publicvoidkeyPressed()方法,主要用來對(duì)游戲的按鍵操作進(jìn)行處理。(3)voidrepaint()主要用來繪制游戲界面包括蛇和食物。(4)privatevoiddrawNode()主要用來繪制某一結(jié)點(diǎn)。(5)publicvoidupdateScore()方法主要用來改變積分器。(6)voidbegin()方法用來控制游戲的開始界面。3.2.SnakeModel類該類包含多個(gè)功能方法,分別是:(1)構(gòu)造函數(shù)publicSnakeModel(),該方法主要用來初始化游戲界。其中matrix[][]用來存儲(chǔ)地圖上面的信息,如果什么也沒有設(shè)置為false,如果有食物或蛇,設(shè)置為true;nodeArray,一個(gè)LinkedList,用來保存蛇的每一節(jié);food用來保存食物的位置;而Node類是保存每個(gè)位置的信息。(2)publicvoidchangeDirection()方法主要用來改變蛇的運(yùn)動(dòng)方向,changeDirection(intnewDirection),用來改變蛇前進(jìn)的方向,而且只是保存頭部的前進(jìn)方向,因?yàn)槠渌那斑M(jìn)方向已經(jīng)用位置來指明了。其中newDirection必須和原來的direction不是相反方向,所以相反方向的值用了同樣的奇偶性。在測(cè)試的時(shí)候使用了direction%2!=newDirection%2進(jìn)行判斷。(3)publicbooleanmoveOn()方法使實(shí)現(xiàn)蛇運(yùn)動(dòng)的函數(shù),其中moveOn()用來更新蛇的位置,對(duì)于當(dāng)前方向,把頭部位置進(jìn)行相應(yīng)改變。如果越界,結(jié)束;否則,檢測(cè)是否遇到食物(加頭部)或身體(結(jié)束);如果什么都沒有,加上頭部,去掉尾部。由于用了LinkedList數(shù)據(jù)結(jié)構(gòu),省去了相當(dāng)多的麻煩。(4)publicvoidrun()方法主要用來完成游戲主體運(yùn)行流程控制功能。(5)privateNodecreateFood()方法用來生成食物及放置地點(diǎn)。(6)publicvoidspeedUp()和()兩個(gè)方法對(duì)蛇運(yùn)行的速度進(jìn)行控制。(7)publicvoidchangePauseState()方法用來改變游戲的狀態(tài),是“暫停”還是“繼續(xù)”。3.3.Node類該類只有一個(gè)方法Node(),該方法用來定義蛇的結(jié)點(diǎn)部分4.源程序清單與注釋GreedSnake.javapackageGreedSnake;importjava.awt.*;importjava.awt.event.*;importjavax.swing.*;importjava.util.*;//MainClasspublicclassGreedSnakeimplementsKeyListener{JFramemainFrame;CanvaspaintCanvas;JLabellabelScore;//計(jì)分牌SnakeModelsnakeModel=null;//蛇publicstaticfinalintcanvasWidth=300;publicstaticfinalintcanvasHeight=400;publicstaticfinalintnodeWidth=10;publicstaticfinalintnodeHeight=10;//GreedSnake():初始化游戲界面publicGreedSnake(){//設(shè)置界面元素mainFrame=newJFrame("GreedSnake");Containercp=mainFrame.getContentPane();labelScore=newJLabel("分?jǐn)?shù):");cp.add(labelScore,BorderLayout.NORTH);paintCanvas=newCanvas();paintCanvas.setSize(canvasWidth+1,canvasHeight+1);paintCanvas.addKeyListener(this);cp.add(paintCanvas,BorderLayout.CENTER);JPanelpanelButtom=newJPanel();panelButtom.setLayout(newBorderLayout());JLabellabelHelp;//幫助信息labelHelp=newJLabel("按PageUp(加速),PageDown(減速)來控制速度",JLabel.CENTER);panelButtom.add(labelHelp,BorderLayout.NORTH);labelHelp=newJLabel("按ENTER或者R或者S開始",JLabel.CENTER);panelButtom.add(labelHelp,BorderLayout.CENTER);labelHelp=newJLabel("按空格或p暫停",JLabel.CENTER);panelButtom.add(labelHelp,BorderLayout.SOUTH);cp.add(panelButtom,BorderLayout.SOUTH);mainFrame.addKeyListener(this);mainFrame.pack();mainFrame.setResizable(false);mainFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);mainFrame.setVisible(true);begin();}//keyPressed():按鍵檢測(cè)publicvoidkeyPressed(KeyEvente){intkeyCode=e.getKeyCode();if(snakeModel.running){switch(keyCode){caseKeyEvent.VK_UP:snakeModel.changeDirection(SnakeModel.UP);break;caseKeyEvent.VK_DOWN:snakeModel.changeDirection(SnakeModel.DOWN);break;caseKeyEvent.VK_LEFT:snakeModel.changeDirection(SnakeModel.LEFT);break;caseKeyEvent.VK_RIGHT:snakeModel.changeDirection(SnakeModel.RIGHT);break;caseKeyEvent.VK_ADD:caseKeyEvent.VK_PAGE_UP:snakeModel.speedUp();//加速break;caseKeyEvent.VK_SUBTRACT:caseKeyEvent.VK_PAGE_DOWN:snakeModel.speedDown();//減速break;caseKeyEvent.VK_SPACE:caseKeyEvent.VK_P:snakeModel.changePauseState();//暫?;蚶^續(xù)break;default:}}//重新開始if(keyCode==KeyEvent.VK_R||keyCode==KeyEvent.VK_S||keyCode==KeyEvent.VK_ENTER){snakeModel.running=false;begin();}}//keyReleased():空函數(shù)publicvoidkeyReleased(KeyEvente){}//keyTyped():空函數(shù)publicvoidkeyTyped(KeyEvente){}//repaint():繪制游戲界面(包括蛇和食物)voidrepaint(){Graphicsg=paintCanvas.getGraphics();//drawbackgroundg.setColor(Color.PINK);g.fillRect(0,0,canvasWidth,canvasHeight);//drawthesnakeg.setColor(Color.BLACK);LinkedListna=snakeModel.nodeArray;Iteratorit=na.iterator();while(it.hasNext()){Noden=(Node)it.next();drawNode(g,n);}//drawthefoodg.setColor(Color.RED);Noden=snakeModel.food;drawNode(g,n);updateScore();}//drawNode():繪畫某一結(jié)點(diǎn)(蛇身或食物)privatevoiddrawNode(Graphicsg,Noden){g.fillRect(n.x*nodeWidth,n.y*nodeHeight,nodeWidth-1,nodeHeight-1);}//updateScore():改變計(jì)分牌publicvoidupdateScore(){Strings="Score:"+snakeModel.score;labelScore.setText(s);}//begin():游戲開始,放置貪吃蛇voidbegin(){if(snakeModel==null||!snakeModel.running){snakeModel=newSnakeModel(this,canvasWidth/nodeWidth,this.canvasHeight/nodeHeight);(newThread(snakeModel)).start();}}//main():主函數(shù)publicstaticvoidmain(String[]args){GreedSnakegs=newGreedSnake();}}SnakeModel.Javaimportjava.util.*;importjavax.swing.*;//SnakeModel:貪吃蛇模型classSnakeModelimplementsRunnable{GreedSnakegs;boolean[][]matrix;//界面數(shù)據(jù)保存在數(shù)組里L(fēng)inkedListnodeArray=newLinkedList();Nodefood;intmaxX;//最大寬度intmaxY;//最大長(zhǎng)度intdirection=2;//方向booleanrunning=false;inttimeInterval=300;//間隔時(shí)間(速度)doublespeedChangeRate=0.85;//速度改變程度booleanpaused=false;//游戲狀態(tài)intscore=0;intcountMove=0;//UP和DOWN是偶數(shù),RIGHT和LEFT是奇數(shù)publicstaticfinalintUP=2;publicstaticfinalintDOWN=4;publicstaticfinalintLEFT=1;publicstaticfinalintRIGHT=3;//GreedModel():初始化界面publicSnakeModel(GreedSnakegs,intmaxX,intmaxY){this.gs=gs;this.maxX=maxX;this.maxY=maxY;matrix=newboolean[maxX][];for(inti=0;i<maxX;++i){matrix[i]=newboolean[maxY];Arrays.fill(matrix[i],false);//沒有蛇和食物的地區(qū)置false}//初始化貪吃蛇intinitArrayLength=maxX>20?10:maxX/2;for(inti=0;i<initArrayLength;++i){intx=maxX/2+i;inty=maxY/2;nodeArray.addLast(newNode(x,y));matrix[x][y]=true;//蛇身處置true}food=createFood();matrix[food.x][food.y]=true;//食物處置true}//changeDirection():改變運(yùn)動(dòng)方向publicvoidchangeDirection(intnewDirection){if(direction%2!=newDirection%2)//避免沖突{direction=newDirection;}}//moveOn():貪吃蛇運(yùn)動(dòng)函數(shù)publicbooleanmoveOn(){Noden=(Node)nodeArray.getFirst();intx=n.x;inty=n.y;switch(direction){caseUP:y--;break;caseDOWN:y++;break;caseLEFT:x--;break;caseRIGHT:x++;break;}if((0<=x&&x<maxX)&&(0<=y&&y<maxY)){if(matrix[x][y])//吃到食物或者撞到身體{if(x==food.x&&y==food.y)//吃到食物{nodeArray.addFirst(food);//在頭部加上一結(jié)點(diǎn)//計(jì)分規(guī)則與移動(dòng)長(zhǎng)度和速度有關(guān)intscoreGet=(10000-200*countMove)/timeInterval;score+=scoreGet>0?scoreGet:10;countMove=0;food=createFood();matrix[food.x][food.y]=true;returntrue;}else{returnfalse;//撞到身體}}else//什么都沒有碰到{nodeArray.addFirst(newNode(x,y));//加上頭部matrix[x][y]=true;n=(Node)nodeArray.removeLast();//去掉尾部matrix[n.x][n.y]=false;countMove++;returntrue;}}returnfalse;//越界(撞到墻壁)}//run():貪吃蛇運(yùn)動(dòng)線程publicvoidrun(){running=true;while(running){try{Thread.sleep(timeInterval);}catch(Exceptione){break;}if(!paused){if(moveOn())//未結(jié)束{gs.repaint();}else//游戲結(jié)束{JOptionPane.showMessageDialog(null,"游戲結(jié)束","游戲結(jié)束",JOptionPane.INFORMATION_MESSAGE);break;}}}running=false;}//createFood()
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年高職氧化還原滴定法(氧化還原反應(yīng)實(shí)操)試題及答案
- 2025年高職第二學(xué)年(機(jī)械設(shè)計(jì)制造及其自動(dòng)化)數(shù)控技術(shù)應(yīng)用試題及答案
- 2025年大學(xué)植物學(xué)(特性分析)試題及答案
- 2025年高職(旅游管理綜合實(shí)訓(xùn))市場(chǎng)拓展實(shí)操試題及答案
- 2025年高職(廣告策劃與營(yíng)銷)廣告策劃階段測(cè)試題及答案
- 2025年高職社會(huì)工作(社會(huì)救助)試題及答案
- 2025 小學(xué)四年級(jí)思想品德下冊(cè)家風(fēng)傳承優(yōu)化主題實(shí)踐改進(jìn)課件
- 中學(xué)師德教風(fēng)專題培訓(xùn)
- 養(yǎng)老院老人康復(fù)設(shè)施維修人員表彰制度
- 養(yǎng)老院工作人員請(qǐng)假及調(diào)休制度
- 2025-2026學(xué)年人教版九年級(jí)上冊(cè)歷史期末試卷(含答案和解析)
- 重癥醫(yī)學(xué)科ICU知情同意書電子病歷
- 小區(qū)配電室用電安全培訓(xùn)課件
- 醫(yī)院科室文化建設(shè)與禮儀
- 2025貴州磷化(集團(tuán))有限責(zé)任公司12月招聘筆試參考題庫及答案解析
- 征信修復(fù)合同范本
- 2025年公安部遴選面試題及答案
- 中煤集團(tuán)機(jī)電裝備部副部長(zhǎng)管理能力考試題集含答案
- 福建省網(wǎng)絡(luò)安全事件應(yīng)急預(yù)案
- 五育融合課件
- 意識(shí)障礙的判斷及護(hù)理
評(píng)論
0/150
提交評(píng)論