基于Java+Swing贪吃蛇小游戏(含课程报告)
博主介绍:
大家好,本人精通Java、Python、C#、C、C++编程语言,同时也熟练掌握微信小程序、Php和Android等技术,能够为大家提供全方位的技术支持和交流。
我有丰富的成品Java、Python、C#毕设项目经验,能够为学生提供各类个性化的开题框架和实际运作方案。
我擅长在JavaWeb、SSH、SSM、SpringBoot+VUE、VUE+FastApi、Python+Django等框架下进行项目开发,具有丰富的项目经验和开发技能。我的代码风格规范、优美、易读性强,同时也注重性能优化、代码重构等方面的实践和经验总结。
同时我也提供相关的毕业设计、课程作业、期末大作业的代写代做及学习资料、程序开发、技术解答、代码讲解、文档报告等专业服务。
文末联系博主
基于Java+Swing贪吃蛇小游戏(含课程报告)
- 一、系统介绍
- 三、项目相关
- 3.1 乱码问题
- 3.2 如何将GBK编码系统修改为UTF-8编码的系统?
- 四、其他系统实现
- 五、获取源码
一、系统介绍
本游戏开始运行时贪吃蛇即开始运动,游戏过程中可点击“暂停”、“继续”按钮控制游戏进行,同时显示当前贪吃蛇长度及历史最高贪吃蛇长度,通过判断蛇头是否碰到身体或墙壁判断长度+1或是结束游戏,判断是否为最高记录并显示游戏解释对话框。总体流程图如下所示:

2.4关键类设计
2.4.1 MyDialog类
MyDialog类继承JDialog类,从而设置游戏结束后对话框大小及位置,显示提示信息对话框,通过MyDialog(JFrame frame,String message)判断后提示用户游戏失败原因,通过MyDialog(JFrame frame,JLabel message)显示标签的当前游戏难度和最终得分。
2.4.2 move类
利用ArrayList动态数组记录贪吃蛇的身体各个点的位置信息,根据键盘信息调用并改变身体的每一关节坐标,从而实现贪吃蛇的动态移动效果,具体实现代码与程序实现操作如下。public void move() { //蛇的移动for(Body body:list) { //对每一截身体进行移动switch (body.d) {case up:body.y-=10; //纵坐标减10 break;case down:body.y+=10; //纵坐标加10 break;case left:body.x-=10; //横坐标减10 break;case right:body.x+=10; //横坐标加10 break;}}2.4.3 changeDirection类
首先获取蛇头对象坐标信息Body head = snake.list.get(0);
该类用于接收键盘信息,如当键盘输入“W”或“up”时,具体代码如下:
if(e.getKeyCode()==KeyEvent.VK_UP||e.getKeyCode()==KeyEvent.VK_W{if(head.d! = Direction.down) { //判断当前方向是否向下head.d = Direction.up; }}
其中,当蛇的方向向下时,无法实现向上转弯的效果,所以需要使用if语句排除蛇的方向向下的情况。其余向左、向右、向下转弯以此类推。
2.4.4 adjustSnakeDirection类
该类与changeDirection类不同,目的是为了调整蛇身方向,实现小蛇自动向上、向下移动的代码如下:Body curb = list.get(i); //当前身体位置Body lastb = list.get(i-1); //上一节身体if(curb.x==lastb.x) { //两节身体在同一列的情况下if(curb.y < lastb.y) {curb.d=Direction.down;}else {curb.d=Direction.up;}}
即当前蛇的一点与上一点在同一列(即横坐标相同)时,判断当前点的位置在上一点的上方时,则当前节点正在向下移动,故当前点向下移动一个单位,从而实现贪吃蛇的动态移动。对于其他方向,以此类推。
3系统实现
3.1建立游戏面板,生成初始游戏界面
创建一个面板对象,在其中利用for循环语句画出贪食蛇运动参照网格线,利用setDefaultCloseOperation设置一个可关闭的窗口,将面板添加到窗口中,显示窗口标题,利用Draw2D绘制游戏场景,实现游戏的显示。
3.2画出初始贪吃蛇
利用Snake类生成初始贪吃蛇界面,默认初始长度为3,蛇头位置为(180, 230),利用Graphics2D绘制初始贪吃蛇。
3.3显示随机食物
在newFood中利用Random()实现随机设置食物的坐标,同时新食物调用Body类实现可记录。
3.4加入监听,实现游戏按钮交互
加入addKeyListener方法,添加指定按键的按键侦听器,以接受发自此组件的按键事件,利用匿名内部类处理事件(试图使用常规内部类方法处理但以失败告终)。
jb1.addKeyListener(new KeyAdapter() { //KeyAdapter实现了接口KeyListener,用来接收处理键盘事件
public void keyPressed(KeyEvent e) {
changeDirection(e);
}
});
利用JButton显示“新游戏”、“暂停”、“继续”、“增加难度”按钮,一下是按钮交互实现介绍:
新游戏:点击“新游戏”按钮后,游戏重新进行初始化,重绘初始贪吃蛇。
暂停与继续:点击“暂停”按钮并识别后,利用suspend()使线程进入阻塞状态,并且不会自动恢复,从而实现暂停游戏的效果,与此同时,“暂停”按钮变为“继续”;当点击“继续”按钮并识别后,利用resume()使线程重新进入可执行状态。实现游戏继续运行。
增加难度:点击“增加难度”按钮后,令level = level + 20 ;由于Thread.sleep(Snake.timer - level);即贪吃蛇每timer毫秒蛇移动一次,故通过增大level实现速度增加,从而难度增加。
3.5实现贪吃蛇通过键盘改变移动方向
利用changeDirection()和adjustSnakeDirection()类实现自动调整贪吃蛇身方向与转弯效果,这两个类在前面“关键类设计”中已有详细介绍,此处不做赘述。
3.6接触检测与判断
1. 判断蛇是否撞墙
首先利用snake.list.get(0); 获取蛇头对象,若蛇头坐标超过地图边界,则isTouch为TRUE,反之为FALSE。
2. 判断蛇是否咬到自己
同样获取蛇头对象后,若蛇头坐标与自己身体的某一位置的坐标相同,则isBitten为TRUE,反之为FALSE。
3. 判断蛇是否吃到食物
获取蛇头对象后,若蛇头坐标与食物的坐标相同,则isFeeding为TRUE,反之为FALSE。
3.7显示游戏状态
利用JLabel新建now_score和best_score用于存储当前长度与历史最长长度,使用contentPane显示在游戏界面右端。
3.8最高记录的记录与显示
加入readHis()和writeHis()方法,通过这两个方法,通过文件的读写实现最高记录的记录。(记录在data.txt)中。
3.9游戏最终结果的显示
在蛇头与墙壁或者自己身体发生碰撞后,立即弹出游戏失败界面。游戏失败界面包含两个对话框,其中第一个对话框的信息有:
1.游戏失败!你撞到墙啦! 2.游戏失败!你咬到自己啦!
第二个对话框的信息包括点击“增加难度”后该游戏的难度(即当前困难等级),以及本次游戏结束时贪吃蛇的最大长度。
最终实现的游戏界面如下图所示:

三、项目相关
3.1 乱码问题
系统开发时的编码为GBK,因此导入eclipse时,也需要eclipse工作空间的编码为GBK修改编码:点击Window->Preference->General->workplace,然后选择默认编码方式 GBK。错误做法:开始将系统导入,出现乱码的问题,然后去修改eclipse的编码,这样有的 时候并不能修乱码的问题!需要将项目删除掉,然后修改eclipse的工作空 间编码,再次导入系统才能修改掉乱码!
3.2 如何将GBK编码系统修改为UTF-8编码的系统?
需要靠我们勤劳的双手将系统文件复制一份,然后将eclipse的工作空间编码修改为UTF-8,导入系统;eclipse里面 文件与原来文件进行一一比对,修改Ctrl +c 和ctrl + v除此之外,我目前还不知道如何一步修改。
四、其他系统实现
Java+Swing实现学生选课管理系统
Java+Swing实现学校教务管理系统
Java+Swing+sqlserver学生成绩管理系统
Java+Swing用户信息管理系统
Java+Swing实现的五子棋游戏
基于JavaSwing 银行管理系统
Java+Swing+mysql仿QQ聊天工具
Java+Swing 聊天室
Java+Swing+dat文件存储实现学生选课管理系统
Java+Swing可视化图像处理软件
Java+Swing学生信息管理系统
Java+Swing图书管理系统
Java+Swing图书管理系统2.0
基于java+swing+mysql图书管理系统3.0
大作业-基于java+swing+mysql北方传统民居信息管理系统
五、获取源码
点击下载
基于Java+Swing贪吃蛇小游戏(含课程报告)
相关文章:
基于Java+Swing贪吃蛇小游戏(含课程报告)
博主介绍: 大家好,本人精通Java、Python、C#、C、C编程语言,同时也熟练掌握微信小程序、Php和Android等技术,能够为大家提供全方位的技术支持和交流。 我有丰富的成品Java、Python、C#毕设项目经验,能够为学生提供各类…...
三角形法恢复空间点深度
三角形法恢复空间点深度 如下图,以图 I 1 I_1 I1为参考,图 I 2 I_2 I2的变换矩阵为 T T T。相机光心为 O 1 O_1 O1和 O 2 O_2 O2。在图 I 1 I_1 I1中有特征点 p 1 p_1 p1,对应图 I 2 I_2 I2中有特征点 p 2 p_2 p2。理论上直…...
Linux 阻塞和非阻塞 IO 实验学习
Linux 阻塞和非阻塞 IO 实验学习 IO 指的是 Input/Output,也就是输入/输出,是应用程序对驱动设备的输入/输出操作。当应用程序对设备驱动进行操作的时候,如果不能获取到设备资源,那么阻塞式 IO 就会将应用程序对应的线程挂起&…...
JuiceFS 社区版 v1.2 发布,新增企业级权限管理、平滑升级功能
JuiceFS 社区版 v1.2 今天正式发布,这是自 2021 年开源以来的第三个大版本。v1.2 也是一个长期支持版本(LTS)。我们将持续维护 v1.2 以及 v1.1 这两个版本,v1.0 将停止更新。 JuiceFS 是为云环境设计的分布式文件系统,…...
虚拟3D沉浸式展会编辑平台降低了线上办展的门槛
在数字化浪潮的引领下,VR虚拟网上展会正逐渐成为企业展示品牌实力、吸引潜在客户的首选平台。我们与广交会携手走过三年多的时光,凭借优质的服务和丰富的经验,赢得了客户的广泛赞誉。 面对传统展会活动繁多、企业运营繁忙的挑战,许…...
泛微E9开发 查询页面添加按钮,完成特定功能
查询页面添加按钮,完成特定功能 1、关联知识(查询页面实现新增按钮)2、功能实现2.1. 点击按钮,输出选中的checkbox的值2.2. 点击按钮,打开一个自定义对话框 3、实现方法 1、关联知识(查询页面实现新增按钮&…...
初学51单片机之数字秒表
不同数据类型间的相互转换 在C语言中,不同数据类型之间是可以混合运算的。当表达式中的数据类型不一致时,首先转换为同一类型,然后再进行计算。C语言有两种方式实现类型转换。一是自动类型转换,另外一种是强制类型转换。 转换的主…...
SpringBoot整合justauth实现多种方式的第三方登陆
目录 0.准备工作 1.引入依赖 2.yml文件 3. Controller代码 4.效果 参考 0.准备工作 你需要获取三方登陆的client-id和client-secret 以github为例 申请地址:Sign in to GitHub GitHub 1.引入依赖 <?xml version"1.0" encoding"UTF-8&quo…...
【Java算法】滑动窗口
🔥个人主页: 中草药 🔥专栏:【算法工作坊】算法实战揭秘 👖一. 长度最小的子数组 题目链接:209.长度最小的子数组 算法原理 滑动窗口 滑动窗口算法常用于处理数组/字符串等序列问题,通过定义一…...
C# —— 属性和字段
属性和字段的区别 1.都是定义在一个类中,属于类成员变量 2.字段一般都是私有的private,属性一般是公开的Public 3.字段以小驼峰命名方式 age,属性一般是以大驼峰命名 Age 4.字段可以存储数据,属性不能存储数据,通过属性…...
【计算机视觉】人脸算法之图像处理基础知识(四)
图像的几何变换 图像的几何变换是指在不改变图像内容的前提下对图像的像素进行空间几何变换。主要包括图像的平移变换、镜像变换、缩放和旋转等。 1.插值算法 插值通常用来放缩图像大小,在图像处理中常见的插值算法有最邻近插值法、双线性插值法、二次立方、三次…...
探索 Spring Boot 集成缓存功能的最佳实践
在线工具站 推荐一个程序员在线工具站:程序员常用工具(http://cxytools.com),有时间戳、JSON格式化、文本对比、HASH生成、UUID生成等常用工具,效率加倍嘎嘎好用。 程序员资料站 推荐一个程序员编程资料站:…...
微信小程序使用方法
一.在网页注册小程序账号(在未注册的情况下) 1.如果你还没有微信公众平台的账号,请先进入微信公众平台首页,点击 “立即注册” 按钮进行注册。我们选择 “小程序” 即可。 接着填写账号信息,需要注意的是,…...
前后端分离的后台管理系统源码,快速开发OA、CMS网站后台管理、毕业设计项目
那有没有一款软件解-决这种现状呢?答案是肯定的。引入我们的软件——eladmin。 介绍 ELADMIN,一个简单且易上手的 Spring boot 后台管理框架,已发布 Mybatis-Plus 版本,为开发者提供了一个全-面、高-效的解-决方案。 特点 高-效率:前后端完全分离,项目简单可配,内置代码…...
[深度学习]--分类问题的排查错误的流程
原因复现: 原生的.pt 好使, 转化后的 CoreML不好使, 分类有问题。 yolov8 格式的支持情况 Format Argument Suffix CPU GPU 0 PyTorch - .pt True True 1 Tor…...
微信小程序简易录音机
首先先创建一个项目(想必大家都会啦那就直接开干) 首先上html结构 <view class"wx-container"><view id"title">录音机</view><view id"time">{{hours}}:{{minute}}:{{second}}</view>&l…...
Ollama深度探索:AI大模型本地部署的全面教程
目录 引言一、Ollama概述1、定义与定位2、核心功能3、技术优势4、应用场景 二、安装与配置1、系统要求2、安装方法3、配置指南4、启动Ollama服务 四、快速开始1、启动Ollama2、部署运行模型3、REEST API 五、自定义模型1、定制化的必要性2、使用Modelfile定制模型3、参数调整4、…...
文心一言 VS 讯飞星火 VS chatgpt (285)-- 算法导论21.2 4题
四、请给出图 21-3 所示操作序列的一个运行时间的渐近紧确界,假定使用链表表示和加权合并启发式策略。如果要写代码,请用go语言。 文心一言: 图 21-3 没有直接给出,但通常这种操作序列可能与某种数据结构(如并查集或…...
基于springboot实现影院订票系统项目【项目源码+论文说明】计算机毕业设计
基于springboot实现影院订票系统演示 摘要 现代经济快节奏发展以及不断完善升级的信息化技术,让传统数据信息的管理升级为软件存储,归纳,集中处理数据信息的管理方式。本影院订票系统就是在这样的大环境下诞生,其可以帮助管理者在…...
Linux 常用命令合集
进入root模式 su -> 回车 -> 输入root用户密码关闭系统 方法1: shutdown -h now 方法2: init 0 方法3: telinit 0按预定时间关闭系统 shutdown -h hours:minutes &取消按预定时间关闭系统 shutdown -c重启 shutdown -r now重启…...
Spark 之 入门讲解详细版(1)
1、简介 1.1 Spark简介 Spark是加州大学伯克利分校AMP实验室(Algorithms, Machines, and People Lab)开发通用内存并行计算框架。Spark在2013年6月进入Apache成为孵化项目,8个月后成为Apache顶级项目,速度之快足见过人之处&…...
React hook之useRef
React useRef 详解 useRef 是 React 提供的一个 Hook,用于在函数组件中创建可变的引用对象。它在 React 开发中有多种重要用途,下面我将全面详细地介绍它的特性和用法。 基本概念 1. 创建 ref const refContainer useRef(initialValue);initialValu…...
React Native 开发环境搭建(全平台详解)
React Native 开发环境搭建(全平台详解) 在开始使用 React Native 开发移动应用之前,正确设置开发环境是至关重要的一步。本文将为你提供一份全面的指南,涵盖 macOS 和 Windows 平台的配置步骤,如何在 Android 和 iOS…...
在鸿蒙HarmonyOS 5中实现抖音风格的点赞功能
下面我将详细介绍如何使用HarmonyOS SDK在HarmonyOS 5中实现类似抖音的点赞功能,包括动画效果、数据同步和交互优化。 1. 基础点赞功能实现 1.1 创建数据模型 // VideoModel.ets export class VideoModel {id: string "";title: string ""…...
剑指offer20_链表中环的入口节点
链表中环的入口节点 给定一个链表,若其中包含环,则输出环的入口节点。 若其中不包含环,则输出null。 数据范围 节点 val 值取值范围 [ 1 , 1000 ] [1,1000] [1,1000]。 节点 val 值各不相同。 链表长度 [ 0 , 500 ] [0,500] [0,500]。 …...
【C语言练习】080. 使用C语言实现简单的数据库操作
080. 使用C语言实现简单的数据库操作 080. 使用C语言实现简单的数据库操作使用原生APIODBC接口第三方库ORM框架文件模拟1. 安装SQLite2. 示例代码:使用SQLite创建数据库、表和插入数据3. 编译和运行4. 示例运行输出:5. 注意事项6. 总结080. 使用C语言实现简单的数据库操作 在…...
uniapp中使用aixos 报错
问题: 在uniapp中使用aixos,运行后报如下错误: AxiosError: There is no suitable adapter to dispatch the request since : - adapter xhr is not supported by the environment - adapter http is not available in the build 解决方案&…...
Reasoning over Uncertain Text by Generative Large Language Models
https://ojs.aaai.org/index.php/AAAI/article/view/34674/36829https://ojs.aaai.org/index.php/AAAI/article/view/34674/36829 1. 概述 文本中的不确定性在许多语境中传达,从日常对话到特定领域的文档(例如医学文档)(Heritage 2013;Landmark、Gulbrandsen 和 Svenevei…...
【无标题】路径问题的革命性重构:基于二维拓扑收缩色动力学模型的零点隧穿理论
路径问题的革命性重构:基于二维拓扑收缩色动力学模型的零点隧穿理论 一、传统路径模型的根本缺陷 在经典正方形路径问题中(图1): mermaid graph LR A((A)) --- B((B)) B --- C((C)) C --- D((D)) D --- A A -.- C[无直接路径] B -…...
NPOI操作EXCEL文件 ——CAD C# 二次开发
缺点:dll.版本容易加载错误。CAD加载插件时,没有加载所有类库。插件运行过程中用到某个类库,会从CAD的安装目录找,找不到就报错了。 【方案2】让CAD在加载过程中把类库加载到内存 【方案3】是发现缺少了哪个库,就用插件程序加载进…...
