Java课程设计:基于swing的贪吃蛇小游戏

文章目录

  • 一、项目介绍
  • 二、核心代码
  • 三、项目展示
  • 四、源码获取

一、项目介绍

贪吃蛇是一款经典的休闲益智游戏,自问世以来便深受广大用户的喜爱。这个游戏的基本玩法是控制一条不断增长的蛇,目标是吃掉屏幕上出现的食物,同时避免撞到边缘或自身。随着游戏的进行,蛇的身体会越长越大,操控难度也越来越高,为玩家带来了挑战性和乐趣。

随着计算机和移动设备的普及,贪吃蛇游戏也逐渐从最初的黑白方块发展成为精美的图形游戏。但是无论视觉效果如何,游戏的核心玩法始终保持不变,这也是贪吃蛇游戏能持续吸引玩家的重要原因。

二、核心代码

启动窗口

public class StartGame {public static void main(String[] args) throws UnsupportedAudioFileException, IOException, LineUnavailableException {//音乐./*Thread t1 = new PlayMusic();t1.start();*/JFrame jf = new JFrame();jf.setTitle("贪吃蛇大作战");jf.setBounds(10,10,600,485);jf.setResizable(false);jf.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);jf.setVisible(true);//正常游戏界面放在面板上jf.add(new GamePanel());}
}

存放数据

public class DataCenter {public static URL headerURL=DataCenter.class.getResource("/Static/Header.png");public static URL upURL=DataCenter.class.getResource("/Static/Up.png");public static URL rightURL=DataCenter.class.getResource("/Static/Right.png");public static URL downURL=DataCenter.class.getResource("/Static/Down.png");public static URL leftURL=DataCenter.class.getResource("/Static/Left.png");public static URL bodyURL=DataCenter.class.getResource("/Static/Body.png");public static URL foodURL=DataCenter.class.getResource("/Static/Food.png");public static ImageIcon header=new ImageIcon(headerURL);public static ImageIcon up=new ImageIcon(upURL);public static ImageIcon right=new ImageIcon(rightURL);public static ImageIcon down=new ImageIcon(downURL);public static ImageIcon left=new ImageIcon(leftURL);public static ImageIcon body=new ImageIcon(bodyURL);public static ImageIcon food=new ImageIcon(foodURL);}

游戏初始化

 //游戏初始化public void init(){length = 3;//蛇的长度,初始为3String direction;//初始方向向右//脑袋的坐标snakeX[0] = 95;snakeY[0] = 110;//第一节身体snakeX[1] = 70;snakeY[1] = 110;//第二节身体snakeX[2] = 45;snakeY[2] = 110;direct = "R";//初始方向向右score=0;gameState = false;//默认还没开始游戏//游戏一开始定时器就启动timer.start();foodX = 20 + 25 * random.nextInt(22);//生成[0-21]的整数foodY = 85 + 25 * random.nextInt(14);//生成[0-13]的整数isFail = false;}

绘制面板

