【经典例子】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.hqwc.cn/news/454349.html

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

相关文章

SpringBoot接入微信公众号【服务号】

SpringBoot接入微信公众号【服务号】 一、服务号注册 注册地址:https://mp.weixin.qq.com/cgi-bin/registermidpage?actionindex&langzh_CN 注册流程参考:https://kf.qq.com/touch/faq/150804UVr222150804quq6B7.html?platform15 二、服务号配…

第八届:世界3D渲染挑战赛《无尽阶梯》正式开启

全世界的3D艺术创作者们引颈期盼的盛事“全球3D渲染艺术大奖赛”已迈入第八个年头。本届比赛的主题为“无尽的阶梯”,参赛者们可通过挑战赛展现自身的创造力,比赛在行业内拥有极高的知名度,含金量十足,参赛这可通过这里提高自己在…

靶机实战bwapp亲测xxe漏洞攻击及自动化XXE注射工具分析利用

靶机实战bwapp亲测xxe漏洞攻击及自动化XXE注射工具分析利用。 1|0介绍 xxe漏洞主要针对webservice危险的引用的外部实体并且未对外部实体进行敏感字符的过滤,从而可以造成命令执行,目录遍历等.首先存在漏洞的web服务一定是存在xml传输数据的,可以在http头的content-type中查…

计算机服务器中了halo勒索病毒如何处理,halo勒索病毒解密数据恢复

网络技术的不断发展与应用,为企业的生产生活提供了极大便利,但网络数据安全威胁无处不在,近日,云天数据恢复中心接到某连锁超市求助,企业计算机服务器被halo勒索病毒攻击,导致计算机系统瘫痪,无…

最长子序列问题(蓝桥云课--蓝桥勇士)

首先,我们得分清楚子序列和子串的区别: 1、最长子串是指在字符串中连续的一段最长的字符串 2、最长子序列是指在字符串中不一定连续的最长字符串 了解到这两个概念之后我们来看一个比较基础的最长子序列问题,此处以蓝桥杯练习题第一题为例&a…

【自定义序列化器】⭐️通过继承JsonSerializer和实现WebMvcConfigurer类完成自定义序列化

目录 前言 解决方案 具体实现 一、自定义序列化器 二、两种方式指定作用域 1、注解 JsonSerialize() 2、实现自定义全局配置 WebMvcConfigurer 三、拓展 WebMvcConfigurer接口 章末 前言 小伙伴们大家好,上次做了自定义对象属性拷贝&#x…

Unity3D学习之UI系统——UGUI

文章目录 1. 前言2 六大基础组件概述3 Canvas——渲染模式的控制3.1 Canvas作用3.2 Canvas的渲染模式3.2.1 Screen Space -Overlay 覆盖模式3.2.2 Screen Space - Camera 摄像机模式3.2.3 World Space 4 CanvasScaler ——画布缩放控制器4.1 Constant Pixel Size 恒定像素模式4…

pwn学习笔记(2)

pwn学习笔记(2) 1.三种常见的寄存器: ​ ax寄存器:通用寄存器,可用于存放多种数据 ​ bp寄存器:存放的是栈帧的栈底地址 ​ sp寄存器:存放的是栈顶的地址 2.栈帧与栈工作的简介&#xff1a…

【Matplotlib】figure方法 你真的会了吗!?

🎈个人主页:甜美的江 🎉欢迎 👍点赞✍评论⭐收藏 🤗收录专栏:matplotlib 🤝希望本文对您有所裨益,如有不足之处,欢迎在评论区提出指正,让我们共同学习、交流进…

MATLAB如何安装遗传算法工具箱(附方法代码和工具箱链接)

一般MATLAB的工具箱都是需要手动设置安装, 下面我给大家介绍一种用代码安装工具箱的方法, 就以谢菲尔德大学遗传算法工具箱为例 代码和完整的工具箱见:https://download.csdn.net/download/corn1949/88810340 下面直接给出代码: main.m文件代码: clc;close all;c…

【多模态MLLMs+图像编辑】MGIE:苹果开源基于大语言模型的图片编辑神器(24.02.03开源)

项目主页:https://mllm-ie.github.io/ 论文2309.Guiding Instruction-based Image Editing via Multimodal Large Language Models 代码:https://github.com/apple/ml-mgie 媒体:机器之心的解析https://mp.weixin.qq.com/s/c87cUuyz4bUgfW2_m…

如何把大容量10G的文件分享给别人?整理了3个简单的方法~

如果文件过大,比如10G的文件发送起来简直问题重重,不仅费时费流量而且还很可能在发送的中途失败,这时候就需要借助一些压缩软件对文件进行压缩,下面就向大家介绍3个好用的压缩软件~ 方法一:使用嗨格式压缩大师压缩后发…