贪吃蛇小游戏
帧:如果时间片足够小,就是动画,一秒30帧。连起来是动画,拆开就是静态图片。
键盘监听:
定时器:Timer
基本步骤:
-
-
绘画
-
监听
-
事件监听
-
键盘监听
-
package com.zhang.snake;
import javax.swing.*;
/**
* 主启动类
*/
public class MyGame {
public static void main(String[] args) {
//创建 JFrame(); 实例对象
JFrame frame = new JFrame();
//设置窗口大小
frame.setBounds(10,10,900,720);
//设置窗口可见性
frame.setVisible(true);
//设置窗口不可变动
frame.setResizable(false);
//设置窗口可关闭性
frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
//创建游戏页面
frame.add(new MyGamePanel());
}
}
package com.zhang.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;
/**
* 面板类
*/
public class MyGamePanel extends JPanel implements KeyListener, ActionListener {
//定义蛇的数据结拜
public int length;//默认长度
public int[] snakeX = new int[600];//横坐标 X
public int[] snakeY = new int[500];//纵坐标 Y
public String fx;//小蛇头部方向
//游戏的开始与停止事件,默认为停止状态
public boolean isStrait = false;
//游戏失败判断,默认不失败
public boolean isFail = false;
//定义定时器
//参数一:多少时间执行一次
//参数二:监听器,监听当前类 this 指当前类
Timer timer = new Timer(100, this);//一百毫秒执行一次
//定义食物的坐标
public int foodx;
public int foody;
//创建随机数组
Random random = new Random();
//定义分数
int score;
//创建构造器
public MyGamePanel(){
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);
foody = 75 + 25 * random.nextInt(24);
//分数默认为0
score = 0;
}
//绘制游戏的界面
