本篇文章给大家详细介绍一下Java实现贪吃蛇小游戏的方法。有一定的参考价值,有需要的朋友可以参考一下,希望对大家有所帮助。

1. 程序结构

  程序结构图如图:

2. 程序设计思路

2.1 Data类

  • 作用:连接statics文件夹,将静态资源包中的图片转化为图标 方便在面板上绘制。
  • 实现:使用class.getResource(String path)方法。

   代码如下:

package com.snake;import javax.swing.*;import java.net.URL;public class Data {//贪吃蛇头部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);}

2.2 StartGame类

  • 作用:创建游戏窗口,在窗口中添加一个游戏面板。
  • 实现:使用JFrame类创建游戏窗口,利用其add()方法添加一个GamePanel类实例化对象。

   代码如下:

package com.snake;import javax.swing.*;import java.awt.*;public class StartGame {public static void main(String[] args){//建立游戏窗口JFrame frame = new JFrame("Java-贪吃蛇小游戏");//标题frame.setSize(900,720);//窗口大小frame.setLocationRelativeTo(null);//窗口显示屏幕中间frame.setResizable(false);//固定窗口大小frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//设置窗体关闭事件frame.add(new GamePanel());//添加游戏内容frame.setVisible(true);//设置窗体可见}}

2.3 GamePanel类

  • 作用:实现游戏的动态页面。
  • 实现:(1)init()方法:初始化小蛇位置;
               (2)eat()方法:用随机种子随机食物的位置,并进行判定,食物位置不能和小蛇位置重合;
               (3)继承JPanel类,重写paintComponent(Graphics g)方法,在方法中绘制标题栏、小蛇的位置(根据direction小蛇头部方向变量绘制小蛇头部)、小蛇身体、积分栏、游戏提醒项与失败判断项;
               (4)实现KeyListener 接口中的keyPressed(KeyEvent e)方法,获取键盘输入,根据键盘输入对游戏状态或者小蛇头部方向direction变量进行更改;
               (5)实现ActionListener接口中的actionPerformed(ActionEvent e)方法,根据游戏状态和direction变量进行小蛇移动操作(注意禁用直接回头操作),进行吃食物判定和死亡判定。使用Timer计时器让游戏动态变化,用repaint()方法实时更新界面。
       代码如下:
package com.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[] snakeX = new int[500];//贪吃蛇横坐标int[] snakeY = new int[500];//贪吃蛇纵坐标int foodX;//食物横坐标int foodY;//食物蛇纵坐标int length;//贪吃蛇的长度String  direction;//贪吃蛇头方向int score;//积分Random r = new Random();Timer timer = new Timer(100,this);boolean isStart;boolean isFail;//构造函数public GamePanel(){init();this.setFocusable(true);this.addKeyListener(this);timer.start();}private void init(){length=3;snakeX[0]=100;snakeY[0]=100;snakeX[1]=75;snakeY[1]=100;snakeX[2]=50;snakeY[2]=100;direction = "R";eat(foodX,foodY);isStart = false;isFail = false;score = 0;}private void eat(int x,int y){x= 25 + 25*r.nextInt(34);y= 75 + 25*r.nextInt(24);for (int i = 0; i < length; i++) {if(snakeX[i]==x&&snakeY[i]==y){x = 25 + 25*r.nextInt(34);y = 75 + 25*r.nextInt(24);}}foodX = x;foodY = y;}protected void paintComponent(Graphics g) {super.paintComponent(g);this.setBackground(Color.white);//设置背景板为白色//画标题g.setColor(Color.GREEN);g.setFont(new Font("幼圆",Font.BOLD,50));g.drawString("贪吃蛇游戏",300,60);//绘制游戏区域g.setColor(Color.GRAY);g.fillRect(25,75,850,600);//画贪吃蛇头部if(direction=="R"){Data.right.paintIcon(this,g,snakeX[0],snakeY[0]);}else if(direction=="L"){Data.left.paintIcon(this,g,snakeX[0],snakeY[0]);}if(direction=="U"){Data.up.paintIcon(this,g,snakeX[0],snakeY[0]);}else if(direction=="D"){Data.down.paintIcon(this,g,snakeX[0],snakeY[0]);}//画身体for (int i = 1; i < length ; i++) {Data.body.paintIcon(this,g,snakeX[i],snakeY[i]);}//画食物Data.food.paintIcon(this,g,foodX,foodY);//绘制积分栏g.setColor(Color.BLACK);g.setFont(new Font("幼圆",Font.BOLD,20));g.drawString("长度:"+length,730,30);g.drawString("得分:"+score,730,60);//游戏开始提醒if(isStart==false){g.setColor(Color.BLACK);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);}}@Overridepublic 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&&direction!="R"){direction = "L";}else if(keyCode==KeyEvent.VK_RIGHT&&direction!="L"){direction = "R";}else if(keyCode==KeyEvent.VK_UP&&direction!="D"){direction = "U";}else if(keyCode==KeyEvent.VK_DOWN&&direction!="U"){direction = "D";}}@Overridepublic void keyReleased(KeyEvent e) {}@Overridepublic void keyTyped(KeyEvent e) {}@Overridepublic void actionPerformed(ActionEvent e) {//判断游戏状态if(isStart&&!isFail){//移动身体for (int i = length-1; i > 0 ; i--) {snakeX[i] = snakeX[i-1];snakeY[i] = snakeY[i-1];}//移动头部if(direction=="R"){snakeX[0] += 25;if(snakeX[0]>850){snakeX[0] = 25;}}else  if(direction=="L"){snakeX[0] -= 25;if(snakeX[0]<25){snakeX[0] = 850;}}else  if(direction=="U"){snakeY[0] -= 25;if(snakeY[0]<75){snakeY[0] = 650;}}else  if(direction=="D"){snakeY[0] += 25;if(snakeY[0]>650){snakeY[0] = 75;}}//吃食物if(snakeX[0]==foodX&&snakeY[0]==foodY){length++;score += 10;eat(foodX,foodY);}//死亡判定for (int i = 1; i < length; i++) {if(snakeX[0]==snakeX[i]&&snakeY[0]==snakeY[i]){isFail=true;}}repaint();}timer.start();}}

3. 游戏展示

推荐:《java视频教程》

Java如何实现贪吃蛇小游戏相关推荐

  1. java 面向对象实现贪吃蛇小游戏

    业务逻辑梳理和描述 面向对象设计贪吃蛇 1.找类和对象 a.Snake类 蛇类 b.Food类 食物类 c.Ground类 障碍物类 d.GamePanel 面板类 显示蛇.食物.障碍物. 2.找类的 ...

  2. 手把手教你做一个Java贪吃蛇小游戏

    大家好,我是孙不坚1208,这篇博客给大家分享一下:如何做一个贪吃蛇小游戏(Java版)的exe应用程序,希望能给需要帮助的朋友带来方便. 手把手教你做一个Java贪吃蛇小游戏的exe应用程序 一.J ...

  3. 简易贪吃蛇小游戏java版_用GUI实现java版贪吃蛇小游戏

    本文实例为大家分享了java版贪吃蛇小游戏的具体代码,供大家参考,具体内容如下 项目结构 新建一个JFrame窗口,作为程序入口 public class GameStart{ public stat ...

  4. 用 Java 实现贪吃蛇小游戏

    程序说明 这是一个用 Java Awt 实现的贪吃蛇小游戏的完整代码 算法分析 (一)启动一个独立线程根据 direction 重绘面板实现蛇身移动效果,运行过程: 记录上次头部的坐标到 tempBo ...

  5. 贪吃蛇小游戏java实现代码分析

    贪吃蛇小游戏java实现代码分析 贪吃蛇的小游戏,网上的代码比较多,今天周五,在教研室没啥事做,在电脑中发现了一个贪吃蛇的小游戏,于是就看了下实现的源码,发现别人写的代码确实挺好的,自己也是边加注释边 ...

  6. Java实现贪吃蛇小游戏(附完整源码)

    今天我就从零开始来完成这个小游戏,完成的方式也是一步一步的添加功能这样的方式来实现. 第一步完成的功能:写一个界面 大家见到的贪吃蛇小游戏,界面肯定是少不了的.因此,第一步就是写一个小界面. 实现代码 ...

  7. JAVA版贪吃蛇小游戏

    这是一篇关于JAVA的贪吃蛇游戏,源代码的部分在下面正文中介绍,图片和音频的部分都放在百度云盘,需要的自行下载. 文章目录 开发环境 一.下载方法 二.运行效果展示 三.项目结构以及主程序入口 1.项 ...

  8. Java Swing 贪吃蛇小游戏

    静态资源参考: 注:实际上没有用到header.png. 工程目录: 源码: package snake;import javax.swing.*; import java.net.URL;/*** ...

  9. 计算机毕业设计-基于Java的GUI实现贪吃蛇小游戏

    标题:基于Java多线程版本GUI贪吃蛇小游戏 1.项目技术点 1.多线程的运用. 2.JAVA的GUI的运用. 3.数据结构的灵活运用. 4.随机食物的生成. 5.关卡加速,随着蛇身增长,蛇的速度也 ...

  10. Java开发贪吃蛇小游戏

    Java开发贪吃蛇小游戏 文章目录 Java开发贪吃蛇小游戏 一.开发思路 二.具体开发过程 1.绘制静态游戏窗口 2.导入素材图标 3.绘制游戏面板 4.绘制一条静态的小蛇 5.让小蛇动起来 ①监听 ...

最新文章

  1. Sublime Text 3 及Package Control 安装(附上一个3103可用的Key)
  2. 传智播客java基础的习题_传智播客java基础班(集合与IO)阶段测试题
  3. vnctf——babyvm
  4. 定义交货类型(Delivery Types)
  5. Chrome浏览器插件新建标签页插件Momentum
  6. mysql 批量远程_【shell--批量远程MySQL,执行命令】-【工作总结】
  7. vmware nat模式网络不通_笨笨狗教你如何解决VMware虚拟机桥接网络不通问题?
  8. amr 转mp3 java_JAVA 音频转换AMR 转MP3,OS,Linux cent os 7
  9. 作者:Ochora Dennis Reagan(1990-),男,东北大学软件学院硕士生
  10. [编织消息框架][优化系统]突破连接上限(上)
  11. 格式化输出;while循环;运算符
  12. sqlserver备份还原丢失dbo_sqlserver数据库的备份与恢复sql实现
  13. 巧用RoboCopy工具
  14. laravel+php+支付功能,Laravel 使用微信支付进行支付开发实例
  15. 软件开发流程都是什么样的呢?
  16. 分享四个无版权,高清的图片素材网站
  17. 实习测试的一个月总结与心得
  18. 美电信运营商推云计算业务
  19. 安徽财贸职业学院计算机信息管理怎么样,让大家看看安徽财贸职业学院计算机系的汪永涛辅导员如何对待我的...
  20. 苏宁易购启动2022年货节:双线上线千场直播,拉满过年氛围

热门文章

  1. swiper滑动时每页都有动画
  2. do还是doing imagine加to_do还是doing imagine加to_do、to do、doing用法全汇总,再也不用担心选错啦(收藏)......
  3. 笔记本电脑无法进入睡眠状态_电脑进入睡眠模式后打不开屏幕怎么办
  4. 怎么在计算机服务关闭无线网络,家里电脑WIFI怎么关掉?(怎么在电脑上操作把WIFI关掉)...
  5. 【转】在数学的海洋中飘荡
  6. 100本名著浓缩而成的100句话
  7. c语言偶数求和while,C语言中编程计算1至100以内的奇数和偶数并分别求和,求代码...
  8. RFT 实用CODE
  9. 并发,同步,异步以及事件驱动编程的相关技术
  10. 循序渐进学Java day1