【ゲームコード一覧】JAVAで色々なゲームを作ろう -初心者向け-

記事内に商品プロモーションを含む場合があります

JAVAを学習中の初心者に向けて、簡単なゲームのコードを数多く紹介しています。

是非このページのゲームを実際に作ってみて、楽しくJAVAを習得してください。

初心者のためのJAVAテキスト&練習問題集|全42ページを無料公開中! Javaはその高い汎用性と安定性から、Webアプリケーションやモバイルアプリ開発、企業システムの構築など、幅広い分野で活用される...

【★★☆☆☆】ハイアンドローゲーム

簡単なハイアンドローゲームを作成しましょう。

このゲームは、プレイヤーとコンピュータにランダムなカード(1から13までの整数)が配られ、プレイヤーは自分のカードを見た後、コンピュータのカードが自分のカードよりも大きいか小さいかを予想します。

プレイヤーが予想した後、コンピュータのカードを表示し、予想が正しければプレイヤーの勝ち、間違っていれば負けとなります。

本サイトで紹介するコードを実行すると、↓↓のような出力となります。

=== ハイアンドローゲームへようこそ! ===
【プレイヤー】8 VS ??【コンピュータ】
あなたのカードはコンピュータのカードより大きい?小さい?
1: 大きい、2: 小さい
⇒ 2
【プレイヤー】8 VS 10【コンピュータ】
正解!あなたの勝ち!

いきなりコードを見るのではなく練習問題形式で作成したい人は↓↓をクリック

【JAVA】確認問題2-☆1:ハイアンドローゲームを作ろう【JAVA】ハイアンドローゲームのコードを書く練習問題。Java初心者向けに、ランダムなカードを引き、コンピュータとのカード勝負で「大きい」か「小さい」かを予測する簡単なプログラムの作成方法を解説。ランダムクラスとスキャナークラスを使い、ゲームの勝敗判定ロジックを実装してみよう!...

ハイアンドローゲームのコードは↓↓をクリック

ハイアンドローのコード
import java.util.Random;
import java.util.Scanner;

public class HighAndLowGame {
    public static void main(String[] args) {
        // ゲーム開始メッセージ
        System.out.println("=== ハイアンドローゲームへようこそ! ===");

        // プレイヤーとコンピュータにランダムなカード(1〜13の数字)を配る
        Random rand = new Random();
        int playerCard = rand.nextInt(13) + 1;
        int computerCard = rand.nextInt(13) + 1;

        // プレイヤーに配られたカードを表示し、コンピュータのカードはまだ表示しない
        System.out.println("【プレイヤー】" + playerCard + " VS ??【コンピュータ】");

        // プレイヤーにコンピュータのカードが大きいか小さいかを予想させる
        System.out.println("あなたのカードはコンピュータのカードより大きい?小さい?");
        System.out.println("1: 大きい、2: 小さい");

        // ユーザーの入力を取得
        Scanner scanner = new Scanner(System.in);
        int choice = scanner.nextInt();

        // コンピュータのカードを表示
        System.out.println("【プレイヤー】" + playerCard + " VS " + computerCard + "【コンピュータ】");

        // 勝負の結果を判定
        if (playerCard == computerCard) {
            System.out.println("引き分け!");
        } else if ((playerCard < computerCard && choice == 1) || (playerCard > computerCard && choice == 2)) {
            System.out.println("正解!あなたの勝ち!");
        } else {
            System.out.println("残念!あなたの負け!");
        }
    }
}

ハイアンドローのコードは以上です。楽しんでください^^
コードの解説はこちらを参照。

【★★☆☆☆】数字当てゲームゲーム

簡単な「数字当てゲーム」を作成しましょう。

このゲームではコンピューターが1から100までのランダムな整数を生成し、ユーザーがその数字を当てるまで繰り返し入力します。

ユーザーが正しい数字を入力した場合はゲームは終了し、試行回数を表示します。

本サイトで紹介するコードを実行すると、↓↓のような出力となります。

1から100までの数字を入力してください: 50
もっと大きい数字です。
1から100までの数字を入力してください: 75
もっと小さい数字です。
1から100までの数字を入力してください: 60
もっと小さい数字です。
1から100までの数字を入力してください: 55
正解です!試行回数: 4
ゲームを終了します。

いきなりコードを見るのではなく練習問題形式で作成したい人は↓↓をクリック

【JAVA】確認問題2-☆2:数字当てゲームを作ろう【JAVA】数字当てゲームのコードを書く練習問題。1から100までのランダムな数字をユーザーが当てるシンプルなゲームのコード例を紹介。Scannerを使ったユーザー入力の処理や、Randomを用いたランダムな数字の生成方法を学べます。入力された数字が正解かどうかを判定し、ヒントを提供するロジックも含まれており、初心者に最適なプログラミング練習問題です。...
数字当てゲームゲームのコードは↓↓をクリック
数字当てゲームのコード
import java.util.Scanner;
import java.util.Random;

