java小游戲設(shè)計電子版本_第1頁
java小游戲設(shè)計電子版本_第2頁
java小游戲設(shè)計電子版本_第3頁
java小游戲設(shè)計電子版本_第4頁
java小游戲設(shè)計電子版本_第5頁
已閱讀5頁,還剩9頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、j ava 小游戲設(shè)計華北科技學(xué)院計算機學(xué)院綜合性實驗實驗報告課程名稱 JAVA程序設(shè)計實驗學(xué)期 2014 至2015 學(xué)年第二 學(xué)期學(xué)生所在院部 計算機學(xué)院年級 專業(yè)班級學(xué)生姓名 學(xué)號任課教師實驗成績計算機學(xué)院制Java程序設(shè)計課程綜合性實驗報告開課實驗室:基礎(chǔ)四201笄11月28日實驗題目基于java的拼圖游戲一、實驗?zāi)康某绦蚴褂肊clipse集成開發(fā)環(huán)境完成,熟悉并掌握在 Eclipse開發(fā)環(huán)境下編寫Java程序。二、設(shè)備與環(huán)境硬件:多媒體計算機軟件:Windows系列操作系統(tǒng)、JDK開發(fā)包、Eclipse開發(fā)環(huán)境三、實驗內(nèi)容及要求.實驗要求使用Java swing編程實現(xiàn)拼圖游戲。游戲

2、功能是將一幅圖片分割成5*5的規(guī)則小圖片,游戲開始時將25個小圖片隨機擺放,玩家能夠參考原圖拼接出正確的 圖片。游戲規(guī)則:在25個小圖片中有一個為空白圖片,玩家可以單擊和空白小圖片 相鄰的任一個小圖片(上、下、左、右均可),即可將單擊的小圖片與空白小圖片 交換位置。通過有限次的移動,即可將隨機分布的小圖片恢復(fù)成原圖的樣式。.實驗內(nèi)容(1)各類及主要成員函數(shù)的功能:java源代碼及其功能序 號類名主要功能1GreedSnake該類為程序入口,含有 main方法。2SnakeControl實現(xiàn)控制運行等總體要求,實現(xiàn)方向鍵控制 蛇的方向,空格鍵控制游戲暫?;蚶^續(xù),還 有分數(shù)等。3SnakeMode

3、l該類實現(xiàn)蛇的結(jié)構(gòu)和具體運動,如判斷食物 是否和怎樣被吃掉及判斷后的動作。4Node該類實現(xiàn)組成蛇身的單位-食物。5SnakeView該類實現(xiàn)畫板功能,用黑色圓蛇身,紅色回 食物。(2)具體代碼及實現(xiàn)如下程序入口主方法:/第一部分public class GreedSnake / 建立主類 GreeSnakepublic static void main(String口 args) SnakeModel model =new SnakeModel(20,30); / 初始化蛇出現(xiàn)的位置SnakeControl control =new SnakeControl(model);SnakeView

4、 view =new SnakeView(model,control);/添加一個觀察者,讓 view成為model的觀察者model.addObserver(view);( new Thread(model).start(); 實現(xiàn)對蛇身的控制要求:/第二部分/游戲的Model類,負責(zé)所有游戲相關(guān)數(shù)據(jù)及運行class SnakeControl implements KeyListener /SnakeControl實現(xiàn)接口KeyListener ,鍵盤監(jiān)聽SnakeModel model ;public SnakeControl(SnakeModel model) this . model

5、= model;public void keyPressed(KeyEvent e) int keyCode = e.getKeyCode();if ( model . running )/ 運行狀態(tài)下,處理的按鍵switch (keyCode) case KeyEvent. VK_UP:model .changeDirection(SnakeModel.UP);break ;case KeyEvent. VK_DOWNmodel .changeDirection(SnakeModel.DOWN;break ;case KeyEvent. VK_LEFT :model .changeDirec

6、tion(SnakeModel.LEFT);break ;case KeyEvent. VK_RIGHT :model .changeDirection(SnakeModel.RIGHT);break ;case KeyEvent.VK_ADD:case KeyEvent.VK_PAGE_UP : / 向上翻加速model .speedUp();break ;case KeyEvent.VK_SUBTRACT :case KeyEvent.VK_PAGE_DOWN / 減速model .speedDown();break ;case KeyEvent.VK_SPACE:case KeyEven

7、t.VK_P:model .changePauseState(); / 暫停進入睡眠狀態(tài) break ;default : / 任何情況下處理的按鍵,按鍵導(dǎo)致重新啟動游戲if (keyCode = KeyEvent.VK_R |keyCode = KeyEvent.VK_S |keyCode = KeyEvent.VK_ENTER ) model .reset。;publicvoid keyReleased(KeyEvent e) publicvoid keyTyped(KeyEvent e) 實現(xiàn)蛇的結(jié)構(gòu)和具體運動:/第三部分SuppressWarnings ( unchecked )cla

8、ss SnakeModel extends Observable implements Runnable /SnakeModel 繼承Observable類并且實現(xiàn)接口ainfra matrixLinkedListRunnable ;/指示位置上有沒蛇體或食物nodeArray =new LinkedList();/ 蛇體Node food ;int maxX;int maxY;int direction= 2;/蛇運行的方向ainfrarunning =false ;/運行狀態(tài)int timeInterval二=200;/時間間隔,毫秒double speedChangeRate = 0.7

9、5;/每次得速度變化率ainfrapaused =false ;/暫停標志intscore = 0;/得分intcountMove = 0;/吃到食物前移動的次數(shù)/ UP and DOWN should be even / RIGHT and LEFT should be odd publicstaticfinalintpublicstaticfinalintpublicstaticfinalintpublicstaticfinalintUP = 2;DOWN= 4;LEFT = 1;RIGHT = 3;publicSnakeModel(intthis . maxX = maxX; this

10、. maxY = maxY;maxX, int maxY) reset();public void reset()direction timeInterval paused = score = 0; countMove=SnakeModel=500;false ;=0;UP;/蛇運行的方向時間間隔,毫秒暫停標志得分吃到食物前移動的次數(shù)/ initial ainfr,全部清 0matrix = new ainfra maxX口;for ( int I = 0; I 20 ?10:maxX / 2;nodeArray .clear();for ( int I = 0; I initArrayLen

11、gth; +i) int x =maxX / 2 + I;/maxX 被初始化為 20int y =maxY / 2;/maxY 被初始化為 30/nodeArrayx,y: 10,15-11,15H12, 1520,15/默認的運行方向向上,所以游戲一開始nodeArray就變?yōu)椋?10, 14H10, 15-11, 15-12nodeArray .addLast( new Node(x, y);matrix xy = true ;/創(chuàng)建食物food = createFood();matrix food . x food . y = true ;public void changeDirec

12、tion( int newDirection) 向同向或反向if ( direction % 2 != newDirection % 2) direction = newDirection;,1519, 15/改變的方向不能與原來方物)publicainframoveOn() Node n =nodeArray .getFirst();intx = n.x;inty = n.y;/根據(jù)方向增減坐標值switch (direction) caseUP:y-;break ;caseDOWNy+;break ;caseLEFT :x-;break ;caseRIGHT :x+;break ;/如果新

13、坐標落在有效范圍內(nèi),則進行處理if (0 = x & x maxX) & (0 = y & y 0 ? scoreGet : 10;countMove = 0;food = createFood();matrix food . x food . y = true return true ;/創(chuàng)建新的食物/設(shè)置食物所在位置elsereturn false/ 吃到蛇體自身,失敗else / 如果新坐標的點上沒有東西(蛇體),移動蛇true ;.removeLast();y = falsenodeArray .addFirst( new Node(x, y);matrix xy= nodeArray

14、 matrix n. xn. countMove +;returnreturntrue ;false ;/ 觸到邊線,失敗publicvoid running while ( tryrun() =true running /運行方法Thread.sleep(timelnterval);catch (Exception e) break ;if (! paused ) if (moveOn() setChanged();notifyObservers();else JoptionPane.JoptionPane.breakrunningfalse ;/ Model通知View數(shù)據(jù)已經(jīng)更新show

15、MessageDialog ( null ,你輸了 ”,“Game Over,INFORMATION_MESSAGE ); private int int / donew Random();maxX);maxY); public publicwhile ( returnmatrixxy);new Node(x, y);voidainfra() timeInterval*-speedChangeRate ;void speedDown() timeInterval/= speedChangeRate ;Node createFood() x = 0;y = 0;隨機獲取一個有效區(qū)域內(nèi)的與蛇體和食

16、物不重疊的位置Random r = x = r.nextInt( y = r.nextInt( public publicString toString() String result =for ( int I = 0; INode n = result +=;nodeArraynodeArray .get(i);“+ n. x +.size(); +i) + n. y +工;void changePauseState() paused = ! paused ;return result;實現(xiàn)組成蛇身的單位-食物:實現(xiàn)畫板功能,黑色為蛇身,紅色為食物:/第五部分class SnakeViewS

17、nakeControl SnakeModelimplementsObserver null ; ;control model =nullJframeainframe ; /窗口CanvaspaintCanvas;/圖像背景JlabellabelScore ;/分數(shù)publicstaticfinalintcanvasWidthpublicstaticfinalintcanvasHeight=300;/窗口寬度=300;/窗口高度/SnakeView 實現(xiàn)接口 Observer/第四部分class Node /Node子類int x;int y;Node( intx, inty) this.x = x;this.y = y;(3)游戲運行結(jié)果如圖:初始游戲界面及蛇出現(xiàn)的位置,最后三行英文字母為幫助菜單:第一次吃到食物加10分,增長1個食物的長度:第二次吃到食物加14分,蛇身增加1個食物的長度,兩次加分說明游戲分數(shù)不僅和食物有關(guān)還和所走路徑有關(guān):游戲失敗兩種

溫馨提示

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

評論

0/150

提交評論