📄 score.java
字号:
//package bushfighting;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import javax.microedition.rms.RecordStore;
import javax.microedition.rms.RecordStoreException;
//Score用于处理场景中的玩家所得到分数
public class Score
{
protected int mScore = 0;//当前的分数
protected int[] mRecordScores;//当前记录了的分数值,用于记录最高的几个分数
protected String[] mNickNames;//用于记录对应分数获得者的昵称
private RecordStore mStore = null;//用于保存分数的RecordStore
private static final String DB_NAME = "bushfighting";//用于保存记录的RecordStor名
private final int RECORD_COUNT = 3;//需要记录的分数个数
public Score()
{
mRecordScores = new int[RECORD_COUNT];
mNickNames = new String[RECORD_COUNT];
open();
}
//打开存储的数据集
public void open()
{
try{
//RecordStore.deleteRecordStore(DB_NAME);
mStore = RecordStore.openRecordStore(DB_NAME,false);//尝试打开已经存在的数据集
loadRecords();//加载本地排行榜记录
}
catch(RecordStoreException rse){
//这是第一次访问,数据集还没有建立
try{
mStore = RecordStore.openRecordStore(DB_NAME,true);
for(int i=0;i<RECORD_COUNT;i++){
//将当前记录的分数值设置为默认值
mNickNames[i]= "未知";
mRecordScores[i] = 0;
}
initScores();//初始化数据集的分数记录
}
catch(Exception e){
System.out.println("Error initial dataset");
}
}
catch(Exception e){
System.out.println("Error loading dataset");
}
finally{
closeRecordSet();//关闭打开的数据集
}
}
//重置当前的分数
public void reset()
{
mScore = 0;
}
//读取数据集里面记录的分数记录
private void loadRecords() throws Exception
{
byte[] mBuffer = new byte[20];
ByteArrayInputStream bais = new ByteArrayInputStream(mBuffer);
DataInputStream dis = new DataInputStream(bais);
for (int i = 0; i < RECORD_COUNT; i++){
mStore.getRecord(i + 1, mBuffer, 0);
mNickNames[i] = dis.readUTF(); //读取nickName
mRecordScores[i] = dis.readInt(); //读取对应的分数
dis.reset(); //重置输入流
}
dis.close();//关闭打开的输入流
}
//用于在没有任何数据的情况下初始化,数据集里面的数据
private void initScores() throws Exception
{
ByteArrayOutputStream baos = new ByteArrayOutputStream();
DataOutputStream dos = new DataOutputStream(baos);
byte[] data = null;
dos.writeUTF("未知");
dos.writeInt(0);
data = baos.toByteArray();
for (int i = 0; i < RECORD_COUNT; i++) //将预设的记录添加到数据集中
mStore.addRecord(data,0,data.length);
dos.close();//关闭打开的数据流
}
//增加指定的分数
public void addScore(int point)
{
mScore += point;
}
//返回当前的分数
public int getScore()
{
return mScore;
}
//判断是否破记录了
public boolean isBreakRecord()
{
for(int i=0;i<RECORD_COUNT;i++)
if(mRecordScores[i]<mScore)
return true;
return false;
}
//保存当前的分数
public void saveScore(String nickName)
{
//先检查当前的分数是否足够高,再决定是否保存
for(int i=0;i<RECORD_COUNT;i++){
if (mRecordScores[ i ] < mScore){
//分数需要保存
for (int j = RECORD_COUNT - 1; j > i; j--){
mRecordScores[j] = mRecordScores[j - 1];
mNickNames[j] = mNickNames[j-1];
}
mRecordScores[i] = mScore;
mNickNames[i] = nickName;
updateRecords(); //更新记录
return;
}
}
}
//更新当前的排行榜
private void updateRecords()
{
ByteArrayOutputStream baos = new ByteArrayOutputStream();
DataOutputStream dos = new DataOutputStream(baos);
byte[] data;
try{
mStore = RecordStore.openRecordStore(DB_NAME,false);
for (int i = 0; i < RECORD_COUNT; i++){
dos.writeUTF(mNickNames[i]);
dos.writeInt(mRecordScores[i]);
data = baos.toByteArray();
mStore.setRecord(i + 1, data, 0, data.length); //更新记录
baos.reset();
}
dos.close(); //关闭打开的输入流
}
catch(Exception e){
System.out.println("Error updating records");;
}
finally{
closeRecordSet();//重新关闭打开的数据集
}
}
//关闭打开的数据集
private void closeRecordSet()
{
try{
if (mStore != null)
mStore.closeRecordStore();
mStore = null;
}
catch(RecordStoreException rse){
//System.out.println("Eorror occured when close mStore");
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -