基于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贪吃蛇小游戏(含课程报告)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/29241.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

兼容MacOS和FreeBSD软件包的开源ravynOS操作系统

ravynOS 是一个新型的操作系统项目&#xff0c;致力于在 x86-64&#xff08;终极目标是同时实现 ARM&#xff09;平台上提供与 macOS 类似的体验和兼容性。它基于坚若磐石的 FreeBSD、现有的开源代码和锦上添花的新代码构建。 主要设计目标&#xff1a; 与 macOS 应用程序的源…

语音质量评价方法之MOS

引言 在语音增强、语音合成、语音转换、声音转换、语音克隆、语音修复等等领域&#xff0c;常常要对输出的语音进行评价。对语音的质量评价一般关注两个方面&#xff0c;即主观评价和客观评价。主观评价就是人凭借听觉感受对语音进行打分&#xff0c;客观评价比较广泛&#xf…

学生成绩评分 - Scala

文章目录 一、第1关&#xff1a;对学生成绩进行评分 一、第1关&#xff1a;对学生成绩进行评分 实训目标 掌握 Scala 中运算符嵌套的使用 了解 if-else if-else 语句的使用 实训分析 利用条件运算符的嵌套来完成此题&#xff1a;学习成绩 150 - 90 分的同学成绩评分为&#…

【JVM结构、JVM参数、JVM垃圾回收】

JVM&#xff1a;Java Virtual Machine java虚拟机 虚拟机&#xff1a;使用软件技术模拟出与具有完整硬件系统功能、运行在一个隔离环境中的计算机系统。 JVM官方文档&#xff1a;https://docs.oracle.com/javase/specs/jvms/se8/html/index.html java 一些命令 javac 将文件编…

常用算法及参考算法 (1)累加 (2)累乘 (3)素数 (4)最大公约数 (5)最值问题 (6)迭代法

常用算法及参考算法 &#xff08;1&#xff09;累加 &#xff08;2&#xff09;累乘 &#xff08;3&#xff09;素数 &#xff08;4&#xff09;最大公约数 &#xff08;5&#xff09;最值问题 &#xff08;6&#xff09;迭代法 1. 累加 #include <stdio.h>int main() {…

上海亚商投顾:沪指缩量调整 PCB概念股持续爆发

上海亚商投顾前言&#xff1a;无惧大盘涨跌&#xff0c;解密龙虎榜资金&#xff0c;跟踪一线游资和机构资金动向&#xff0c;识别短期热点和强势个股。 一.市场情绪 大小指数昨日走势分化&#xff0c;沪指全天震荡调整&#xff0c;创业板指午后涨超1%。消费电子板块全天强势&a…

【ARM】MDK Debug模式下Disassembly窗口介绍

【更多软件使用问题请点击亿道电子官方网站】 1、 文档目标 主要了解Disassembly窗口中包含的内容&#xff0c;和如何利用Disassembly中的内容了解程序的存储和调用情况。 2、 问题场景 对于Disassembly窗口中具体包含的内容不了解&#xff0c;无法合理地应用Disassembly窗口…

Docker的基本操作 及 容器与外部机互相通讯(持续更新中)

Docker入门&#xff1a; Docker 入门教程 - 阮一峰的网络日志 (ruanyifeng.com)docker入门&#xff0c;这一篇就够了。-CSDN博客Docker 容器使用 | 菜鸟教程 (runoob.com)Docker自定义网络和运行时指定IP_docker run ip-CSDN博客 基本命令 链接&#xff1a;docker入门&#…

希尔排序-C语言版本

前言 从希尔开始&#xff0c;排序的速度就开始上升了&#xff0c;这里的排序开始上一个难度了&#xff0c;当然难一点的排序其实也不是很难&#xff0c;当你对于插入排序了解的足够深入的时候&#xff0c;你会发现其实希尔就是插入的异形&#xff0c;但是本质上还是一样的 希尔…

openresty(Nginx) 301重定向域名 http访问强制使用https

1 访问http 2 修改配置访问 server {listen 80;server_name example.cn;return 301 https://$server_name$request_uri;access_log /data/logs/czgzzfjgsup_access.log access;error_log /data/logs/czgzzfjg_error.log error;#location / {root /usr/local/open…

Mac 开发vscode常用命令

1 打开vscode settting配置 commandshiftp 输入&#xff1a;Open User Setting 2

CV预测:快速使用DenseNet神经网络

AI预测相关目录 AI预测流程&#xff0c;包括ETL、算法策略、算法模型、模型评估、可视化等相关内容 最好有基础的python算法预测经验 EEMD策略及踩坑VMD-CNN-LSTM时序预测对双向LSTM等模型添加自注意力机制K折叠交叉验证optuna超参数优化框架多任务学习-模型融合策略Transform…

小规模自建 Elasticsearch 的部署及优化

本文将详细介绍如何在 CentOS 7 操作系统上部署并优化 Elasticsearch 5.3.0,以承载千万级后端服务的数据采集。要使用Elasticsearch至少需要三台独立的服务器,本文所用服务器配置为4核8G的ECS云服务器,其中一台作为 master + data 节点、一台作为 client + data 节点、最后一…

QT——MySQL数据库联用

一、ODBC 1、ODBC简介 ODBC全称为Open Database Connectivity,是一种用于数据库操作的标准接口。要使用ODBC,首先需要安装相应的ODBC驱动程序,然后在系统中配置ODBC数据源。接着,可以通过编程语言(如C++、Java等)或者数据库工具(如SQL Server Management Studio)来连…

Visual Studio Code的安装与配置

Visual Studio Code&#xff08;简称 VS Code&#xff09;是 Microsoft 在2015年4月30日 Build 开发者大会上正式宣布一个运行于 Mac OS X、Windows和 Linux 之上的&#xff0c;针对于编写现代 Web 和云应用的跨平台源代码编辑器&#xff0c;可在桌面上运行&#xff0c;并且可用…

Unity API学习之资源的动态加载

资源的动态加载 在实际游戏开发的更新换代中&#xff0c;随着开发的软件不断更新&#xff0c;我们在脚本中需要拖拽赋值的变量会变空&#xff0c;而要想重新拖拽又太花费时间&#xff0c;因此我们就需要用到Resources.Load<文件类型>("文件名")函数来在一开始…

大模型基础——从零实现一个Transformer(5)

大模型基础——从零实现一个Transformer(1)-CSDN博客 大模型基础——从零实现一个Transformer(2)-CSDN博客 大模型基础——从零实现一个Transformer(3)-CSDN博客 大模型基础——从零实现一个Transformer(4)-CSDN博客 一、前言 上一篇文章已经把Encoder模块和Decoder模块都已…

深度學習筆記12-優化器對比(Tensorflow)

&#x1f368; 本文為&#x1f517;365天深度學習訓練營 中的學習紀錄博客&#x1f356; 原作者&#xff1a;K同学啊 | 接輔導、項目定制 一、我的環境 電腦系統&#xff1a;Windows 10 顯卡&#xff1a;NVIDIA Quadro P620 語言環境&#xff1a;Python 3.7.0 開發工具&…

基于GTX的64B66B编码IP生成(高速收发器二十)

点击进入高速收发器系列文章导航界面 1、配置GTX IP 相关参数 前文讲解了64B66B编码解码原理&#xff0c;以及GTX IP实现64B66B编解码的相关信号组成&#xff0c;本文生成64B66B编码的GTX IP。 首先如下图所示&#xff0c;需要对GTX共享逻辑进行设置&#xff0c;为了便于扩展&a…

【开发工具】git服务器端安装部署+客户端配置

自己安装一个轻量级的git服务端&#xff0c;仅仅作为代码维护&#xff0c;尤其适合个人代码管理。毕竟代码的版本管理是很有必要的。 这里把git服务端部署在centos系统里&#xff0c;部署完成后可以通过命令行推拉代码&#xff0c;进行版本和用户管理。 一、服务端安装配置 …