⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 score.java

📁 格斗类小游戏 没什么好说的了 真的真的
💻 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 + -