Java語言程序設計的課程設計項目-利用Java實現(xiàn)吞(貪)食蛇游戲項目完整實現(xiàn)實例(第2部分)_第1頁
Java語言程序設計的課程設計項目-利用Java實現(xiàn)吞(貪)食蛇游戲項目完整實現(xiàn)實例(第2部分)_第2頁
Java語言程序設計的課程設計項目-利用Java實現(xiàn)吞(貪)食蛇游戲項目完整實現(xiàn)實例(第2部分)_第3頁
Java語言程序設計的課程設計項目-利用Java實現(xiàn)吞(貪)食蛇游戲項目完整實現(xiàn)實例(第2部分)_第4頁
Java語言程序設計的課程設計項目-利用Java實現(xiàn)吞(貪)食蛇游戲項目完整實現(xiàn)實例(第2部分)_第5頁
已閱讀5頁,還剩9頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

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. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論