java貪吃蛇程序基礎(chǔ)入門_第1頁
java貪吃蛇程序基礎(chǔ)入門_第2頁
java貪吃蛇程序基礎(chǔ)入門_第3頁
java貪吃蛇程序基礎(chǔ)入門_第4頁
已閱讀5頁,還剩21頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、java貪吃蛇程序基礎(chǔ)入門貪吃蛇游戲:一個游戲最核心的部分是游戲的業(yè)務(wù)邏輯代碼。(ui 不用太關(guān)系)分析里面的有幾個事物:1. 地圖2. 蛇3. 食物了解游戲規(guī)則:1.蛇初始化的時候是三個節(jié)點,而且一開始蛇是出現(xiàn)在地圖的中間位置。2. 蛇吃到東西會長長一節(jié)。3. 蛇咬到自己會死,蛇撞墻也會死。4. 食物是隨機生成的,食物不能長在石頭上,食物可以長在蛇身上。建議:由于目前我們經(jīng)驗不足,所以在做項目的時候往往會出現(xiàn)比較大幅度修改代碼。自己建立自己的代碼庫。地圖:* * * * #$ * * * * char 寬高把這個地圖存儲到一個二維數(shù)組中給我,package cn.itcast.snake;i

2、mport java.awt.Point;import java.util.LinkedList;import java.util.Random;public class SnakeGame /地圖的寬(列數(shù))public static final int WIDTH = 35;/地圖高(行數(shù))public static final int HEIGHT = 9;/地圖private char background = new charHEIGHTWIDTH;/使用集合保存蛇節(jié)點的所有信息LinkedList/食物Point food;/向上移動public void moveUp()/獲取原

