⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 snakepanel.java

📁 用JAVA实现的小游戏
💻 JAVA
字号:
import java.awt.BasicStroke;
import java.awt.Color;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.util.Arrays;
import java.util.Random;
import java.util.Timer;
import java.util.TimerTask;

import javax.swing.JPanel;

class SnakePanel extends JPanel {
  private int[] x = new int[20], y = new int[20];

  private int dx = 5, dy = 5;

  private Timer timeOut;

  private Timer autoMove;

  private void monite(){
    if(timeOut != null){
      timeOut.cancel();
      timeOut = null;
    }
    if(autoMove != null){
      autoMove.cancel();
      autoMove = null;
    }
    timeOut = new Timer(true);
    timeOut.schedule(new TimerTask() {
      public void run() {
        timeOut.cancel();
        timeOut = null;
        autoMove = new Timer(true);
        autoMove.schedule(new TimerTask() {
          public void run() {
            moveRandomly();
          }
        }, 30, 30);
      }
    }, 10000);
  }
  
  public SnakePanel() {
    Arrays.fill(x, 15);
    Arrays.fill(y, 15);
    monite();
  }

  public void paint(Graphics g1d) {
    super.paint(g1d);
    Graphics2D g = (Graphics2D) g1d;
    g.setColor(Color.red);
    g.fillRect(10, 10, getWidth() - 20, getHeight() - 20);
    g.setColor(Color.BLUE);
    g.fillOval(x[0] - 5, y[0] - 5, 11, 11);
    g.setStroke(new BasicStroke(2f));
    g.drawPolyline(x, y, x.length);
  }

  Random r = new Random();

  public void moveRandomly() {
    move('1' + r.nextInt(9));
  }

  public void keyInput(int c){
    move(c);
    System.out.println("enterd: " + c + " (" + (char) c + ")");
    monite();
  }
  
  private void move(int c) {
    for (int i = x.length - 1; i >= 1; i--) {
      x[i] = x[i - 1];
      y[i] = y[i - 1];
    }
    switch (c) {
    case '8':
      if (y[0] - dx > 15)
        y[0] -= dx;
      break;
    case '2':
      if (y[0] + dx < getHeight() - 20)
        y[0] += dx;
      break;
    case '7':
      if (x[0] - dx > 15)
        x[0] -= dx;
      if (y[0] - dx > 15)
        y[0] -= dx;
      break;
    case '1':
      if (x[0] - dx > 15)
        x[0] -= dx;
      if (y[0] + dx < getHeight() - 20)
        y[0] += dx;
      break;
    case '9':
      if (x[0] + dx < getWidth() - 20)
        x[0] += dx;
      if (y[0] - dx > 15)
        y[0] -= dx;
      break;
    case '3':
      if (x[0] + dx < getWidth() - 20)
        x[0] += dx;
      if (y[0] + dx < getHeight() - 20)
        y[0] += dx;
      break;
    case '4':
      if (x[0] - dx > 15)
        x[0] -= dx;
      break;
    case '6':
      if (x[0] + dx < getWidth() - 20)
        x[0] += dx;
      break;
    }
    repaint();
  }
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -