从零開始开发Android版2048 (四) 分数、重置、结束
这一篇的内容主要是在上一篇的基础上,增加分数计算(包含当前分数和最高分数)、游戏结束的推断以及游戏界面的重置这三个部分的功能。
一、分数的计算和保存
1、当前分数
2、最高分
name>\shared_prefs\文件夹以下。我查了一下,大多数使用这个类的情景是用于保存一些比方设置信息之类的,不太适合保存太复杂,或者太多的数据。可是对于我们来说,正好用来保存最高分。
package com.example.t2048; import android.content.Context;
import android.content.SharedPreferences;
import android.content.SharedPreferences.Editor; /**
* 该类用于保存和读取最高分
* @author Mr.Wang
*
*/
public class TopScore {
private SharedPreferences sp; public TopScore(Context context){
//读取perference文件,假设没有,则会创建一个名为TopScore的文件
sp = context.getSharedPreferences("TopScore", context.MODE_PRIVATE);
} /**
* 用于读取最高分
* @return 最高分
*/
public int getTopScode(){
//对去键“TopScore”相应的值
int topScore = sp.getInt("TopScore", 0);
return topScore;
} /**
* 用于写入最高分
* @param topScore 新的最高分
*/
public void setTopScode(int topScore){
//使用Editor类写入perference文件
Editor editor = sp.edit();
editor.putInt("TopScore", topScore);
editor.commit();
}
}
当我们实例化并调用了当中的读取方法之后,会在手机文件夹中生成一个XML文件,以下是我在手机上截的图:
/**
* 该方法用于更新分数
* @param add 新增的分数
*/
public void updateScore(int add){
score += add;
scoreText.setText(score+"");
if(score>topScore.getTopScode())
topScore.setTopScode(score);
topScoreText.setText(topScore.getTopScode()+"");
}
二、游戏的重置
游戏的重置非常easy,由于我在之前,把填充空白格,随机生产两个数字格等初始化的操作都放在了init()方法里了,所以假设游戏须要又一次開始,那我们仅仅须要将gridLayout中的view清空,并将一些全局变量再重置为初始的数值,然后调用init()方法就能够了。
/**
* 清空界面,又一次初始化
*/
public void reset(){
spaceList.clear();
numberList.clear();
score = 0;
gridLayout.removeAllViews();
init();
}
三、游戏结束的推断
为了实现这个推断,我在NumberList这个类中增加了两个方法:
/**
* 通过格子相应的横纵坐标来获取其相应的数字
* @param x 横坐标
* @param y 纵坐标
* @return 格子相应数字的指数
*/
public int getNumberByXY(int x,int y){ if(x<0 || x>3 || y<0 || y>3)
return -1;
else {
int order = stuffList.indexOf(4*x+y);
return numberList.get(order) ;
}
} /**
* 推断是否还有能够合并的数字格
* @return 有这返回true
*/
public boolean hasChance(){
for(int x = 0;x<=3;x++){
for(int y=0;y<=3;y++){
if(y<3){
if(getNumberByXY(x,y)==getNumberByXY(x, y+1))
return true;
}
if(x<3){
if(getNumberByXY(x,y)==getNumberByXY(x+1, y))
return true;
}
}
}
return false;
}
然后在确定游戏结束之时,弹出对话框,供用户选择结束还是又一次開始:
public void over(){
new AlertDialog.Builder(this)
.setTitle("哎!结束了")
.setMessage("游戏结束,您的本局的分数是"+score+"分,继续加油哦!")
.setPositiveButton("又一次開始",new OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
reset();
}
})
.setNegativeButton("结束游戏", new OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
MainActivity.this.finish();
}
}).show();
}
从零開始开发Android版2048 (四) 分数、重置、结束的更多相关文章
- 从零開始开发Android版2048 (一)初始化界面
自学Android一个月多了,一直在工作之余零零散散地看一些东西.感觉经常使用的东西都有些了解了,可是一開始写代码总会出各种奇葩的问题.感觉还是代码写得太少.这样继续杂乱地学习下去进度也太慢了,并且学 ...
- 从零開始开发Android版2048 (二)获取手势信息
今天是尝试開始Android版2048小游戏的第二天.在今天,我主要学习了怎样获取用户在屏幕滑动的手势,以及对布局进行了一些小小的完好. 获取用户操作的手势(比方向左滑.向右滑等)主要用到了Gestu ...
- 从零開始开发Android版2048 (三)逻辑推断
近期工作比較忙,所以更新的慢了一点,今天的主要内容是关于Android版2048的逻辑推断,经过本篇的解说,基本上完毕了这个游戏的主体部分. 首先还是看一下,我在实现2048时用到的一些存储的数据结构 ...
- 从零開始开发Android版2048 (五) 撤销的实现
本篇的内容是,在前一篇的基础上添�了撤销的功能.撤销事实上就是将当前的用户界面恢复到这次滑动值前的样子.我实现撤销的主要原理是,将每次滑动后界面上的格子和相应的数字记录下来,当然还有分数,把这些数据写 ...
- Bmob移动后端云服务平台--Android从零開始--(二)android高速入门
Bmob移动后端云服务平台--Android从零開始--(二)android高速入门 上一篇博文我们简介何为Bmob移动后端服务平台,以及其相关功能和优势. 本文将利用Bmob高速实现简单样例,进一步 ...
- 从零開始学android<TabHost标签组件.二十九.>
TabHost主要特点是能够在一个窗体中显示多组标签栏的内容,在Android系统之中每一个标签栏就称为一个Tab.而包括这多个标签栏的容器就将其称为TabHost.TabHost类的继承结构例如以下 ...
- 第13章、布局Layouts之RelativeLayout相对布局(从零開始学Android)
RelativeLayout相对布局 RelativeLayout是一种相对布局,控件的位置是依照相对位置来计算的,后一个控件在什么位置依赖于前一个控件的基本位置,是布局最经常使用,也是最灵活的一种布 ...
- 从零開始学android<SeekBar滑动组件.二十二.>
拖动条能够由用户自己进行手工的调节,比如:当用户须要调整播放器音量或者是电影的播放进度时都会使用到拖动条,SeekBar类的定义结构例如以下所看到的: java.lang.Object ↳ an ...
- 从零開始学android<数据存储(1)SharedPreferences属性文件.三十五.>
在android中有五种保存数据的方法.各自是: Shared Preferences Store private primitive data in key-value pairs. 相应属性的键值 ...
随机推荐
- php 前台数据显示
<pre name="code" class="html"> public function show(){ echo "访问了index ...
- CMake 教程
CMake是一个跨平台的程序构建工具,比如起自己编写Makefile方便很多. 介绍:http://baike.baidu.com/view/1126160.htm 本文件不介绍CMake的基本语法, ...
- OpenStack_Swift源代码分析——Object-auditor源代码分析(1)
1 Object-auditor 的启动 Object-auditor的启动和object-replicator的启动过程是一样的,首先是运行启动脚本 swift-init object-audito ...
- LeetCode 二叉树的最小深度
计算二叉树的最小深度.最小深度定义为从root到叶子节点的最小路径. public class Solution { public int run(TreeNode root) { if(root = ...
- js基础之冒号
js中冒号的作用有两种, 转自:http://www.kqiqi.com/knowledge/web-based/506.html 一.?: 操作符 a = expression ? b : c;如果 ...
- Python网络编程——编写一个简单的回显客户端/服务器应用
今天将python中socket模块的基本API学习完后,照着书上的实例编写一个套接字服务器和客户端.采用python3.5版本,在注释中会标明python2和python3的不同之处. 1.代码 ( ...
- 说说读卡应用那点事儿,以SCL010为例
前一阵子的项目, 跟读卡应用有关,这篇博客算是我学习智能卡方面知识的而一个总结,也可以看作这个领域的一个很简单的简介,他写得很不书面,更像是沿着我自己认识过程的总结.所以这里面有很多我自己理解的地方, ...
- SiteMesh
1.导入对SiteMesh.jar的依赖 <dependency> <groupId>org.sitemesh</groupId> <ar ...
- MySQL Cluster-备份恢复初步测试
参考文档 http://blog.chinaunix.net/uid-20639775-id-1617795.html http://xxtianxiaxing.iteye.com/blog/5 ...
- 让我们共同构筑物联网起飞的平台:物联网操作系统Hello China寻求应用合作伙伴
经过几天的努力,终于把Hello China V1.76版的内核移植到基于Cortex-M3内核的STM32 chipset上.因为还希望进一步写一个USART驱动程序,因此详细的移植文档,预计一周之 ...