这是一款经典小游戏,贪吃蛇,玩家操控小蛇从小吃到大,全方面的代码解析,适合新手第一款的项目实战


更多项目👇

1、大鱼吃小鱼小游戏(Java版含源代码,JavaSwing+多线程+接口)

2、Java之马里奥游戏

3、魔塔小游戏Java版项目含源代码

4、飞机大战Java版(Java+JavaSwing+多线程结构)

5、云龙开炮版飞机大战(Java+JavaSwing+关卡+技能物品+宠物+商店界面+可切换音乐界面)


⭐项目完整源码获取⭐


🌈 🌈 🌈 🌈 🌈 🌈 🌈 🌈 🌈 🌈 🌈 🌈 🌈
 
🍂个人博客首页: KJ.JK
 
欢迎大家点赞👍收藏💖评论💬关注🔒
 
💖源码获取 | 💻学习交流 | 🤝商务合作 | 💨私信作者



项目结构


部分源代码如下:

苹果类

import java.awt.*;
import java.util.Random;

/**
 * 小蛇吃的苹果
 */
public class Apple {
    private static Color APPLE_COLOR=Color.RED;//苹果的颜色
    private int rows,cols;//出现的位置
    private int  w=Ground.BOX_SIZE;
    private int h=Ground.BOX_SIZE;

    private Random random=new Random();

    public Apple(){
        this.rows=random.nextInt(Ground.ROWS-5)+5;
        this.cols=random.nextInt(Ground.COLS-5)+5;
    }


    /**
     * 画苹果
     * @param g
     */
    public void drawApple(Graphics g){
        Color color = g.getColor();
        g.setColor(APPLE_COLOR);
        g.fillOval(rows*Ground.BOX_SIZE,cols*Ground.BOX_SIZE,w,h);
        g.setColor(color);
    }

    /**
     * 获取碰撞检测点
     * @return
     */
    public Rectangle getRectangle(){
        return new Rectangle(rows*Ground.BOX_SIZE,cols*Ground.BOX_SIZE,w,h);
    }

    /**
     * 更新苹果的位置
     */
    public void  updateAppleLocation(){
        this.rows=random.nextInt(Ground.ROWS-5)+5;
        this.cols=random.nextInt(Ground.COLS-5)+5;
    }
}


🔥系列热门专栏🔥:
 
⚡《JavaEE进阶序列 | 从小白到工程师》系列文章⚡
 
⚡《JavaEE项目实战》系列文章⚡
 
⚡《JavaSwing项目合集》系列文章⚡


草地类

import java.awt.*;
import java.awt.event.*;

/**
 * 草地类

 */
public class Ground extends Frame{

    public static final int ROWS=50;//草地行数
    public static final int COLS=50;//草地列数
    public static final int BOX_SIZE=15;//每个小格的大小
    private static final Color GROUND_COLOR=Color.BLACK;//草地的颜色
    private int score=0;//初始分数

    private boolean isOver=false;

    private PaintThread paintThread=new PaintThread();

    private Snake snake=new Snake(this);

    private Apple apple=new Apple();


    /**
     * 运行草地
     */
    public void execute(){
        setSize(COLS*BOX_SIZE,ROWS*BOX_SIZE);
        setLocation(200,200);
        addWindowListener(new WindowAdapter() {
            @Override
            public void windowClosing(WindowEvent e) {
                setVisible(false);
                System.exit(0);
            }
        });
        addKeyListener(new MyKeyListener());
        setVisible(true);
        new Thread(paintThread).start();
    }

    /**
     * 画出草地
     * @param g
     */
    @Override
    public void paint(Graphics g) {
        Color color = g.getColor();
        g.setColor(GROUND_COLOR);
        g.fillRect(0,0,COLS*BOX_SIZE,ROWS*BOX_SIZE);
        //画出横线
        g.setColor(Color.black);
        for(int i=1;i<ROWS;i++){
            g.drawLine(0,i*BOX_SIZE,COLS*BOX_SIZE,i*BOX_SIZE);
        }
        for(int i=1;i<COLS;i++){
            g.drawLine(i*BOX_SIZE,0,BOX_SIZE*i,ROWS*BOX_SIZE);
        }
        //画蛇
        snake.drawSnake(g);
        //画苹果
        apple.drawApple(g);
        //吃苹果
        snake.eatApple(apple);
        //分值
        g.setColor(Color.white);
        g.drawString("当前分数:"+score+" 分",30,60);
        if(isOver){
           g.setFont(new Font("宋体",Font.BOLD,30));
           g.setColor(Color.YELLOW);
           g.drawString("游戏结束 ! \n 按F2重玩",200,300);
        }
        g.setColor(color);


    }

    /**游戏结束*/
    public void stop(){
        isOver=true;
        paintThread.setOff();
    }

    /**
     * 重画草地的线程
     */
    private class PaintThread implements Runnable{

        private boolean flag=true;

        @Override
        public void run() {
            try {
                while (flag){
                    Thread.sleep(100);
                    repaint();
                }
            }catch (Exception e){
                System.out.println("【重画线程异常】");
                e.printStackTrace();
            }
        }

        public void setOff(){
            this.flag=false;
        }

        public void setOn(){
            this.flag=true;
        }

    }

    /**
     * 键盘事件
     */
    private class MyKeyListener extends KeyAdapter{
        @Override
        public void keyPressed(KeyEvent e) {
            snake.changeSnake(e);
            if(isOver){
                if(KeyEvent.VK_F2==e.getKeyCode())
                restart();
            }
        }
    }

    /**
     * 重新开始
     */
    private void restart() {
        isOver=false;
        snake=new Snake(this);
        paintThread.setOn();
        new Thread(paintThread).start();
    }
    /**
     * 双缓冲技术
     */
    Image offScreenImage = null;

    public void update(Graphics g) {
        if(offScreenImage == null) {
            offScreenImage = this.createImage(COLS*BOX_SIZE,ROWS*BOX_SIZE);
        }
        Graphics gOffScreen = offScreenImage.getGraphics();
        Color c = gOffScreen.getColor();
        gOffScreen.setColor(Color.GREEN);
        gOffScreen.fillRect(0, 0,COLS*BOX_SIZE,ROWS*BOX_SIZE);
        gOffScreen.setColor(c);
        paint(gOffScreen);
        g.drawImage(offScreenImage, 0, 0, null);
    }

    public int getScore(){
        return score;
    }
    public void setScore(int score){
        this.score=score;
    }
    public static void main(String[] args){
        new Ground().execute();
    }
}


创建链表类

public class TestCreateLinkNode {

    /**
     * 创建链表
     * @param args
     */
    public static void main(String[] args){
        LinkNode linkNode = new LinkNode();
        Node node=new Node();
        Node node1=new Node();
        Node node2=new Node();
        Node node3=new Node();
        node.setData(100);
        node1.setData(45);
        node2.setData(78);
        node3.setData(23);
        linkNode.addToTail(node);
        linkNode.addToTail(node1);
        linkNode.addToTail(node2);
        linkNode.addToHead(node3);
        linkNode.printLinkDatas();
    }
}


作者:KJ.JK

文章对你有所帮助的话,欢迎给个赞或者 star,你的支持是对作者最大的鼓励,不足之处可以在评论区多多指正,交流学习

更多推荐

贪吃蛇游戏项目(Java版含源代码)