当前位置: 首页 > news >正文

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

博主介绍&#xff1a; 大家好&#xff0c;本人精通Java、Python、C#、C、C编程语言&#xff0c;同时也熟练掌握微信小程序、Php和Android等技术&#xff0c;能够为大家提供全方位的技术支持和交流。 我有丰富的成品Java、Python、C#毕设项目经验&#xff0c;能够为学生提供各类…...

三角形法恢复空间点深度

三角形法恢复空间点深度 如下图&#xff0c;以图 I 1 I_1 I1​为参考&#xff0c;图 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​&#xff0c;对应图 I 2 I_2 I2​中有特征点 p 2 p_2 p2​。理论上直…...

Linux 阻塞和非阻塞 IO 实验学习

Linux 阻塞和非阻塞 IO 实验学习 IO 指的是 Input/Output&#xff0c;也就是输入/输出&#xff0c;是应用程序对驱动设备的输入/输出操作。当应用程序对设备驱动进行操作的时候&#xff0c;如果不能获取到设备资源&#xff0c;那么阻塞式 IO 就会将应用程序对应的线程挂起&…...

JuiceFS 社区版 v1.2 发布,新增企业级权限管理、平滑升级功能

JuiceFS 社区版 v1.2 今天正式发布&#xff0c;这是自 2021 年开源以来的第三个大版本。v1.2 也是一个长期支持版本&#xff08;LTS&#xff09;。我们将持续维护 v1.2 以及 v1.1 这两个版本&#xff0c;v1.0 将停止更新。 JuiceFS 是为云环境设计的分布式文件系统&#xff0c;…...

虚拟3D沉浸式展会编辑平台降低了线上办展的门槛

在数字化浪潮的引领下&#xff0c;VR虚拟网上展会正逐渐成为企业展示品牌实力、吸引潜在客户的首选平台。我们与广交会携手走过三年多的时光&#xff0c;凭借优质的服务和丰富的经验&#xff0c;赢得了客户的广泛赞誉。 面对传统展会活动繁多、企业运营繁忙的挑战&#xff0c;许…...

泛微E9开发 查询页面添加按钮,完成特定功能

查询页面添加按钮&#xff0c;完成特定功能 1、关联知识&#xff08;查询页面实现新增按钮&#xff09;2、功能实现2.1. 点击按钮&#xff0c;输出选中的checkbox的值2.2. 点击按钮&#xff0c;打开一个自定义对话框 3、实现方法 1、关联知识&#xff08;查询页面实现新增按钮&…...

初学51单片机之数字秒表

不同数据类型间的相互转换 在C语言中&#xff0c;不同数据类型之间是可以混合运算的。当表达式中的数据类型不一致时&#xff0c;首先转换为同一类型&#xff0c;然后再进行计算。C语言有两种方式实现类型转换。一是自动类型转换&#xff0c;另外一种是强制类型转换。 转换的主…...

SpringBoot整合justauth实现多种方式的第三方登陆

目录 0.准备工作 1.引入依赖 2.yml文件 3. Controller代码 4.效果 参考 0.准备工作 你需要获取三方登陆的client-id和client-secret 以github为例 申请地址&#xff1a;Sign in to GitHub GitHub 1.引入依赖 <?xml version"1.0" encoding"UTF-8&quo…...

【Java算法】滑动窗口

&#x1f525;个人主页&#xff1a; 中草药 &#x1f525;专栏&#xff1a;【算法工作坊】算法实战揭秘 &#x1f456;一. 长度最小的子数组 题目链接&#xff1a;209.长度最小的子数组 算法原理 滑动窗口 滑动窗口算法常用于处理数组/字符串等序列问题&#xff0c;通过定义一…...

C# —— 属性和字段

属性和字段的区别 1.都是定义在一个类中&#xff0c;属于类成员变量 2.字段一般都是私有的private&#xff0c;属性一般是公开的Public 3.字段以小驼峰命名方式 age&#xff0c;属性一般是以大驼峰命名 Age 4.字段可以存储数据&#xff0c;属性不能存储数据&#xff0c;通过属性…...

【计算机视觉】人脸算法之图像处理基础知识(四)

图像的几何变换 图像的几何变换是指在不改变图像内容的前提下对图像的像素进行空间几何变换。主要包括图像的平移变换、镜像变换、缩放和旋转等。 1.插值算法 插值通常用来放缩图像大小&#xff0c;在图像处理中常见的插值算法有最邻近插值法、双线性插值法、二次立方、三次…...

探索 Spring Boot 集成缓存功能的最佳实践

