gamestore.java

来自「游戏学院《天下武王》教学实例」· Java 代码 · 共 197 行

JAVA
197
字号
//package org.gamecollege.j2me.rpg;

import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.util.Vector;

import javax.microedition.rms.RecordStore;
import javax.microedition.rms.RecordStoreException;
import javax.microedition.rms.RecordStoreNotFoundException;

/**
 * 游戏存储类
 *
 */
public class GameStore {

    MyGameCanvas mgc;
    public GameStore(MyGameCanvas _mgc) {
        mgc = _mgc;
    }

    /**
     * 是否有存盘
     * @return
     */

    public boolean canLoad() {
        try {
            String[] ds = RecordStore.listRecordStores();
            if (ds == null || ds.length == 0) {
                return false;
            } else {
                for (int i = 0; i < ds.length; i++) {
                    if (ds[i].equals("TXWW")) {
                        return true;
                    }
                }

                return false;
            }
        } catch (Exception e) {
            return false;
        }
    }

    /**
     * 删除存盘
     *
     */

    public void deleteRecord() {
        try {
            RecordStore.deleteRecordStore("TXWW");
        } catch (RecordStoreNotFoundException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (RecordStoreException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }


    /**
     * 游戏存盘
     *
     */
    public void saveGame() {
        try {
            RecordStore rs = RecordStore.openRecordStore("TXWW", true);
            ByteArrayOutputStream baos = new ByteArrayOutputStream();
            DataOutputStream dos = new DataOutputStream(baos);
            //关卡号
            dos.writeInt(mgc.curLevelNo);
            //地图号
            dos.writeInt(mgc.curLevel.curMap.mapNo);
            //英雄位置

            dos.writeInt(mgc.myPlayer.col);
            dos.writeInt(mgc.myPlayer.row);
            //速度
            dos.writeInt(mgc.myPlayer.rate);
            //money
            dos.writeInt(mgc.myPlayer.money);
            //hp
            dos.writeInt(mgc.myPlayer.hp);
            //mp
            dos.writeInt(mgc.myPlayer.mp);

            //exp
            dos.writeInt(mgc.myPlayer.exp);

            //rank

            dos.writeInt(mgc.myPlayer.rank);

            //nextExp
            dos.writeInt(mgc.myPlayer.nextExp);

            //attackPoint
            dos.writeInt(mgc.myPlayer.attackPoint);
            //defendPoint
            dos.writeInt(mgc.myPlayer.defendPoint);

            //当前武器
            dos.writeInt(mgc.myPlayer.curWeaponID);
            //当前护具
            dos.writeInt(mgc.myPlayer.curDefendID);
            //道具和技能
            StringBuffer sb = new StringBuffer();
            Vector v = mgc.myPlayer.weaponVec;
            for (int i = 0; i < v.size(); i++) {
                RPGObject ro = (RPGObject) v.elementAt(i);
                sb.append(ro.ID + "|");
            }
            v = mgc.myPlayer.jacketVec;
            for (int i = 0; i < v.size(); i++) {
                RPGObject ro = (RPGObject) v.elementAt(i);
                sb.append(ro.ID + "|");
            }

            v = mgc.myPlayer.medicVec;
            for (int i = 0; i < v.size(); i++) {
                RPGObject ro = (RPGObject) v.elementAt(i);
                sb.append(ro.ID + "|");
            }
            dos.writeUTF(sb.toString());

            sb.delete(0, sb.length());
            v = mgc.myPlayer.skillVec;
            for (int i = 0; i < v.size(); i++) {
                RPGObject ro = (RPGObject) v.elementAt(i);
                sb.append(ro.ID + "|");
            }
            dos.writeUTF(sb.toString());

            dos.close();
            byte[] data = baos.toByteArray();
            if (rs.getNumRecords() > 1) {
                rs.setRecord(1, data, 0, data.length);
            } else {

                rs.addRecord(data, 0, data.length);
            }

            rs.closeRecordStore();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    /**
     * 读取存盘
     *
     */

    public void loadGame() {
        try {
            RecordStore rs = RecordStore.openRecordStore("TXWW", false);
            byte[] data = rs.getRecord(1);
            ByteArrayInputStream bais = new ByteArrayInputStream(data);
            DataInputStream dis = new DataInputStream(bais);
            if (mgc.curLevel == null) {
                mgc.curLevel = new Level();
            }
            mgc.curLevel.levelNo = dis.readInt();
            mgc.curLevel.curMapNo = dis.readInt();
            mgc.myPlayer.col = dis.readInt();
            mgc.myPlayer.row = dis.readInt();
            mgc.myPlayer.rate = dis.readInt();
            mgc.myPlayer.money = dis.readInt();
            mgc.myPlayer.hp = dis.readInt();
            mgc.myPlayer.mp = dis.readInt();
            mgc.myPlayer.exp = dis.readInt();
            mgc.myPlayer.rank = dis.readInt();

            mgc.myPlayer.nextExp = dis.readInt();
            mgc.myPlayer.attackPoint = dis.readInt();
            mgc.myPlayer.defendPoint = dis.readInt();
            mgc.myPlayer.curWeaponID = dis.readInt();
            mgc.myPlayer.curDefendID = dis.readInt();

            mgc.myPlayer.propertyIDs = dis.readUTF();
            mgc.myPlayer.skillIDs = dis.readUTF();

            dis.close();
            rs.closeRecordStore();
            LevelLoader.instance.loadLevel(mgc.curLevel);

        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?