?? 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 + -