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

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

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

<キーボードから数字を入力>

 

f:id:ryisnow:20150520181823j:plain


Scannerを使う準備が整ったので、次は「キーボードで1~3の数字が入力された後の処理」を書く必要がありました。

全部を書くとこのようになりました。
-------------------------------------------------------------------------------------------------------------------

import java.util.Scanner;

public class Raindia
{
    public static void main(String[]args)
    {
        Raindia game = new Raindia();
        game.townGate();        
    }
    
    public void townGate()
    {
        System.out.println("長い旅の果てに、あなたは小さな町の門にたどり着いた。");
        System.out.println("門の前には衛兵が1人立っている。");
        System.out.println("どうしますか?");
        System.out.println("1:あたりを見回す");
        System.out.println("2:衛兵に話しかける");
        System.out.println("3:衛兵を攻撃する");
        
        Scanner input = new Scanner(System.in);
        
        String number = input.next();
        
        if(number.equals("1"))
        {
            System.out.println("衛兵があなたを見ている。");
        }
        if(number.equals("2"))
        {
            System.out.println("衛兵: 旅人か? 見慣れない顔だな。");
        }
        if(number.equals("3"))
        {
            System.out.println("衛兵: なんだお前は!");
            System.out.println(" ");
            System.out.println("…あなたは懸命に戦った。");
            System.out.println("しかし空腹のあなたに勝ち目はなかった。");
            System.out.println("あなたは衛兵に殺されてしまった。");
            System.out.println("GAME OVER");          
        }
    }
}

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

一気にいろいろ増えましたが…今回新しく追加されたのは「String number = input.next();」以下の文です。

まず追加された1行目「String number = input.next();」ですが、これは

「Scannerが読み取るキーボードからの入力情報を、numberと名づけた器に格納する」
といった意味のようです。

「String(ストリング)」というのは「テキスト情報を格納する器」のようなもので、「number」というのはその器に僕が今回任意につけた名前です。
ここではキーボードで押された「1~3」の数字を格納するためにこうした名前にしましたが、好きな名前をつけられるので、

String sentakushi = input.next(); でも、
String choice = input.next(); でも、なんでも大丈夫です。


いずれにせよこうした器をまず用意し、そこにScannerで読み取った入力情報を格納します。その読み取り指令が「=」の右側の「input.next();」になります。

「input」というのは前回作成したScannerの名前です。基本的に一旦名前をつけて宣言した以降は「Scanner」とは書かず、自分がつけた名前を使うようです。

そして「input.next()」は「Scannerが読み取るキーボードからの入力情報」といった意味となります。

たとえばキーボードで「1」と入力した場合、「number」という器の中に「1」という情報が格納されます。



こうして格納された数字をもとに、どの分岐に進むのかを選択することになります。そしてそれがその後に書かれている
if(number.equals("1"))
if(number.equals("2"))
if(number.equals("3"))という3種類の文につながっています。

if(number.equals("1"))というのは、

「もしnumberに格納された情報が1だった場合」という意味です。

なのでもしキーボードで「1」と入力した場合は、その下にある
「衛兵があなたを見ている。」
というテキストが画面に出力されます。

「2」を入力したした場合は、
「衛兵: 旅人か? 見慣れない顔だな。」
というテキストが画面に出力されます。

「3」を入力した場合は、ゲームオーバーです。

プログラムを実際に実行してみると、まずこのような画面が表示されます。

f:id:ryisnow:20150520181823j:plain


キーボードで「1」を入力すると、

f:id:ryisnow:20150520181850j:plain


「2」を入力すると、

f:id:ryisnow:20150520181907j:plain


「3」を入力すると、

f:id:ryisnow:20150520181924j:plain


このようになります。
このような形でとりあえず僕はストーリーを分岐させることができました。