public class NumberGuessingGame {
    public static void main(String[] args) {
        // Scannerオブジェクトを作成し、標準入力を読み取る
        Scanner scanner = new Scanner(System.in);
        
        // Randomオブジェクトを作成し、ランダムな数を生成する
        Random random = new Random();
        
        // 1から100までのランダムな整数を生成
        int targetNumber = random.nextInt(100) + 1;
        
        // ユーザーの入力を格納する変数を初期化
        int userGuess = 0;
        
        // 試行回数を記録する変数を初期化
        int attemptCount = 0;
        
        // ユーザーが正しい数字を当てるまで繰り返す
        while (userGuess != targetNumber) {
            // ユーザーに数字を入力してもらう
            System.out.print("1から100までの数字を入力してください: ");
            userGuess = scanner.nextInt();
            
            // 試行回数をカウント
            attemptCount++;
            
            // 入力された数字が正解かどうかを判定
            if (userGuess < targetNumber) {
                System.out.println("もっと大きい数字です。");
            } else if (userGuess > targetNumber) {
                System.out.println("もっと小さい数字です。");
            } else {
                System.out.println("正解です!試行回数: " + attemptCount);
            }
        }
        System.out.println("ゲームを終了します。");
    }
}

数字当てゲームのコードは以上です。楽しんでください^^
コードの解説はこちらを参照。

【★★☆☆☆】じゃんけんゲーム

簡単なじゃんけんゲームを作成しましょう。

ユーザーが「グー」「チョキ」「パー」のいずれかを入力し、コンピューターがランダムに出した手と比較して勝敗を決定します。

その後プログラムはユーザーに対して結果を表示してもう一度プレイするかどうかを尋ね、ユーザーが「いいえ」と答えるまでゲームを繰り返しましょう。

本サイトで紹介するコードを実行すると、↓↓のような出力となります。

じゃんけんの手を入力してください(グー: 0, チョキ: 1, パー: 2): 0
コンピューターの手: チョキ
あなたの勝ちです!
もう一度プレイしますか?(はい: 0, いいえ: 1): 0

じゃんけんの手を入力してください(グー: 0, チョキ: 1, パー: 2): 2
コンピューターの手: パー
引き分けです!
もう一度プレイしますか?(はい: 0, いいえ: 1): 1
ゲームを終了します。

いきなりコードを見るのではなく練習問題形式で作成したい人は↓↓をクリック

【JAVA】確認問題2-☆3:簡単なじゃんけんゲームを作ろう【JAVA】じゃんけんゲームのコードを書く練習問題。ユーザーが入力した手とコンピューターのランダムな手を比較し、勝敗を判定するシンプルなゲームのコード例を紹介。Scannerを使ったユーザー入力の処理方法や、Randomを用いたランダムな手の生成、繰り返しゲームのロジックも学べます。初心者に最適なプログラミング練習問題です。...

じゃんけんゲームのコードは↓↓をクリック

じゃんけんのコード
import java.util.Scanner;
import java.util.Random;

public class RockPaperScissors {
    public static void main(String[] args) {
        // Scannerオブジェクトを作成し、標準入力を読み取る
        Scanner scanner = new Scanner(System.in);
        
        // Randomオブジェクトを作成し、ランダムな手を生成する
        Random random = new Random();
        
        // じゃんけんの手を表す文字列の配列を作成
        String[] choices = {"グー", "チョキ", "パー"};
        
        // ゲームの繰り返しを制御するフラグを初期化
        boolean playAgain = true;
        
        // ユーザーがプレイを希望する限りゲームを繰り返す
        while (playAgain) {
            // ユーザーに手を入力してもらう
            System.out.print("じゃんけんの手を入力してください(グー: 0, チョキ: 1, パー: 2): ");
            int userChoice = scanner.nextInt();
            
            // コンピューターの手をランダムに選ぶ
            int computerChoice = random.nextInt(3); // 0から2のランダムな整数を生成
            
            // コンピューターの手を表示
            System.out.println("コンピューターの手: " + choices[computerChoice]);
            
            // 勝敗の判定を行う
            if (userChoice == computerChoice) {
                System.out.println("引き分けです!");
            } else {
                // ユーザーの勝ちの場合の条件を設定
                boolean userWins = (userChoice == 0 && computerChoice == 1) ||
                                   (userChoice == 1 && computerChoice == 2) ||
                                   (userChoice == 2 && computerChoice == 0);
                
                // 勝ち負けの結果を表示
                if (userWins) {
                    System.out.println("あなたの勝ちです!");
                } else {
                    System.out.println("あなたの負けです!");
                }
            }
            
            // もう一度プレイするかどうかをユーザーに尋ねる
            System.out.print("もう一度プレイしますか?(はい: 0, いいえ: 1): ");
            int answer = scanner.nextInt();
            if (answer == 1) { // ユーザーが「いいえ」を選んだ場合
                playAgain = false; // 繰り返しを終了する
            }
        }
        
        System.out.println("ゲームを終了します。");
    }
}

