Javaには簡単に設定ファイルを読み込むためのクラス「Properties」が用意されています。
これを使用して、モンスター・アイテム・装備の出現確率を設定ファイルで変更できるようにしましょう。
まずはこのRpg用の設定ファイルを読み込むためのクラスを作成します。
設定ファイルに書かれた値を文字列で取得するメソッド getString(key) と、整数値で取得するメソッド getInt(key) を用意しておきます。
package rpg;
import java.io.FileReader;
import java.io.IOException;
import java.util.Properties;
public class RpgProperties {
private static Properties properties = null;
public RpgProperties() {
if (properties == null) {
try (FileReader fr = new FileReader("rpg.properties")) {
properties = new Properties();
properties.load(fr);
} catch (IOException e) {
e.printStackTrace();
}
}
}
public String getString(String key) {
return properties.getProperty(key);
}
public int getInt(String key) {
String s = properties.getProperty(key);
return Integer.parseInt(s);
}
}
設定ファイルは、画像ファイルと同じフォルダに作成します。
まずは画面タイトルを変更できるようにしてみましょう。
rpg.propertiesファイルにタイトルを書いておきます。
title=Dragon Quest Zero
RpgFrameで設定ファイルから読み込んだタイトルを設定する処理を追加します。
private RpgProperties rpgProperties = new RpgProperties();
public RpgFrame() {
super("RPG");
super.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
addKeyListener(this);
setTitle(rpgProperties.getString("title"));
Container pane = getContentPane();
pane.setLayout(new GridBagLayout());
drawField();
}
次はモンスターの出現確率を設定ファイルに追加します。
title=Dragon Quest Zero monster.slime.rate=30 monster.dracky.rate=30 monster.ghost.rate=30 monster.dragon.rate=10
この値はMonsterCreatorで参照します。
package rpg.model.monster;
import rpg.RpgProperties;
import rpg.view.IconLabel;
import rpg.view.monster.DrackyLabel;
import rpg.view.monster.GhostLabel;
import rpg.view.monster.SlimeLabel;
public class MonsterCreator {
private RpgProperties rpgProperties = new RpgProperties();
public Monster createMonster() {
double v = Math.random() * 100;
Monster m = null;
int slimeRate = rpgProperties.getInt("monster.slime.rate");
int drackyRate = slimeRate + rpgProperties.getInt("monster.dracky.rate");
int ghostRate = drackyRate + rpgProperties.getInt("monster.ghost.rate");
if (v < slimeRate) {
m = new Slime();
} else if (v < drackyRate) {
m = new Dracky();
} else if (v < ghostRate) {
m = new Ghost();
}
return m;
}
アイテムと装備の出現確率も設定ファイルから読み込めるようにしてみましょう。
日本語の文字化け対策
RpgProperties.javaの以下の部分を修正します。
public RpgProperties() {
if (properties == null) {
try (InputStreamReader fr = new InputStreamReader(new FileInputStream("rpg.properties"), "UTF-8")) {
properties = new Properties();
properties.load(fr);
} catch (IOException e) {
e.printStackTrace();
}
}