




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、利用Java實現(xiàn)吞(貪)食蛇游戲項目完整實現(xiàn)實例(第2部分)擴展主窗口的GUI及交換功能1了解ArrayList和LinkedList的用法區(qū)別(1)ArrayList是實現(xiàn)了基于動態(tài)數(shù)組的數(shù)據(jù)結構,LinkedList基于鏈表的數(shù)據(jù)結構。(2)對于隨機訪問get和set,ArrayList覺得優(yōu)于LinkedList,因為LinkedList要移動指針。(3)對于新增和刪除操作add和remove,LinedList比較占優(yōu)勢,因為ArrayList要移動數(shù)據(jù)。2添加項目中所需要的各個圖像文件主要的圖像文件如下3、改變主窗口的默認圖標package com.px1987.greedsnake
2、.mainframe;import java.awt.BorderLayout;import java.awt.Image;import java.awt.Toolkit;import javax.swing.JFrame;import javax.swing.JPanel;import com.px1987.greedsnake.util.GreedSnakeAppVO;public class GreedSnakeMainFrame extends JFrame private static final long serialVersionUID = 1L;private JPanel c
3、ontentPanel=null;public GreedSnakeMainFrame()super();initThisMainFrame();contentPanel=new JPanel();contentPanel.setLayout(new BorderLayout();this.setContentPane(contentPanel);this.setSize(AllGreedSnakeGameAppConstant.greedSnakePanelWidth+5, AllGreedSnakeGameAppConstant.greedSnakePanelHeight+5);this.
4、setLocationRelativeTo(null); /將窗口居中顯示public void initThisMainFrame()this.setTitle(吞(貪)食蛇游戲);Image oneIconImage=Toolkit.getDefaultToolkit().getImage(getClass().getResource(/images/mainframeIconImage.jpg);this.setIconImage(oneIconImage);this.setResizable(false);this.setDefaultCloseOperation(JFrame.EXI
5、T_ON_CLOSE);this.setAlwaysOnTop(true);4、實現(xiàn)貪食蛇中間面板的背景圖的初始化加載package com.px1987.greedsnake.mainframe;import java.awt.BorderLayout;import java.awt.Image;import java.awt.MediaTracker;import java.awt.Toolkit;import javax.swing.JFrame;import javax.swing.JPanel;import com.px1987.greedsnake.util.GreedSnakeA
6、ppVO;public class GreedSnakeMainFrame extends JFrame private static final long serialVersionUID = 1L;private JPanel contentPanel=null;public GreedSnakeMainFrame()super();loadGreenGrassBackgroundImage();initThisMainFrame();contentPanel=new JPanel();contentPanel.setLayout(new BorderLayout();this.setCo
7、ntentPane(contentPanel);e(AllGreedSnakeGameAppConstant.greedSnakePanelWidth+5, AllGreedSnakeGameAppConstant.greedSnakePanelHeight+5);this.setLocationRelativeTo(null); /將窗口居中顯示public void initThisMainFrame()this.setTitle(吞(貪)食蛇游戲);Image oneIconImage=Toolkit.getDefaultToolkit().getImage(getClass().get
8、Resource(/images/mainframeIconImage.jpg);this.setIconImage(oneIconImage);this.setResizable(false);this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);this.setAlwaysOnTop(true);private Image greenGrassBackGroundImage=null;public Image getGreenSnakeGrassBackGroundImage() return greenGrassBackGroundIma
9、ge;private void loadGreenGrassBackgroundImage() /由于背景圖片比較大,需要進行跟蹤greenGrassBackGroundImage=Toolkit.getDefaultToolkit().getImage(this.getClass().getResource(/images/greengrass.jpg);MediaTracker oneMediaTracker=new MediaTracker(this);int trackedImageID=0;oneMediaTracker.addImage(greenGrassBackGroundIm
10、age,trackedImageID);tryoneMediaTracker.waitForID(trackedImageID);/oneMediaTracker.waitForAll();catch(Exception e)e.printStackTrace();5、添加封裝蛇身實體SnakeBodyAllNodeVO(1)添加SnakeBodyAllNodeVO實體類,包名稱為(2)SnakeBodyAllNodeVO實體類的代碼package com.px1987.greedsnake.util;import java.util.Arrays;import java.util.Linke
11、dList;import java.util.Random;import com.px1987.greedsnake.mainframe.GreedSnakeMainFrame;public class SnakeBodyAllNodeVO private boolean snakeMatrix;private LinkedList snakeBodyNodeLinkedList =null;public LinkedList getSnakeBodyNodeLinkedList() return snakeBodyNodeLinkedList;private NodeEntity snake
12、FoodTargetNode;public NodeEntity getSnakeFoodTargetNode() return snakeFoodTargetNode;private int maxGridColNumber, maxGridRowNumber;private GreedSnakeMainFrame oneGreedSnakeMainFrame;public SnakeBodyAllNodeVO() public SnakeBodyAllNodeVO(GreedSnakeMainFrame oneGreedSnakeMainFrame) this.oneGreedSnakeM
13、ainFrame = oneGreedSnakeMainFrame;initSnakeBodyAllNode();private void initSnakeBodyAllNode()maxGridColNumber=AllGreedSnakeGameAppConstant.greedSnakePanelWidth/AllGreedSnakeGameAppConstant.someOneNodeWidth;maxGridRowNumber=AllGreedSnakeGameAppConstant.greedSnakePanelHeight/AllGreedSnakeGameAppConstan
14、t.someOneNodeHeight;/* * 保存最大格子數(shù) */GreedSnakeAppVO.getGreedSnakeAppVO().setMaxGridColNumber(maxGridColNumber);GreedSnakeAppVO.getGreedSnakeAppVO().setMaxGridRowNumber(maxGridRowNumber);/* * 實例化LinkedList集合 */snakeBodyNodeLinkedList = new LinkedList();/* * 初始化二維數(shù)組snakeMatrix,該數(shù)組的長、寬為橫、縱格子數(shù) */snakeMat
15、rix = new booleanmaxGridColNumber;for(int i=0; i 20)?10:maxGridColNumber/2;for(int i = 0; i snakeBodyNodeNumber; +i)int snakeBodyNodeColNo = maxGridColNumber/2+i;int snakeBodyNodeRowNo = maxGridRowNumber/2;snakeBodyNodeLinkedList.addLast(new NodeEntity(snakeBodyNodeColNo, snakeBodyNodeRowNo);snakeMa
16、trixsnakeBodyNodeColNosnakeBodyNodeRowNo = true;/格子值為true代表蛇身節(jié)點/* * 隨機創(chuàng)建食物節(jié)點,并在數(shù)組中標識出該節(jié)點 */snakeFoodTargetNode = createSnakeFoodNode();snakeMatrixsnakeFoodTargetNode.getNodeColNo()snakeFoodTargetNode.getNodeRowNo() = true;public boolean driveSnakeStepMovingOn()/* * 顯示出當前的步數(shù) */StringBuffer stepCounte
17、rTextBuffer=new StringBuffer(); /最好不要使用String類stepCounterTextBuffer.append(步數(shù):);stepCounterTextBuffer.append(GreedSnakeAppVO.getGreedSnakeAppVO().getSnakeMovingStepCounter();oneGreedSnakeMainFrame.getOneGreedSnakeMainToolBar().getSnakeMovingStepCounterLabel().setText(stepCounterTextBuffer.toString()
18、;/* * 獲得蛇身的開始節(jié)點(蛇頭)節(jié)點的位置(縱、橫格子號),并按照運動的方向改變其格子位置號 */NodeEntity snakeBodyFirstNode = (NodeEntity)snakeBodyNodeLinkedList.getFirst();();int currentSnakeHeadNodeRowNo = snakeBodyFirstNode.getNodeRowNo();switch(GreedSnakeAppVO.getGreedSnakeAppVO().getSnakeCurrentMovingDirection()case AllGreedSnakeGameAp
19、pConstant.MovingUPDirection:currentSnakeHeadNodeRowNo-;break;case AllGreedSnakeGameAppConstant.MovingDOWNDirection:currentSnakeHeadNodeRowNo+;break;case AllGreedSnakeGameAppConstant.MovingLEFTDirection:currentSnakeHeadNodeColNo-;break;ion:currentSnakeHeadNodeColNo+;break;/* * 識別蛇身是否與屏幕的四周出現(xiàn)碰壁,則為失?。ǚ?/p>
20、回false) */boolean snakeMovingIsNotOutMaxColNo=(0 = currentSnakeHeadNodeColNo)&(currentSnakeHeadNodeColNo GreedSnakeAppVO.getGreedSnakeAppVO().getMaxGridColNumber(); boolean snakeMovingIsNotOutMaxRowNo=(0 = currentSnakeHeadNodeRowNo)&(currentSnakeHeadNodeRowNo 0)? gameScoreResultValue:10);GreedSnakeA
21、ppVO.getGreedSnakeAppVO().setSnakeMovingStepCounter(0);/重新記數(shù)snakeFoodTargetNode = createSnakeFoodNode();snakeMatrixsnakeFoodTargetNode.getNodeColNo()snakeFoodTargetNode.getNodeRowNo() = true;return true;else /蛇身相連(碰到自己的身子),失??!return false; else /蛇身前進一格/* * 只要知道蛇頭的位置就可以了, 后面一節(jié)點在下一時刻的移動位置永遠都是前面一節(jié)點在沒有移
22、動前的位置。 */snakeBodyNodeLinkedList.addFirst(new NodeEntity(currentSnakeHeadNodeColNo,currentSnakeHeadNodeRowNo);snakeMatrixcurrentSnakeHeadNodeColNocurrentSnakeHeadNodeRowNo = true;snakeBodyFirstNode = (NodeEntity)snakeBodyNodeLinkedList.removeLast(); /除掉最后的節(jié)點,并返回新的最后節(jié)點snakeMatrixsnakeBodyFirstNode.ge
23、tNodeColNo()snakeBodyFirstNode.getNodeRowNo() = false;/初始化新的最后節(jié)點數(shù)值為falseGreedSnakeAppVO.getGreedSnakeAppVO().setSnakeMovingStepCounter(GreedSnakeAppVO.getGreedSnakeAppVO().getSnakeMovingStepCounter()+1);return true;private NodeEntity createSnakeFoodNode() /* * 用隨機函數(shù)產生食物出現(xiàn)位置的坐標(值不是true的格子節(jié)點),因為蛇身節(jié)點的值
24、為true, * 從而可以避免食物出現(xiàn)在蛇身中 */int foodNodeColNo;int foodNodeRowNo;doRandom snakePositionRandom = new Random();foodNodeColNo = snakePositionRandom.nextInt(GreedSnakeAppVO.getGreedSnakeAppVO().getMaxGridColNumber();foodNodeRowNo = snakePositionRandom.nextInt(GreedSnakeAppVO.getGreedSnakeAppVO().getMaxGrid
25、RowNumber();while(snakeMatrixfoodNodeColNofoodNodeRowNo);return new NodeEntity(foodNodeColNo,foodNodeRowNo);6添加SnakeMoveThread線程類(1)添加SnakeMoveThread線程類,實現(xiàn)接口,包名稱為(2)編程該SnakeMoveThread線程類package com.px1987.greedsnake.thread;import javax.swing.JOptionPane;import com.px1987.greedsnake.mainframe.GreedSn
26、akeMainFrame;import com.px1987.greedsnake.util.GreedSnakeAppVO;import com.px1987.greedsnake.util.SnakeBodyAllNodeVO;public class SnakeMoveThread implements Runnableprivate GreedSnakeMainFrame oneGreedSnakeMainFrame;private SnakeBodyAllNodeVO oneSnakeBodyAllNodeVO=null;public SnakeBodyAllNodeVO getOneSnakeBodyAllNodeVO() return oneSnakeBodyAllNodeVO;public SnakeMoveThread()public SnakeMoveThread(GreedSnakeMainFrame oneGreedSnakeMainFrame)this.oneGreedSnakeMainFrame = oneGreedSnakeMainFrame;oneSnakeBodyAllNodeVO=new SnakeBodyAllNodeVO(this.one
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 安徽省淮南市潘集區(qū)2024-2025學年九年級上學期期末化學試題(含答案)
- 清朝領導考試試題及答案
- 市場經濟學試題及答案
- 管理沙盤面試題及答案
- 2019-2025年軍隊文職人員招聘之軍隊文職管理學與服務提升訓練試卷A卷附答案
- 2019-2025年軍隊文職人員招聘之軍隊文職管理學題庫附答案(典型題)
- 煙草公司2025招聘考試全真模擬筆試試題(綜合能力測試卷)和答案解析
- 鼻飼操作及胃管誤入氣道案例分析培訓課件
- 房產稅務知識培訓課件
- 鉆石專業(yè)知識培訓課件
- 教科版科學五年級下冊《生物與環(huán)境》單元教材解讀及教學建議
- 11471勞動爭議處理(第9章)
- 兒科-補液-液體療法課件
- 口腔健康教育和促進
- 紀檢監(jiān)察線索處置與談話策略-課件
- 廣州市建設項目代建合同穗政合同示范文本004號
- 經濟效益證明(模板)
- 接力版六年級下冊小學英語 Lesson 4 Sally is going to Beijing. 第一課時 教案(教學設計)
- 食堂蔬菜品種及質量標準
- 《大數(shù)據(jù)分析與應用》教學大綱
- FZW2812F(FDR)型用戶分界真空負荷開關安裝使用說明書完
評論
0/150
提交評論