じゃんけんのコードは以上です。楽しんでください^^
コードの解説はこちらを参照。

【★★★☆☆】石取りゲームゲーム

石取りゲームを作成しましょう。

ゲームではユーザーとコンピュータが交互に石を取り合い、最後の石を取った方が負けとなります。プレイヤーが取れる石の数は1~3個です。

コンピュータのターンでは、ランダムな数の石を取り、最後の石を取らないように戦略をとります。

本サイトで紹介するコードを実行すると、↓↓のような出力となります。

=== 石取りゲーム ===
石の数: 15
1ターンに1〜3個の石を取ることができます。
最後の石を取った方が負けです。

取る石の数 (1〜3) を入力してください: 2
あなたは 2 個の石を取りました。残りの石: 13
コンピュータは 3 個の石を取りました。残りの石: 10

取る石の数 (1〜3) を入力してください: 1
あなたは 1 個の石を取りました。残りの石: 9
コンピュータは 2 個の石を取りました。残りの石: 7

取る石の数 (1〜3) を入力してください: 3
あなたは 3 個の石を取りました。残りの石: 4
コンピュータは 3 個の石を取りました。残りの石: 1

取る石の数 (1〜3) を入力してください: 1
あなたは 1 個の石を取りました。残りの石: 0
あなたの負けです!

いきなりコードを見るのではなく練習問題形式で作成したい人は↓↓をクリック

【JAVA】確認問題3-☆1:石取りゲームを作ろう【JAVA】石取りゲームのコードを書く練習問題。プレイヤーとコンピュータが交互に1〜3個の石を取るシンプルなゲームで、最後の石を取った方が負けになるルールです。ユーザー入力の処理やランダムなコンピュータの動きなど、Javaの基本的なプログラミング技術を身につけるのに最適な例題です。...

石取りゲームゲームのコードは↓↓をクリック

石取りゲームのコード
import java.util.Random;
import java.util.Scanner;

public class StoneGame {

    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        Random random = new Random();

        int stones = 15; // 初期の石の数
        System.out.println("=== 石取りゲーム ===");
        System.out.println("石の数: " + stones);
        System.out.println("1ターンに1〜3個の石を取ることができます。");
        System.out.println("最後の石を取った方が負けです。");

        while (stones > 0) {
            // プレイヤーのターン
            stones = playerTurn(stones, scanner);

            // 勝敗判定
            if (isGameOver(stones, "あなた")) {
                break;
            }

            // コンピュータのターン
            stones = computerTurn(stones, random);

            // 勝敗判定
            if (isGameOver(stones, "コンピュータ")) {
                break;
            }
        }
    }

    // プレイヤーのターンを処理するメソッド
    public static int playerTurn(int stones, Scanner scanner) {
        System.out.print("取る石の数 (1〜3) を入力してください: ");
        int playerMove = scanner.nextInt();

        while (playerMove < 1 || playerMove > 3 || playerMove > stones) {
            System.out.print("無効な入力です。再度1〜3の範囲で入力してください: ");
            playerMove = scanner.nextInt();
        }

        stones -= playerMove;
        System.out.println("あなたは " + playerMove + " 個の石を取りました。残りの石: " + stones);
        return stones;
    }

    // コンピュータのターンを処理するメソッド
    public static int computerTurn(int stones, Random random) {
        int computerMove = Math.min(random.nextInt(3) + 1, stones);
        stones -= computerMove;
        System.out.println("コンピュータは " + computerMove + " 個の石を取りました。残りの石: " + stones);
        return stones;
    }

    // 勝敗判定を行うメソッド
    public static boolean isGameOver(int stones, String playerName) {
        if (stones == 0) {
            System.out.println(playerName + "の負けです!");
            return true;
        }
        return false;
    }
}

石取りゲームのコードは以上です。楽しんでください^^
コードの解説はこちらを参照。

【★★★☆☆】丁半賭博ゲーム

簡単な丁半賭博ゲームを作成しましょう。

丁半賭博ゲームはコンピュータがサイコロを2つ振り、出た目の合計が偶数か奇数かをユーザーが予想します。予想が当たると賭け金が2倍になり、外れると賭け金が失われます。

ゲームを繰り返すごとに所持金が変動し、ユーザーが続けたい限りゲームは繰り返されます。

本サイトで紹介するコードを実行すると、↓↓のような出力となります。

丁半賭博ゲームを始めます!
プレイヤーの所持金: 1000円
いくらかけますか? ⇒ 300
丁か半か?(丁:0,半:1) ⇒ 0
サイコロの目: 4, 2 ⇒ 丁
あなたの勝ち!賞金は300円
続けますか?(はい:0,いいえ:1)0
プレイヤーの所持金: 1300円
いくらかけますか? ⇒ 500
丁か半か?(丁:0,半:1) ⇒ 1
サイコロの目: 1, 6 ⇒ 半
あなたの負け!500円没収!
続けますか?(はい:0,いいえ:1)1
最終所持金は800円でした。
丁半賭博ゲームを終わります。

