JAVA实现贪吃蛇游戏的实践记录(一)

  • 一、前言:
  • 二、实现基本功能:
  • 三、预期功能展望:
  • 四、程序代码展示:



一、前言:

  • 贪吃蛇游戏是一款非常大众化的小游戏。整个游戏的任务很简单,就是通过上下左右操控蛇的移动方向(控制机制),在不撞到墙和不撞到自己(失败机制)的前提下,去到吃屏幕上出现的食物,让自己变的更长,获得的分数更高(奖励机制)。
  • 不久前看了一期关于java制作贪吃蛇游戏的视频,打算自己去实践,补充一下游戏的功能。

二、实现基本功能:

  1. 画一个游戏界面
  2. 在界面上划定游戏区域
  3. 在游戏区域内画上食物和蛇

三、预期功能展望:

  • 功能补充:
  1. 设置定时器,让蛇动起来
  2. 设置监听,按键控制蛇头转向
  3. 吃到食物蛇体增长
  4. 食物的随机生成
  5. 设置游戏积分/失败机制

四、程序代码展示:

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);
}