1976年生まれのプログラミング初心者のゲーム制作日記

ひょんなことからJavaでゲームを作ることになり、その過程を記しています。

テキストアドベンチャーゲームを作る 6

<String で武器や防具を管理>

f:id:ryisnow:20150602210809j:plain


選択肢や自分の名前を格納するために使ったString(ストリング)ですが、仕組みを理解するにつれ、ゲームを作るにおいてとても便利なものであることがわかってきました。

これまでに作ったStringは、

String number
String playername

という2種類ですが、

たとえば自分が今どんな装備品を持っているか、というデータを格納するために、

String weapon とか、
String armor

なんていうStringを作ることもできます。

たとえばこんな感じで…

-------------------------------------------------------------------------------------------------------------------------


public class Raindia
{
    public static void main(String[ ]args)
    {
        Raindia game = new Raindia();
        game.start();        
    }
    
    public void townGate()
    {
        System.out.println("");
        System.out.println("");
        System.out.println("長い旅の果てに、あなたは小さな町の門にたどり着いた。");
        System.out.println("門の前には衛兵が1人立っている。");

        String weapon = "ナイフ";                
        String armor = "革のチュニック";
        
        System.out.println("");
        System.out.println("あなたの現在の武器=" + weapon);
        System.out.println("あなたの現在の防具=" + armor);

    }
}

---------------------------------------------------------------------------------------------------------------------


これを実行するとこんな感じに表示されます。

f:id:ryisnow:20150602204257j:plain

 

String weapon = "ナイフ";

という文の意味は「weaponという名の器(String)に"ナイフ"というテキストを格納する」といった感じです。

選択肢や名前のときはキーボードで任意のデータを入力して、それを格納しましたが、今回はその格納するテキストをあらかじめ指定している形です。

「String armor」に関しても同じ仕組みです。

そして「weapon」と「armor」と名づけた2つの器にテキストデータを格納したところで、その後に書かれている

System.out.println("あなたの現在の武器=" + weapon);

を使ってその内容を実際に表示させています。「""」でくくって直接打ち込んだテキストと、Stringの名前を組み合わせるのは前回と同じです。

こんなまどろっこっしいことをしないで直接

System.out.println("あなたの現在の武器=ナイフ");

と書けばいいのに、と最初は思うんですが、
たとえば装備している武器や防具というのはゲーム中に変わったりもします。また、どのようにプレイするかによってプレイヤーごとに持っている装備も変わったりもします。

しかしこうした器という形で用意しておけば、装備が変わった際にこの「weapon」や「armor」の器の中身だけを変えてやればよく、そのほうがいろいろ手間が省けていろいろ便利である、ということがわかってきました。

たとえば「ナイフを持っていたが、その後にロングソードを手に入れて武器がロングソードになった」場合、こんな風に書くことができます。

---------------------------------------------------------------------------------------------------------------------

public class Raindia
{
    public static void main(String[ ]args)
    {
        Raindia game = new Raindia();
        game.start();        
    }
    
    public void townGate()
    {
        System.out.println("");
        System.out.println("");
        System.out.println("長い旅の果てに、あなたは小さな町の門にたどり着いた。");
        System.out.println("門の前には衛兵が1人立っている。");
        
        String weapon = "ナイフ";
        String armor = "革のチュニック";
        
        System.out.println("");
        System.out.println("あなたの現在の武器=" + weapon);
        System.out.println("あなたの現在の防具=" + armor);        
        System.out.println("");
        System.out.println("…地面に誰かが捨てたロングソードが落ちている。");
        System.out.println("あなたはナイフをしまい、ロングソードを手に取った。");
        
        weapon = "ロングソード";
        
        System.out.println("");
        System.out.println("あなたの現在の武器=" + weapon);
        System.out.println("あなたの現在の防具=" + armor);
    }
}

----------------------------------------------------------------------------------------------------------------------

実行結果はこんな感じです。

f:id:ryisnow:20150602210809j:plain

 

現在の武器と防具を表示させるプログラム文は1回目も2回目もまったく同じに書かれていますが、String「weapon」の内容が途中で書き換えられたため、表示されるテキストもナイフからロングソードに変わりました。

その武器の内容を書き換えた文章が

weapon = "ロングソード";

です。
ここでのポイントは最初の

String weapon = "ナイフ";

とは違い、頭に「String」がついていないということでしょうか。

この頭の「String」というのは最初に器を作る時だけ書く必要があり、すでに存在している器を再び呼び出す場合は器の名前だけ書けばよい、というルールになっているようです。Scannerでも最初に「Scanner input」と書いて、その後は「input」だけ書けばよかったのと同じような原理だと思います。

プレイヤーの名前、装備品、その他いろいろなものにこのStringは応用できるので、これなくしてテキストアドベンチャーRPGは作れないといってもよいくらい重要なもののように感じます。

しかし、こういう仕組みを最初に考えた人ってのはすごいなと思います。