Android 2048游戏开发
根据教程写的简单的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游戏开发相关推荐
- android+Unity3D游戏开发之简单的物体运动
android+Unity3D游戏开发之简单的物体运动 其实这篇也是转载的,真的感觉对于我们初学者来说很不错的,不信你看看嘛;原创链接:http://bbs.9ria.com/thread-98192 ...
- 《Android 3D游戏开发技术宝典——OpenGL ES 2.0》——2.8节本章小结
本节书摘来自异步社区<Android 3D游戏开发技术宝典--OpenGL ES 2.0>一书中的第2章,第2.8节本章小结,作者 吴亚峰,更多章节内容可以访问云栖社区"异步社区 ...
- 《Android 3D游戏开发技术宝典——OpenGL ES 2.0》——2.4节文件I/O
本节书摘来自异步社区<Android 3D游戏开发技术宝典--OpenGL ES 2.0>一书中的第2章,第2.4节文件I/O,作者 吴亚峰,更多章节内容可以访问云栖社区"异步社 ...
- Android studio游戏开发就是这么简单:卡牌杀系列(核心UI篇:SufaceView的核心用法)
Android studio游戏开发就是这么简单:卡牌杀系列(核心UI篇:SufaceView的核心用法) Android studio五年经验教你如何:花费了2周快速开发卡牌杀系类游戏,核心思路分享 ...
- 《Android 3D游戏开发技术宝典——OpenGL ES 2.0》——2.1节游戏中的音效
本节书摘来自异步社区<Android 3D游戏开发技术宝典--OpenGL ES 2.0>一书中的第2章,第2.1节游戏中的音效,作者 吴亚峰,更多章节内容可以访问云栖社区"异步 ...
- 《Android 3D游戏开发技术宝典——OpenGL ES 2.0》——2.3节手机自带数据库——SQLite...
本节书摘来自异步社区<Android 3D游戏开发技术宝典--OpenGL ES 2.0>一书中的第2章,第2.3节手机自带数据库--SQLite,作者 吴亚峰,更多章节内容可以访问云栖社 ...
- 《Android 3D游戏开发技术宝典——OpenGL ES 2.0》——1.1节智能手机市场现状
本节书摘来自异步社区<Android 3D游戏开发技术宝典--OpenGL ES 2.0>一书中的第1章,第1.1节智能手机市场现状,作者 吴亚峰,更多章节内容可以访问云栖社区" ...
- 【备注】【C24】《Android 3D游戏开发技术详解与典型案例》PDF 下载
[C24]<Android 3D游戏开发技术详解与典型案例>PDF 下载 目前市面上的Android技术书籍还比较少,Android3D游戏开发的书籍更是没有.因此,在现在市面上,Andr ...
- Android+3D游戏开发技术详解与典型案例
内容导读 本书共分两篇,第一篇介绍了Android 3D游戏开发的基础知识,主要对OpenGL ES的相关内容进行了介绍. 章 名主 要 内 容 第1章 英雄还看今朝-Android简介本章介绍了市场 ...
- Android 3D游戏开发
OpenGL ES(OpenGL Embedded System) Android 3D游戏开发技术宝典:OpenGL ES 2.0(android 3d游戏开发技术宝典 -opengl es 2.0 ...
最新文章
- D3.js(v3)+react 制作 一个带坐标与比例尺的散点图 (V3版本)
- 关于apache虚拟主机htttpd的配置实例 (更新中)
- oracle那些基本知识
- 谷歌离开游览器不触发_谷歌游览器
- r语言regexpr函数_R语言学习笔记-文本挖掘之字符处理(1)
- easyexcel和poi是否有版本冲突_easyexcel--解决poi大文件发生OOM问题
- Dynamics CRM2013 Server2012R2下IFD部署遇到There is already a listener on IP endpoint的解决方法...
- 在JavaScript中从base64字符串创建Blob
- N 个互异数的数组的平均逆序数
- 路飞学城Python-Day78
- 柔性OLED触摸屏的全球与中国市场2022-2028年:技术、参与者、趋势、市场规模及占有率研究报告
- 齐次线性方程组、齐次方程、齐次多项式
- springboot打包docker镜像部署
- 【自适应波束形成】MVDR(Minimum Variance Distortionless Response )笔记
- 前后端分离 Spring Security 对登出.logout()的处理
- UE4 蓝图学习 FlipFlop
- SAT OG 写作辅导:良知是一种比金钱名望和权力更有力的激励?
- httpf发送 json_Java用HttpClient4发送http/https协议get/post请求,发送map,json,xml,txt数据...
- tensorflow:自定义op
- 圣诞新年酷炫视频制作素材ae模板
热门文章
- c语言编程单片机网线,【C语言】直播一下单片机编程
- 【软件工程导论】可行性研究
- 【机器人操作系统】ROS话题编程
- scala type关键字用于起别名
- 声明类对象加括号与声明指针对象加括号的问题
- Linux开发_最全在Ubnutu环境下为你的程序设置快捷启动项和启动时管理员权限
- this.value和$(this).val()的区别
- BRVAH(让RecyclerView变得更高效) (3)
- 【转】对 Rust 语言的分析
- ECS Linux 服务器解除ssh登陆后被锁定或暂停输入输出的终端