前不久,跟着博主学习,做了一个小游戏——贪吃蛇,尽管是用java的gui做的,然而我集体感觉趣味是最好的老师,只管当初社会上曾经淘汰了gui,然而我心愿咱们学习可能将趣味投入到学习当中,趣味是最好的老师。

StartGame.java

package com.xiaoyu.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.add(new GamePanel());        frame.setVisible(true);    }}

GamePanel.java

package com.xiaoyu.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 GamePanel extends JPanel implements KeyListener, ActionListener {    //定义蛇的数据结构    int lenght;//蛇的长度    int[] snakeX=new int[600];//蛇的x坐标    int[] snakeY=new int[500];//蛇的y坐标    String fx="R";    //食物的坐标    int foodx;    int foody;    Random random=new Random();    int score;//问题    //游戏以后的状态 开始 进行    boolean isStart = false;//默认进行    boolean isFail=false;    //定时器    Timer timer=new Timer(100,this);//100毫秒执行一次!    //结构器    public GamePanel(){        init();        this.setFocusable(true);//取得焦点事件        this.addKeyListener(this);//取得键盘监听事件        timer.start();//游戏一开始定时器就启动    }    //初始化办法    public void init(){        lenght = 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);        score=0;    }    //绘制面板,咱们游戏中的所有大小都由这只画笔来画    @Override    protected void paintComponent(Graphics g) {        super.paintComponent(g);//清屏        //绘制动态的面板        this.setBackground(Color.BLACK);        Data.header.paintIcon(this,g,25,11);//头部广告栏画下来        g.fillRect(20,75,850,600);        //画积分        g.setColor(Color.WHITE);        g.setFont(new Font("微软雅黑",Font.BOLD,18));        g.drawString("长度:"+lenght,750,35);        g.drawString("分数:"+score,750,50);        //画食物        Data.food.paintIcon(this,g,foodx,foody);        //把小蛇画下来        if (fx.equals("R")){            Data.right.paintIcon(this,g,snakeX[0],snakeY[0]);//蛇头初始化向右        }else if (fx.equals("L")){            Data.left.paintIcon(this,g,snakeX[0],snakeY[0]);//蛇头初始化向左        }else if (fx.equals("U")){            Data.up.paintIcon(this,g,snakeX[0],snakeY[0]);//蛇头初始化向上        }else if (fx.equals("D")){            Data.down.paintIcon(this,g,snakeX[0],snakeY[0]);//蛇头初始化向下        }        for (int i = 1; i < lenght ; i++) {            Data.body.paintIcon(this,g,snakeX[i],snakeY[i]);        }        //游戏状态        if (isStart==false){            g.setColor(Color.WHITE);            g.setFont(new Font("微软雅黑",Font.BOLD,40));            g.drawString("按下空格开始游戏",300,300);        }        //游戏失败        if (isFail){            g.setColor(Color.RED);            g.setFont(new Font("微软雅黑",Font.BOLD,40));            g.drawString("失败,按下空格从新开始",300,300);        }    }    //键盘监听事件    @Override    public void keyPressed(KeyEvent e) {        int keyCode=e.getKeyCode();        if (keyCode==KeyEvent.VK_SPACE){            if (isFail){                isFail = false;                init();            }else {                isStart=!isStart;            }            repaint();        }        //小蛇挪动        if (keyCode==KeyEvent.VK_UP){            fx="U";        }else if(keyCode==KeyEvent.VK_DOWN){            fx="D";        }else if(keyCode==KeyEvent.VK_LEFT){            fx="L";        }else if(keyCode==KeyEvent.VK_RIGHT){            fx="R";        }    }    //事件监听    @Override    public void actionPerformed(ActionEvent e) {        if (isStart && isFail==false){//如果游戏是开始状态            //吃食物            if (snakeX[0] == foodx && snakeY[0]==foody){                lenght++;//长度加一                score+=10;//分数加十                //再次随机生成食物                foodx=25+25*random.nextInt(34);                foody=75+25*random.nextInt(24);            }            //挪动            for (int i = lenght-1; i > 0 ; i--) {                snakeX[i]= snakeX[i-1];                snakeY[i]= snakeY[i-1];            }            //走向            if (fx.equals("R")){                snakeX[0] = snakeX[0]+25;                //边界判断                if (snakeX[0]>850){snakeX[0] = 25;}            }else if (fx.equals("L")){                snakeX[0] = snakeX[0]-25;                if (snakeX[0]<25){snakeX[0] = 850;}            }else if (fx.equals("U")){                snakeY[0] = snakeY[0]-25;                if (snakeY[0]<75){snakeY[0] = 650;}            }else if (fx.equals("D")){                snakeY[0] = snakeY[0]+25;                if (snakeY[0]>650){snakeY[0] = 75;}            }            //失败的断定,撞到本人            for (int i = 1; i < lenght ; i++) {                if (snakeX[0]==snakeX[i]&&snakeY[0]==snakeY[i]){                    isFail= true;                }            }            repaint();//重画页面        }        timer.start();//定时器开始    }    @Override    public void keyTyped(KeyEvent e) { }    @Override    public void keyReleased(KeyEvent e) { }}

Data.java

package com.xiaoyu.snake;import javax.swing.*;import java.net.URL;//数据中心public class Data {    public static URL headerURL = Data.class.getResource("static/header.png");    public static ImageIcon header=new ImageIcon(headerURL);    public static URL upURL = Data.class.getResource("static/up.png");    public static ImageIcon up=new ImageIcon(upURL);    public static URL downURL = Data.class.getResource("static/down.png");    public static ImageIcon down=new ImageIcon(downURL);    public static URL leftURL = Data.class.getResource("static/left.png");    public static ImageIcon left=new ImageIcon(leftURL);    public static URL rightURL = Data.class.getResource("static/right.png");    public static ImageIcon right=new ImageIcon(rightURL);    public static URL bodyURL = Data.class.getResource("static/body.png");    public static ImageIcon body=new ImageIcon(bodyURL);    public static URL foodURL = Data.class.getResource("static/food.png");    public static ImageIcon food=new ImageIcon(foodURL);}![image.png](/img/bVcR2OI)