いきなりコードを見るのではなく練習問題形式で作成したい人は↓↓をクリック

【JAVA】確認問題3-☆2:丁半賭博ゲームを作ろう【JAVA】丁半賭博ゲームのコードを書く練習問題。サイコロの結果が「丁(偶数)」か「半(奇数)」かを予想し、所持金を賭けてゲームを進めるシンプルな賭博ゲームのコード例を紹介。Scannerを使ったユーザー入力処理や、Randomを用いたサイコロのランダムな結果生成、賭け金の管理ロジックを学ぶことができます。...

丁半賭博ゲームのコードは↓↓をクリック

丁半賭博のコード
import java.util.Random;
import java.util.Scanner;

public class ChoHanGame {

    // 掛け金を入力するメソッド
    public static int getBet(int money, Scanner scanner) {
        while (true) {
            System.out.print("いくらかけますか? ⇒ ");
            int bet = scanner.nextInt();
            if (bet > 0 && bet <= money) {
                return bet;
            } else {
                System.out.println("無効な入力です!所持金以内の正しい金額を入力してください。");
            }
        }
    }

    // 丁か半かを選択するメソッド
    public static int getChoice(Scanner scanner) {
        while (true) {
            System.out.print("丁か半か?(丁:0,半:1) ⇒ ");
            int choice = scanner.nextInt();
            if (choice == 0 || choice == 1) {
                return choice;
            } else {
                System.out.println("無効な入力です!0か1を入力してください。");
            }
        }
    }

    // サイコロを振るメソッド
    public static int[] rollDice() {
        Random random = new Random();
        int dice1 = random.nextInt(6) + 1;
        int dice2 = random.nextInt(6) + 1;
        return new int[]{dice1, dice2};
    }

    // 続けるかどうかを確認するメソッド
    public static boolean askContinue(Scanner scanner) {
        while (true) {
            System.out.print("続けますか?(はい:0,いいえ:1) ⇒ ");
            int continueGame = scanner.nextInt();
            if (continueGame == 0) {
                return true;
            } else if (continueGame == 1) {
                return false;
            } else {
                System.out.println("無効な入力です!0か1を入力してください。");
            }
        }
    }

    // メインのゲームメソッド
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        System.out.println("丁半賭博ゲームを始めます!");
        
        int money = 1000; // プレイヤーの初期所持金
        
        while (money > 0) {
            System.out.println("プレイヤーの所持金: " + money + "円");
            
            // 掛け金を取得
            int bet = getBet(money, scanner);
            
            // 丁か半かの選択
            int choice = getChoice(scanner);
            
            // サイコロを振る
            int[] dice = rollDice();
            int diceSum = dice[ 0] + dice[ 1];
            System.out.println("サイコロの目: " + dice[ 0] + ", " + dice[ 1] + " ⇒ " + (diceSum % 2 == 0 ? "丁" : "半"));
            
            // 勝敗判定
            if ((diceSum % 2 == 0 && choice == 0) || (diceSum % 2 != 0 && choice == 1)) {
                System.out.println("あなたの勝ち!賞金は" + bet + "円");
                money += bet;
            } else {
                System.out.println("あなたの負け!" + bet + "円没収!");
                money -= bet;
            }
            
            // 続けるかどうかを確認
            if (money > 0) {
                if (!askContinue(scanner)) {
                    System.out.println("最終所持金は" + money + "円でした。");
                    break;
                }
            } else {
                System.out.println("所持金がなくなりました。ゲームを終了します。");
                break;
            }
        }
        
        System.out.println("丁半賭博ゲームを終わります。");
    }
}

丁半賭博のコードは以上です。楽しんでください^^
コードの解説はこちらを参照。

【★★★★☆】ナインゲーム

ナインゲームはプレイヤーとコンピュータが対戦するゲームです。

このゲームではプレイヤーとコンピュータが1から9までの数字の牌を持ち、それぞれのターンで1つの牌を出して勝負します。

大きい数字の牌を出した方がその数字と同じ点数を獲得し、一度出した牌は再度使用できません。

全ての牌を出し終えた時点でより多くの得点を持っている方が勝利です。

本サイトで紹介するコードを実行すると、↓↓のような出力となります。

ナインゲームを開始します!

【第1回戦】
プレイヤーの得点 : 0点
コンピュータの得点: 0点
☆プレイヤーの持ち牌⇒【1 2 3 4 5 6 7 8 9 】
コンピュータの持ち牌⇒【1 2 3 4 5 6 7 8 9 】
持ち牌の中から出す牌を選択してください > 7
プレイヤーの打牌:7 > 3:コンピュータの打牌
プレイヤーは7点獲得

