根据教程写的简单的2048游戏。

极客学院教程地址:http://www.jikexueyuan.com/course/43.html

我的源代码地址:https://github.com/myCodingTrip/2048Game

项目有3个类,分别是Card、GameView和MainActivity。

Card类代码概要:

Card extends FrameLayout{private int num;private TextView label;public Card(Context context)public int getNum()public void setNum(int num)public boolean equals(Card o)}

自定义概念:

1 num不为0的Card称为卡片,在游戏中显示num(2^n)。

2 num为0的Card称为空卡片,0是不显示的。

3 存放Card的容器成为格子。

界面+交互 GameView代码概要

GameView extends GridLayout{private Card[][] cardsMap = new Card[4][4];private List<Point> emptyPoints = new ArrayList<Point>();public GameView(Context context, AttributeSet attrs, int defStyleAttr)public GameView(Context context)public GameView(Context context, AttributeSet attrs)private void initGameView()@Overrideprotected void onSizeChanged(int w, int h, int oldw, int oldh)private void addCards(int cardWidth, int cardHeight)private void startGame()private void addRandomNum()private void swipeLeft()private void swipeRight()private void swipeUp()private void swipeDown()private void checkComplete()}

public GameView(Context context, AttributeSet attrs, int defStyleAttr)

public GameView(Context context)

public GameView(Context context, AttributeSet attrs)

构造方法,调用initGameView()方法。

private void initGameView()

用于初始化游戏,通过调用setOnTouchListener并重写其中的public boolean onTouch(View v, MotionEvent event)方法调用swipeLeft()、swipeRight()、swipeUp()、swipeDown()四个方法来定义程序与用户的交互。

@Override

protected void onSizeChanged(int w, int h, int oldw, int oldh)

该方法先计算出每个小格子的边长cardWidth,然后调用addCards(cardWidth, cardWidth)、 startGame();

private void addCards(int cardWidth, int cardHeight)

通过循环调用addView(c, cardWidth, cardHeight)来添加16张空卡片

private void startGame()

用于(重新)开始游戏,首先调用MainActivity.getMainactivity().clearScore()清零分数,然后将16个Card的数字设置为0,即添加16张空卡片,然后调用2次addRandomNum()方法。

swipeLeft()、swipeRight()、swipeUp()、swipeDown()

这四个方法是游戏的主要逻辑部分,包含卡片的移动和合并的逻辑,例如向左划调用的swipeLeft()方法原理是从左向右(上下顺序随意)搜索判断是否可以移动(左边一张空卡片右边一张卡片)或者合并(存在两张num相等的卡片),通过改变16张Card的num来达到视觉上移动、合并卡片的效果,如果发生了卡片的移动或合并,则调用addRandomNum()、checkComplete()这两个方法。

private void checkComplete()

用于检查游戏是否结束,条件是16个Card的num都不为0并且无卡片合并的可能,如果结束则弹出一个系统级别的对话框,可调用startGame()重新开始游戏。

private void addRandomNum()

首先统计出所有格子中的空卡片,然后随机找出一个空卡片修改其数值(90%为2,10%为4),使其变成卡片。

MainActivity代码概要:

MainActivity extends Activity{private int score = 0;private TextView tvScore;private static MainActivity mainactivity = null;public static MainActivity getMainactivity()@Overrideprotected void onCreate(Bundle savedInstanceState)@Overridepublic boolean onCreateOptionsMenu(Menu menu)public void clearScore()public void showScore()public void addScore(int s)}

public static MainActivity getMainactivity()

使得GameView可以修改MainActivity上的score

转载于:https://www.cnblogs.com/mycd/p/5496135.html

Android 2048游戏开发相关推荐

  1. android+Unity3D游戏开发之简单的物体运动

    android+Unity3D游戏开发之简单的物体运动 其实这篇也是转载的,真的感觉对于我们初学者来说很不错的,不信你看看嘛;原创链接:http://bbs.9ria.com/thread-98192 ...

  2. 《Android 3D游戏开发技术宝典——OpenGL ES 2.0》——2.8节本章小结

    本节书摘来自异步社区<Android 3D游戏开发技术宝典--OpenGL ES 2.0>一书中的第2章,第2.8节本章小结,作者 吴亚峰,更多章节内容可以访问云栖社区"异步社区 ...

  3. 《Android 3D游戏开发技术宝典——OpenGL ES 2.0》——2.4节文件I/O

    本节书摘来自异步社区<Android 3D游戏开发技术宝典--OpenGL ES 2.0>一书中的第2章,第2.4节文件I/O,作者 吴亚峰,更多章节内容可以访问云栖社区"异步社 ...

  4. Android studio游戏开发就是这么简单:卡牌杀系列(核心UI篇:SufaceView的核心用法)

    Android studio游戏开发就是这么简单:卡牌杀系列(核心UI篇:SufaceView的核心用法) Android studio五年经验教你如何:花费了2周快速开发卡牌杀系类游戏,核心思路分享 ...

  5. 《Android 3D游戏开发技术宝典——OpenGL ES 2.0》——2.1节游戏中的音效

    本节书摘来自异步社区<Android 3D游戏开发技术宝典--OpenGL ES 2.0>一书中的第2章,第2.1节游戏中的音效,作者 吴亚峰,更多章节内容可以访问云栖社区"异步 ...

  6. 《Android 3D游戏开发技术宝典——OpenGL ES 2.0》——2.3节手机自带数据库——SQLite...

    本节书摘来自异步社区<Android 3D游戏开发技术宝典--OpenGL ES 2.0>一书中的第2章,第2.3节手机自带数据库--SQLite,作者 吴亚峰,更多章节内容可以访问云栖社 ...

  7. 《Android 3D游戏开发技术宝典——OpenGL ES 2.0》——1.1节智能手机市场现状

    本节书摘来自异步社区<Android 3D游戏开发技术宝典--OpenGL ES 2.0>一书中的第1章,第1.1节智能手机市场现状,作者 吴亚峰,更多章节内容可以访问云栖社区" ...

  8. 【备注】【C24】《Android 3D游戏开发技术详解与典型案例》PDF 下载

    [C24]<Android 3D游戏开发技术详解与典型案例>PDF 下载 目前市面上的Android技术书籍还比较少,Android3D游戏开发的书籍更是没有.因此,在现在市面上,Andr ...

  9. Android+3D游戏开发技术详解与典型案例

    内容导读 本书共分两篇,第一篇介绍了Android 3D游戏开发的基础知识,主要对OpenGL ES的相关内容进行了介绍. 章 名主 要 内 容 第1章 英雄还看今朝-Android简介本章介绍了市场 ...

  10. Android 3D游戏开发

    OpenGL ES(OpenGL Embedded System) Android 3D游戏开发技术宝典:OpenGL ES 2.0(android 3d游戏开发技术宝典 -opengl es 2.0 ...

最新文章

  1. D3.js(v3)+react 制作 一个带坐标与比例尺的散点图 (V3版本)
  2. 关于apache虚拟主机htttpd的配置实例 (更新中)
  3. oracle那些基本知识
  4. 谷歌离开游览器不触发_谷歌游览器
  5. r语言regexpr函数_R语言学习笔记-文本挖掘之字符处理(1)
  6. easyexcel和poi是否有版本冲突_easyexcel--解决poi大文件发生OOM问题
  7. Dynamics CRM2013 Server2012R2下IFD部署遇到There is already a listener on IP endpoint的解决方法...
  8. 在JavaScript中从base64字符串创建Blob
  9. N 个互异数的数组的平均逆序数
  10. 路飞学城Python-Day78
  11. 柔性OLED触摸屏的全球与中国市场2022-2028年:技术、参与者、趋势、市场规模及占有率研究报告
  12. 齐次线性方程组、齐次方程、齐次多项式
  13. springboot打包docker镜像部署
  14. 【自适应波束形成】MVDR(Minimum Variance Distortionless Response )笔记
  15. 前后端分离 Spring Security 对登出.logout()的处理
  16. UE4 蓝图学习 FlipFlop
  17. SAT OG 写作辅导:良知是一种比金钱名望和权力更有力的激励?
  18. httpf发送 json_Java用HttpClient4发送http/https协议get/post请求,发送map,json,xml,txt数据...
  19. tensorflow:自定义op
  20. 圣诞新年酷炫视频制作素材ae模板

热门文章

  1. c语言编程单片机网线,【C语言】直播一下单片机编程
  2. 【软件工程导论】可行性研究
  3. 【机器人操作系统】ROS话题编程
  4. scala type关键字用于起别名
  5. 声明类对象加括号与声明指针对象加括号的问题
  6. Linux开发_最全在Ubnutu环境下为你的程序设置快捷启动项和启动时管理员权限
  7. this.value和$(this).val()的区别
  8. BRVAH(让RecyclerView变得更高效) (3)
  9. 【转】对 Rust 语言的分析
  10. ECS Linux 服务器解除ssh登陆后被锁定或暂停输入输出的终端