JAVA实现贪吃蛇游戏的实践记录(一)
- 一、前言:
- 二、实现基本功能:
- 三、预期功能展望:
- 四、程序代码展示:
一、前言:
- 贪吃蛇游戏是一款非常大众化的小游戏。整个游戏的任务很简单,就是通过上下左右操控蛇的移动方向(控制机制),在不撞到墙和不撞到自己(失败机制)的前提下,去到吃屏幕上出现的食物,让自己变的更长,获得的分数更高(奖励机制)。
- 不久前看了一期关于java制作贪吃蛇游戏的视频,打算自己去实践,补充一下游戏的功能。
二、实现基本功能:
- 画一个游戏界面
- 在界面上划定游戏区域
- 在游戏区域内画上食物和蛇
三、预期功能展望:
- 功能补充:
- 设置定时器,让蛇动起来
- 设置监听,按键控制蛇头转向
- 吃到食物蛇体增长
- 食物的随机生成
- 设置游戏积分/失败机制
四、程序代码展示:
1:程序的入口
StartGame.java
代码如下:
package snakegame1;
import javax.swing.*;
//程序启动
public class StartGame1 {
public static void main(String[] args) {
//绘制静态窗口
JFrame frame = new JFrame("贪吃蛇小游戏");
//设置界面的宽高
frame.setSize(965, 655);
//屏幕中央弹出
frame.setLocationRelativeTo(null);
//窗口大小固定
frame.setResizable(false);
//关闭窗口时退出程序
frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
//添加游戏面板
frame.add(new GamePanel1());
//设置窗体可见
frame.setVisible(true);
}
}
2:程序的主体
GamePanel.java
代码如下:
package snakegame1;
import javax.swing.*;
import java.awt.*;
//游戏面板
public class GamePanel1 extends JPanel {
//一、基本属性
//定义蛇
int length; //蛇体长度
int[] snakeX = new int[800]; //蛇的坐标
int[] snakeY = new int[800];
String order; //方向,"R"(右),"L"(左),"U"(上),"D"(下);
//定义食物
int foodX = 400; //食物的坐标
int foodY = 500;
//二、初始化操作
//定义构造器
public GamePanel1() {
init(); //调用初始化方法
}
//定义初始化方法
public void init() {
length = 3; //初始化蛇长(3节)
snakeX[0] = 100; //初始化蛇位置
snakeY[0] = 75;
snakeX[1] = 75;
snakeY[1] = 75;
snakeX[2] = 50;
snakeY[2] = 75;
order = "R"; //初始化蛇头方向
}
//三、画板部分:执行绘制操作
@Override
protected void paintComponent(Graphics g) {
//画界面
super.paintComponent(g); //清屏操作
this.setBackground(Color.white); //设置背景颜色
//绘制游戏区域
g.setColor(Color.black);
g.fillRect(25, 50, 900, 550);
//画蛇头
Data1.right.paintIcon(this, g, snakeX[0], snakeY[0]);
//画蛇身
for (int i = 1; i < length; i++) {
Data1.body.paintIcon(this, g, snakeX[i], snakeY[i]);
}
//画食物
Data1.food.paintIcon(this, g, foodX, foodY);
}
}
3:存放图片资源
Data.java
代码如下:
package snakegame1;
import javax.swing.*;
import java.net.URL;
//存放数据
public class Data1 {
//导入素材图片
//蛇头图片
private static final URL upURL = Data1.class.getResource("/resources1/up1.jpg"); //上
private static final URL leftURL = Data1.class.getResource("/resources1/left1.jpg"); //左
private static final URL rightURL = Data1.class.getResource("/resources1/right1.jpg"); //右
private static final URL downURL = Data1.class.getResource("/resources1/down1.jpg"); //下
public static ImageIcon up = new ImageIcon(upURL);
public static ImageIcon left = new ImageIcon(leftURL);
public static ImageIcon right = new ImageIcon(rightURL);
public static ImageIcon down = new ImageIcon(downURL);
//蛇身图片
private static final URL bodyURL = Data1.class.getResource("/resources1/body1.jpg");
public static ImageIcon body = new ImageIcon(bodyURL);
//食物图片
private static final URL foodURL = Data1.class.getResource("/resources1/food1.jpg");
public static ImageIcon food = new ImageIcon(foodURL);
}