1. <ul id="0c1fb"></ul>

      <noscript id="0c1fb"><video id="0c1fb"></video></noscript>
      <noscript id="0c1fb"><listing id="0c1fb"><thead id="0c1fb"></thead></listing></noscript>

      99热在线精品一区二区三区_国产伦精品一区二区三区女破破_亚洲一区二区三区无码_精品国产欧美日韩另类一区

      RELATEED CONSULTING
      相關(guān)咨詢
      選擇下列產(chǎn)品馬上在線溝通
      服務(wù)時(shí)間:8:30-17:00
      你可能遇到了下面的問(wèn)題
      關(guān)閉右側(cè)工具欄

      新聞中心

      這里有您想知道的互聯(lián)網(wǎng)營(yíng)銷解決方案
      java寫(xiě)貪吃蛇源代碼 java貪吃蛇

      用JAVA設(shè)計(jì)游戲:貪吃蛇游戲

      用MVC方式實(shí)現(xiàn)的貪吃蛇游戲,共有4個(gè)類。運(yùn)行GreedSnake運(yùn)行即可。主要是觀察者模式的使用,我已經(jīng)添加了很多注釋了。

      創(chuàng)新互聯(lián)是網(wǎng)站建設(shè)專家,致力于互聯(lián)網(wǎng)品牌建設(shè)與網(wǎng)絡(luò)營(yíng)銷,專業(yè)領(lǐng)域包括成都網(wǎng)站設(shè)計(jì)、做網(wǎng)站、電商網(wǎng)站制作開(kāi)發(fā)、微信小程序開(kāi)發(fā)、微信營(yíng)銷、系統(tǒng)平臺(tái)開(kāi)發(fā),與其他網(wǎng)站設(shè)計(jì)及系統(tǒng)開(kāi)發(fā)公司不同,我們的整合解決方案結(jié)合了恒基網(wǎng)絡(luò)品牌建設(shè)經(jīng)驗(yàn)和互聯(lián)網(wǎng)整合營(yíng)銷的理念,并將策略和執(zhí)行緊密結(jié)合,且不斷評(píng)估并優(yōu)化我們的方案,為客戶提供全方位的互聯(lián)網(wǎng)品牌整合方案!

      1、

      /*

      * 程序名稱:貪食蛇

      * 原作者:BigF

      * 修改者:algo

      * 說(shuō)明:我以前也用C寫(xiě)過(guò)這個(gè)程序,現(xiàn)在看到BigF用Java寫(xiě)的這個(gè),發(fā)現(xiàn)雖然作者自稱是Java的初學(xué)者,

      * 但是明顯編寫(xiě)程序的素養(yǎng)不錯(cuò),程序結(jié)構(gòu)寫(xiě)得很清晰,有些細(xì)微得地方也寫(xiě)得很簡(jiǎn)潔,一時(shí)興起之

      * 下,我認(rèn)真解讀了這個(gè)程序,發(fā)現(xiàn)數(shù)據(jù)和表現(xiàn)分開(kāi)得很好,而我近日正在學(xué)習(xí)MVC設(shè)計(jì)模式,

      * 因此嘗試把程序得結(jié)構(gòu)改了一下,用MVC模式來(lái)實(shí)現(xiàn),對(duì)源程序得改動(dòng)不多。

      * 我同時(shí)也為程序增加了一些自己理解得注釋,希望對(duì)大家閱讀有幫助。

      */

      package mvcTest;

      /**

      * @author WangYu

      * @version 1.0

      * Description:

      * /pre

      * Create on :Date :2005-6-13 Time:15:57:16

      * LastModified:

      * History:

      */

      public class GreedSnake {

      public static void main(String[] args) {

      SnakeModel model = new SnakeModel(20,30);

      SnakeControl control = new SnakeControl(model);

      SnakeView view = new SnakeView(model,control);

      //添加一個(gè)觀察者,讓view成為model的觀察者

      model.addObserver(view);

      (new Thread(model)).start();

      }

      }

      -------------------------------------------------------------

      2、

      package mvcTest;

      //SnakeControl.java

      import java.awt.event.KeyEvent;

      import java.awt.event.KeyListener;

      /**

      * MVC中的Controler,負(fù)責(zé)接收用戶的操作,并把用戶操作通知Model

      */

      public class SnakeControl implements KeyListener{

      SnakeModel model;

      public SnakeControl(SnakeModel model){

      this.model = model;

      }

      public void keyPressed(KeyEvent e) {

      int keyCode = e.getKeyCode();

      if (model.running){ // 運(yùn)行狀態(tài)下,處理的按鍵

      switch (keyCode) {

      case KeyEvent.VK_UP:

      model.changeDirection(SnakeModel.UP);

      break;

      case KeyEvent.VK_DOWN:

      model.changeDirection(SnakeModel.DOWN);

      break;

      case KeyEvent.VK_LEFT:

      model.changeDirection(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 KeyEvent.VK_P:

      model.changePauseState();

      break;

      default:

      }

      }

      // 任何情況下處理的按鍵,按鍵導(dǎo)致重新啟動(dòng)游戲

      if (keyCode == KeyEvent.VK_R ||

      keyCode == KeyEvent.VK_S ||

      keyCode == KeyEvent.VK_ENTER) {

      model.reset();

      }

      }

      public void keyReleased(KeyEvent e) {

      }

      public void keyTyped(KeyEvent e) {

      }

      }

      -------------------------------------------------------------

      3、

      /*

      *

      */

      package mvcTest;

      /**

      * 游戲的Model類,負(fù)責(zé)所有游戲相關(guān)數(shù)據(jù)及運(yùn)行

      * @author WangYu

      * @version 1.0

      * Description:

      * /pre

      * Create on :Date :2005-6-13 Time:15:58:33

      * LastModified:

      * History:

      */

      //SnakeModel.java

      import javax.swing.*;

      import java.util.Arrays;

      import java.util.LinkedList;

      import java.util.Observable;

      import java.util.Random;

      /**

      * 游戲的Model類,負(fù)責(zé)所有游戲相關(guān)數(shù)據(jù)及運(yùn)行

      */

      class SnakeModel extends Observable implements Runnable {

      boolean[][] matrix; // 指示位置上有沒(méi)蛇體或食物

      LinkedList nodeArray = new LinkedList(); // 蛇體

      Node food;

      int maxX;

      int maxY;

      int direction = 2; // 蛇運(yùn)行的方向

      boolean running = false; // 運(yùn)行狀態(tài)

      int timeInterval = 200; // 時(shí)間間隔,毫秒

      double speedChangeRate = 0.75; // 每次得速度變化率

      boolean paused = false; // 暫停標(biāo)志

      int score = 0; // 得分

      int countMove = 0; // 吃到食物前移動(dòng)的次數(shù)

      // UP and DOWN should be even

      // RIGHT and LEFT should be odd

      public static final int UP = 2;

      public static final int DOWN = 4;

      public static final int LEFT = 1;

      public static final int RIGHT = 3;

      public SnakeModel( int maxX, int maxY) {

      this.maxX = maxX;

      this.maxY = maxY;

      reset();

      }

      public void reset(){

      direction = SnakeModel.UP; // 蛇運(yùn)行的方向

      timeInterval = 200; // 時(shí)間間隔,毫秒

      paused = false; // 暫停標(biāo)志

      score = 0; // 得分

      countMove = 0; // 吃到食物前移動(dòng)的次數(shù)

      // initial matirx, 全部清0

      matrix = new boolean[maxX][];

      for (int i = 0; i maxX; ++i) {

      matrix[i] = new boolean[maxY];

      Arrays.fill(matrix[i], false);

      }

      // initial the snake

      // 初始化蛇體,如果橫向位置超過(guò)20個(gè),長(zhǎng)度為10,否則為橫向位置的一半

      int initArrayLength = maxX 20 ? 10 : maxX / 2;

      nodeArray.clear();

      for (int i = 0; i initArrayLength; ++i) {

      int x = maxX / 2 + i;//maxX被初始化為20

      int y = maxY / 2; //maxY被初始化為30

      //nodeArray[x,y]: [10,15]-[11,15]-[12,15]~~[20,15]

      //默認(rèn)的運(yùn)行方向向上,所以游戲一開(kāi)始nodeArray就變?yōu)椋?/p>

      // [10,14]-[10,15]-[11,15]-[12,15]~~[19,15]

      nodeArray.addLast(new Node(x, y));

      matrix[x][y] = true;

      }

      // 創(chuàng)建食物

      food = createFood();

      matrix[food.x][food.y] = true;

      }

      public void changeDirection(int newDirection) {

      // 改變的方向不能與原來(lái)方向同向或反向

      if (direction % 2 != newDirection % 2) {

      direction = newDirection;

      }

      }

      /**

      * 運(yùn)行一次

      * @return

      */

      public boolean moveOn() {

      Node n = (Node) nodeArray.getFirst();

      int x = n.x;

      int y = n.y;

      // 根據(jù)方向增減坐標(biāo)值

      switch (direction) {

      case UP:

      y--;

      break;

      case DOWN:

      y++;

      break;

      case LEFT:

      x--;

      break;

      case RIGHT:

      x++;

      break;

      }

      // 如果新坐標(biāo)落在有效范圍內(nèi),則進(jìn)行處理

      if ((0 = x x maxX) (0 = y y maxY)) {

      if (matrix[x][y]) { // 如果新坐標(biāo)的點(diǎn)上有東西(蛇體或者食物)

      if (x == food.x y == food.y) { // 吃到食物,成功

      nodeArray.addFirst(food); // 從蛇頭贈(zèng)長(zhǎng)

      // 分?jǐn)?shù)規(guī)則,與移動(dòng)改變方向的次數(shù)和速度兩個(gè)元素有關(guān)

      int scoreGet = (10000 - 200 * countMove) / timeInterval;

      score += scoreGet 0 ? scoreGet : 10;

      countMove = 0;

      food = createFood(); // 創(chuàng)建新的食物

      matrix[food.x][food.y] = true; // 設(shè)置食物所在位置

      return true;

      } else // 吃到蛇體自身,失敗

      return false;

      } else { // 如果新坐標(biāo)的點(diǎn)上沒(méi)有東西(蛇體),移動(dòng)蛇體

      nodeArray.addFirst(new Node(x, y));

      matrix[x][y] = true;

      n = (Node) nodeArray.removeLast();

      matrix[n.x][n.y] = false;

      countMove++;

      return true;

      }

      }

      return false; // 觸到邊線,失敗

      }

      public void run() {

      running = true;

      while (running) {

      try {

      Thread.sleep(timeInterval);

      } catch (Exception e) {

      break;

      }

      if (!paused) {

      if (moveOn()) {

      setChanged(); // Model通知View數(shù)據(jù)已經(jīng)更新

      notifyObservers();

      } else {

      JOptionPane.showMessageDialog(null,

      "you failed",

      "Game Over",

      JOptionPane.INFORMATION_MESSAGE);

      break;

      }

      }

      }

      running = false;

      }

      private Node createFood() {

      int x = 0;

      int y = 0;

      // 隨機(jī)獲取一個(gè)有效區(qū)域內(nèi)的與蛇體和食物不重疊的位置

      do {

      Random r = new Random();

      x = r.nextInt(maxX);

      y = r.nextInt(maxY);

      } while (matrix[x][y]);

      return new Node(x, y);

      }

      public void speedUp() {

      timeInterval *= speedChangeRate;

      }

      public void speedDown() {

      timeInterval /= speedChangeRate;

      }

      public void changePauseState() {

      paused = !paused;

      }

      public String toString() {

      String result = "";

      for (int i = 0; i nodeArray.size(); ++i) {

      Node n = (Node) nodeArray.get(i);

      result += "[" + n.x + "," + n.y + "]";

      }

      return result;

      }

      }

      class Node {

      int x;

      int y;

      Node(int x, int y) {

      this.x = x;

      this.y = y;

      }

      }

      ------------------------------------------------------------

      4、

      package mvcTest;

      //SnakeView.java

      import javax.swing.*;

      import java.awt.*;

      import java.util.Iterator;

      import java.util.LinkedList;

      import java.util.Observable;

      import java.util.Observer;

      /**

      * MVC模式中得Viewer,只負(fù)責(zé)對(duì)數(shù)據(jù)的顯示,而不用理會(huì)游戲的控制邏輯

      */

      public class SnakeView implements Observer {

      SnakeControl control = null;

      SnakeModel model = null;

      JFrame mainFrame;

      Canvas paintCanvas;

      JLabel labelScore;

      public static final int canvasWidth = 200;

      public static final int canvasHeight = 300;

      public static final int nodeWidth = 10;

      public static final int nodeHeight = 10;

      public SnakeView(SnakeModel model, SnakeControl control) {

      this.model = model;

      this.control = control;

      mainFrame = new JFrame("GreedSnake");

      Container cp = mainFrame.getContentPane();

      // 創(chuàng)建頂部的分?jǐn)?shù)顯示

      labelScore = new JLabel("Score:");

      cp.add(labelScore, BorderLayout.NORTH);

      // 創(chuàng)建中間的游戲顯示區(qū)域

      paintCanvas = new Canvas();

      paintCanvas.setSize(canvasWidth + 1, canvasHeight + 1);

      paintCanvas.addKeyListener(control);

      cp.add(paintCanvas, BorderLayout.CENTER);

      // 創(chuàng)建底下的幫助欄

      JPanel panelButtom = new JPanel();

      panelButtom.setLayout(new BorderLayout());

      JLabel labelHelp;

      labelHelp = new JLabel("PageUp, PageDown for speed;", JLabel.CENTER);

      panelButtom.add(labelHelp, BorderLayout.NORTH);

      labelHelp = new JLabel("ENTER or R or S for start;", JLabel.CENTER);

      panelButtom.add(labelHelp, BorderLayout.CENTER);

      labelHelp = new JLabel("SPACE or P for pause", JLabel.CENTER);

      panelButtom.add(labelHelp, BorderLayout.SOUTH);

      cp.add(panelButtom, BorderLayout.SOUTH);

      mainFrame.addKeyListener(control);

      mainFrame.pack();

      mainFrame.setResizable(false);

      mainFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

      mainFrame.setVisible(true);

      }

      void repaint() {

      Graphics g = paintCanvas.getGraphics();

      //draw background

      g.setColor(Color.WHITE);

      g.fillRect(0, 0, canvasWidth, canvasHeight);

      // draw the snake

      g.setColor(Color.BLACK);

      LinkedList na = model.nodeArray;

      Iterator it = na.iterator();

      while (it.hasNext()) {

      Node n = (Node) it.next();

      drawNode(g, n);

      }

      // draw the food

      g.setColor(Color.RED);

      Node n = model.food;

      drawNode(g, n);

      updateScore();

      }

      private void drawNode(Graphics g, Node n) {

      g.fillRect(n.x * nodeWidth,

      n.y * nodeHeight,

      nodeWidth - 1,

      nodeHeight - 1);

      }

      public void updateScore() {

      String s = "Score: " + model.score;

      labelScore.setText(s);

      }

      public void update(Observable o, Object arg) {

      repaint();

      }

      }

      -------------------------------------------------------------

      求java貪吃蛇的編程,并有注釋

      J2ME貪吃蛇源代碼——200行左右,包含詳細(xì)注釋 package snake;import javax.microedition.midlet.*;

      import javax.microedition.lcdui.*;public class SnakeMIDlet extends MIDlet {

      SnakeCanvas displayable = new SnakeCanvas();

      public SnakeMIDlet() {

      Display.getDisplay(this).setCurrent(displayable);

      }public void startApp() {}public void pauseApp() {}public void destroyApp(boolean unconditional) {}}//文件名:SnakeCanvas.javapackage snake;import java.util.*;

      import javax.microedition.lcdui.*;/**

      * 貪吃蛇游戲

      */

      public class SnakeCanvas extends Canvas implements Runnable{

      /**存儲(chǔ)貪吃蛇節(jié)點(diǎn)坐標(biāo),其中第二維下標(biāo)為0的代表x坐標(biāo),第二維下標(biāo)是1的代表y坐標(biāo)*/

      int[][] snake = new int[200][2];

      /**已經(jīng)使用的節(jié)點(diǎn)數(shù)量*/

      int snakeNum;

      /**貪吃蛇運(yùn)動(dòng)方向,0代表向上,1代表向下,2代表向左,3代表向右*/

      int direction;

      /*移動(dòng)方向*/

      /**向上*/

      private final int DIRECTION_UP = 0;

      /**向下*/

      private final int DIRECTION_DOWN = 1;

      /**向左*/

      private final int DIRECTION_LEFT = 2;

      /**向右*/

      private final int DIRECTION_RIGHT = 3;/**游戲區(qū)域?qū)挾?/

      int width;

      /**游戲區(qū)域高度*/

      int height;/**蛇身單元寬度*/

      private final byte SNAKEWIDTH = 4;/**是否處于暫停狀態(tài),true代表暫停*/

      boolean isPaused = false;

      /**是否處于運(yùn)行狀態(tài),true代表運(yùn)行*/

      boolean isRun = true;/**時(shí)間間隔*/

      private final int SLEEP_TIME = 300;

      /**食物的X坐標(biāo)*/

      int foodX;

      /**食物的Y坐標(biāo)*/

      int foodY;

      /**食物的閃爍控制*/

      boolean b = true;

      /**Random對(duì)象*/

      Random random = new Random();

      public SnakeCanvas() {

      //初始化

      init();

      width = this.getWidth();

      height = this.getHeight();

      //啟動(dòng)線程

      new Thread(this).start();

      }/**

      * 初始化開(kāi)始數(shù)據(jù)

      */

      private void init(){

      //初始化節(jié)點(diǎn)數(shù)量

      snakeNum = 7;

      //初始化節(jié)點(diǎn)數(shù)據(jù)

      for(int i = 0;i snakeNum;i++){

      snake[i][0] = 100 - SNAKEWIDTH * i;

      snake[i][1] = 40;

      }

      //初始化移動(dòng)方向

      direction = DIRECTION_RIGHT;

      //初始化食物坐標(biāo)

      foodX = 100;

      foodY = 100;

      }protected void paint(Graphics g) {

      //清屏

      g.setColor(0xffffff);

      g.fillRect(0,0,width,height);

      g.setColor(0);//繪制蛇身

      for(int i = 0;i snakeNum;i++){

      g.fillRect(snake[i][0],snake[i][1],SNAKEWIDTH,SNAKEWIDTH);

      }

      //繪制食物

      if(b){

      g.fillRect(foodX,foodY,SNAKEWIDTH,SNAKEWIDTH);

      }

      }private void move(int direction){

      //蛇身移動(dòng)

      for(int i = snakeNum - 1;i 0;i--){

      snake[i][0] = snake[i - 1][0];

      snake[i][1] = snake[i - 1][1];

      }//第一個(gè)單元格移動(dòng)

      switch(direction){

      case DIRECTION_UP:

      snake[0][1] = snake[0][1] - SNAKEWIDTH;

      break;

      case DIRECTION_DOWN:

      snake[0][1] = snake[0][1] + SNAKEWIDTH;

      break;

      case DIRECTION_LEFT:

      snake[0][0] = snake[0][0] - SNAKEWIDTH;

      break;

      case DIRECTION_RIGHT:

      snake[0][0] = snake[0][0] + SNAKEWIDTH;

      break;

      }

      }

      /**

      * 吃掉食物,自身增長(zhǎng)

      */

      private void eatFood(){

      //判別蛇頭是否和食物重疊

      if(snake[0][0] == foodX snake[0][1] == foodY){

      snakeNum++;

      generateFood();

      }

      }

      /**

      * 產(chǎn)生食物

      * 說(shuō)明:食物的坐標(biāo)必須位于屏幕內(nèi),且不能和蛇身重合

      */

      private void generateFood(){

      while(true){

      foodX = Math.abs(random.nextInt() % (width - SNAKEWIDTH + 1))

      / SNAKEWIDTH * SNAKEWIDTH;

      foodY = Math.abs(random.nextInt() % (height - SNAKEWIDTH + 1))

      / SNAKEWIDTH * SNAKEWIDTH;

      boolean b = true;

      for(int i = 0;i snakeNum;i++){

      if(foodX == snake[i][0] snake[i][1] == foodY){

      b = false;

      break;

      }

      }

      if(b){

      break;

      }

      }

      }

      /**

      * 判斷游戲是否結(jié)束

      * 結(jié)束條件:

      * 1、蛇頭超出邊界

      * 2、蛇頭碰到自身

      */

      private boolean isGameOver(){

      //邊界判別

      if(snake[0][0] 0 || snake[0][0] (width - SNAKEWIDTH) ||

      snake[0][1] 0 || snake[0][1] (height - SNAKEWIDTH)){

      return true;

      }

      //碰到自身

      for(int i = 4;i snakeNum;i++){

      if(snake[0][0] == snake[i][0]

      snake[0][1] == snake[i][1]){

      return true;

      }

      }

      return false;

      }/**

      * 事件處理

      */

      public void keyPressed(int keyCode){

      int action = this.getGameAction(keyCode);

      //改變方向

      switch(action){

      case UP:

      if(direction != DIRECTION_DOWN){

      direction = DIRECTION_UP;

      }

      break;

      case DOWN:

      if(direction != DIRECTION_UP){

      direction = DIRECTION_DOWN;

      }

      break;

      case LEFT:

      if(direction != DIRECTION_RIGHT){

      direction = DIRECTION_LEFT;

      }

      break;

      case RIGHT:

      if(direction != DIRECTION_LEFT){

      direction = DIRECTION_RIGHT;

      }

      break;

      case FIRE:

      //暫停和繼續(xù)

      isPaused = !isPaused;

      break;

      }

      }/**

      * 線程方法

      * 使用精確延時(shí)

      */

      public void run(){

      try{

      while (isRun) {

      //開(kāi)始時(shí)間

      long start = System.currentTimeMillis();

      if(!isPaused){

      //吃食物

      eatFood();

      //移動(dòng)

      move(direction);

      //結(jié)束游戲

      if(isGameOver()){

      break;

      }

      //控制閃爍

      b = !b;

      }

      //重新繪制

      repaint();

      long end = System.currentTimeMillis();

      //延時(shí)

      if(end - start SLEEP_TIME){

      Thread.sleep(SLEEP_TIME - (end - start));

      }

      }

      }catch(Exception e){}

      }

      }

      貪吃蛇 java代碼

      自己寫(xiě)著玩的,很簡(jiǎn)單,你試一試哦...

      主要用了javax.swing.Timer這個(gè)類:

      import java.awt.*;

      import javax.swing.*;

      @SuppressWarnings("serial")

      public class MainClass extends JFrame {

      ControlSnake control;

      Toolkit kit;

      Dimension dimen;

      public static void main(String[] args) {

      new MainClass("my snake");

      }

      public MainClass(String s) {

      super(s);

      control = new ControlSnake();

      control.setFocusable(true);

      kit = Toolkit.getDefaultToolkit();

      dimen = kit.getScreenSize();

      add(control);

      setLayout(new BorderLayout());

      setLocation(dimen.width / 3, dimen.height / 3);// dimen.width/3,dimen.height/3

      setSize(FWIDTH, FHEIGHT);

      setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

      setResizable(false);

      setVisible(true);

      }

      public static final int FWIDTH = 315;

      public static final int FHEIGHT = 380;

      }

      import java.util.*;

      import java.awt.*;

      import java.awt.event.*;

      import javax.swing.*;

      import javax.swing.Timer;

      import java.util.Random;

      @SuppressWarnings("serial")

      public class ControlSnake extends JPanel implements ActionListener {

      Random rand;

      ArrayListPoint list, listBody;

      String str, str1;

      static boolean key;

      int x, y, dx, dy, fx, fy, flag;

      int snakeBody;

      int speed;

      public ControlSnake() {

      snakeBody = 1;

      str = "上下左右方向鍵控制 P鍵暫停...";

      str1 = "現(xiàn)在的長(zhǎng)度為:" + snakeBody;

      key = true;

      flag = 1;

      speed = 700;

      rand = new Random();

      list = new ArrayListPoint();

      listBody = new ArrayListPoint();

      x = 5;

      y = 5;

      list.add(new Point(x, y));

      listBody.add(list.get(0));

      dx = 10;

      dy = 0;

      fx = rand.nextInt(30) * 10 + 5;// 2

      fy = rand.nextInt(30) * 10 + 5;// 2

      setBackground(Color.WHITE);

      setSize(new Dimension(318, 380));

      final Timer time = new Timer(speed, this);

      time.start();

      addKeyListener(new KeyAdapter() {

      public void keyPressed(KeyEvent e) {

      if (e.getKeyCode() == 37) {

      dx = -10;

      dy = 0;

      } else if (e.getKeyCode() == 38) {

      dx = 0;

      dy = -10;

      } else if (e.getKeyCode() == 39) {

      dx = 10;

      dy = 0;

      } else if (e.getKeyCode() == 40) {

      dx = 0;

      dy = 10;

      } else if (e.getKeyCode() == 80) {

      if (flag % 2 == 1) {

      time.stop();

      }

      if (flag % 2 == 0) {

      time.start();

      }

      flag++;

      }

      }

      });

      }

      public void paint(Graphics g) {

      g.setColor(Color.WHITE);

      g.fillRect(0, 0, 400, 400);

      g.setColor(Color.DARK_GRAY);

      g.drawLine(3, 3, 305, 3);

      g.drawLine(3, 3, 3, 305);

      g.drawLine(305, 3, 305, 305);

      g.drawLine(3, 305, 305, 305);

      g.setColor(Color.PINK);

      for (int i = 0; i listBody.size(); i++) {

      g.fillRect(listBody.get(i).x, listBody.get(i).y, 9, 9);

      }

      g.fillRect(x, y, 9, 9);

      g.setColor(Color.ORANGE);

      g.fillRect(fx, fy, 9, 9);

      g.setColor(Color.DARK_GRAY);

      str1 = "現(xiàn)在的長(zhǎng)度為:" + snakeBody;

      g.drawString(str, 10, 320);

      g.drawString(str1, 10, 335);

      }

      public void actionPerformed(ActionEvent e) {

      x += dx;

      y += dy;

      if (makeOut() == false) {

      JOptionPane.showMessageDialog(null, "重新開(kāi)始......");

      speed = 700;

      snakeBody = 1;

      x = 5;

      y = 5;

      list.clear();

      list.add(new Point(x, y));

      listBody.clear();

      listBody.add(list.get(0));

      dx = 10;

      dy = 0;

      }

      addPoint(x, y);

      if (x == fx y == fy) {

      speed = (int) (speed * 0.8);//速度增加參數(shù)

      if (speed 200) {

      speed = 100;

      }

      fx = rand.nextInt(30) * 10 + 5;// 2

      fy = rand.nextInt(30) * 10 + 5;// 2

      snakeBody++;// 2

      } // 2

      repaint();

      }

      public void addPoint(int xx, int yy) {

      // 動(dòng)態(tài)的記錄最新發(fā)生的50步以內(nèi)的移動(dòng)過(guò)的坐標(biāo)

      // 并畫(huà)出最新的snakeBody

      if (list.size() 100) {//蛇身長(zhǎng)度最長(zhǎng)為100

      list.add(new Point(xx, yy));

      } else {

      list.remove(0);

      list.add(new Point(xx, yy));

      }

      if (snakeBody == 1) {

      listBody.remove(0);

      listBody.add(0, list.get(list.size() - 1));

      } else {

      listBody.clear();

      if (list.size() snakeBody) {

      for (int i = list.size() - 1; i 0; i--) {

      listBody.add(list.get(i));

      }

      } else {

      for (int i = list.size() - 1; listBody.size() snakeBody; i--) {

      listBody.add(list.get(i));

      }

      }

      }

      }

      public boolean makeOut() {

      if ((x 3 || y 3) || (x 305 || y 305)) {

      return false;

      }

      for (int i = 0; i listBody.size() - 1; i++) {

      for (int j = i + 1; j listBody.size(); j++) {

      if (listBody.get(i).equals(listBody.get(j))) {

      return false;

      }

      }

      }

      return true;

      }

      }


      分享名稱:java寫(xiě)貪吃蛇源代碼 java貪吃蛇
      本文URL:http://www.ef60e0e.cn/article/dodcgoj.html
      99热在线精品一区二区三区_国产伦精品一区二区三区女破破_亚洲一区二区三区无码_精品国产欧美日韩另类一区
      1. <ul id="0c1fb"></ul>

        <noscript id="0c1fb"><video id="0c1fb"></video></noscript>
        <noscript id="0c1fb"><listing id="0c1fb"><thead id="0c1fb"></thead></listing></noscript>

        霍邱县| 温泉县| 台南市| 锡林郭勒盟| 江永县| 和田县| 东海县| 秦安县| 墨江| 东乌| 稻城县| 顺平县| 宁陕县| 图木舒克市| 大厂| 巢湖市| 应用必备| 山阳县| 九龙县| 郴州市| 安龙县| 梓潼县| 岳阳县| 诸城市| 蚌埠市| 呼玛县| 历史| 柳江县| 华安县| 林周县| 高碑店市| 宜兰县| 老河口市| 北安市| 江津市| 荥阳市| 科技| 睢宁县| 西青区| 新闻| 翁源县|