基于Java+Swing贪吃蛇小游戏(含课程报告)

2024-06-18 09:20

本文主要是介绍基于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贪吃蛇小游戏(含课程报告)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1071829

相关文章

IDEA运行spring项目时,控制台未出现的解决方案

《IDEA运行spring项目时,控制台未出现的解决方案》文章总结了在使用IDEA运行代码时,控制台未出现的问题和解决方案,问题可能是由于点击图标或重启IDEA后控制台仍未显示,解决方案提供了解决方法... 目录问题分析解决方案总结问题js使用IDEA,点击运行按钮,运行结束,但控制台未出现http://

解决Spring运行时报错:Consider defining a bean of type ‘xxx.xxx.xxx.Xxx‘ in your configuration

《解决Spring运行时报错:Considerdefiningabeanoftype‘xxx.xxx.xxx.Xxx‘inyourconfiguration》该文章主要讲述了在使用S... 目录问题分析解决方案总结问题Description:Parameter 0 of constructor in x

解决IDEA使用springBoot创建项目,lombok标注实体类后编译无报错,但是运行时报错问题

《解决IDEA使用springBoot创建项目,lombok标注实体类后编译无报错,但是运行时报错问题》文章详细描述了在使用lombok的@Data注解标注实体类时遇到编译无误但运行时报错的问题,分析... 目录问题分析问题解决方案步骤一步骤二步骤三总结问题使用lombok注解@Data标注实体类,编译时

JSON字符串转成java的Map对象详细步骤

《JSON字符串转成java的Map对象详细步骤》:本文主要介绍如何将JSON字符串转换为Java对象的步骤,包括定义Element类、使用Jackson库解析JSON和添加依赖,文中通过代码介绍... 目录步骤 1: 定义 Element 类步骤 2: 使用 Jackson 库解析 jsON步骤 3: 添

Java中注解与元数据示例详解

《Java中注解与元数据示例详解》Java注解和元数据是编程中重要的概念,用于描述程序元素的属性和用途,:本文主要介绍Java中注解与元数据的相关资料,文中通过代码介绍的非常详细,需要的朋友可以参... 目录一、引言二、元数据的概念2.1 定义2.2 作用三、Java 注解的基础3.1 注解的定义3.2 内

Java中使用Java Mail实现邮件服务功能示例

《Java中使用JavaMail实现邮件服务功能示例》:本文主要介绍Java中使用JavaMail实现邮件服务功能的相关资料,文章还提供了一个发送邮件的示例代码,包括创建参数类、邮件类和执行结... 目录前言一、历史背景二编程、pom依赖三、API说明(一)Session (会话)(二)Message编程客

Java中List转Map的几种具体实现方式和特点

《Java中List转Map的几种具体实现方式和特点》:本文主要介绍几种常用的List转Map的方式,包括使用for循环遍历、Java8StreamAPI、ApacheCommonsCollect... 目录前言1、使用for循环遍历:2、Java8 Stream API:3、Apache Commons

JavaScript中的isTrusted属性及其应用场景详解

《JavaScript中的isTrusted属性及其应用场景详解》在现代Web开发中,JavaScript是构建交互式应用的核心语言,随着前端技术的不断发展,开发者需要处理越来越多的复杂场景,例如事件... 目录引言一、问题背景二、isTrusted 属性的来源与作用1. isTrusted 的定义2. 为

Java循环创建对象内存溢出的解决方法

《Java循环创建对象内存溢出的解决方法》在Java中,如果在循环中不当地创建大量对象而不及时释放内存,很容易导致内存溢出(OutOfMemoryError),所以本文给大家介绍了Java循环创建对象... 目录问题1. 解决方案2. 示例代码2.1 原始版本(可能导致内存溢出)2.2 修改后的版本问题在

Java CompletableFuture如何实现超时功能

《JavaCompletableFuture如何实现超时功能》:本文主要介绍实现超时功能的基本思路以及CompletableFuture(之后简称CF)是如何通过代码实现超时功能的,需要的... 目录基本思路CompletableFuture 的实现1. 基本实现流程2. 静态条件分析3. 内存泄露 bug