Java を使用して単純なテキスト アドベンチャーを作成しています。各ミッションの進行状況を定義できるようにしたいと考えています。これは、ユーザーの appdata のどこかに保存され、次にゲームをプレイするときに読み取られます。これどうやってするの?
4 に答える
データを内部に保存するだけの場合(つまり、セッション間で保存するが、ユーザーが読み取り可能なファイルとしては保存しない場合)、PreferencesAPIを使用します。
MissionInfo
例:を実装するというクラスがあるとしますjava.io.Serializable
。次のことができます。
// Precondition: missionInfoToSave is an variable of type MissionInfo
// The key used to store the data.
final String key = "SAVE_DATA";
// Get the preferences database for this package.
Preferences prefs = Preferences.userNodeForPackage(MissionInfo.class);
// To save, write the object to a byte array.
ByteArrayOutputStream baos = new ByteArrayOutputStream();
try {
ObjectOutputStream oos = new ObjectOutputStream(baos);
oos.writeObject(missionInfoToSave); // write it to the stream
prefs.putByteArray(key, baos.toByteArray());
} catch (IOException ie) {
System.err.println("Failed to save to file");
}
// To load, read it back.
// The second argument is the default if the key isn't found.
byte[] stored = prefs.getByteArray(key, null);
if (stored == null) {
// There's no stored data.
return;
}
ByteArrayInputStream bais = new ByteArrayInputStream();
try {
ObjectInputStream ois = new ObjectInputStream(bais);
Object o = ois.readObject();
if (o instanceof MissionData) {
// Good: it's a saved data file.
updateMissionProgress((MissionData) o); // assuming this is defined
}
} catch (IOException ie) {
System.err.println("Couldn't load from prefs");
} catch (ClassNotFoundException cnfe) {
System.err.println("Class couldn't be found");
}
Preferences APIは、セッション間でデータを保存します。あなたはそれをパッケージで見つけることができますjava.util.prefs
。
キーと値のマップを作成し、それをファイルに保存し、そのファイルから関連オブジェクトjava.util.Properties
をロードするための便利なユーティリティである を利用できます。ファイルでProperties
Java を使用するための優れたチュートリアルは、ここにあります。Properties
System.getenv("APPDATA")
AppData ディレクトリのファイル パスを取得するには (Windowsの場合)、.
シンプルなデータベースを使用: sqlite または Berkeley DB http://docs.oracle.com/cd/E17277_02/html/index.html
次のコードで取得できるユーザー ホーム ディレクトリにアプリケーション固有のフォルダーを作成することをお勧めします。
String userHome=System.getProperty("user.home");
これにより、c:\Documents and Settings\user1 のような文字列が得られ、その文字列に「adventureapp」のようなアプリ名を最初にスラッシュで追加できます。それから。あなたはこれを行うことができます :
File file = new File(mypathtomyappfolder);
次に、.isDirectory() かどうかをテストします。そうでない場合は、ユーザーが app do file.newDir() を実行するのは初めてなので、adventureapp ディレクトリが作成されます。そこから File を使用し、ゲームの進行状況に基づいて読み書きできる user.properties のようなファイル名を文字列に追加します。それが役立つことを願っています。- ダンカン