RPG01

MAGI JAVA -Make a game in Java-
JAVA Game作成講座 024回
セーブ、ロードを作成2 所持アイテム、フラグ情報をセーブ


kouza024 jarファイル


[セーブ、ロードを作成した2]

アイテムとフラグ各種をセーブできるようにした。
アイテムを幾つか手に入れてからセーブし、ロードすると保存できているのが分かると思う。
アイテムの情報は全データを抜いているわけではなく、カテゴリー、ナンバー、数量だけ保存している。
ロードするときにアイテムデータを作り直している。
こういう手抜きはユニットデータのセーブでも行う。

gDataのセーブとロードだけ抜き出して説明を入れる。

[DataSaveLoadクラス]
//所持金、所持品、フラグなどをまとめてセーブする。
public void gDataSave(GameData gData) {

try {
String fileName="";
Properties properties = new Properties();
properties.setProperty("money", String.valueOf(gData.money));
fileName="SD"+fileNum+"_gData.properties";
properties.store(new FileOutputStream(fileName), "Comments");

//アイテムのデータもユニット同様、全て記憶するのではなくカテゴリーとナンバーのみ記憶する。
//膨大な量になるので別ファイルに分ける。
properties = new Properties();
for (int i=0;i<=199;i++) {
properties.setProperty("item"+i+"_category", String.valueOf(gData.siData[i].category));
properties.setProperty("item"+i+"_itemNumber", String.valueOf(gData.siData[i].itemNumber));
properties.setProperty("item"+i+"_quantity", String.valueOf(gData.siData[i].quantity));
}
fileName="SD"+fileNum+"_item.properties";
properties.store(new FileOutputStream(fileName), "Comments");
//イベントフラグと宝入手フラグを記憶する。スゲー量になるが…。
properties = new Properties();
for (int i=0;i<=20;i++) {
for (int j=0;j<=30;j++) {
properties.setProperty("eventFlag"+i+"_"+j, String.valueOf(gData.eventFlag[i][j]) );
}
}
fileName="SD"+fileNum+"_evFlag.properties";
properties.store(new FileOutputStream(fileName), "Comments");

properties = new Properties();
for (int i=0;i<=20;i++) {
for (int j=0;j<=30;j++) {
properties.setProperty("treasureFlag"+i+"_"+j, String.valueOf(gData.treasureFlag[i][j]) );
}
}
fileName="SD"+fileNum+"_trFlag.properties";
properties.store(new FileOutputStream(fileName), "Comments");
} catch (IOException e) {
// TODO 自動生成された catch ブロック
e.printStackTrace();
}


}

アイテムデータで1ファイル、宝フラグ、イベントフラグで各1ファイル。
合計3つのファイルに分けてセーブしている。
大体コメントに書いてあるが、宝のみ3つのデータを記憶している。
カテゴリーとナンバーを用いてアイテムデータを作成し、数量を打ち込む。

public void gDataLoad(GameData gData) {

try {
String fileName="";
Properties properties = new Properties();
fileName="SD"+fileNum+"_gData.properties";
properties.load(new FileInputStream(fileName) );
String str=properties.getProperty("money");
int money=Integer.parseInt(str);
gData.money=money;

properties = new Properties();
fileName="SD"+fileNum+"_item.properties";

properties.load(new FileInputStream(fileName) );
ItemDataSet idSet=new ItemDataSet();
for (int i=0;i<=199;i++) {
int category=Integer.parseInt(properties.getProperty("item"+i+"_category") );
int itemNumber=Integer.parseInt(properties.getProperty("item"+i+"_itemNumber") );
int quantity=Integer.parseInt(properties.getProperty("item"+i+"_quantity") );
//アイテムデータを読み込み、作成し直す。
if (category>=1) {
gData.siData[i]=idSet.dataSet_easy(category, itemNumber);
gData.siData[i].quantity=quantity;
}
}
properties = new Properties();
fileName="SD"+fileNum+"_evFlag.properties";
properties.load(new FileInputStream(fileName) );

for (int i=0;i<=20;i++) {
for (int j=0;j<=30;j++) {
int eventflagState=Integer.parseInt(properties.getProperty("eventFlag"+i+"_"+j) );
gData.eventFlag[i][j]=eventflagState;
}
}

properties = new Properties();
fileName="SD"+fileNum+"_trFlag.properties";
properties.load(new FileInputStream(fileName) );
for (int i=0;i<=20;i++) {
for (int j=0;j<=30;j++) {
int treasureFlagState=Integer.parseInt(properties.getProperty("treasureFlag"+i+"_"+j) );
gData.treasureFlag[i][j]=treasureFlagState;
}
}
} catch (IOException e){
e.printStackTrace();
}


}

セーブしたカテゴリー、ナンバー、数量を元にアイテムデータを作成している。
アイテムの全データを読み込むのではなく、作り直しているということ。
こういう逆処理はプレイヤーのデータ保存/ロード時にも使う。
記憶する変数を最小限にするとこのようにセーブ、ロードも簡単にできる。

次回はユニットのデータをセーブ・ロードできるようにする。
保存する変数が多くなるのでよりややこしいが、基本の手順は今までの物と同じ。

そこまでできたら次の次にいよいよマップ作成してゲームっぽくする。
スキル設定とかできないのかって?
今回のゲームにそんな機能は搭載しない…。
最低限、簡単すぎるくらいでちょうどいい。
後で付け足すことは出来るが、一度作ったものを剥ぎ取るのは恐ろしく手間がかかるのだ。
これ簡単すぎない? というレベルから少しずつ複雑にしていくのが完成の第一歩。
独自性とかオリジナリティなんてのは模倣が出来てから付けるものだ。
ファミコンのドラクエも真似れないやつに個性など10年早い! ってこと。



・トップページへ戻る
inserted by FC2 system