Java Console Game〜フィールド変数でコマンド履歴を作る〜
イントロダクション
前回は、リストの使い方など記載しました。今回は実際に使ってみようと思います。でも、コマンドをベースにして実装するので、コマンドを実行した時にだけリストを使うのは、あまりメリットがあるように思えないので(今回の実装の場合です)クラスが起動している間、myClassのインスタンスがある間たデータを保持することを目的にリストを使おうと考えたわけです。
フィールド変数
フィールド変数というのはクラスの中で保持するデータ、クラス変数などです。具体的には、以下の様なコードです。
public class XXX { private List commandHistory; public void XXX() { ...} }
このcommandHistoryがフィールド変数です。この変数は、クラスがnewされた時→コンストラクタが動いた後からインスタンスが破棄される時までデータを保持しています。ちなみにコンストラクタの反対、インスタンスが破棄される→変数にnullを代入するとデータも破棄されます。
コンストラクタ
インスタンスを作る(new)ときにはコンストラクタが動きます。逆に言えばコンストラクタが動くとインスタンスが出来ます。これは頭ごなしに覚えて下さい。深い部分ではメモリ領域の確保とかあると思うのですが、それよりも他の事が忙しく。やっている暇がありません(笑)
コマンド履歴を作る
この様な処理を行う時にフィールド変数は、活躍します。今回のコンソールアプリは、クラスが破棄された時にゲームも終了しますので、データを保存するのに丁度良いです。
設計
コンストラクタで、フィールド変数にArrayListをセットしてコマンドを実行するたびに、コマンドのリストに登録してゲーム終了時に、使用したコマンドの一覧を表示する。
こんな感じの仕様にしようと思います。
<イメージ>
/** コンストラクタ */ public MyClass() { feeldList = new ArrayList(); } /** メインメソッド */ public static void main(String[] args) { String inStr = new Scanner(System.in); feeldList.add(inStr); }
これにプログラムが終了するまえにリストの中身を順番に出力するようにしてやればおっけ。あとはテストして…
詳細な記事
Java API
上のコードで使用しているScanner, ArrayListなどはJava APIで提供されているクラスで、よく使うものです。他にも、馬鹿みたいに沢山あるので、全部は覚えきれません。しかし全部どの様に使うのか説明が付いてます。これをJavaDocと呼び、「/* ... /」で括った部分をHTMLに出力したものです。
余談
ちなみに、面白いアイディアがあるのならばそちらの実装に着手してみる事を進めます。わからない部分は「わかんねー!」と思った時に学習するので遅くありません(笑)むしろ学習効率が高いかも?