【第2回戦】
プレイヤーの得点 : 7点
コンピュータの得点: 0点
☆プレイヤーの持ち牌⇒【1 2 3 4 5 6 - 8 9 】
コンピュータの持ち牌⇒【1 2 3 4 5 6 - 8 9 】
持ち牌の中から出す牌を選択してください > 4
プレイヤーの打牌:4 < 8:コンピュータの打牌
コンピュータは8点獲得

...

ゲーム終了!
プレイヤーの得点 : 20点
コンピュータの得点: 25点
コンピュータの勝利です!

いきなりコードを見るのではなく練習問題形式で作成したい人は↓↓をクリック

【JAVA】確認問題4-☆1:ナインゲームを作ろう【JAVA】ナインゲームのコードを書く練習問題。プレイヤーは持ち牌から選択し、コンピュータはランダムに牌を選び、出した牌の大小で得点を競います。Scannerを使用してプレイヤーの入力を処理し、Randomクラスを使ってコンピュータの牌を決定。ゲームの基本ロジックを学びながら、Javaでのリスト操作や繰り返し処理の練習に最適です。...

ナインゲームのコードは↓↓をクリック

ナインのコード
import java.util.ArrayList;
import java.util.Random;
import java.util.Scanner;

public class NineGame {

    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        Random random = new Random();

        ArrayList<Integer> playerTiles = new ArrayList<>();
        ArrayList<Integer> computerTiles = new ArrayList<>();

        for (int i = 1; i <= 9; i++) {
            playerTiles.add(i);
            computerTiles.add(i);
        }

        int playerScore = 0;
        int computerScore = 0;

        System.out.println("ナインゲームを開始します!");

        for (int round = 1; round <= 9; round++) {
            System.out.println("\n【第" + round + "回戦】");
            System.out.println("プレイヤーの得点 : " + playerScore + "点");
            System.out.println("コンピュータの得点: " + computerScore + "点");

            displayTiles("☆プレイヤーの持ち牌", playerTiles);
            displayTiles("コンピュータの持ち牌", computerTiles);

            // プレイヤーの牌を選択
            int playerChoice;
            while (true) {
                System.out.print("持ち牌の中から出す牌を選択してください > ");
                playerChoice = scanner.nextInt();
                if (playerTiles.contains(playerChoice)) {
                    playerTiles.set(playerTiles.indexOf(playerChoice), -1);
                    break;
                } else {
                    System.out.println("無効な選択です。再度選択してください。");
                }
            }

            // コンピュータの牌を選択
            int computerChoice;
            while (true) {
                computerChoice = computerTiles.get(random.nextInt(computerTiles.size()));
                if (computerChoice != -1) {
                    computerTiles.set(computerTiles.indexOf(computerChoice), -1);
                    break;
                }
            }

            // 両者の牌を比較
            System.out.print("プレイヤーの打牌:" + playerChoice);
            if (playerChoice > computerChoice) {
                System.out.println(" > " + computerChoice + ":コンピュータの打牌");
                playerScore += playerChoice;
                System.out.println("プレイヤーは" + playerChoice + "点獲得");
            } else if (playerChoice < computerChoice) {
                System.out.println(" < " + computerChoice + ":コンピュータの打牌");
                computerScore += computerChoice;
                System.out.println("コンピュータは" + computerChoice + "点獲得");
            } else {
                System.out.println(" = " + computerChoice + ":コンピュータの打牌");
                System.out.println("引き分けです。得点はなし");
            }
        }

        // 最終結果を表示
        System.out.println("\nゲーム終了!");
        System.out.println("プレイヤーの得点 : " + playerScore + "点");
        System.out.println("コンピュータの得点: " + computerScore + "点");

        if (playerScore > computerScore) {
            System.out.println("プレイヤーの勝利です!");
        } else if (playerScore < computerScore) {
            System.out.println("コンピュータの勝利です!");
        } else {
            System.out.println("引き分けです!");
        }

    }

    // 持ち牌を表示するメソッド
    private static void displayTiles(String title, ArrayList<Integer> tiles) {
        System.out.print(title + "⇒【");
        for (int i = 0; i < tiles.size(); i++) {
            if (tiles.get(i) == -1) {
                System.out.print("- ");
            } else {
                System.out.print(tiles.get(i) + " ");
            }
        }
        System.out.println("】");
    }
}

ナインのコードは以上です。楽しんでください^^
コードの解説はこちらを参照。

【★★★★★】モンスター捕獲ゲーム

モンスター捕獲ゲームを作成しましょう。

プレイヤーはスライム、ゴブリン、ドラゴンの3種類のモンスターに挑みます。

それぞれのモンスターとサイコロを使って勝負し、プレイヤーのサイコロの出目がモンスターの出目より大きければ捕獲に成功します。

モンスターを一匹でも多く捕まえることを目指し、捕まえたモンスターのリストを最後に表示してください。

本サイトで紹介するコードを実行すると、↓↓のような出力となります。

スライムが現れた!
スライムがサイコロを振った。出目は 3
サイコロを振りますか? (yes/no): yes
プレイヤーがサイコロを振った。出目は 5
スライムを捕まえた!
ゴブリンが現れた!
ゴブリンがサイコロを振った。出目は 4
サイコロを振りますか? (yes/no): no
ドラゴンが現れた!
ドラゴンがサイコロを振った。出目は 6
サイコロを振りますか? (yes/no): yes
プレイヤーがサイコロを振った。出目は 6
引き分けでもう一度!
ドラゴンがサイコロを振った。出目は 2
サイコロを振りますか? (yes/no): yes
プレイヤーがサイコロを振った。出目は 1
ドラゴンを捕まえられなかった。ゲームオーバー!
捕まえたモンスター: [スライム]
ゲーム終了

いきなりコードを見るのではなく練習問題形式で作成したい人は↓↓をクリック

【JAVA】確認問題5-☆1:モンスター捕獲ゲームを作ろう【JAVA】モンスター捕獲ゲームのコードを書く練習問題。サイコロを使った対決で、プレイヤーがモンスターに勝つと捕獲成功。モンスターごとに異なる出目が出るため、運次第で捕まえることができます。ゲームでは、モンスタークラスの実装や、ランダムな数字生成を学ぶことができ、Javaでのリスト操作やループ処理も実践的に習得できる内容です。...

モンスター捕獲ゲームのコードは↓↓をクリック

モンスター捕獲のコード
import java.util.ArrayList;
import java.util.Random;
import java.util.Scanner;

// モンスタークラス
class Monster {
    private String name;
    
    // コンストラクタ
    public Monster(String name) {
        this.name = name;
    }

    // モンスター名を取得するメソッド
    public String getName() {
        return name;
    }

    // サイコロを振るメソッド
    public int diceRoll() {
        Random rand = new Random();
        return rand.nextInt(6) + 1; // 1から6までのランダムな数字を返す
    }
}

public class MonsterCaptureGame {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        ArrayList<Monster> monsters = new ArrayList<Monster>();
        monsters.add(new Monster("スライム"));
        monsters.add(new Monster("ゴブリン"));
        monsters.add(new Monster("ドラゴン"));

        ArrayList<String> capturedMonsters = new ArrayList<String>();
        
        // 各モンスターとの対決
        for (Monster monster : monsters) {
            System.out.println(monster.getName() + "が現れた!");
            boolean captured = false;

            while (!captured) {
                int monsterRoll = monster.diceRoll();
                System.out.println(monster.getName() + "がサイコロを振った。出目は " + monsterRoll);

                System.out.print("サイコロを振りますか? (yes/no): ");
                String response = scanner.next();

                if (response.equalsIgnoreCase("no")) {
                    break;
                }

                int playerRoll = monster.diceRoll();
                System.out.println("プレイヤーがサイコロを振った。出目は " + playerRoll);

                if (playerRoll > monsterRoll) {
                    System.out.println(monster.getName() + "を捕まえた!");
                    capturedMonsters.add(monster.getName());
                    captured = true;
                } else if (playerRoll == monsterRoll) {
                    System.out.println("引き分けでもう一度!");
                } else {
                    System.out.println(monster.getName() + "を捕まえられなかった。ゲームオーバー!");
                    break;
                }
            }
            if (!captured) {
                break;
            }
        }

        System.out.println("捕まえたモンスター: " + capturedMonsters);
        System.out.println("ゲーム終了");
    }
}

モンスター捕獲のコードは以上です。楽しんでください^^
コードの解説はこちらを参照。

【★★★★★】モンスターとのバトルゲーム

勇者とドラゴンのバトルゲームを作成しましょう。

勇者とドラゴンはそれぞれ攻撃や防御ができ、どちらかのHPが0になるとゲームが終了します。

勇者は常に攻撃に成功しますが、ドラゴンは60%の確率でしか攻撃が成功しません。しかし攻撃が失敗するたびに成功率が上昇します。

また、防御を選んだキャラクターは次の攻撃を受けるときにダメージを無効化できます。

このルールに従って、バトルの流れを管理するプログラムを実装してください。

本サイトで紹介するコードを実行すると、↓↓のような出力となります。

=== モンスターとのバトルゲーム ===
勇者のHP: 100, ドラゴンのHP: 100, ドラゴンの攻撃成功率: 60%
攻撃するか防御するかを選んでください (1: 攻撃, 2: 防御): 1
勇者の攻撃!
ドラゴンに20のダメージ!

ドラゴンのHP: 80, ドラゴンの攻撃!
攻撃が成功!
勇者に40のダメージ!