3、來蛇頭Point head = snake.getFirst();/添加新的蛇頭snake.addFirst(new Point(head.x,head.y-1);/刪除蛇尾snake.removeLast();/向下走public void moveDown()/獲取到原來的蛇頭Point head = snake.getFirst();/添加新的蛇頭snake.addFirst(new Point(head.x,head.y+1);/刪除蛇尾snake.removeLast();/向左走public void moveLeft()/獲取到原來的蛇頭Point head = snake.ge

4、tFirst();/添加新的蛇頭snake.addFirst(new Point(head.x-1,head.y);/刪除蛇尾snake.removeLast();/向右走public void moveRight()/獲取到原來的蛇頭Point head = snake.getFirst();/添加新的蛇頭snake.addFirst(new Point(head.x+1,head.y);/刪除蛇尾snake.removeLast();/生成食物public void createFood()/創(chuàng)建一個隨機數(shù)對象Random random = new Random();while(true)

5、int x = random.nextInt(WIDTH);int y = random.nextInt(HEIGHT);if(backgroundyx!=*)food = new Point(x,y);break;/顯示食物public void showFood()backgroundfood.yfood.x =;/初始化蛇public void initSnake()int x = WIDTH/2;int y = HEIGHT/2;snake.addFirst(new Point(x-1,y);snake.addFirst(new Point(x,y);snake.addFirst(ne

6、w Point(x+1,y);/顯示蛇-實際上就是將蛇節(jié)點的坐標信息反饋到地圖上,在地圖上畫上對應(yīng)的字符而已public void showSnake()/取出蛇頭Point head = snake.getFirst();backgroundhead.yhead.x = $;/畫蛇身for(int i =1; iPoint body = snake.get(i);backgroundbody.ybody.x = #;/初始化地圖public void initBackground()for(int rows = 0 ; rowsfor(int cols = 0 ; colsif(rows=0

7、|rows=(HEIGHT-1)|cols=0|cols=(WIDTH-1) /第一行、最后一行、第一列與最后一列backgroundrowscols = *;elsebackgroundrowscols = ;/顯示地圖的public void showBackground() /打印二維數(shù)組for(int rows = 0 ; rowsSystem.out.print(backgroundrowscols);System.out.println(); /換行/刷新游戲的狀態(tài)public void refrash()/清空游戲之前的所有狀態(tài)信息initBackground();/把蛇最新的狀

8、態(tài)反饋到地圖上showSnake();/把食物的信息反饋到地圖婚喪。showFood();/顯示當(dāng)前地圖的信息showBackground();public static void main(String args) throws Exception SnakeGame snake = new SnakeGame();/初始化地圖snake.initBackground();/初始化蛇snake.initSnake();/把蛇的信息反饋到地圖上snake.showSnake();/初始化事物snake.createFood();/顯示食物snake.showFood(); snake.show

9、Background();/向上三步for(int i = 0; i snake.moveUp();snake.refrash();Thread.sleep(500); /向下三步for(int i = 0; i snake.moveDown();snake.refrash();Thread.sleep(500); /向右三步for(int i = 0; i snake.moveRight();snake.refrash();Thread.sleep(500);/向左三步for(int i = 0; i snake.moveLeft();snake.refrash();Thread.sleep

10、(500);package cn.itcast.snake;import java.awt.BorderLayout;import java.awt.Point;import java.awt.event.KeyAdapter;import java.awt.event.KeyEvent;import java.util.LinkedList;import java.util.Random;import javax.swing.JButton;import javax.swing.JFrame;import cn.itcast.util.FrameUtil;public class Snake

11、Game /地圖的寬(列數(shù))public static final int WIDTH = 35;/地圖高(行數(shù))public static final int HEIGHT = 9;/地圖private char background = new charHEIGHTWIDTH;/使用集合保存蛇節(jié)點的所有信息LinkedList snake = new LinkedList();/食物Point food;/使用四個常量表示四個方向public static final int UP_DIRECTION = 1; /上public static final int DOWN_DIRECTIO

12、N = -1; /下public static final int LEFT_DIRECTION = 2; /左public static final int RIGHT_DIRECTION =-2; /右/蛇當(dāng)前的方向int currentDrection = -2; / 蛇默認是向右行走/記錄游戲是否結(jié)束static boolean isGameOver = false; /默認游戲沒有結(jié)束的。/蛇移動的方法public void move()Point head = snake.getFirst();/蛇是根據(jù)當(dāng)前的方向移動的switch (currentDrection) case U

13、P_DIRECTION:/添加新的蛇頭snake.addFirst(new Point(head.x,head.y-1);break;case DOWN_DIRECTION:/添加新的蛇頭snake.addFirst(new Point(head.x,head.y+1);break;case LEFT_DIRECTION:if(head.x=0)snake.addFirst(new Point(WIDTH-1,head.y);else/添加新的蛇頭snake.addFirst(new Point(head.x-1,head.y);break;case RIGHT_DIRECTION:if(he

14、ad.x=WIDTH-1)snake.addFirst(new Point(0,head.y);else/添加新的蛇頭snake.addFirst(new Point(head.x+1,head.y);break;default:break;if(eat()/吃到了食物createFood();else/刪除蛇尾snake.removeLast();/改變當(dāng)前方向的方法public void changeDirection(int newDirection)/判斷新方向是否與當(dāng)前方向是否是相反方向,才允許其改變if(newDirection+currentDrection!=0)this.cu

15、rrentDrection = newDirection;/生成食物public void createFood()/創(chuàng)建一個隨機數(shù)對象Random random = new Random();while(true)int x = random.nextInt(WIDTH);int y = random.nextInt(HEIGHT);if(backgroundyx!=*)food = new Point(x,y);break;/顯示食物public void showFood()backgroundfood.yfood.x =;/初始化蛇public void initSnake()int

16、x = WIDTH/2;int y = HEIGHT/2;snake.addFirst(new Point(x-1,y);snake.addFirst(new Point(x,y);snake.addFirst(new Point(x+1,y);/顯示蛇-實際上就是將蛇節(jié)點的坐標信息反饋到地圖上,在地圖上畫上對應(yīng)的字符而已public void showSnake()/畫蛇身for(int i =1; iPoint body = snake.get(i);backgroundbody.ybody.x = #;/取出蛇頭Point head = snake.getFirst();backgrou

17、ndhead.yhead.x = $;/初始化地圖public void initBackground()for(int rows = 0 ; rowsfor(int cols = 0 ; colsif(rows=0|rows=(HEIGHT-1) /第一行、最后一行、第一列與最后一列backgroundrowscols = *;elsebackgroundrowscols = ;/顯示地圖的public void showBackground() /打印二維數(shù)組for(int rows = 0 ; rowsSystem.out.print(backgroundrowscols);System

18、.out.println(); /換行/刷新游戲的狀態(tài)public void refrash()/清空游戲之前的所有狀態(tài)信息initBackground();/把蛇最新的狀態(tài)反饋到地圖上showSnake();/把食物的信息反饋到地圖婚喪。showFood();/顯示當(dāng)前地圖的信息showBackground();/吃食物public boolean eat()/獲取到原來的蛇頭Point head = snake.getFirst();if(head.equals(food)return true;return false;/游戲結(jié)束的方法public void isGameOver()/撞

19、墻死亡Point head = snake.getFirst();if(backgroundhead.yhead.x=*)isGameOver = true;/咬到自己蛇身for(int i = 1; iPoint body = snake.get(i);if(head.equals(body)isGameOver = true;public static void main(String args) throws Exception final SnakeGame snake = new SnakeGame();/初始化地圖snake.initBackground();/初始化蛇snake.

20、initSnake();/把蛇的信息反饋到地圖上snake.showSnake();/初始化事物snake.createFood();/顯示食物snake.showFood();snake.showBackground();JFrame frame = new JFrame(方向盤);frame.add(new JButton(),BorderLayout.NORTH); frame.add(new JButton(),BorderLayout.SOUTH); frame.add(new JButton(),BorderLayout.WEST); frame.add(new JButton()

21、,BorderLayout.EAST); JButton button = new JButton(點擊控制方向); frame.add(button);FrameUtil.initFrame(frame, 300, 300);/給按鈕添加事件監(jiān)聽器button.addKeyListener(new KeyAdapter()Overridepublic void keyPressed(KeyEvent e) int code = e.getKeyCode();switch (code) case KeyEvent.VK_UP:snake.changeDirection(UP_DIRECTION

22、);break;case KeyEvent.VK_DOWN:snake.changeDirection(DOWN_DIRECTION);break;case KeyEvent.VK_LEFT:snake.changeDirection(LEFT_DIRECTION);break;case KeyEvent.VK_RIGHT:snake.changeDirection(RIGHT_DIRECTION);break;default:break;snake.move();snake.isGameOver();/判斷是否游戲結(jié)束snake.refrash();if(isGameOver)System.

23、out.println(游戲結(jié)束了.);System.exit(0););package cn.itcast.util;import java.awt.Dimension;import java.awt.Toolkit;import javax.swing.JFrame;/初始化窗體的工具類public class FrameUtil public static void initFrame(JFrame frame,int width , int height)Toolkit toolkit = Toolkit.getDefaultToolkit(); /獲取一個與系統(tǒng)相關(guān)工具類對象/獲取屏

24、幕的分辨率Dimension d = toolkit.getScreenSize();int x = (int) d.getWidth();int y = (int) d.getHeight();frame.setBounds(x-width)/2, (y-height)/2, width, height);frame.setVisible(true);frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);package cn.itcast.view;import java.awt.Color;import java.awt.Font;imp

25、ort java.awt.Graphics;import javax.swing.JFrame;import javax.swing.JPanel;import cn.itcast.util.FrameUtil;public class Demo1 extends JPanel /Demo1 也是一個面板Overridepublic void paint(Graphics g) / Graphics g 畫筆使用該畫筆可以畫任何的東西。/設(shè)置畫筆的顏色g.setColor(Color.GRAY);/畫矩形g.fill3DRect(0, 0, 20, 20, true);g.fill3DRect

26、(20, 0, 20, 20, true);g.setColor(Color.GREEN);g.fill3DRect(20,20, 20, 20, true);/寫字g.setColor(Color.RED);/設(shè)置畫筆的字體g.setFont(new Font(宋體, Font.BOLD, 30);g.drawString(GAME OVER, 300, 200);public static void main(String args) JFrame frame = new JFrame(測試);Demo1 d = new Demo1();frame.add(d);FrameUtil.ini

27、tFrame(frame,700, 500);package cn.itcast.view;import java.awt.Color;import java.awt.Graphics;import java.awt.Point;import java.awt.event.KeyAdapter;import java.awt.event.KeyEvent;import java.util.LinkedList;import javax.swing.JFrame;import javax.swing.JPanel;import cn.itcast.util.FrameUtil;public cl

28、ass SnakeView extends JPanel/地圖的寬(列數(shù))public static final int WIDTH = 40;/地圖高(行數(shù))public static final int HEIGHT = 30;/格子寬public static final int CELLWIDTH = 20;/格子高public static final int CELLHEIGHT = 20;/地圖private boolean background = new booleanHEIGHTWIDTH;/使用集合保存蛇節(jié)點的所有信息LinkedList/初始化蛇public void

29、initSnake()int x = WIDTH/2;int y = HEIGHT/2;snake.addFirst(new Point(x-1,y);snake.addFirst(new Point(x,y);snake.addFirst(new Point(x+1,y);/向上移動public void moveUp()/獲取原來蛇頭Point head = snake.getFirst();/添加新的蛇頭snake.addFirst(new Point(head.x,head.y-1);/刪除蛇尾snake.removeLast();/初始化地圖public void initBackground()for(int rows = 0 ; rowsfor(int cols = 0 ; colsif(rows=0|rows=(HEIGHT-1)|cols=0|cols=(WIDTH-1) /第一行、最后一行、第一列與最后一列backgroundrowscols = true;Overridepublic void paint(Graphics g) /畫地圖for(

溫馨提示

  • 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

提交評論