在线工具站 推荐一个程序员在线工具站&#xff1a;程序员常用工具&#xff08;http://cxytools.com&#xff09;&#xff0c;有时间戳、JSON格式化、文本对比、HASH生成、UUID生成等常用工具&#xff0c;效率加倍嘎嘎好用。 程序员资料站 推荐一个程序员编程资料站&#xff1a;…...

微信小程序使用方法

一.在网页注册小程序账号&#xff08;在未注册的情况下&#xff09; 1.如果你还没有微信公众平台的账号&#xff0c;请先进入微信公众平台首页&#xff0c;点击 “立即注册” 按钮进行注册。我们选择 “小程序” 即可。 接着填写账号信息&#xff0c;需要注意的是&#xff0c;…...

前后端分离的后台管理系统源码,快速开发OA、CMS网站后台管理、毕业设计项目

那有没有一款软件解-决这种现状呢?答案是肯定的。引入我们的软件——eladmin。 介绍 ELADMIN,一个简单且易上手的 Spring boot 后台管理框架,已发布 Mybatis-Plus 版本,为开发者提供了一个全-面、高-效的解-决方案。 特点 高-效率:前后端完全分离,项目简单可配,内置代码…...

[深度学习]--分类问题的排查错误的流程

原因复现&#xff1a; 原生的.pt 好使&#xff0c; 转化后的 CoreML不好使&#xff0c; 分类有问题。 yolov8 格式的支持情况 Format Argument Suffix CPU GPU 0 PyTorch - .pt True True 1 Tor…...

微信小程序简易录音机

首先先创建一个项目&#xff08;想必大家都会啦那就直接开干&#xff09; 首先上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 所示操作序列的一个运行时间的渐近紧确界&#xff0c;假定使用链表表示和加权合并启发式策略。如果要写代码&#xff0c;请用go语言。 文心一言&#xff1a; 图 21-3 没有直接给出&#xff0c;但通常这种操作序列可能与某种数据结构&#xff08;如并查集或…...

基于springboot实现影院订票系统项目【项目源码+论文说明】计算机毕业设计

基于springboot实现影院订票系统演示 摘要 现代经济快节奏发展以及不断完善升级的信息化技术&#xff0c;让传统数据信息的管理升级为软件存储&#xff0c;归纳&#xff0c;集中处理数据信息的管理方式。本影院订票系统就是在这样的大环境下诞生&#xff0c;其可以帮助管理者在…...

Linux 常用命令合集

进入root模式 su -> 回车 -> 输入root用户密码关闭系统 方法1&#xff1a; shutdown -h now 方法2&#xff1a; init 0 方法3&#xff1a; telinit 0按预定时间关闭系统 shutdown -h hours:minutes &取消按预定时间关闭系统 shutdown -c重启 shutdown -r now重启…...

Vue3插件安装

一、volar插件安装 volar&#xff1a;Vue文件的语法提示和高亮提醒。volar已经更名为Vue - Official&#xff0c;其安装步骤如下。 (1)打开vscode&#xff0c;点击扩展面板&#xff0c;在搜索窗口中输入volar&#xff0c;选择Vue - Official进行安装。 &#xff08;2&#xff0…...

Redis精要

一、什么是缓存击穿、缓存穿透、缓存雪崩&#xff1f; 缓存穿透 【针对大量非法访问的请求&#xff0c;缓存中没有&#xff0c;直接访问DB】 缓存穿透指的查询缓存和数据库中都不存在的数据&#xff0c;这样每次请求直接打到数据库&#xff0c;就好像缓存不存在 一样。 对于系…...

国产24位I2S输入+192kHz立体声DAC音频数模转换器CJC4344

CJC4344是一款立体声数模转换芯片&#xff0c;内含插值滤波器、multi bit数模转换器、输出模拟滤波器。CJC4344系列支持大部分的音频数据格式。CJC4344基于一个带线性模拟低通滤波器的四阶multi-bitΔ-Σ调制器&#xff0c;而且本芯片可以通过检测信号频率和主时钟频率&#xf…...

UniApp 开发微信小程序教程(一):准备工作和环境搭建,项目结构和配置

文章目录 一、准备工作和环境搭建1. 安装 HBuilderX步骤&#xff1a; 2. 注册微信开发者账号步骤&#xff1a; 3. 创建 UniApp 项目步骤&#xff1a; 二、项目结构和配置1. UniApp 项目结构2. 配置微信小程序修改 manifest.json修改 pages.json 3. 添加首页文件index.vue 示例&…...

[WTL/Win32]_[中级]_[MVP架构在实际项目中的应用]