勇者のHP: 60, ドラゴンのHP: 80, ドラゴンの攻撃成功率: 60%
攻撃するか防御するかを選んでください (1: 攻撃, 2: 防御): 2
勇者は防御を選択した!
ドラゴンの攻撃!
攻撃がミス!
ドラゴンの攻撃成功率が20%上昇!

...

いきなりコードを見るのではなく練習問題形式で作成したい人は↓↓をクリック

【JAVA】確認問題5-☆2:モンスターとのバトルゲームを作ろう【JAVA】モンスターとのバトルゲームのコードを書く練習問題。キャラクターのインターフェースや抽象クラスを使って戦闘システムを学びます。ユーザーは「勇者」となり、ドラゴンとのバトルで戦略的な行動(攻撃・防御)を選びながらゲームを進行できます。Javaのオブジェクト指向プログラミングの基本を身に付けるのに最適な問題です。...

モンスターとのバトルゲームのコードは↓↓をクリック

モンスターとのバトルのコード
import java.util.Random;
import java.util.Scanner;

// アクションインターフェースの定義
interface CharacterActions {
    void attack(Character target);
    void defend();
    boolean isDefending();
    boolean isAlive();
}

// キャラクターの共通部分を表す抽象クラス
abstract class Character implements CharacterActions {
    protected String name;
    protected int hp;
    protected int attackPower;
    protected boolean defending;

    public Character(String name, int hp, int attackPower) {
        this.name = name;
        this.hp = hp;
        this.attackPower = attackPower;
        this.defending = false;
    }

    public void attack(Character target) {
        if (target.isDefending()) {
            System.out.printf("%sの防御が成功し、攻撃は無効化された!\n", target.getName());
        } else {
            target.hp -= this.attackPower;
            System.out.printf("%sは%sに%dのダメージを与えた!\n", this.name, target.getName(), this.attackPower);
        }
        this.defending = false; // 次のターンには防御をリセット
    }

    public void defend() {
        this.defending = true;
        System.out.printf("%sは防御を選択した!\n", this.name);
    }

    public boolean isDefending() {
        return defending;
    }

    public boolean isAlive() {
        return hp > 0;
    }

    public String getName() {
        return name;
    }

    public int getHp() {
        return hp;
    }
}

// プレイヤーとモンスタークラス
class Player extends Character {
    public Player() {
        super("勇者", 100, 20);
    }
}

class Monster extends Character {
    private int attackSuccessRate;
    private Random random;

    public Monster() {
        super("ドラゴン", 100, 40);
        this.attackSuccessRate = 60;
        this.random = new Random();
    }

    public void attack(Character target) {
        int chance = random.nextInt(100) + 1;
        if (chance <= attackSuccessRate) {
            super.attack(target);
            attackSuccessRate = 60; // 成功したら確率をリセット
        } else {
            System.out.printf("%sの攻撃がミス!\n", name);
            attackSuccessRate += 20; // 失敗時は確率を上昇
        }
        this.defending = false;
    }

    public int getAttackSuccessRate() {
        return attackSuccessRate;
    }
}

// メインクラス
public class MonsterBattleGame {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        Player player = new Player();
        Monster monster = new Monster();

        System.out.println("=== モンスターとのバトルゲーム ===");

        while (player.isAlive() && monster.isAlive()) {
            // ステータス表示
            System.out.printf("%sのHP: %d, %sのHP: %d, %sの攻撃成功率: %d%%\n",
                    player.getName(), player.getHp(), monster.getName(), monster.getHp(), monster.getName(), monster.getAttackSuccessRate());

            // プレイヤーの行動選択
            System.out.print("攻撃するか防御するかを選んでください (1: 攻撃, 2: 防御): ");
            int choice = scanner.nextInt();

            if (choice == 1) {
                player.attack(monster);
            } else if (choice == 2) {
                player.defend();
            } else {
                System.out.println("無効な入力です。再度入力してください。");
                continue;
            }

            // ゲーム終了判定
            if (!monster.isAlive()) {
                System.out.println("ドラゴンは倒された!勇者の勝利!");
                break;
            }

            // モンスターのターン
            monster.attack(player);

            // ゲーム終了判定
            if (!player.isAlive()) {
                System.out.println("勇者は倒された…ドラゴンの勝利!");
            }
        }
    }
}

モンスターとのバトルのコードは以上です。楽しんでください^^
コードの解説はこちらを参照。

【★★★★★】マルバツゲーム

簡単なマルバツゲーム(Tic-Tac-Toe)を作成しましょう。

このゲームでは、2人のプレイヤーが交互にマル(○)またはバツ(×)を入力し、縦、横、または斜めのいずれかで同じ記号が3つ並んだら勝ちとなります。

問題文から回答を導き出すのが難しいと感じる場合は、先に正解のコードと解説を見て内容を理解するようにしましょう。

本サイトで紹介するコードを実行すると、↓↓のような出力となります。

