📄 snakepanel.java
字号:
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;
private boolean isFirst = true;
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);
if (this.isFirst == true){
g.setColor(Color.red);
g.drawString("按这开始游戏!,pageup加速度,pagedown减速!",20,20);
isFirst = false;
}
}
//左移
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) {
repaint();
control.start();
this.requestFocus();
}
void jToggleButton1_actionPerformed(ActionEvent e) {
}
void jButton1_actionPerformed(ActionEvent 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);
}
}
class SnakePanel_jToggleButton1_actionAdapter implements java.awt.event.ActionListener {
private SnakePanel adaptee;
SnakePanel_jToggleButton1_actionAdapter(SnakePanel adaptee) {
this.adaptee = adaptee;
}
public void actionPerformed(ActionEvent e) {
adaptee.jToggleButton1_actionPerformed(e);
}
}
class SnakePanel_jButton1_actionAdapter implements java.awt.event.ActionListener {
private SnakePanel adaptee;
SnakePanel_jButton1_actionAdapter(SnakePanel adaptee) {
this.adaptee = adaptee;
}
public void actionPerformed(ActionEvent e) {
adaptee.jButton1_actionPerformed(e);
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -