android 模拟2048

Android平台2048游戏开发实战指南 Android Studio是Google官方推荐的Android开发IDE(集成开发环境),它提供了强大的工具和丰富的功能来帮助开发者高效地进行Android应用开发。本章我们将详细地介绍Android Studio的基本界面布局,学习如何创建一个Android项目,解析项目结构,以及如何搭建和使用模拟器进行应用测试。Board类是游戏中管理游戏逻辑的核心组件之一,它负责维护游戏板的状态,如当前所有方块的位置、大小、以及是否可以进行移动等。 阅读详情

利用节日休息时间在ANDROID上进行学习并模拟2048游戏。

效果如下图:

制作思路:

1、画出2048游戏主界面,根据手机屏幕宽高度进行计算并画出每个方块的大小。

复制代码
 1 @Override
 2     protected void onSizeChanged(int w, int h, int oldw, int oldh) {
 3         super.onSizeChanged(w, h, oldw, oldh);
 4         int cW = (Math.min(w, h) - 10) / 4;
 5 
 6         addCards(cW, cW);
 7 
 8         startGame();
 9     }
10 
11     private void startGame() {
12         MainActivity aty = MainActivity.getMainActivity();
13         aty.clearScore();
14 
15         for (int y = 0; y < 4; y++) {
16             for (int x = 0; x < 4; x++) {
17                 cardsMap[x][y].setNum(0);
18             }
19         }
20         addRandomNum();
21         addRandomNum();
22     }
复制代码

2、建立一个二维数组用于存储卡面上的值

3、建立一个list<point>用于存储每个卡片的位置

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
private Card[][] cardsMap = new Card[4][4];
private List<Point> emptyPoints = new ArrayList<Point>();
private void addCards(intcardWidth, int cardHeight) {
    Card c;
    LinearLayout line;
    LinearLayout.LayoutParams lineLp;
    for(int y = 0; y < 4; y++) {
        line =new LinearLayout(getContext());
        lineLp = new LayoutParams(-1, cardHeight);
        addView(line, lineLp);
        for (intx = 0; x <4; x++) {
            c = new Card(getContext());
            line.addView(c, cardWidth, cardHeight);
            cardsMap[x][y] = c;
        }
    }
}

  

4、游戏开始时进行,添加随机卡片数据。

复制代码
private void addRandomNum() {
        emptyPoints.clear();
        for (int y = 0; y < 4; y++) {
            for (int x = 0; x < 4; x++) {
                if (cardsMap[x][y].getNum() <= 0) {
                    emptyPoints.add(new Point(x, y));
                }
            }
        }
        if (emptyPoints.size() > 0) {
            Point p = emptyPoints.remove((int) (Math.random() * emptyPoints.size()));
            cardsMap[p.x][p.y].setNum(Math.random() > 0.1 ? 2 : 4);
        }
    }
复制代码

5、利用android touch事件进行记录手指在屏幕滑动方向。

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
private void initGameView() {
        setOrientation(LinearLayout.VERTICAL);
        setBackgroundColor(0xffbbada0);
        setOnTouchListener(newOnTouchListener() {
            private floatstartX
                   ,
                   startY
                   ,
                   offsetX
                   ,
                   offsetY;
            @Override
            public booleanonTouch(View v, MotionEvent event) {
               switch (event.getAction()) {
                   case MotionEvent.ACTION_DOWN://当屏幕点击时进行记录点击的X和Y值
                       startX = event.getX();
                       startY = event.getY();
                       break;
                   case MotionEvent.ACTION_UP:
                       offsetX = event.getX() - startX;//进行计算点击偏移值
                       offsetY = event.getY() - startY;
                       if (Math.abs(offsetX) > Math.abs(offsetY)) {
                           if (offsetX < -5) {
                               //left
                               swipeLeft();
                           } else if (offsetX > 5) {
                               //right
                               swipeRight();
                           }
                       } else {
                           if (offsetY < -5) {
                               //up
                               swipeUp();
                           } else if (offsetY > 5) {
                               //down
                               swipeDown();
                           }
                       }
                       break;
               }
               return true;
            }
        });
    }

  