-------------
|   |   |   | 
-------------
|   |   |   | 
-------------
|   |   |   | 
-------------
プレイヤー X、行と列を入力してください: 
0 0
-------------
| X |   |   | 
-------------
|   |   |   | 
-------------
|   |   |   | 
-------------
プレイヤー O、行と列を入力してください: 
1 1
-------------
| X |   |   | 
-------------
|   | O |   | 
-------------
|   |   |   | 
-------------
...
プレイヤー X の勝利です!

いきなりコードを見るのではなく練習問題形式で作成したい人は↓↓をクリック

【JAVA】確認問題5-☆3:マルバツゲーム(Tic-Tac-Toe)を作成しよう【JAVA】マルバツゲームのコードを書く練習問題。ゲームボードの初期化、マークの配置、勝利条件の判定、プレイヤー交代といった機能を通じて、基本的なプログラミングロジックを学べます。Scannerを使ったユーザー入力や、二次元配列の操作方法も実践でき、ゲームロジックの理解を深めることができる内容です。...

マルバツゲームのコードは↓↓をクリック

マルバツのコード
import java.util.Scanner;

public class TicTacToe {
    private final char[][] board = new char[ 3][ 3];
    private char currentPlayer = 'X';

    // コンストラクタ:ゲームボードを初期化
    public TicTacToe() {
        initializeBoard();
    }

    // ゲームボードを空白で初期化するメソッド
    private void initializeBoard() {
        for (int i = 0; i < 3; i++) {
            for (int j = 0; j < 3; j++) {
                board[i][j] = ' ';
            }
        }
    }

    // ゲームボードを表示するメソッド
    private void printBoard() {
        System.out.println("-------------");
        for (char[] row : board) {
            System.out.print("| ");
            for (char cell : row) {
                System.out.print(cell + " | ");
            }
            System.out.println();
            System.out.println("-------------");
        }
    }

    // マークを配置するメソッド
    private boolean placeMark(int row, int col) {
        if (isInBounds(row, col) && board[row][col] == ' ') {
            board[row][col] = currentPlayer;
            return true;
        }
        return false;
    }

    // 座標が有効か確認するヘルパーメソッド
    private boolean isInBounds(int row, int col) {
        return row >= 0 && row < 3 && col >= 0 && col < 3;
    }

    // 勝利条件をチェックするメソッド
    private boolean checkForWin() {
        return checkRows() || checkColumns() || checkDiagonals();
    }

    // 行をチェックするメソッド
    private boolean checkRows() {
        for (char[] row : board) {
            if (row[ 0] == currentPlayer && row[ 1] == currentPlayer && row[ 2] == currentPlayer) {
                return true;
            }
        }
        return false;
    }

    // 列をチェックするメソッド
    private boolean checkColumns() {
        for (int col = 0; col < 3; col++) {
            if (board[ 0][col] == currentPlayer && board[ 1][col] == currentPlayer && board[ 2][col] == currentPlayer) {
                return true;
            }
        }
        return false;
    }

    // 斜めをチェックするメソッド
    private boolean checkDiagonals() {
        return (board[ 0][ 0] == currentPlayer && board[ 1][ 1] == currentPlayer && board[ 2][ 2] == currentPlayer) ||
               (board[ 0][ 2] == currentPlayer && board[ 1][ 1] == currentPlayer && board[ 2][ 0] == currentPlayer);
    }

    // プレイヤーを切り替えるメソッド
    private void changePlayer() {
        currentPlayer = (currentPlayer == 'X') ? 'O' : 'X';
    }

    // ボードが満杯かチェックするメソッド
    private boolean isBoardFull() {
        for (char[] row : board) {
            for (char cell : row) {
                if (cell == ' ') {
                    return false;
                }
            }
        }
        return true;
    }

    // メインメソッド:ゲームの進行を制御
    public static void main(String[] args) {
        TicTacToe game = new TicTacToe();
        Scanner scanner = new Scanner(System.in);
        boolean gameWon = false;

        while (!gameWon) {
            game.printBoard();
            int row, col;
            do {
                System.out.println("プレイヤー " + game.currentPlayer + "、行と列を入力してください: ");
                row = scanner.nextInt();
                col = scanner.nextInt();
            } while (!game.placeMark(row, col));

            if (gameWon = game.checkForWin()) {
                game.printBoard();
                System.out.println("プレイヤー " + game.currentPlayer + " の勝利です!");
            } else if (game.isBoardFull()) {
                game.printBoard();
                System.out.println("引き分けです!");
                break;
            } else {
                game.changePlayer();
            }
        }
    }
}

マルバツのコードは以上です。楽しんでください^^
コードの解説はこちらを参照。

今後追加予定のゲーム一覧

以下のゲームのコードを順次追加予定です。

  • 高度なじゃんけんゲーム
  • ポーカーゲーム
  • ブラックジャック
  • 神経衰弱

JAVA記事トップへ戻る
トップページへ戻る