Home>戻る

〜第12章 イベントデータ・スクリプト読み込み〜



第11章で述べたように、イベントを外部ファイルから読み込むようにしました。
Javaはテキストデータが扱いにくくて…。けっこう苦戦しました。
文字列を扱いやすいクラスが標準ライブラリにあるかもしれませんが、自分は無知なもので。

まずJavaには終端記号というものがありません。
	char buf[] = new char[16];
	buf[0] = 'a';
	buf[1] = 'b';
	buf[2] = '\0'; //意味がない。
	buf[3] = 'c';

	System.out.println(buf);
このコードを実行すると、理想は
	ab
なんですが、結果は
	ab c
とちゃっかりcまで表示されてしまいます。さらにその後ろに11文字分の空白もあります。

ではabだけ表示させるにはどうしたら良いでしょうか?
私が思いついた方法は、
1.新しく文字数分のchar配列を作り、そちらにコピーする。
だけです。^^;

	char buf[] = new char[16];
	buf[0] = 'a';
	buf[1] = 'b';
	buf[2] = 0;
	buf[3] = 'c';

	//0までの文字の長さを得る
	int length = HaruLength(buf);
	
	//新しく配列を作る
	char buf2[] = new char[length];
	
	//コピーする
	HaruCopy(buf2,buf);

	//表示
	System.out.println(buf2);
このような感じです。HaruLengthとHaruCopyは自作関数(メソッド)です。


そして作成したイベントスクリプトのフォーマットは、
	Move:3=43=45=0
	Talk:aiueo
という感じです。
一行ずつ読み取っていき、その行をまず「:」という文字を境に区切ります。
すると「Move」と「3=43=45=0」に分かれます。
Moveというのはマップ移動コマンドで、3=43=45=0はその値です。
この場合は、 『マップ3をロードし、主人公をX=43,Y=45の位置を配置し、上方向(0)を向かせる。』という処理です。

それを終えたら
Talk:aiueo
が実行されます。これも同様にTalkがコマンドで、aiueoと会話させるという処理です。

この後はもう何もないので、イベントが終わります。

イベントを外部ファイルに書くようにすると、 プログラム側ではゲーム内容を記述する必要がなくなるので、コードが増えずに済みます。
一度作れば後が楽です!


ではこの辺でデータ構造を整理しておきましょう。

1.マップがあります。
[map01.dat]
1110001110
3102342300
3543534534
2.そのマップと同じサイズのイベントマップがあります。
[event01.dat]
0000000000
0000010000
0002000030
3.さらにそのイベントマップに対応するイベントテーブルがあります。
[eventtable01.txt]
0:何もなし。
1:グラフィックスなし。動かない。当たり判定なし。スクリプト1011を読み込む。
2:グラフィックスなし。動かない。当たり判定なし。スクリプト1023を読み込む。
3:グラフィックスあり。動かない。当たり判定あり。スクリプト1025を読み込む。
4.イベントがある場所にいくと、スクリプトを読み込む。
1.2に着いた。
2.2の内容は『グラフィックスなし。動かない。当たり判定なし。スクリプト1023を読み込む。』
  なのでスクリプト1023(1023.txt)を読み込む。
3.スクリプト1023には『move:8=9=14=0』と書かれていた。
4.マップ移動イベント開始。マップ8を読み込み、主人公を(9,14)へ移動させる。
以上です。

今回のサンプルは、コンソール画面に行われた処理を文字出力するようにしました。


<プログラム公開>
Event.java
Harulib.java
MapCell.java
MapFile.java
MyClass.java
Rpg12.java

プロジェクト一式ダウンロード(データ含む)