Java Mid Basic 〜Lv2_8_Javaの基本(Mapを使う)ゲームループ付き〜

イントロダクション

前回は、ファイルの読み込みを行いました。
こんな感じで動きました。

Mapを使う

今回は、Mapを使用します。java.util.Listと同じようにインターフェースです。このMapインターフェースは実装クラスにHashMapがあります。詳細はリンク先の「既知のすべての実装クラス」を見てください。
そして、今回はこのMap(HashMap)を使って、ゲーム上のマップ(目には見えない)を表現することを考えたいと思います。

目に見えないマップ

通常、ゲームのマップといえばキャラクターが動いて「〜の街に入る」とかの動きをするのですが、今回はテキストRPGを作ろうとしているので、その部分を表示しません。全て「プレーヤーの想像」に映し出せるようになんとか「文章」を考える必要があります。そしてBGMも大切です。。。が、まずは「Javaを理解する」を目的としているのでプログラムの方を優先します。
「目に見えないマップ」とは、プログラムの処理上では存在しているけど、ユーザー(プレイヤー)は見ることができない。。。という意味です。
例えば、ユーザーにDBからデータを取得するためのSQLを見る必要はないし、機密情報でもあるので画面には表示しません。
同様に、今回のコンソールゲームでは、なるべくプレーヤーの想像の中に「画面」を描画してもらえるように作成するので、目に見える マップは邪魔以外の何物でもないのです。(そういうコンセプトなのです(笑))

実行結果

処理内容

作成したコードはGitにあります。

/** Mapインターフェース */
private Map<String, String> placeInfo;

/** 現在位置の情報を返却する */
public void showPositionInfo(String pos) {
    if (placeInfo == null) {
        System.out.println("現在位置の情報が設定されていません。(placeInfo = null)");
        System.exit(-1);
    }
    // 入力が「move 数字」になっていない場合はエラー
    if (pos.matches("move [0-9]") == false) {
        System.out.println("入力コマンドが不適切です。move [0-9]で入力してください");
        System.exit(-1);
    }
    // から文字を削除
    String place = pos.replaceAll("move", "");
    // moveを削除
    place = place.replaceAll(" ", "");
    System.out.println(placeInfo.get(place));
}

【前提】
入力値=引数のString posには「move XX」という数字が入ってきます。

初めのif (placeInfo == null) {はフィールド変数にインスタンスが設定されていない場合の例外対応です。想定外の場合というのを考慮に入れています。が他の部分など、全対的にどのような流れで処理を行うのか考えていない状態なので、まぁ、勘弁してください。
そして、コマンドが「move 1」のように「1」の部分が数字で入力されている場合この時にMapに登録されている値を表示します。
ちなみにMapに登録する処理は以下のコードで実装しています。

/** 現在位置の情報を保持するMapを作成 */
public Map<String, String> getInfoMap() {
    HashMap<String, String> map = new HashMap<>();
    map.put("1", "マス1");
    map.put("2", "マス2");
    map.put("3", "マス3");
    map.put("4", "マス4");
    return map;
}

HashMapのインスタンスを生成して、”1”のキーには値: "マス1"を設定します。同様に2〜4まで設定したところで設定処理を終了しています。
プログラムの作成は今までにやってきているので、下の「関連ページ」を参照してください。

でわでわ。。。

<<< 前回 次回 >>>

関連ページ



投稿者:

takunoji

音響、イベント会場設営業界からIT業界へ転身。現在はJava屋としてサラリーマンをやっている。自称ガテン系プログラマー(笑) Javaプログラミングを布教したい、ラスパイとJavaの相性が良いことに気が付く。 Spring framework, Struts, Seaser, Hibernate, Playframework, JavaEE6, JavaEE7などの現場経験あり。 SQL, VBA, PL/SQL, コマンドプロント, Shellなどもやります。

コメントを残す