项目实战
1. 游戏的主启动类
作为贪吃蛇游戏的主启动类,构建了顶级窗口,可以容纳各种面板,
package Snake;
import javax.swing.*;
/**
* 游戏的主启动类
*/
public class StartGame {
public static void main(String[] args) {
JFrame frame = new JFrame();
frame.setBounds(10,10,900,720);
frame.setResizable(false); //窗口大小不可变
frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
//正常游戏界面都应该在面板上
frame.setVisible(true);
}
}
2. 游戏的面板
若是没有super.paintComponent(g);
,则会出现闪屏,
在主启动类StartGame
中添加frame.add(new GamePanel());
,
package Snake;
import javax.swing.*;
import java.awt.*;
/**
* 游戏的面板
*/
public class GamePanel extends JPanel {
//绘制面板,游戏中所有东西都用这个画笔来画
@Override
protected void paintComponent(Graphics g){
super.paintComponent(g); //清屏
this.setBackground(Color.BLACK);
}
}
3. 数据中心
创建一个Data
类作为数据中心,用于调用statics
包里的资源,
package Snake;
import javax.swing.*;
import java.net.URL;
/**
* 数据中心,用于调用资源
*/
public class Data {
public static URL headerURL = Data.class.getResource("/statics/header.png");
public static ImageIcon header = new ImageIcon(headerURL);
public static URL downURL = Data.class.getResource("/statics/down.png");
public static URL leftURL = Data.class.getResource("/statics/left.png");
public static URL rightURL = Data.class.getResource("/statics/right.png");
public static URL upURL = Data.class.getResource("/statics/up.png");
public static ImageIcon up = new ImageIcon(upURL);
public static ImageIcon down = new ImageIcon(downURL);
public static ImageIcon left = new ImageIcon(leftURL);
public static ImageIcon right = new ImageIcon(rightURL);
public static URL bodyURL = Data.class.getResource("/statics/body.png");
public static ImageIcon body = new ImageIcon(bodyURL);
public static URL foodURL = Data.class.getResource("/statics/food.png");
public static ImageIcon food = new ImageIcon(foodURL);
}
4. 绘制静态面板
在GamePanel
类中,构建一个初始的静态面板,添加如下代码,
/**
* 绘制静态面板
*/
this.setBackground(Color.WHITE);
Data.header.paintIcon(this,g,25,11); //头部广告栏
g.fillRect(25,75,850,600); //默认游戏界面
5. 绘制静态小蛇
依然是在类GamePanel
中,先是绘制好小蛇的初始形态,
//定义蛇的数据结构
int length; //蛇的长度
int[] snakeX = new int[600]; //蛇的x坐标 25*25
int[] snakeY = new int[500]; //蛇的y坐标 25*25
//构造器
public GamePanel(){
init();
}
//初始化方法
public void init(){
length = 3;
snakeX[0] = 100; snakeY[0]