Javaで数当て | とり助といえばゲーム作家のとり助河田金

とり助といえばゲーム作家のとり助河田金

「とり助ゲーム」とは、とり助自作のもので、
紙ベースのドイツゲームといった
アナログゲームのことです。特に、ボードゲーム(ボドゲ)
や、カードゲーム(カドゲ)の事であり、
とびぬけておもしろいのもののこと。

もちろんです!Javaで数当てゲームを作成するのは楽しいプロジェクトですね。以下に、簡単な数当てゲームのサンプルコードを示します。このコードは、3つの数字を当てるゲームで、ユーザーが入力した数字と正解の数字を比較して「eat」(数字と桁が一致)と「bite」(数字のみ一致)をカウントします。

import java.io.*;

public class Numeron {
    final static int answer_size = 3;
    static int eat = 0;
    static int bite = 0;
    static int challenge = 1;

    public static void main(String[] args) {
        printDirection();
        int[] right_answer;
        right_answer = makeRightAnswer();

        while (true) {
            int[] user_answer;
            user_answer = readUserAnswer();
            checkAnswer(right_answer, user_answer);
            challenge++;
            if (eat == answer_size) {
                System.out.println("正解です。ゲームを終了します。");
                break;
            }
        }
    }

    public static void printDirection() {
        String direction = "ゲームを開始します。\n" +
                "これから0~9の" + answer_size + "つの数字を当ててもらいます。\n" +
                "同じ数字が使用されていることはありません。\n" +
                "数字と位置が合っていた場合、「eat」\n" +
                "数字が合っていて位置が間違っていた場合、「bite」としてカウントされます。\n\n";
        System.out.println(direction);
    }

    public static int[] makeRightAnswer() {
        int[] answer = new int[answer_size];
        for (int i = 0; i < answer.length; i++) {
            answer[i] = (int) (Math.random() * 10);
            for (int j = i - 1; j >= 0; j--) {
                if (answer[j] == answer[i]) {
                    answer[i] = (int) (Math.random() * 10);
                }
            }
        }
        return answer;
    }

    public static int[] readUserAnswer() {
        eat = 0;
        bite = 0;
        int[] answer = new int[answer_size];
        BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
        System.out.println("\n" + challenge + "回目のチャレンジ");
        for (int i = 0; i < answer.length; i++) {
            try {
                System.out.print((i + 1) + "つ目の数字:");
                String a = reader.readLine();
                int b = Integer.parseInt(a);
                answer[i] = b;
            } catch (NumberFormatException e) {
                System.out.println("数字を入力してください。");
                i--;
            } catch (IOException e) {
                System.out.println("形式が間違っています。");
                i--;
            }
        }
        return answer;
    }

    public static void checkAnswer(int[] right_answer, int[] user_answer) {
        for (int i = 0; i < right_answer.length; i++) {
            for (int j = 0; j < user_answer.length; j++) {
                if (right_answer[j] == user_answer[i]) {
                    if (j == i) {
                        eat++;
                    } else {
                        bite++;
                    }
                }
            }
        }
        System.out.println(eat + " eat " + bite + " bite");
    }
}