贪吃蛇

此游戏主要包括三个类:

  1. 主启动类:GameStart
  2. 游戏面板类:GamePanel
  3. 数据中心类:Data

话不多说,直接开始

主启动类:GameStart

package com.teng.Snake;import javax.swing.*;//游戏的主启动类
public class GameStart{public static void main(String[] args) {JFrame jFrame = new JFrame("小梁学Java之贪吃蛇游戏");jFrame.add(new GamePanel());//添加面板jFrame.setVisible(true);jFrame.setResizable(false);//设置窗口大小不可变jFrame.setBounds(100,100,915,720);jFrame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);}
}

游戏面板类:GamePanel

package com.teng.Snake;import com.sun.deploy.security.SandboxSecurity;
import javafx.scene.input.KeyCode;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 length;//定义蛇的长度int[] snakeX = new int[600];//蛇的X坐标int[] snakeY = new int[500];//蛇的Y坐标String fx;//定义方向int score;//定义当前长度int top;//定义最高长度//定义食物坐标int foodx;int foody;Random random = new Random();boolean isStart = false;//设置游戏初始状态为等待开始boolean isOver = false;//判定游戏失败,默认为否boolean isStop = false;//判定游戏暂停,默认为否Timer timer = new Timer(100,this);//监听对象为本窗口,且100ms执行一次public GamePanel(){init();this.setFocusable(true);this.addKeyListener(this);//添加键盘监听事件timer.start();//游戏开始的时候定时器就启动}//初始化方法public void init(){length = 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;}//绘制面板@Overrideprotected void paintComponent(Graphics g) {//游戏中的东西都用这支画笔来画super.paintComponent(g);//清屏Data.head.paintIcon(this,g,25,11);//顶部的广告栏g.fillRect(25,75,850,600);//游戏界面this.setBackground(Color.white);//计分板g.setColor(Color.white);g.setFont(new Font("微软雅黑",Font.BOLD,18));g.drawString("当前长度为:"+score,650,30);g.drawString("历史最高为:"+top,650,53);//绘制蛇//通过“fx”变量来判断蛇头的初始化方向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 < length; i++) {Data.body.paintIcon(this,g,snakeX[i],snakeY[i]);}//蛇的食物Data.food.paintIcon(this,g,foodx,foody);if(isStart == false && isOver == false && isStop == false){g.setColor(Color.RED);g.setFont(new Font("华文行楷",Font.BOLD,50));g.drawString("按下空格键开始游戏",220,300);}if(isStart == false && isOver == false && isStop == true){g.setColor(Color.RED);g.setFont(new Font("华文行楷",Font.BOLD,50));g.drawString("游戏已暂停,按下空格键继续游戏",50,300);}if(isOver == true){g.setColor(Color.RED);g.setFont(new Font("华文行楷",Font.BOLD,50));g.drawString("游戏结束,按下空格重新开始",120,300);}}//键盘监听@Overridepublic void keyPressed(KeyEvent e) {int keyCode = e.getKeyCode();//获取按下的按钮码if(keyCode == KeyEvent.VK_SPACE){//如果按下的是空格if(isOver) {isOver = false;isStop = false;}else {isStart = !isStart;isStop = true;}}repaint();//重画//小蛇移动if(keyCode == KeyEvent.VK_UP) fx = "U";if(keyCode == KeyEvent.VK_DOWN) fx = "D";if(keyCode == KeyEvent.VK_LEFT) fx = "L";if(keyCode == KeyEvent.VK_RIGHT) fx = "R";}//事件监听——通过固定的事件来刷新@Overridepublic void actionPerformed(ActionEvent e) {if(isStart == true && isOver == false){//如果游戏是开始状态//移动for (int i = length-1; i >0 ; i--) {snakeX[i] = snakeX[i-1];snakeY[i] = snakeY[i-1];}//控制走向if(fx.equals("U")){snakeY[0] = snakeY[0]-25;//边界判断if (snakeY[0]<=50)snakeY[0] = 650;}else if(fx.equals("D")){snakeY[0] = snakeY[0]+25;if (snakeY[0]>=675)snakeY[0] = 75;}else if(fx.equals("L")){snakeX[0] = snakeX[0]-25;if (snakeX[0]<0)snakeX[0] = 825;}else if(fx.equals("R")){snakeX[0] = snakeX[0]+25;if (snakeX[0]>850)snakeX[0] = 25;}//蛇的头部碰到食物时长度加一并且刷新食物while(snakeX[0]==foodx&&snakeY[0]==foody){length ++;score ++;if(score>=top) top = score;foodx = 25+25*random.nextInt(34);foody = 75+25*random.nextInt(24);}//判定游戏结束for (int i = 1; i <= length-1; i++) {if(snakeX[0]==snakeX[i] && snakeY[0]==snakeY[i]){isOver = true;init();}}repaint();}timer.start();//定时器开启}@Overridepublic void keyReleased(KeyEvent e) {}@Overridepublic void keyTyped(KeyEvent e) {}}

数据中心类:Data

package com.teng.Snake;import javax.swing.*;
import java.net.URL;//数据中心
public class Data {public static URL headURL = Data.class.getResource("statics/head.png");public static URL foodURL = Data.class.getResource("statics/food.png");public static URL upURL = Data.class.getResource("statics/up.png");public static URL downURL = Data.class.getResource("statics/down.png");public static URL leftURL = Data.class.getResource("statics/left.png");public static URL rightURL = Data.class.getResource("statics/right.png");public static URL bodyURL = Data.class.getResource("statics/body.png");public static ImageIcon head = new ImageIcon(headURL);public static ImageIcon food = new ImageIcon(foodURL);public static ImageIcon up = new ImageIcon(upURL);public static ImageIcon down = new ImageIcon(downURL);public static ImageIcon left = new ImageIcon(leftURL);public static ImageIcon right = new ImageIcon(rightURL);public static ImageIcon body = new ImageIcon(bodyURL);
}

运行图:
游戏初始界面:

游戏运行界面:

游戏暂停界面:

游戏结束界面:


总结