 //绘制面板@Overrideprotected void paintComponent(Graphics g) {this.setBackground(Color.WHITE);super.paintComponent(g);//清屏//绘制静态面板//头部图片DataCenter.header.paintIcon(this, g, 20, 8);//游戏面板g.fillRect(20, 85, 548, 355);//画积分g.setColor(Color.WHITE);g.setFont(new Font("微软雅黑",Font.BOLD,20));g.drawString("长度:"+length,450,32);g.drawString("分数:"+score,450,55);//画食物DataCenter.food.paintIcon(this, g, foodX, foodY);//画小蛇头if (direct.equals("U")) {DataCenter.up.paintIcon(this, g, snakeX[0], snakeY[0]);} else if (direct.equals("R")) {DataCenter.right.paintIcon(this, g, snakeX[0], snakeY[0]);} else if (direct.equals("D")) {DataCenter.down.paintIcon(this, g, snakeX[0], snakeY[0]);} else if (direct.equals("L")) {DataCenter.left.paintIcon(this, g, snakeX[0], snakeY[0]);}//画蛇身for (int i = 1; i < length; i++) {DataCenter.body.paintIcon(this, g, snakeX[i], snakeY[i]);}//游戏状态if (gameState == false) {g.setColor(new Color(231, 85, 18));g.setFont(new Font("微软雅黑", Font.BOLD, 40));g.drawString("按下空格开始游戏!", 126, 265);}if (isFail) {g.setColor(new Color(226, 9, 9));g.setFont(new Font("微软雅黑", Font.BOLD, 40));g.drawString("游戏失败!按下空格重新开始", 40, 265);}}

三、项目展示

初始面板
在这里插入图片描述
开始游戏
在这里插入图片描述
游戏失败
在这里插入图片描述

四、源码获取

因为页面与源码太多了,所以页面与源码只展示了一部分,完整源码已经打包了,点击下面蓝色链接获取!

点我获取源码

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

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

相关文章

使用Task容易造成程序卡顿

Task虽然方便&#xff0c;据说在多核处理器中有利于提高程序性能。但是使用过程中总是出现莫名奇妙的卡顿&#xff0c;特别是计算机性能不高的时候。多个task偶尔会出现卡顿比较长的时间&#xff0c;才开始执行。不像thread可以立马开始执行。已经在两个项目中遇到类似问题&…

Burp Suite使用及BruteForc_test靶场实战

简介 Burp Suite是用于攻击和测试Web应用程序安全性的集成平台&#xff0c;包含多个协同工作的工具&#xff0c;支持信息共享与复杂攻击。设计有加速攻击流程的接口&#xff0c;所有工具共享强大框架&#xff0c;处理HTTP消息、持久性、认证、代理、日志和警报。主要用于安全性…

grpc代理服务的实现(一)

最近公司需要无感知基于服务代号来实现通信, 并监控和管理通信连接&#xff0c;目前公司使用的是如下的逻辑(当然逻辑简化了&#xff0c;但是思想不变) 目录 简单的原理图代理服务的实现创建 tls tcp 服务, 用于grpc client 和 grpc service 通信保存 与 代理服务建立的 grpc …

Codeforces Round 926 (Div. 2)(A~C题解)

A题是个签到题&#xff0c;BC思维题目&#xff0c;搞出来结论就秒了&#xff0c;D题是个树上DP由于现在水平薄弱还没做出来&#xff0c;以后补上 A. Sasha and the Beautiful Array 思路给数组排序&#xff0c;然后后项减前项&#xff0c;累加值就是最终结果&#xff0c;签到题…

AI 大模型的赛点:通用与垂直之争

&#x1f49d;&#x1f49d;&#x1f49d;欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…

短视频矩阵源码---矩阵托管1000个账号如何正规开发规则实现

一、短视频矩阵源码开发实现规则&#xff1a; 1.首先是确保各个官方平台api接口的稳定性&#xff0c;一定要是各个平台正规的api 2.其次是保证服务器运行&#xff0c;带宽保证能够并行&#xff0c;目前我们这边用的是源码所需服务器配置&#xff1a;规格:最低8核16G2、硬盘:系…

GIS之arcgis系列10:arcpy实现批量掩膜提取

按掩膜提取 (Spatial Analyst) 提取掩膜所定义区域内的相应栅格像元。 OutRas ExtractByMask(InRas1, InMsk1, "INSIDE") 使用情况 输入栅格中的其他属性&#xff08;若有的话&#xff09;将按照原样添加到输出栅格属性表。 根据所记录的属性&#xff0c;某些属性…

【NLP练习】Transformer中的位置编码

&#x1f368; 本文为&#x1f517;365天深度学习训练营 中的学习记录博客&#x1f356; 原作者&#xff1a;K同学啊 一、什么是位置编码 1. 位置编码定义 Transformer 模型中的位置编码是为了在处理序列数据时引入位置信息&#xff0c;以便模型能够分辨输入序列中不同位置的词…

【python】正则匹配国内手机号

下面是将您提供的Java代码段翻译成Python的等效代码&#xff1a; import re def is_valid_phone_number(phone_number):regex "^1[3-9]\d{9}$"return bool(re.match(regex, phone_number))这段Python代码定义了一个函数is_valid_phone_number&#xff0c;它接受一个…

蓝卓为中小制造企业注入数字化转型活力

随着劳动力成本上升,原材料价格上涨,企业生产成本逐年增加&#xff0c;市场竞争越来越激烈&#xff0c;传统的中小制造企业面临着巨大的压力。 通过数字化转型应对环境的变化已成为行业共识&#xff0c;在数字化的进程中&#xff0c;中小企业首要考虑生存问题&#xff0c;不能…

spring boot 多个项目整合,打包成可依赖的包

一、背景介绍 接手前人项目&#xff0c;代码都是一块一块的&#xff0c;很多个spring boot服务&#xff0c;服务器重新启动一下&#xff0c;就要同时再启动很多jar服务&#xff0c;漏一个就麻烦了&#xff08;虽然有一键启动&#xff09;。但是有很多终端黑框很是麻烦。领导要…

解决Kubernetes报错节点状态为NotReady,希望可以帮到你

Kubernetes报错节点状态为NotReady 文章目录 Kubernetes报错节点状态为NotReady实验过程一、报错内容二、安装flannel网络插件三、成功 实验过程 起因是这样的这几天做学到了k8s&#xff0c;那肯定要部署呀&#xff0c;然后就先用kubeadm进行快速部署的&#xff0c;目的是为了…

怎样为Django的server配置跨域资源共享(CORS)

为了在 Django 服务器中配置跨域资源共享&#xff08;CORS&#xff09;&#xff0c;你可以使用 django-cors-headers 库。这个库可以帮你轻松地设置 CORS 规则&#xff0c;从而允许你的 Django 服务器处理来自不同源的请求。 以下是配置 CORS 的步骤&#xff1a; 安装 django…

Spring-boot-自定义LogbackAppender

在spring boot中&#xff0c;只要我们在项目的resource文件夹中&#xff0c;增加了一个叫logback-spring.xml的文件&#xff0c;那么spring boot就会自动识别日志配置&#xff0c;并应用这个文件里的配置&#xff0c;这是由ClasspathLoggingApplicationListener类做的 appende…

赶紧收藏!2024 年最常见 20道并发编程面试题(六)

上一篇地址&#xff1a;赶紧收藏&#xff01;2024 年最常见 20道并发编程面试题&#xff08;五&#xff09;-CSDN博客 十一、什么是读写锁&#xff08;Reader-Writer Locks&#xff09;&#xff1f; 读写锁&#xff08;Reader-Writer Locks&#xff09;&#xff0c;也称为共享…

Kubernetes集群持久化部署实践

WordPress 网站持久化部署 要持久化MariaDB 可以把 Deployment 改成了 StatefulSet&#xff0c;修改 YAML添加“serviceName”“volumeClaimTemplates”这两个字段&#xff0c;定义网络标识和 NFS 动态存储卷&#xff0c;然后在容器部分用“volumeMounts”挂载到容器里的数据目…

八 、VS的调试技巧

--- 24.4.20 目录 1、什么是Bug&#xff1f; 2、什么是调试&#xff08;Debug&#xff09;&#xff1f; 3、Debug和Release 4、VS基础调试快捷键 4.1、环境准备 4.2、调试快捷键 5、监视和内存观察 5.1、监视窗口 5.2、内存窗口 6、调试举例1 7、调试举例2 8、调试…

旅行者1号有什么秘密?飞行240多亿公里,为什么没发生碰撞?

旅行者1号有什么秘密&#xff1f;飞行240多亿公里&#xff0c;为什么没发生碰撞&#xff1f; 自古以来&#xff0c;人类就对浩瀚无垠的宇宙充满了好奇与向往。从最初的仰望星空&#xff0c;到如今的深空探测&#xff0c;人类探测宇宙的历史发展可谓是一部波澜壮阔的史诗。 在…

缺陷 规避

1. NPE 空指针异常(Null Pointer Exception) 1)使用注解 NotNull 和 Nullable 2)用 Optional 处理链式调用 3)用 Objects.equals(a,b) 代替 a.equals(b)&#xff0c;能够避免任意对象为 null 时的 NPE。 4)使用空对象模式,空对像模式通过一个特殊对象代替不存在的情况&…

如何模拟一个元素(如一个链接 <a>)被禁用(disabled)的状态

就像表单元素&#xff08;如 <input>、<button> 等&#xff09;的 disabled 属性一样。 要模拟一个元素被禁用的状态&#xff0c;你可以使用CSS来移除或改变该元素的交互性&#xff0c;并为其添加视觉上的提示。以下是一些建议的方法&#xff1a; 移除交互性&…