【经典项目】Java小游戏 —— 贪吃蛇

一、需求分析

当提到贪吃蛇游戏时,通常是指一款经典的电子游戏,玩家通过操作一个蛇在屏幕上移动,目标是吃掉各种食物并尽量避免碰撞到自己的身体或游戏区域的边界。

贪吃蛇游戏最早出现在20世纪70年代末的个人电脑上,后来在各种游戏平台上得到广泛的普及。它简单而上瘾,在过去几十年里一直是游戏界的经典之一。

游戏的规则通常是,当蛇吃到食物时,身体会变长一节,游戏的难度也会逐渐增加。如果蛇碰到自己的身体或游戏区域的边界,那么游戏就会结束。玩家可以使用方向键(上、下、左、右)来控制蛇的移动方向。

现在,贪吃蛇游戏已经有了许多不同的版本和变种,包括各种图形风格和游戏机制。它也可以在不同的平台上玩,包括个人电脑、手机、游戏机等。

如果你对贪吃蛇游戏感兴趣,可以在各大应用商店中搜索,并下载适合你设备的版本进行尝试。愿你在游戏中获得乐趣!

二、实现分析

【业务逻辑】

一、先把蛇画出来定义一下蛇的结构,用一个数组保存一堆矩形,包含蛇头(红)和蛇身(灰)。

二、蛇能动(重点)蛇移动方式:自始至终都只有蛇头在动画一个灰色的方块,位置与蛇头重叠。
将蛇头向设定的前进方向移动一格。
需要一个保存方向的变量(direction),包括:R、L、U、D。
根据方向进行移动,一次移动一个格,根据按键改方向。

三、随机投放食物需要随机食物的位置。
需要判断食物在不在蛇身上。

四、吃食物判断食物是否与蛇头重叠。
数组加一个元素(少删除一个元素就是加一个元素)。
生成新的食物。

【主要代码】

    //监听按键@Overridepublic void keyPressed(KeyEvent e) {int keyCode = e.getKeyCode();//实现空格暂停 继续if (keyCode == KeyEvent.VK_SPACE) {if (isFaild) {initSnake();} else {isStarted = !isStarted;}
//			repaint();}//实现转向else if (keyCode == KeyEvent.VK_UP && !direction.equals("D")) {direction = "U";} else if (keyCode == KeyEvent.VK_DOWN && !direction.equals("U")) {direction = "D";} else if (keyCode == KeyEvent.VK_LEFT && !direction.equals("R")) {direction = "L";} else if (keyCode == KeyEvent.VK_RIGHT && !direction.equals("L")) {direction = "R";}}@Overridepublic void keyReleased(KeyEvent e) {// TODO Auto-generated method stub}/** 1.定个闹钟* 2.蛇移动* 3.重画一次蛇*/@Overridepublic void actionPerformed(ActionEvent e) {timer.start();if (isStarted && !isFaild) {//移动身体for (int i = len; i > 0; i--) {snakex[i] = snakex[i - 1];snakey[i] = snakey[i - 1];}//头移动if (direction.equals("R")) {//横坐标+25snakex[0] = snakex[0] + 25;if (snakex[0] > 850) snakex[0] = 25;} else if (direction.equals("L")) {//横坐标-25snakex[0] = snakex[0] - 25;if (snakex[0] < 25) snakex[0] = 850;} else if (direction.equals("U")) {//纵坐标-25snakey[0] = snakey[0] - 25;if (snakey[0] < 75) snakey[0] = 650;} else if (direction.equals("D")) {//纵坐标+25snakey[0] = snakey[0] + 25;if (snakey[0] > 650) snakey[0] = 75;}//吃食物if (snakex[0] == foodx && snakey[0] == foody) {len++;foodx = r.nextInt(34) * 25 + 25;foody = r.nextInt(24) * 25 + 75;}//判断游戏失败for (int i = 1; i < len; i++) {if (snakex[0] == snakex[i] && snakey[0] == snakey[i]) {isFaild = true;}}}repaint();}

三、效果展示

【界面展示】

【游戏过程】 

四、完整代码

经典项目Java小游戏-贪吃蛇资源-CSDN文库

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

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

相关文章

【CSS】动画(Transform,Transition,Animation)

CSS3属性中关于制作动画的三个属性&#xff1a;Transform,Transition,Animation。 transform 描述了元素的静态样式&#xff0c;本身不会呈现动画效果&#xff0c;可以对元素进行旋转rotate、扭曲skew、缩放scale和移动translate以及矩阵变形matrix。 div{transform:scale(2…

行为型设计模式—访问者模式

访问者模式&#xff1a;将数据结构对象与数据操作分离的设计模式&#xff0c;可以在不改变数据结构对象类结构的前提下定义作用于这些对象的新的操作。 访问模式结构&#xff1a; 访客接口 &#xff08;Visitor&#xff09; 声明了一系列以表示对象结构的具体元素为参数的访问…

使用 Paimon + StarRocks 极速批流一体湖仓分析

摘要&#xff1a;本文整理自阿里云智能高级开发工程师王日宇&#xff0c;在 Flink Forward Asia 2023 流式湖仓&#xff08;二&#xff09;专场的分享。本篇内容主要分为以下四部分&#xff1a; StarRocksPaimon 湖仓分析的发展历程使用 StarRocksPaimon 进行湖仓分析主要场景和…

ONLYOFFICE是一站式协作免费开源办公神器

一、前言 众所周知&#xff0c;我们工作都离不开办公软件&#xff0c;一个好的办公软件可以大幅度提高工作效率&#xff0c;就目前市场而言&#xff0c;常见的办公软件有微软的 Microsoft Office 以及国产的 WPS Office&#xff0c;微软的 Microsoft Office是付费的&#xff0…

在JAVA中如何删除ZIP等等的压缩文件

删除ZIP文件的步骤和要点 JAVA中文件的类型在JAVA中能够被删除的文件类型问题&#xff1a;既然如此&#xff0c;那为什么有时候会遇到文件无法被删除的问题&#xff1f;心得总结 JAVA中文件的类型 在Java中&#xff0c;只存在两种文件类型&#xff0c;一种是文件夹&#xff0c…

postgresql和kingbase关于模糊查询大小写兼容问题

在mysql中&#xff0c;会有相关的like关键词&#xff0c;并且默认的是忽略大小写的。但是在postgresql和kingbase中&#xff0c;只有ilike关键字&#xff0c;并且默认是大小写敏感的。当我们使用mybatisplus的时候&#xff0c;默认提供的api也只有like()。这里提供一种方式来对…

CANoe实际项目中文件夹的规划

本人&#xff0c;之前设计了一个CANoe工程&#xff0c;由于工程设计之初没有设计好文档的归纳分类&#xff0c;导致文件查找起来非常费劲。 为了避免以后出现文件混乱&#xff0c;不可查找的问题&#xff0c;故特此归纳说明。 建立工程时&#xff1a; 第1步就应该设计好文档…

基于51单片机的加油站计费系统

基于51单片机的加油站计费系统[proteus仿真] 计费检测系统这个题目算是课程设计和毕业设计中常见的题目了&#xff0c;本期是一个108基于51单片机的加油站计费系统 需要的源文件和程序的小伙伴可以关注公众号【阿目分享嵌入式】&#xff0c;赞赏任意文章 2&#xffe5;&#…

“软件老兵”的新征程:从代码到方案,40岁转身更显智慧锋芒

在快速迭代的软件行业&#xff0c;许多经验丰富的软件工程师&#xff0c;随着年岁的增长&#xff0c;发现自己在纯技术领域的竞争力似乎逐渐不敌那些刚刚踏入职场的00后工程师。 面对这一挑战&#xff0c;一些“软件老兵”选择转换跑道&#xff0c;将目光投向了方案工程师这一新…

EasyExcel实现三级联动

前言 项目中需要在导出的模板中新增三级联动的功能&#xff0c;类似省市区的联动。在网上找了一些方法&#xff0c;都不能直接使用&#xff0c;需要进行修改。本文主要分享一下&#xff0c;改后的代码&#xff0c;可以直接使用。 代码 public class CascadeWriteHandler imp…

Linux同时安装多个版本的JDKlinux多版本JDK切换配置- [Centos 安装JDK]

Linux同时安装多个版本的JDK&linux多版本JDK切换配置- [Centos 安装JDK] 一、查询系统是否已经安装jdk rpm -qa|grep java 或 rpm -qa|grep jdk 或 rpm -qa|grep gcj 二、卸载已安装的jdk Centos7存在已安装的JDK1.7时&#xff0c;可以使用以下方式删除1.7的openJDK rp…

「优选算法刷题」:两整数之和(位运算解法)

一、题目 给你两个整数 a 和 b &#xff0c;不使用 运算符 和 - &#xff0c;计算并返回两整数之和。 示例 1&#xff1a; 输入&#xff1a;a 1, b 2 输出&#xff1a;3示例 2&#xff1a; 输入&#xff1a;a 2, b 3 输出&#xff1a;5二、思路解析 其实笔试遇到这种题&…

python数据类型-元组

1 元组(tuple)的定义 元组是集合类型&#xff0c;和列表类似&#xff0c;元组中的元组类型可以不同&#xff0c;元素间用逗号隔开&#xff0c;和列表的不同之处在于&#xff1a; 1 元组的元组不可改变&#xff0c;也被称为只读列表 2 且元组用括号()表示&#xff0c;列表用方括…

月入过万比打工强,在家就能做steam搬砖项目真的假的

每天都有粉丝私下跟我聊天&#xff0c;讨论Steam搬砖项目到底是不是真的&#xff0c;到底能不能做。你想让我详细说说。那么今天就和大家详细聊聊这个月入过万元的项目。 简单来说&#xff0c;Steam搬砖项目就是在国外蒸汽上采购游戏道具&#xff0c;在国内网易buff平台上销售…

C# 求幂算法,最大公约数,最小公倍数

求幂算法概念 求幂算法是一种用于计算一个数的幂的算法。在C#中&#xff0c;可以使用两种方法来实现求幂操作&#xff1a;使用Math.Pow()函数或使用循环实现乘法运算。 方式1 double result Math.Pow(baseNumber, exponent); 方式2 double result 1; for (int i 0; i &l…

CVPR 2023: DBARF: Deep Bundle-Adjusting Generalizable Neural Radiance Fields

我们使用以下 6 个分类标准来解释本文的研究主题: 1. 神经表示: 隐式: 这种表示使用神经网络直接将空间中的 3D 点映射到其颜色和密度。网络充当“黑盒”函数,其内部工作原理无法直接解释。示例包括 NeRF、MPR-NeRF 和 Plenoxels。显式: 这种表示将每个体素或顶点的颜色和密…

实践理解 Transactional 是否生效

实践理解 Transactional 是否生效 示例&#xff1a; 新建一个订单表 tb_order_test 。 手动插入一条数据。 然后在代码中&#xff0c;根据 id 更新&#xff0c;如果更新成功&#xff0c;那么 update_time 会变化。 代码中执行 1/0; 由于 0不能做为除数&#xff0c;代码会抛…

MySQL 可重复读隔离级别,完全解决幻读了吗?

文章目录 前言一、什么是幻读&#xff1f;二、快照读是如何避免幻读的&#xff1f;三、当前读是如何避免幻读的&#xff1f;四、幻读被完全解决了吗&#xff1f;场景1场景2 总结 前言 MySQL InnoDB 引擎的默认隔离级别虽然是「可重复读」&#xff0c;但是它很大程度上避免幻读…

第 10 章:在C++中使用协程进行系统编程

最后一章专门介绍了一项对系统编程非常有用的功能&#xff0c;但这在C标准中相对较新。协程对象迅速找到了应用&#xff0c;成为了一等公民的状态机对象。它们的强大之处在于隐藏了协程帧后面的逻辑。请注意&#xff0c;这是一个高级主题&#xff0c;且C的协程接口既不简单也不…

交叉注意力融合2024创新方案汇总,附配套模块和代码

多模态学习和注意力机制是当前深度学习研究的热点领域之一&#xff0c;而交叉注意力融合作为这两个领域的结合点&#xff0c;具有很大的发展空间和创新机会。 作为多模态融合的一个重要组成部分&#xff0c;交叉注意力融合通过注意力机制在不同模块之间建立联系&#xff0c;促…