  1. 贪吃蛇游戏汇总了GUI编程所学知识
  2. 游戏还可以进行大量优化,比如失败判定加一个边界、食物不会刷新到小蛇身体的坐标、游戏难度分级,甚至还想加个数据库记录最高分哈哈哈哈(日后慢慢来嘿嘿)

最后附上游戏源码:
链接:https://pan.baidu.com/s/1bH87OmWSssTtLUacN3KThw
提取码:gqas

实战 使用Java开发简易小游戏:贪吃蛇(附源码!)相关推荐

  1. 天天酷跑php源码_Java实现天天酷跑小游戏完整代码(附源码)

    首先,写一个需求文档: 一.项目名称:<天天酷跑>(RunDay) 二.功能介绍: 闯关类游戏,玩家登录后,选择进入游戏,通过键盘控制玩家的上下左右移动,来躲避 障碍物和吃金币,玩家躲避的 ...

  2. java做小游戏扫雷(附源码)

    下载解压即可玩:扫雷 项目代码下载:java代码 目录 图片 怎么自己也能做 代码细节 感受 全部代码 GameWin.java类 : MapBottom.java类: GameUtil.java类: ...

  3. 天天酷跑电脑版代码C语言,Java实现天天酷跑小游戏完整代码(附源码).pdf

    Java实实现现天天天天酷酷跑跑小小游游戏戏完完整整代代码码(附附源源码码) 首首先先,,写写一一个个需需求求文文档档:: 一.项目名称: <天天酷跑> (RunDay ) 二.功能介绍: ...

  4. JavaScript实现垃圾分类小游戏教程,附源码!

    JavaScript语言是让网页能够动起来非常重要的一环,今天小千就来给大家分享一个利用JavaScript开发一个垃圾分类小游戏的教程,学完之后别忘记自己动手试一试哦. JavaScript其实主要 ...