6、根据滑动的方向进行循环每个方向的卡片 进行卡片的位置移动及相同的卡片相加

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
private void swipeLeft() {
    booleanmerge = false;
    for(int y = 0; y < 4; y++) {
        for(int x = 0; x < 4; x++) {
            for (intx1 = x + 1; x1 <4; x1++) {
                if (cardsMap[x1][y].getNum() >0) {
                   if (cardsMap[x][y].getNum() <=0) {
                       cardsMap[x][y].setNum(cardsMap[x1][y].getNum());
                       cardsMap[x1][y].setNum(0);
                       x--;
                       merge = true;
                   } else if (cardsMap[x][y].equals(cardsMap[x1][y])) {
                       cardsMap[x][y].setNum(cardsMap[x][y].getNum() * 2);
                       cardsMap[x1][y].setNum(0);
                       MainActivity.getMainActivity().addScore(cardsMap[x][y].getNum());
                       merge = true;
                   }
                   break;
               }
            }
        }
        if (merge) {
            addRandomNum();
            checkComplete();
        }
    }
}
 
STM32_WS2811驱动 STM32的WS2811驱动 阅读详情

相关推荐

基于PyTorch的BP神经网络PID控制器动态调参实战

本文详细介绍了基于PyTorch的BP神经网络PID控制器动态调参实战,结合BP神经网络的自适应能力和PID控制算法的经典优势,实现工业控制中的高效参数调整。通过PyTorch实现BP-PID融合架构,包括网络设计、损失函数优化及动态调参技巧,显著提升控制性能,适用于温度控制、电机控制等场景。

weixin_29094775的博客 520

安卓学习笔记(1)-2048游戏遇到的问题与解决方案

前言​ 前段时间对java的基础学习之后,开始着手于安卓的学习。感谢极客学院的视频教程中关于2048游戏开发的完整教程。我在此项目的基础上对界面进行了优化,添加了颜色,新游戏按钮,增加了当前成绩和最好成绩模块等。现将这个项目中的一些知识点和遇到问题进行总结,欢迎各位进行交流~~~。下面就是我初步完成之后的游戏界面。​ 关于程序运行逻辑​ 首先建立了一个Ca

kabuto_hui的博客 4216

全网最全的AItium Designer 16下载资源与安装步骤

Altium Designer 除了全面继承包括Protel 99SE、Protel DXP在内的先前一系列版本的功能和优点外,还增加了许多改进和很多高端功能。该平台拓宽了板级设计的传统界面,全面集成了FPGA设计功能和SOPC设计实现功能,从而允许工程设计人员能将系统设计中的FPGA与PCB设计及嵌入式设计集成在一起。...

WQ的博客 1万+

android 2048游戏项目详解

