?? snake_frame.java
字號:
import java.awt.Color;
import java.awt.Graphics;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import javax.swing.JFrame;
/**
* 貪吃蛇的界面類
* @author HqkHxgHjj
*
*/
public class Snake_Frame extends JFrame{
class MyKeyProcess implements KeyListener{
public void keyPressed(KeyEvent e) {
//先得獲得用戶到底按下的是什么鍵
int keyCode = e.getKeyCode();
//改變direction變量的方向值
switch (keyCode) {
case KeyEvent.VK_LEFT:
direction = WEST;
break;
case KeyEvent.VK_UP:
direction = NORTH;
break;
case KeyEvent.VK_RIGHT:
direction = EAST;
break;
case KeyEvent.VK_DOWN:
direction = SOUTH;
break;
}
}
public void keyReleased(KeyEvent arg0) {
}
public void keyTyped(KeyEvent arg0) {
}
}
/**
* 界面的寬度
*/
final static int SNAKE_FRAME_WIDTH = 400;
/**
* 界面的高度
*/
final static int SNAKE_FRAME_HEIGHT = 600;
/**
* 蛇身的寬度
*/
final static int SNAKE_WIDTH = 8;
/**
* 重繪的速度
*/
final static int SPEED = 200;
/**
* 朝東的常量
*/
final static int EAST = 0;
/**
* 朝西的常量
*/
final static int WEST = 1;
/**
* 朝南的常量
*/
final static int SOUTH = 2;
/**
* 朝北的常量
*/
final static int NORTH = 3;
//畫整條蛇時需要聲明的變量開始
/**
* 保存蛇所有節點坐標二維數組
*/
int[][] snake = new int[200][2];
/**
* 蛇身長度變量
*/
int snake_num = 7;
/**
* 存儲方向的變量
*/
int direction = EAST;
//畫整條蛇時需要聲明的變量結束
// /**
// * 貪吃蛇的X坐標
// */
// int snake_x = 200;
// /**
// * 貪吃蛇的Y坐標
// */
// int snake_y = 80;
Snake_Frame(){
//初始化蛇坐標
init();
//注冊事件處理對象
this.addWindowListener(new MyWindowProcess());
//注冊鍵盤事件處理對象
this.addKeyListener(new MyKeyProcess());
}
/**
* 初始化蛇的坐標
*/
public void init(){
//初始化蛇頭坐標
snake[0][0] = 200;
snake[0][1] = 80;
//初始化蛇身坐標
for(int i = 1 ; i < snake_num ; i++){
snake[i][0] = snake[i - 1][0] + SNAKE_WIDTH;
snake[i][1] = snake[i - 1][1];
}
}
/**
* 刷新背景的函數
* @param g 用來刷背景的畫筆
*/
public void flushScreen(Graphics g){
//改畫筆顏色為背景色
g.setColor(Color.GREEN);
//刷背景
g.fillRect(0, 0,
Snake_Frame.SNAKE_FRAME_WIDTH,
Snake_Frame.SNAKE_FRAME_HEIGHT);
//改畫筆顏色為前景色
g.setColor(Color.BLACK);
}
/**
* 畫蛇的函數
* @param g 畫蛇的畫筆
*/
public void drawSnake(Graphics g){
for(int i = 0 ; i < snake_num ; i++){
g.drawRect(snake[i][0],snake[i][1],SNAKE_WIDTH,SNAKE_WIDTH);
}
}
/**
* 移動蛇的函數
*/
public void move(){
//根據前面的節點坐標改蛇身坐標
for(int i = (snake_num - 1) ; i > 0 ; i--){
snake[i][0] = snake[i - 1][0];
snake[i][1] = snake[i - 1][1];
}
//先改蛇頭坐標
switch (direction) {
case WEST:
snake[0][0] -= SNAKE_WIDTH;
break;
case EAST:
snake[0][0] += SNAKE_WIDTH;
break;
case SOUTH:
snake[0][1] += SNAKE_WIDTH;
break;
case NORTH:
snake[0][1] -= SNAKE_WIDTH;
break;
}
}
/**
* 休息的代碼
*/
public void speed(){
try {
Thread.sleep(SPEED);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
/**
* 界面類畫完自己之后調用的方法
* @param g 畫筆對象
*/
public void paint(Graphics g) {
//刷新背景開始
flushScreen(g);
//刷新背景結束
//畫蛇
drawSnake(g);
//移動蛇
move();
//休息一下
speed();
//重畫
this.repaint();
}
public static void main(String[] args) {
Snake_Frame f = new Snake_Frame();
f.setSize(Snake_Frame.SNAKE_FRAME_WIDTH,
Snake_Frame.SNAKE_FRAME_HEIGHT);
f.setVisible(true);
}
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -