【经典例子】Java实现2048小游戏(附带源码)

一、游戏回顾

        2048游戏是一款数字益智游戏,目标是通过合并相同数字的方块来达到2048这个目标。游戏在一个4x4的方格上进行,每个方格上都有一个数字(初始时为2或4)。玩家可以通过滑动方向键(上、下、左、右)来移动所有的方块,当两个相同数字的方块在移动过程中碰到一起时,它们会合并成一个数字的方块,数字为它们的和。每次滑动后,系统会在空白的方格上随机生成一个新的数字方块。游戏的目标是通过不断合并方块,最终得到一个数字为2048的方块。

游戏的规则相当简单,但是要想达到2048并不容易。玩家需要仔细计划每一次移动,以避免方块填满整个方格而无法继续合并。游戏通常要求一定的逻辑思维和策略,以及对数字的运算能力。

除了原始的2048游戏,后续还出现了许多变种和改进版本,添加了新的元素和玩法,增加了游戏的难度和挑战性。

【预期效果】

二、实现分析

1、方块移动

按下按钮,计算边界,移动方块,重新绘画方块。

同时注意,遇到需要合并的,例如,同样的数字2和2模块碰到一起,需要合并。

    public void keyPressed(int newDirection) {this.direction = newDirection;switch (direction) {case DIRECTION_UP:directionX = 0;directionY = -1;break;case DIRECTION_DOWN:directionX = 0;directionY = 1;break;case DIRECTION_LEFT:directionX = -1;directionY = 0;break;case DIRECTION_RIGHT:directionX = 1;directionY = 0;break;}updateOrder();}

【合并方法】 

   @Overridepublic void draw(Graphics g) throws CloneNotSupportedException {updateOrder();updateState();switch (state) {case STATE_UNKOWN:case STATE_MERGE:break;case STATE_MOVING:case STATE_FREE:move();// 移动break;}// 画内容drawContent(g);}

 2、状态更新

扫描变化后的矩阵,判断是否需要更新。

    /*** 获得状态** @return*/public int updateState() {if (moveCount != 0) {state = STATE_MOVING;} else if (moveCount == 0) {state = STATE_UNKOWN;}if (direction != DIRECTION_NONE && getNextBlock() == null) {state = STATE_FREE;}Block b = (Block) getNextBlock();//合并态判断if (direction != DIRECTION_NONE && b != null && b.level == level && (b.state != STATE_FREE)) {this.live = false;b.level++;b.state = STATE_MERGE;setThisBlock(null);BlockLoader.score += b.level * 10;if (BlockLoader.score >= BlockLoader.bestScore) {BlockLoader.bestScore = BlockLoader.score;}if (b.getNextBlock() != null && b.getNextBlock().live && b.getNextBlock().state == STATE_FREE) {} else {b.direction = DIRECTION_NONE;b.directionX = 0;b.directionY = 0;}}return state;}

三、源码获取

【经典例子】Java实现2048小游戏(附带源码)-CSDN博客

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

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

相关文章

这是一篇学习记录(一) — RPA

犹豫再三要不要记录一下这次的学习历程,说起RPA,可能很多人不了解,那么RPA到底是什么,它有什么用处。 机器人流程自动化 (RPA),又称为软件机器人,是一种利用智能自动化技术来模拟人类执行后台任务的方法。…

静态代码块中使用 ExecutorService 执行多线程会出现什么情况呢?

AQS系列 1、AQS核心原理 2、ReentrantLock 原理及示例 3、CountDownLatch / Semaphore 示例及使用场景 4、BlockingQueue 示例及使用场景 5、静态代码块中使用 ExecutorService 执行多线程会出现什么情况呢? 文章目录 AQS系列一、 一般场景二、static {} 场景三、原…

AD高速板常见问题和过流自锁

可以使用电机减速器来增大电机的扭矩,低速运行的步进电机更要加上减速机 减速电机就是普通电机加上了减速箱,这样便降低了转速增大了扭矩 HDMI布线要求: 如要蛇形使其等长,不要在HDMI的一端绕线。 HDMI走线时两边拉线&#xff0…

忘记 RAG:拥抱Agent设计,让 ChatGPT 更智能更贴近实际

RAG(检索增强生成)设计模式通常用于开发特定数据领域的基于实际情况的ChatGPT。 然而,重点主要是改进检索工具的效率,如嵌入式搜索、混合搜索和微调嵌入,而不是智能搜索。 这篇文章介绍了一种新的方法,灵感…

信创ARM架构QT应用开发环境搭建

Linux ARM架构QT应用开发环境搭建 前言交叉工具链Ubuntu上安装 32 位 ARM 交叉工具链Ubuntu上安装 64 位 ARM 交叉工具链 交叉编译 QT 库下载 QT 源码交叉编译 QT 源码 Qt Creator交叉编译配置配置 Qt Creator Kits创建一个测试项目 小结 前言 有没有碰到过这种情况&#xff1…

15、jenkins

15、jenkins k8s手撕yml方式部署最新版 Jenkins 2.441(jdk-21版)(jenkins-prod) mkdir -p ~/jenkins-prod-ymlkubectl create ns jenkins-prodkubectl label node k8s-node1 jenkins-prodjenkins-prodcat > ~/jenkins-prod-y…

vivado TCL运行编译

用Tcl运行合成 运行合成的Tcl命令是synth_design。通常,此命令与一起运行多个选项,例如: synth_design -part xc7k30tfbg484-2 -top my_top 在本例中,synth_design使用-part选项和-top选项运行。在Tcl控制台中,您可以…

layui

基于复杂结构的自定义模版相关介绍 我这里的接口给的格式数据 我这里搜索往返时候要显示成这样的 layui.use([table,form], function(){ var table layui.table; var form layui.form;// 渲染表格 table.render({ elem: #test-table-reload,toolbar: #toolbarDemo, …

【驱动】块设备驱动(四)-块设备驱动层

前言 块设备驱动程序是Liux块子系统中的最底层组件。它们从IO调度程序中获得请求,然后按要求处理这些请求。一个块设备驱动程序可能处理几个块设备。例如,IDE设备驱动程序可以处理几个IDE磁盘,其中的每个都是一个单独的块设备。而且&#xff…

json、jsonlines格式化显示

一、对于vscode暂时没找到合适的方法来格式化 二、利用JetBrains的IDE(例如PyCharm)来格式化(快捷键CtrlAltL) 三、利用jq工具:(速度快,推荐。) # 安装 sudo apt install jq# 使用(假设你已经有一个dev.jsonlines文件) jq . dev.…

数据库删除事务提交之后数据恢复

项目场景: 前几天的遇到的,老大让我删一条数据,不熟悉业务,我看了一下查询的sql语句,发现关联了三个表t1,t2,t3,把第三张表t3填报记录删掉了,又运行了一遍查询sql发现还能搜索到,问…

vulnhub靶场之Thales

一.环境搭建 1.靶场描述 Description : Open your eyes and change your perspective includes 2 flags:user.txt and root.txt. Telegram: machineboy141 (for any hint) This works better with VIrtualBox rathe than VMware 2.靶场地址 https://www.vulnhub.com/entry/t…

ensp实验合集(二)

实验6 VLAN划分....................................................................... - 30 - 实验7 路由器调试及常用命令使用........................................ - 42 - 实验8 配置静态路由器............................................................…

GCC编译器的使用以及使用Makefile语法进行操控

Makefile 这里使用的Makefile操控编译器 gcc 常见的组成部分 c: gcc 的一个版本,默认语言设置为 C,而且在链接的时候自动包含标准 C 库。这和 g 一样configure: GCC 源代码树根目录中的一个脚本。用于设置配置值和创建 GCC 编…

P2SH地址嵌套SegWit脚本

主要分为以下步骤: 创建SegWit脚本:首先,您需要创建一个SegWit脚本,可以是Pay-to-Witness-Public-Key-Hash(P2WPKH)或Pay-to-Witness-Script-Hash(P2WSH)脚本。这些脚本使用新的Seg…

pytest中fixture的使用方法

一、pytest中的fixture是什么 为可靠的和可重复执行的测试提供固定的基线(可以理解为测试的固定配置,使不同范围的测试都能够获得统一的配置),fixture提供了区别于传统单元测试(setup/teardown)风格的令人…

2024最新版鸿蒙HarmonyOS开发工具安装使用指南

2024最新版鸿蒙HarmonyOS开发工具安装使用指南 By JacksonML 0. 什么是鸿蒙Harmony OS? 华为鸿蒙系统(HUAWEI Harmony OS),是华为公司在2019年8月9日于东莞举行的华为开发者大会(HDC.2019)上正式发布的分…

算法每日一题: Nim游戏 | 找规律

哈哈,大家好,我是星恒,今天的每日一题真开心,连做了3天牢,终于ak了一道,太不容易了 这道题其实就是找规律,刚开始我还以为是动归,但是列举了不少例子之后,发现有自己直接…

蓝桥杯每日一题-----数位dp练习

题目 链接 参考代码 写了两个,一个是很久以前写的,一个是最近刚写的,很久以前写的时候还不会数位dp所以写了比较详细的注释,这两个代码主要是设置了不同的记忆数组,通过这两个代码可以理解记忆数组设置的灵活性。 im…

redis源码之:集群创建与节点通信(1)

一、创建集群与添加节点(meet) 通过redis源码之:redis-cli 集群命令发现,不管是新建cluster集群还是往集群里添加新节点,都是通过meet指令完成,假设有ABCD四个节点,新建集群:redis-…