  5. JavaEE + Oracle + Spring Boot + Mybatis + Maven 开发简易版银行管理系统(附源码)

    文章目录 JavaEE + Oracle + Spring Boot + Mybatis + Maven 开发简易版银行管理系统 一.系统介绍 二.开发步骤 三.系统展示 四.开发总结 五.数据库相关 ...

  6. 前端技术搭建弹珠小游戏(内附源码)

    The sand accumulates to form a pagoda ✨ 写在前面 ✨ 功能介绍 ✨ 页面搭建 ✨ 样式设置 ✨ 逻辑部分 ✨ 写在前面 上周我们实通过前端基础实现了小人逃脱,当 ...

  7. 使用SDK快速接入各大平台快游戏 微信小游戏 QQ小游戏使用方法-附源码下载地址

    使用SDK快速接入各平台快游戏 微信小游戏 QQ小游戏 使用方法 引入SDK文件 // 该方式引入可以直接使用qgsdk<script src="qg-sdk.min.1.0.4.js ...

  8. JS实现飞机大战小游戏 超详细 附源码和原图

    目录 效果展示 源码 HTML CSS JS 原图 效果展示 HTML+CSS+JS做打飞机小游戏 开始界面 选择你喜欢的飞机开始游戏 按下空格键 开始/暂停  有三种敌机 可以设置飞机生命值,生命值 ...

  9. c语言/c++大作业基于easyx图形库自制RPG类型小游戏代码(附源码)

    目录 一.游戏玩法 二.完整代码 三.部分细节 透明化人物背景 关于easyx库中怎样贴出透明图片 地图的链表实现 移动检测 碰撞检测 总结 前言: 花两天边看easyx文档边学边写的期末小作业. 学 ...

  10. CRMEB全开源Java版微信小程序商城,附源码

    CRMEB-JAVA版简介 CRMEB商城JAVA版,SpringBoot + Maven + Swagger + Mybatis Plus + Redis + Uniapp +Vue 包含移动端.小 ...

最新文章

  1. 官方推荐!用TensorFlow 2.0做深度学习入门教程
  2. 几种简单的滤波方式(未完)
  3. SAP UI5 jQuery.sap.formatMessage
  4. SSH(Spring+Struts2+Hibernate)框架搭建步骤(含配置文件以及运行结果)
  5. HDFS Client 设计实现解析
  6. DataGridView控件
  7. 字符串的索引 切片 步长 反步长 , 字符串的常用方法 格式化输出
  8. 教你怎么样快速降低室内装饰设计污染
  9. Python 进阶之路 (五) map, filter, reduce, zip 一网打尽
  10. linux下的终端利器----tmux
  11. 最小二乘法的对偶形式(CVX)
  12. Next generation sequencing (NGS)二代测序数据预处理与分析
  13. C语言limits.h和float.h头文件
  14. batch软件功能测试,Batch SMART 最强序列特征[结构域]预测软件
  15. 【无人机】基于Matlab实现高效局部地图搜索算法附论文
  16. 公众号模板消息 跳转小程序报错invalid weapp pagepath解决方法
  17. ubuntu系统忘记密码(win+ubuntu双系统)
  18. 11-赵志勇机器学习-DBSCAN聚类
  19. Python 3 内置函数 - `setattr()`函数
  20. 《操作系统真象还原》第二章 编写MBR主引导记录,让我们开始掌权

热门文章

  1. 信号完整性分析学习--15--传输线
  2. msfconsole学习
  3. 毕设系统之网上订餐管理系统
  4. 三极管基极限流电阻计算
  5. Linux键盘驱动详解 转
  6. linux的打包压缩文件,linux打包文件,压缩文件
  7. Java对象转Map,Map转对象
  8. STM8L低功耗模式
  9. B4A 调用 饺子播放器 JiaoZiVideoPlayer
  10. 开源BI工具superset的汉化