壹.自定义卡片单元视图:public class Cards extends FrameLayout{private TextView labels;private int num=0;public Cards(Context context) {super(context);labels=new TextView(getContext());labels.setTextSi...

weixin_34329187的博客 268

STM32按键中断切换红绿蓝灯

通过以上步骤,我们实现了使用STM32的按键中断来切换红绿蓝LED灯的功能。在实际应用中,可能还需要考虑更多的细节,如按键消抖、更精确的延时实现等。但上述代码提供了一个基本的框架和思路,可以根据具体需求进行扩展和优化。希望这篇博客对您有所帮助!

2301_79865940的博客 952

手把手教你设计STM32的JTAG电路:从原理图到PCB布局(含JLINK连接详解)

本文详细介绍了STM32的JTAG电路设计全流程,从核心原理、接口规范到PCB布局布线技巧,特别包含JLINK调试器的连接与配置方法。通过信号滤波、上拉配置和防反接保护等关键设计要点,帮助开发者构建稳定可靠的JTAG调试环境,提升嵌入式开发效率。

weixin_29159441的博客 388

安卓模拟器源码php,[原创]在雷电模拟器玩2048[源码]

[Python] 纯文本查看 复制代码import timefrom Dnconsole import Dnconsoleimport cv2 as cvdef compare_status(st0: list, st1: list) -> bool: # True相同 False不同if len(st0) != len(st1):return Falsefor i in range(le...

weixin_42395740的博客 700

关于影响力最大化问题中贪心算法的一些理解

在影响力最大化问题中(Influence Maximization,以下简称IM),贪心算法是最早提出的一种解决方法,并且一直沿用至今。它基于IM问题所具有的单调性(Monotonicity)和子模性(Submodularity)使用一种Hill Climbing策略,不断使用Monte Carlo模拟来寻找在当前情况下的具有最大传播范围的节点,添加至种子集合,得到最终结果,算法伪代码如下所示: 这里算法1其实并没有使用MonteCarlo模拟,而只是使用了贪心的策略...

nianjuan1990的专栏 2851

android 2048游戏实现

android 的2048小游戏完整实现:GridLayout布局(android 4.0及以上)。 package com.example.y2048; import android.annotation.SuppressLint; import android.app.Activity; import android.os.Bundle; import android.ut

宏亮的专栏 1万+

电磁场仿真软件:COMSOL Multiphysics_(17).时域与频域分析

时域和频域分析是电磁场仿真中非常重要的两种方法,每种方法都有其独特的应用场景和优势。时域分析适用于瞬态响应和宽带信号的分析,而频域分析则适用于稳态响应和窄带信号的分析。在COMSOL Multiphysics中,通过合理设置物理场接口、材料属性、边界条件、网格划分和求解器,可以高效地进行这两种分析,并通过傅里叶变换将时域结果转换为频域结果,进一步拓展仿真应用的范围。合理的性能优化措施,如网格划分优化和并行计算,可以显著提高仿真的效率和准确性。

kkchenjj的博客 1974

10|Git Diff 与增量代码识别:本次到底改了哪些代码?

本文介绍 Git Diff 和增量代码识别,帮助你理解精准测试如何先找到本次真正变化的代码。测试开发工程师。Java 后端开发工程师。质量平台 / DevOps 平台建设者。想了解精准测试落地方法的技术负责人。

专注 AI 精准测试平台实战落地,分享从代码 Diff 到回归决策的完整工程闭环。主张“先建数据链路,再上 AI 智能”,让测试从“靠经验”走向“基于风险”。 160

安卓手机能跑的2048App

的 Android 2048 源码(原生 Java,Android Studio 工程)。复制代码 → Run → 手机里就多了一个图标为“2048”的 App,祝你玩得开心!用 Studio 自动生成的即可,只需确认入口 Activity 是。代码全部写在一个文件里,复制即可编译,无任何第三方库依赖。插真机 → 打开 USB 调试 → 选自己的手机 → OK。—— 这就是可任意分发的安装包,发给朋友、上传酷安均可。安装 Android Studio(最新稳定版即可)。,在安卓真机/模拟器都能跑。

NLP与推荐算法 681

NPC 三电平逆变器中点电位平衡算法详解

最常用:零序电压注入(简单、计算量小)最可靠:虚拟空间矢量调制(VSVPWM)及其改进形式(全范围平衡)趋势:结合模型预测控制(MPC)或智能算法(模糊、神经网络)进一步提升动态性能和鲁棒性。NPC 三电平逆变器中点电位平衡算法的 C# 实现示例(零序电压注入法 + 闭环补偿)在 NPC(Neutral Point Clamped)三电平逆变器中,中点电位平衡最常用且易于软件实现的方案是零序电压注入法。

专注于前沿技术的探索与实践,热衷于从代码逻辑、架构设计到行业应用等多维度深挖技术本质。期待在技术之路上与你共同成长~ 323

【极客学院每日一课】Android系列之一:创建和使用Android模拟器

2019独角兽企业重金招聘Python工程师标准>>> ...

weixin_34404393的博客 124

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

Windows自带Android模拟器启动失败

Windows自带Android模拟器启动失败

大学霸__IT达人 8368

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

android studio vmoptions,android-studio – 更新vm选项后,Android工作室无法启动

我最近在运行OSX 10.11的Mactop pro上安装了android studio.使用标准的Apple JRE / JDK.我在IDE的缓慢以及模拟器挂起的事实上遇到了一些问题.在做了一些研究之后,我被建议按如下方式设置VM选项-Xmx2048m -XX:MaxPermSize = 512我使用Android做了这个 – >偏好 – >构建,执行,部署 – >编译器.这似...

weixin_39813574的博客 960

鸿蒙电视游戏,使用鸿蒙开发一款TV版的小游戏

2048大家应该都玩过,今天我们就来实现一个可以在鸿蒙系统上运行的2048小游戏,因为没有智慧屏,所以这里是在鸿蒙远程TV模拟器上运行的,大概长下面这样:鸿蒙TV模拟器在开始写代码之前,我们来分析下,要实现这个小游戏大概需要这么几步:1.自定义数字卡片的样式CardView,包含设置卡片的文本数字,以及卡片的数字的颜色,以及单个卡片的背景。2.自定义一个游戏视图GameView,所有和游戏相关的逻...

weixin_31785177的博客 712

genymotion模拟器无法启动:VirtualBox cannot start the virtual device

最近用上了genymotion的android模拟器,真的是流畅不少,但是我第一次启动模拟器是遇到了一个问题,我的模拟器无法启动。问题如下: 原因:模拟器内存分配过大。 解决办法:修改模拟器内存。打开Oracle VM VirtualBox 可以看到我们的模拟器,点击设置,在设置界面选择系统,如下图: 在画红线的地方,我们可以拖动滑块修改内存。默认是2048M,在这里我修改为

穷理何须格物的博客 910

常用docker镜像

1、docker可视化 docker run --name=portainer --restart=always -d -p 9000:9000 --privileged=true -v /var/run/docker.sock:/var/run/docker.sock -v /docker/portainer:/data -v /etc/localtime:/etc/localtime portainer/portainer 2、code-server docker run -d -u root -

from top to bottom 756

[源码和文档分享]基于Android Studio实现的2048游戏

1 需求分析 1.1 背景与意义 1.1.1 手机应用市场发展现状 随着4G越来越普及以及手机应用的日益丰富还有智能水平的不断提高,从便携性和随身性这两方面来考虑,电脑所带来的体验已经不能跟手机相提并论了,它已经完美的超越了电脑。 现如今Android、苹果等各智能手机已经基本占领整个手机市场,从而使得更多应用的出现,而...

qq_38474647的博客 2030

基于Android Studio实现的2048游戏

1 需求分析 1.1 背景与意义 1.1.1 手机应用市场发展现状 随着4G越来越普及以及手机应用的日益丰富还有智能水平的不断提高,从便携性和随身性这两方面来考虑,电脑所带来的体验已经不能跟手机相提并论了,它已经完美的超越了电脑。 现如今Android、苹果等各智能手机已经基本占领整个手机市场,从而使得更多应用的出现,而手机游戏应用在其中占领主要位置。 随着Android智能手机的普及以...

demongwc的博客 7186

基于安卓的2048益智游戏的设计与实现

2.1 开发环境的介绍2.1.1 JDK的介绍Java Development Kit(JDK) 是Java语言的软件开发工具包。JDK是Java的核心部分,主要包括Java基础级库、Java运行环境和Java工具。主要是用于Java程序设计的免费开发工具[5][6]。2.1.2 Android Studio的介绍。

wqq_992250277的博客 1976

android小游戏程序课设,Android小游戏之2048课程设计.doc

题 目 Android小游戏之2048院 系专 业 软件技术专业学生姓名 宋建学 号 DZXXX140二O年月日是否(1)初始化进入游戏,初始化4*4表格,并随机产生两个数字(2或者4);二维数组this.tables表格循环存入数据;random1, random2 ,random11, random22四个随机数可以确定两个2的xy位置;方法new...

weixin_39747721的博客 278
上一篇: 提高生产性工具(四) - XML数据库的尝试
下一篇: 浅析Linux服务器流量及并发控制之一
honckly
博客等级 码龄20年 3粉丝 23原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值