import java.util.Vector;
import java.util.Random;
import java.io.IOException;
import javax.microedition.rms.RecordStoreNotFoundException;
import javax.microedition.rms.RecordStore;
import java.io.ByteArrayOutputStream;
import java.io.DataOutputStream;
import java.io.DataInputStream;
import java.io.ByteArrayInputStream;
import javax.microedition.rms.RecordStoreException;
public class GameData {
public final static int nFlagCount=128;
public final static int nMonsterCount=30;
public boolean flags[];
public String curMap;
public int playerX;
public int playerY;
public int HP;
public int EXP;
public int LV;
public int AGI;
public int ATK;
public int DEF;
public int MaxHP;
public int expNext;
public int item[];
public boolean monsters[];
public int money;
public boolean sound;
public Vector enemy;
public GameData() {
flags=new boolean[nFlagCount];
monsters=new boolean[nMonsterCount];
enemy=new Vector();
item=new int[3];
}
public void newGame(){
curMap="/res/main";
for(int i=0;i<nFlagCount;i++){
flags[i]=false;
}
for(int i=0;i<nMonsterCount;i++){
monsters[i]=false;
}
playerX=6;playerY=11;
HP=50;
EXP=13;
LV=0;
AGI=20;
MaxHP=65;
ATK=12;
DEF=7;
expNext=nextLv();
item[0]=2;
money=50;
}
public int nextLv(){
int e=30;
for(int i=1;i<LV+1;i++){
e=e*3/2;
}
return e;
}
public boolean checkUP(){
Random rnd=new Random(System.currentTimeMillis());
while(EXP>=expNext){
LV++;
expNext=nextLv();
ATK+=Math.abs(rnd.nextInt()%5);
DEF+=Math.abs(rnd.nextInt()%4);
AGI+=Math.abs(rnd.nextInt()%5);
return true;
}
return false;
}
public boolean saveData(){
RecordStore rs=null;
int i;
try{
rs=RecordStore.openRecordStore("GameData",true);
ByteArrayOutputStream baos=new ByteArrayOutputStream();
DataOutputStream dos=new DataOutputStream(baos);
for(i=0;i<nFlagCount;i++){
dos.writeBoolean(flags[i]);
}
dos.writeUTF(curMap);
dos.writeInt(playerX);
dos.writeInt(playerY);
dos.writeInt(HP);
dos.writeInt(EXP);
dos.writeInt(LV);
dos.writeInt(AGI);
dos.writeInt(ATK);
dos.writeInt(DEF);
dos.writeInt(MaxHP);
dos.writeInt(expNext);
for(i=0;i<3;i++) dos.writeInt(item[i]);
for(i=0;i<nMonsterCount;i++) dos.writeBoolean(monsters[i]);
dos.writeInt(money);
dos.writeBoolean(sound);
dos.writeInt(enemy.size());
for(i=0;i<enemy.size();i++)
dos.writeInt(((Integer)enemy.elementAt(i)).intValue());
if(rs.getNextRecordID()>1) rs.setRecord(1,baos.toByteArray(),0,baos.size());
else rs.addRecord(baos.toByteArray(),0,baos.size());
rs.closeRecordStore();
return true;
}catch(RecordStoreException rse){
//System.out.println (rse.getMessage());
return false;
}catch(IOException ioe){
return false;
}
}
public static GameData loadData(){
//System.out.println ("Loading rms data");
RecordStore rs=null;
int i;
GameData gd=new GameData();
try{
rs=RecordStore.openRecordStore("GameData",false);
byte[] data=rs.getRecord(1);
ByteArrayInputStream bais=new ByteArrayInputStream(data);
DataInputStream dis=new DataInputStream(bais);
for(i=0;i<nFlagCount;i++)
gd.flags[i]=dis.readBoolean();
gd.curMap=dis.readUTF();
gd.playerX=dis.readInt();
gd.playerY=dis.readInt();
gd.HP=dis.readInt();
gd.EXP=dis.readInt();
gd.LV=dis.readInt();
gd.AGI=dis.readInt();
gd.ATK=dis.readInt();
gd.DEF=dis.readInt();
gd.MaxHP=dis.readInt();
gd.expNext=dis.readInt();
for(i=0;i<3;i++) gd.item[i]=dis.readInt();
for(i=0;i<nMonsterCount;i++) gd.monsters[i]=dis.readBoolean();
gd.money=dis.readInt();
gd.sound=dis.readBoolean();
int j=dis.readInt();
for(i=0;i<j;i++)
gd.enemy.addElement(new Integer(dis.readInt()));
rs.closeRecordStore();
return gd;
}catch(RecordStoreNotFoundException rsnfe){
//System.out.println ("not found"+rsnfe.getMessage());
return null;
}catch(RecordStoreException rse){
//System.out.println ("rs"+rse.getMessage());
return null;
//}catch(IOException ioe){
//System.out.println ("io"+ioe.getMessage());
//return null;
}catch(Exception e){
//System.out.println ("abd"+e.getMessage());
return null;
}
}
}