首页 > 其他分享 >2048 ,Android 休闲益智游戏开发

2048 ,Android 休闲益智游戏开发

时间:2023-11-27 19:01:51浏览次数:36  
标签:游戏 益智 2048 result 滑动 Android 方块 数字

A. 项目描述

《2048》是一款经典的益智小游戏,它的目标是通过合并相同数字来达到2048这个最高分。
该游戏规则简单,玩家需要通过滑动屏幕来移动方块,相同数字的方块会合并成一个新的数字方块。这样的简单操作让人可以轻松上手。

《2048》小游戏app的技术原理主要涉及游戏逻辑、用户界面和数据存储等方面。

  1. 游戏逻辑:该游戏的核心逻辑是方块的移动和合并。
    通过触摸滑动屏幕,检测玩家的滑动方向,并根据相应的算法判断方块是否可以移动,以及是否可以合并。合并相同数字的方块时,需要更新方块的数值并计算得分。游戏结束条件是达到2048分或没有可移动的方块。
  2. 游戏界面:游戏界面由方块网格和一些控件组成。
    方块网格用于显示数字方块的当前布局,而控件则包括得分、撤销、重新开始等功能按钮。
    通过合适的布局和图形渲染,使得界面看起来简洁明了、易于操作。
  3. 数据存储:为了记录游戏状态和得分,需要进行数据存储。
    使用二维数组来表示方块网格,并将方块的数值存储在相应的位置上。此外,还需要保存玩家的得分和最高分等信息,以便在游戏过程中进行更新和比较。

除了上述的核心技术原理,还需要进行一些额外的功能支持,例如动画效果的实现等,以提升用户的游戏体验。
总结起来,《2048》小游戏app的技术原理包括游戏逻辑、游戏界面和数据存储等方面。通过合理的算法和数据结构设计,以及良好的界面交互,实现这款经典益智游戏。

B. 开发工具

  • Android Studio Dolphin | 2021.3.1 Patch 1
  • Java , JDK 11.0.13
  • Gradle , gradle-7.4

C. 代码设计

  • GameActivity为游戏的主界面,
    它分为上下两部分,上面部分包含了游戏得分、得分最高记录、撤销按钮、重启游戏等组建;下半部份为游戏区域,即数字方块网格,是玩家滑动屏幕来移动方块的操控区域。
    所有的数字小方块通过二维数组(NumEle[][])来保存;
    setListener()函数,设置了屏幕滑动事件的监听,在其回调中实现游戏逻辑:
            swipeListener = new TouchGestures(this) {
                  public boolean onSwipeTop() {
                      // 向上滑动
                      ……
                        }
                  public boolean onSwipeRight() {
                      // 向右滑动
                      ……
                        }
                  public boolean onSwipeLeft() {
                      // 向左滑动
                      ……
                        }
                  public boolean onSwipeBottom() {
                      // 向下滑动
                      ……
                        }
        touch_field.setOnTouchListener(swipeListener);
        number_field.setOnTouchListener(swipeListener);
  • NumEle 是数字小方块,继承自AppCompatButton
    它记录了自身在网格中的位置、数字,负责呈现各个数字。
  • TouchGestures负责监听用户的手势,
    根据用户滑动屏幕的方向、速度等操作,回调相应的函数,把用户在用户在屏幕上的行为传递出去。
public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) {
            
            boolean result = false;
            try {
                float diffY = e2.getY() - e1.getY();
                float diffX = e2.getX() - e1.getX();
                if (Math.abs(diffX) > Math.abs(diffY)) {
                    if (Math.abs(diffX) > SWIPE_THRESHOLD && Math.abs(velocityX) > SWIPE_VELOCITY_THRESHOLD) {
                        if (diffX > 0) {
                            result = onSwipeRight(); // 向右滑动
                        } else {
                            result = onSwipeLeft(); // 向左滑动
                        }
                    }else{
                        result = nichts();
                    }
                } else {
                    if (Math.abs(diffY) > SWIPE_THRESHOLD && Math.abs(velocityY) > SWIPE_VELOCITY_THRESHOLD) {
                        if (diffY > 0) {
                            result = onSwipeBottom(); // 向下滑动
                        } else {
                            result = onSwipeTop(); // 向上滑动
                        }
                    }else{
                        result = nichts();
                    }
                }
            } catch (Exception exception) {
                exception.printStackTrace();
            }
            return result;
        }


  • GameState 缓存游戏状态,包含当前状态的数字集合、得分,以及上一步的数字集合、得分,方便了“撤销”操作。
  • GameStatistics 统计了游戏信息,包含游戏时间、游戏界面中最大数字、最高得分记录,等等信息,这个数据通过文件存储长期保存。

