文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

Java怎么实现简单的贪吃蛇游戏

2023-06-20 15:37

关注

本篇内容主要讲解“Java怎么实现简单的贪吃蛇游戏”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Java怎么实现简单的贪吃蛇游戏”吧!

本文实例为大家分享了Java实现简单贪吃蛇游戏的具体代码,供大家参考,具体内容如下

代码

启动类

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

游戏画板

package 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 lenth;      //蛇的长度    int [] snakeX = new int[600];       //定义蛇的坐标X    int [] snakeY = new int[500];       //定义蛇的坐标Y    String fx ;//定义方向R:右 L:左 U:上 D:下    boolean isStart = false; //游戏是否开始    Timer timer = new Timer(120,this);//定时器    //定义一个食物    int foodx;    int foody;    Random random = new Random();    //定义死亡判断    boolean isFail = false;//默认不失败    //积分系统    int score;    //构造器    public GamePanel(){        init();        //获取键盘的监听事件        this.setFocusable(true);        this.addKeyListener(this);        timer.start();    }    //初始化    public void init(){        lenth = 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.white);        Data.header.paintIcon(this,g,25,11);        //放进头部广告        g.fillRect(25,75,850,600);        //默认游戏界面        //画一条静态的小蛇        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]);        }        //蛇的身体长度通过length来控制        for (int i = 1;i < lenth;i++){            Data.body.paintIcon(this,g,snakeX[i],snakeY[i]);        }        //画积分        g.setColor(Color.white);        g.setFont(new Font("微软雅黑",Font.BOLD,20));        g.drawString("长度"+lenth,700,45);        g.drawString("分数"+score,780,45);        //画食物        Data.food.paintIcon(this,g,foodx,foody);        //游戏提示:是否开始        if (isStart == false){            //画一个文字String来提示开始            g.setColor(Color.white);    //定义颜色            g.setFont(new Font("微软雅黑",Font.BOLD,40));   //设置字体            g.drawString("按下空格开始游戏",300,300);        }        //失败提醒        if (isFail){            //画一个文字String来提示失败            g.setColor(Color.RED);    //定义颜色            g.setFont(new Font("微软雅黑",Font.BOLD,40));   //设置字体            g.drawString("游戏失败,按下空格重新开始",200,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_LEFT){            fx = "L";        }else if (keyCode==KeyEvent.VK_RIGHT){            fx = "R";        }else if (keyCode==KeyEvent.VK_UP) {            fx = "U";        }else if (keyCode==KeyEvent.VK_DOWN) {            fx = "D";        }    }    //定时器,监听时间,帧,执行定时操作    @Override    public void actionPerformed(ActionEvent e) {        //如果游戏处于开始状态,并且游戏没有失败        if (isStart && isFail == false){            //右移            for (int i = lenth-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;}//下边界判断            }            //如果食物和蛇头坐标重合            if (snakeX[0]==foodx && snakeY[0]==foody){                lenth ++;//蛇的身体长度加一                score = score + 10;                //重新生成食物                foodx = 25 +25 * random.nextInt(34);                foody = 75 +25 * random.nextInt(24);            }            //结束判断            for (int i = 1; i<lenth;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) {    }}

游戏数据(存放图片)

package snake;import javax.swing.*;import java.net.URL;//数据中心public class Data {    //相对路径 tx.jpg 绝对路径  /相当于当前的项目    //头部图片  URL 定位图片地址    public static URL headerURL = Data.class.getResource("/statics/header.png");    public static ImageIcon header = new ImageIcon(headerURL);     //上下左右移动    public static URL upUrl = Data.class.getResource("/statics/up.png");    public static ImageIcon up = new ImageIcon(upUrl);    public static URL downUrl = Data.class.getResource("/statics/down.png");    public static ImageIcon down = new ImageIcon(downUrl);    public static URL leftUrl = Data.class.getResource("/statics/left.png");    public static ImageIcon left = new ImageIcon(leftUrl);    public static URL rightUrl = Data.class.getResource("/statics/right.png");    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);}

到此,相信大家对“Java怎么实现简单的贪吃蛇游戏”有了更深的了解,不妨来实际操作一番吧!这里是编程网网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