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

📄 snakepanel.java~48~

📁 前段时间帮同学写了个简单动画程序:“贪食蛇的原型”
💻 JAVA~48~
字号:
package com.cxlife.snake;

import java.awt.Color;
import java.awt.Graphics;
import javax.swing.*;
import java.awt.event.*;
public class SnakePanel extends JPanel
                   implements java.io.Serializable,
                              java.lang.Cloneable,
                              com.cxlife.snake.ISnake,
                              java.awt.event.KeyListener,
                              java.awt.event.ActionListener,
                              com.cxlife.snake.GameStates{
  private Thread run_thread = null;
  private Color backgound_color = Color.black;
  private static final int DEFAULT_SPEED = 200;
  private static final int DEFAULT_SNAKE = 0;
  private Snake su = SnakeFactory.getInstance(DEFAULT_SNAKE);// Snake();
  private SnakeUnit su1 = new DefaultSnakeUnit();
  //游戏状态
  private int  curr_state = GameStates.RUNNING;
  //用来控制蛇体的运动
  private Timer control = null;
  //运动速度
  private int move_speed = DEFAULT_SPEED;

  public SnakePanel(){
    super();
    try {
      jbInit();
    }
    catch(Exception e) {
      e.printStackTrace();
    }
  }

  //清除指定区域内的信息
  //只是简单的用背景颜色覆盖
  public  void clearUnit(final int pLeft, final int pTop,
                                 final int pWidth, final int pHeight){
    Graphics g = this.getGraphics();//获取画布
    try{
      g.setColor(backgound_color);
      g.fillRect(pLeft,pTop,pWidth,pHeight);
    }finally{
      g.dispose();
    }
//   return this.getGraphics();
  }//end procedure

  public void paint(Graphics g){
    g.setColor(backgound_color);
    g.fillRect(0,0,this.getSize().width,this.getSize().height);
    su.draw(this);
  }
  //左移
  public void moveLeft(){
    su.setNext_direction(Direction.WEAST);
  }
  //右移
  public void moveRight(){
    su.setNext_direction(Direction.EAST);
  }
  //往上移动
  public void moveUp(){
    su.setNext_direction(Direction.NORTH);
  }
  //往下移动
  public void moveDown(){
    su.setNext_direction(Direction.SOUTH);
  }
  //-----------------------------------------
  //获取水平移动步长
  public  int getHStep(){
    return 10;
  }
  //获取垂直移动步长
  public   int getVStep(){
    return 10;
  }
  //-----------------------------------------
  private void jbInit() throws Exception {
    this.setBackground(backgound_color);
    this.addMouseListener(new SnakePanel_this_mouseAdapter(this));//设置背景颜色
    this.addKeyListener(this);
    //--------------------------------------
    control = new Timer(this.move_speed,this);
    //--------------------------------------
  }

  public void keyTyped(KeyEvent e){
  }

  public void keyPressed(KeyEvent e){

    int key_code = e.getKeyCode();
    if (key_code == e.VK_LEFT){
      this.moveLeft();
    }else if (key_code == e.VK_RIGHT){
       this.moveRight();
    }else if (key_code == e.VK_UP){
      this.moveUp();
    }else if (key_code == e.VK_DOWN){
      this.moveDown();
    }

    //速度调节
    //注意速度范围是[100-1000]
    if (key_code == e.VK_PAGE_UP){
      if (this.move_speed == 50)
        return;
      this.move_speed -= 50;
      control.stop();
      control = new Timer(this.move_speed,this);
      control.start();
      //重新设置记时器
    }else if (key_code == e.VK_PAGE_DOWN){
      if (this.move_speed == 1000)
        return;
      this.move_speed +=50;
      //重新设置记时器
      control.stop();
      control = new Timer(this.move_speed,this);
      control.start();
    }
  }

  public void keyReleased(KeyEvent e){
  }

  public void actionPerformed(ActionEvent e){
    if (this.curr_state == GameStates.RUNNING){
      su.move(this,this);
    }
  }

  void this_mouseClicked(MouseEvent e) {
      control.start();//
  }

}

class SnakePanel_this_mouseAdapter extends java.awt.event.MouseAdapter {
  private SnakePanel adaptee;

  SnakePanel_this_mouseAdapter(SnakePanel adaptee) {
    this.adaptee = adaptee;
  }
  public void mouseClicked(MouseEvent e) {
    adaptee.this_mouseClicked(e);
  }
}




⌨️ 快捷键说明

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