从零開始开发Android版2048 (四) 分数、重置、结束
这一篇的内容主要是在上一篇的基础上,增加分数计算(包含当前分数和最高分数)、游戏结束的推断以及游戏界面的重置这三个部分的功能。
一、分数的计算和保存
1、当前分数
2、最高分
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(); }
三、游戏结束的推断
/** * 通过格子相应的横纵坐标来获取其相应的数字 * @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(); }
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。