帧,如果时间片足够小,就是动画,一秒30帧 60帧。连起来就是动画,拆开就是静态的图片。
键盘监听
定时器Timer
package com.kuang.snake;
?
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.util.Random;
?
import static sun.plugin.security.JDK11ClassFileTransformer.init;
?
//游戏的面板
public class GamePanel extends JPanel implements KeyListener, ActionListener {
?
//定义蛇的数据结构
int length;//蛇的长度
int[] snakeX = new int[600];//蛇的x坐标25*25
int[] snakeY = new int[500];//蛇的y坐标25*25
String fx ;//初始方向向右
?
//食物的坐标
int foodx;
int foody;
Random random = new Random();
?
int score;//成绩
?
?
?
?
?
?
//游戏当前的状态:开始 停止
boolean isStart = false;//默认是不开始
boolean isFaill = false;//游戏失败状态
?
//定时器 以ms为单位 1000ms = 1s
Timer timer = new Timer(100,this);//100ms执行一次
?
//构造器
public GamePanel() {
init();
//获得焦点和键盘事件
this.setFocusable(true);//获得焦点事件
this.addKeyListener(this);//获得键盘监听事件
timer.start();//游戏一开始定时器就启动
?
}
?
?
//初始方向
public void init(){
length = 3;
snakeX[0] = 100;snakeY[0] =100;//脑袋的坐标
snakeX[1] = 75;snakeY[1] =100;//第一个身体的坐标
snakeX[2] = 50;snakeY[2] =100;//第二个身体的坐标
fx = "R";//初始方向向右
?
//把食物随机分布在界面上
foodx = 25 + 25*random.nextInt(34);