【Java】野球の審判シミュレータ

に公開

野球審判のシミュレータを作成しました。ちょうど、ジャイアンツ対ベイスターズの試合を見ていて、カウントのロジックをプログラムで作ってみたいと思った次第です。

プログラムの概要

このプログラムは、ユーザーからの入力に基づいて「ボール」「ストライク」「アウト」をカウントし、それに応じてメッセージを表示します。ボールが4つになるとフォアボール、ストライクが3つになるとバッターアウト、アウトが3つになるとチェンジが発生します。

プログラム全文

class BaseballCount {
    public static void main(String[] args) {
        String[] bArray = new String[3];  // ボールカウント用の配列
        String[] sArray = new String[2];  // ストライクカウント用の配列
        String[] oArray = new String[2];  // アウトカウント用の配列

        int b = 0;  // ボールの数
        int s = 0;  // ストライクの数
        int o = 0;  // アウトの数
        boolean isChange = false;  // チェンジフラグ

        String eSymbol = "⚪️";  // 空のシンボル
        String bSymbol = "🟢";  // ボールのシンボル
        String sSymbol = "🟡";  // ストライクのシンボル
        String oSymbol = "🔴";  // アウトのシンボル

        // 初期表示
        System.out.println("B " + eSymbol + eSymbol + eSymbol);
        System.out.println("S " + eSymbol + eSymbol);
        System.out.println("O " + eSymbol + eSymbol);

        java.util.Scanner sc = new java.util.Scanner(System.in);

        // ゲームループ
        while (!isChange) {
            System.out.print("ピッチャー投げた!: ");
            String input = sc.nextLine();  // 入力を受け付ける

            switch (input) {
                case "b":  // ボール
                    b++;
                    System.out.println("ボール");
                    if (b == 4) {  // 4ボールでフォアボール
                        b = 0;
                        s = 0;
                        System.out.println("フォアボール");
                    }
                    break;
                case "s":  // ストライク
                    s++;
                    System.out.println("ストライク");
                    if (s == 3) {  // 3ストライクでバッターアウト
                        b = 0;
                        s = 0;
                        o++;
                        System.out.println("バッターアウト");
                        if (o == 3) {  // 3アウトでチェンジ
                            o = 0;
                            System.out.println("スリーアウトチェンジ!");
                            isChange = true;
                        }
                    }
                    break;
                case "o":  // アウト
                    o++;
                    System.out.println("アウト");
                    if (o == 3) {  // 3アウトでチェンジ
                        o = 0;
                        System.out.println("スリーアウトチェンジ!");
                        isChange = true;
                    }
                    b = 0;
                    s = 0;
                    break;
                default:
                    break;
            }

            // カウント表示の更新
            for (int i = 0; i < bArray.length; i++) {
                bArray[i] = (i < b) ? bSymbol : eSymbol;
            }
            for (int i = 0; i < sArray.length; i++) {
                sArray[i] = (i < s) ? sSymbol : eSymbol;
            }
            for (int i = 0; i < oArray.length; i++) {
                oArray[i] = (i < o) ? oSymbol : eSymbol;
            }

            // カウントの表示
            System.out.println("B " + bArray[0] + bArray[1] + bArray[2]);
            System.out.println("S " + sArray[0] + sArray[1]);
            System.out.println("O " + oArray[0] + oArray[1]);
        }
    }
}

プログラムのポイント

条件分岐による判定処理

ユーザーが入力した「b」(ボール)、「s」(ストライク)、「o」(アウト)に応じて、カウントを増やし、状況に応じた処理(フォアボール、アウト、チェンジ)を行います。

配列を使ったカウント管理

カウントの都度、3つの配列(bArray、sArray、oArray)に絵文字を挿入して表示します。

実行例

B ⚪️⚪️⚪️
S ⚪️⚪️
O ⚪️⚪️
ピッチャー投げた!: b
ボール
B 🟢⚪️⚪️
S ⚪️⚪️
O ⚪️⚪️
ピッチャー投げた!: s
ストライク
B 🟢⚪️⚪️
S 🟡⚪️
O ⚪️⚪️
ピッチャー投げた!: s
ストライク
B 🟢⚪️⚪️
S 🟡🟡
O ⚪️⚪️

おわりに

プログラムの練習として、野球の基本的なロジックを「繰り返し、条件分岐、配列操作」で書いてみました。
まだまだ、コードは冗長で、改善の余地があります。関数やメソッド化など。
さらに、バッターやランナーなどの情報を加えてプログラムを大きくして練習するのもありです。

Discussion