场景 在开发Windows和macOS的界面软件时&#xff0c;Windows用的是WTL/Win32技术&#xff0c;而macOS用的是Cocoa技术。而两种技术的本地语言一个主打是C,另一个却是Object-c。界面软件的源码随着项目功能增多而增多&#xff0c;这就会给同步Windows和macOS的功能造成很大负担…...

《Windows API每日一练》5.2 按键消息

上一节中我们得知&#xff0c;Windows系统的按键消息有很多类型&#xff0c;大部分按键消息都是由Windows系统的默认窗口过程处理的&#xff0c;我们自己只需要处理少数几个按键消息。这一节我们将详细讲述Windows系统的所有按键消息及其处理方式。 本节必须掌握的知识点&…...

adb 截屏和录屏命令

adb 录屏命令 screenrecord 简介 screenrecord 是一个 shell 命令 支持 Android 4.4(API level 19)以上 支持视频格式: mp4 一些限制 某些设备可能无法直接录制,原因是分辨率太高,如果遇到此类问题&#xff0c;请试着指定较低的分辨率 不支持录制过程中屏幕旋转,如果录制…...

springboot相关的一些知识

SpringBoot可以同时处理多少请求 SpringBoot默认的内嵌容器是Tomcat&#xff0c;所以SpringBoot可以同时处理多少请求取决于Tomcat。 SpringBoot中处理请求数量相关的参数有四个&#xff1a; server.tomcat.thread.min-spare&#xff1a;最少的工作线程数&#xff0c;默认大小…...

DP:完全背包+多重背包问题

完全背包和01背包的区别就是&#xff1a;可以多次选 一、完全背包&#xff08;模版&#xff09; 【模板】完全背包_牛客题霸_牛客网 #include <iostream> #include<string.h> using namespace std; const int N1001; int n,V,w[N],v[N],dp[N][N]; //dp[i][j]表示…...

购物返利系统的安全性:防范欺诈与数据保护

购物返利系统的安全性&#xff1a;防范欺诈与数据保护 大家好&#xff0c;我是免费搭建查券返利机器人省钱赚佣金就用微赚淘客系统3.0的小编&#xff0c;也是冬天不穿秋裤&#xff0c;天冷也要风度的程序猿&#xff01; 购物返利系统作为一种电子商务模式&#xff0c;通过向消…...

怎样快速做网站/百度广告怎么投放多少钱

原标题&#xff1a;Mac的外置硬盘上如何去安装Linux系统相对于普通品牌电脑&#xff0c;更多人越来月喜欢苹果电脑&#xff0c;因为配置的关系&#xff0c;硬盘容量小&#xff0c;现在小编就教大家在外置硬盘中安装Linux的方法吧&#xff0c;有需要使用Linux系统的用户&#xf…...

网站制作里面链接怎么做/搜索网页内容

SQL Server 2005 如何自动备份数据库 具体步骤如下&#xff1a;一、开始菜单中打开SQL Server Management Studio&#xff0c;展开窗口左边的SQL服务器&#xff1b; 二、SQL Server代理&#xff0c;右键选择"启动"&#xff08;未启动的话&#xff09;&#xff1b; &a…...

php企业网站demo/2024年新闻摘抄十条

酷派5891Q的usb驱动有没有人需要的&#xff0c;和其它的酷派手机是一样的&#xff0c;因为手机在用数据线连接电脑的时候都是需要驱动的&#xff0c;说的这个驱动是安装在电脑上&#xff0c;很多人下载下来驱动之后不知道怎么进行安装&#xff0c;如果没有驱动的话&#xff0c;…...

什么网站可以做线上小游戏/如何用模板建站

[sizexx-large][colororange][b]Rose框架[/b][/color][/size]官网&#xff1a;[url]https://code.google.com/p/paoding-rose/[/url]1 .对rose框架的整体认识1.1B/S web开发 我们所做的web开发是基于HTTP的应用服务开发&#xff0c;主要由两部分组成&#xff1a;浏览器服务端 大…...

重庆电子商务网站建设/手机免费建网站

2019独角兽企业重金招聘Python工程师标准>>> 一、一对一关联 1.1、提出需求 根据班级id查询班级信息(带老师的信息) 1.2、创建表和数据 创建一张教师表和班级表&#xff0c;这里我们假设一个老师只负责教一个班&#xff0c;那么老师和班级之间的关系就是一种一对一的…...

wordpress 翻译方案/做网站推广的公司

话说&#xff0c;前几天&#xff0c;一个美国小哥发现了iPhone计算器的一个隐藏功能…本文摘编自微信公众号“英国那些事儿&#xff08;hereinuk&#xff09;”&#xff0c;不代表瞭望智库观点原来我们按错一个数字&#xff0c;可能就是按清除键全部清除…然而&#xff0c;他发…...