D. 项目演示

2048 ,Android 休闲益智游戏开发_游戏

演示视频

E. 项目源码

关注公众号『数字森林』,后台发送关键字:2048,获取项目源码。

标签:游戏,益智,2048,result,滑动,Android,方块,数字
From: https://blog.51cto.com/u_16307842/8587589

相关文章

  • 轻松实现海报换脸!相芯SDK海报换脸功能的简单集成方法(Android)
    相芯SDK的海报换脸功能是一种面部合成技术,允许用户将自己的脸部特征与指定的海报或图片进行合成,实现换脸的效果。该功能可以用于各种娱乐应用、社交媒体、相机应用和虚拟试妆等场景。1.功能介绍逼真和自然的换脸效果:相芯SDK使用先进的人脸识别和图像合成技术,确保换脸效果的逼真和......
  • Android对重启原因的记录
    事后log中,可以在prop.txt中获取到他们:./prop.txt:259:[persist.sys.boot.reason]:[]./prop.txt:260:[persist.sys.boot.reason.history]:[kernel_panic,bug,52663./prop.txt:789:[sys.boot.reason]:[kernel_panic,bug]./prop.txt:790:[sys.boot.reason.last]:[kernel_p......
  • Android 模拟器横向视图
    HowtochangeAndroidemulatortolandscapemode?ctrl + fn + F11 on Mac to change the landscape to portrait and vice versa.left-ctrl + F11 on Windows 7.ctrl + F11 on Linux.......
  • Android Intent打开指定网页【问题与方法】
    方法一.Intentintent; PackageManagerpackageMgr=getPackageManager(); intent=packageMgr.getLaunchIntentForPackage("com.android.chrome");intent.setPackage(null); intent.setAction(Intent.ACTION_VIEW); intent.addCategory(......
  • Android Studio XML文件没有提示
    长路漫漫唯剑作伴原因:项目从AS3.5.2转到AS4.2.2后出现xml文件没有提示。解决:1.build:gradle:3.5.2换成最新的build:gradle:4.2.22.gradle-wrapper.properties由gradle-5.4.1-all.zip换成4.2.2最低要求版本gradle-6.7.1-all.zip项目下载构建完成即可......
  • Android学习 第三&四周
    主要内容1在AndroidStudio中配置了Copilot2学习了Android中权限的相关知识,学会了在布局中声明权限,在程序中动态申请权限的方法3完成了一个简易的本地视频播放器的demo,可以扫描本地的视频形成列表,并可以播放。......
  • Android平台GB28181设备接入模块开发填坑指南
    技术背景为什么要开发Android平台GB28181设备接入模块?这个问题不再赘述,在做Android平台GB28181客户端的时候,媒体数据这块,我们已经有了很好的积累,因为在此之前,我们就开发了非常成熟的RTMP推送、轻量级RTSP服务、录像模块、针对音视频的对接处理单元。这让我们在做Android平台GB28181......
  • 阿里内部流出最新的Android中高级面试题,赶紧看,晚了怕没了
    前言2023是最不平凡的一年,可能找工作的程序员在前半年感触不是很深,尤其是从铜三铁四之后,找工作是越来越难了,投出去的简历都是已读不回。其实,伴随着互联网行业寒冬的到来,各大企业都不敢大肆招聘,都是选择收缩发展,加上程序员内部越来越卷,要求越来越高了,要想在IT行业继续发展进阶拿高......
  • 对于Android程序员来说,如何知道自己应该具备哪些技能,才能成为Android高手?
    前言程序员,立之根本还是技术,一个程序员的好坏,虽然不能用技术的强弱来判断,但是技术水平一定是基础,技术差的程序员只能CtrlC+V,技术不深也成为不了架构师。程序员对于技术的掌握,除了从了解——熟悉——熟练——精通之外,还应该从基础出发,到进阶,到源码,再到实战,所以,程序员想要成功,首先成......
  • Android程序员如何在当前的行情下稳住脚跟?
    前言如今不像从前,会个四大组件就可以随随便便找个10几k的工作,现在面试中级的话都从底层问到框架。其实这些技术在真正的实际开发环境中真的用得到吗?不一定的,但是没办法,环境就是如此,能做的也就只有不断提升自己,去适应市场环境,提高自身技术水平!我的建议,不管自己现在是个什么境况,是躺......