基于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

相关文章

JVM 的类初始化机制

前言 当你在 Java 程序中new对象时,有没有考虑过 JVM 是如何把静态的字节码(byte code)转化为运行时对象的呢,这个问题看似简单,但清楚的同学相信也不会太多,这篇文章首先介绍 JVM 类初始化的机制,然后给出几个易出错的实例来分析,帮助大家更好理解这个知识点。 JVM 将字节码转化为运行时对象分为三个阶段,分别是:loading 、Linking、initialization

Spring Security 基于表达式的权限控制

前言 spring security 3.0已经可以使用spring el表达式来控制授权,允许在表达式中使用复杂的布尔逻辑来控制访问的权限。 常见的表达式 Spring Security可用表达式对象的基类是SecurityExpressionRoot。 表达式描述hasRole([role])用户拥有制定的角色时返回true (Spring security默认会带有ROLE_前缀),去

浅析Spring Security认证过程

类图 为了方便理解Spring Security认证流程,特意画了如下的类图,包含相关的核心认证类 概述 核心验证器 AuthenticationManager 该对象提供了认证方法的入口,接收一个Authentiaton对象作为参数; public interface AuthenticationManager {Authentication authenticate(Authenti

Spring Security--Architecture Overview

1 核心组件 这一节主要介绍一些在Spring Security中常见且核心的Java类,它们之间的依赖,构建起了整个框架。想要理解整个架构,最起码得对这些类眼熟。 1.1 SecurityContextHolder SecurityContextHolder用于存储安全上下文(security context)的信息。当前操作的用户是谁,该用户是否已经被认证,他拥有哪些角色权限…这些都被保

Spring Security基于数据库验证流程详解

Spring Security 校验流程图 相关解释说明(认真看哦) AbstractAuthenticationProcessingFilter 抽象类 /*** 调用 #requiresAuthentication(HttpServletRequest, HttpServletResponse) 决定是否需要进行验证操作。* 如果需要验证,则会调用 #attemptAuthentica

Spring Security 从入门到进阶系列教程

Spring Security 入门系列 《保护 Web 应用的安全》 《Spring-Security-入门(一):登录与退出》 《Spring-Security-入门(二):基于数据库验证》 《Spring-Security-入门(三):密码加密》 《Spring-Security-入门(四):自定义-Filter》 《Spring-Security-入门(五):在 Sprin

Java架构师知识体认识

源码分析 常用设计模式 Proxy代理模式Factory工厂模式Singleton单例模式Delegate委派模式Strategy策略模式Prototype原型模式Template模板模式 Spring5 beans 接口实例化代理Bean操作 Context Ioc容器设计原理及高级特性Aop设计原理Factorybean与Beanfactory Transaction 声明式事物

Java进阶13讲__第12讲_1/2

多线程、线程池 1.  线程概念 1.1  什么是线程 1.2  线程的好处 2.   创建线程的三种方式 注意事项 2.1  继承Thread类 2.1.1 认识  2.1.2  编码实现  package cn.hdc.oop10.Thread;import org.slf4j.Logger;import org.slf4j.LoggerFactory

JAVA智听未来一站式有声阅读平台听书系统小程序源码

智听未来,一站式有声阅读平台听书系统 🌟&nbsp;开篇:遇见未来,从“智听”开始 在这个快节奏的时代,你是否渴望在忙碌的间隙,找到一片属于自己的宁静角落?是否梦想着能随时随地,沉浸在知识的海洋,或是故事的奇幻世界里?今天,就让我带你一起探索“智听未来”——这一站式有声阅读平台听书系统,它正悄悄改变着我们的阅读方式,让未来触手可及! 📚&nbsp;第一站:海量资源,应有尽有 走进“智听

【专题】2024飞行汽车技术全景报告合集PDF分享(附原数据表)

原文链接: https://tecdat.cn/?p=37628 6月16日,小鹏汇天旅航者X2在北京大兴国际机场临空经济区完成首飞,这也是小鹏汇天的产品在京津冀地区进行的首次飞行。小鹏汇天方面还表示,公司准备量产,并计划今年四季度开启预售小鹏汇天分体式飞行汽车,探索分体式飞行汽车城际通勤。阅读原文,获取专题报告合集全文,解锁文末271份飞行汽车相关行业研究报告。 据悉,业内人士对飞行汽车行业