JAVAを学習中の初心者に向けて、簡単なゲームのコードを数多く紹介しています。
是非このページのゲームを実際に作ってみて、楽しくJAVAを習得してください。
【★★☆☆☆】ハイアンドローゲーム
簡単なハイアンドローゲームを作成しましょう。
このゲームは、プレイヤーとコンピュータにランダムなカード(1から13までの整数)が配られ、プレイヤーは自分のカードを見た後、コンピュータのカードが自分のカードよりも大きいか小さいかを予想します。
プレイヤーが予想した後、コンピュータのカードを表示し、予想が正しければプレイヤーの勝ち、間違っていれば負けとなります。
本サイトで紹介するコードを実行すると、↓↓のような出力となります。
=== ハイアンドローゲームへようこそ! === 【プレイヤー】8 VS ??【コンピュータ】 あなたのカードはコンピュータのカードより大きい?小さい? 1: 大きい、2: 小さい ⇒ 2 【プレイヤー】8 VS 10【コンピュータ】 正解!あなたの勝ち!
いきなりコードを見るのではなく練習問題形式で作成したい人は↓↓をクリック
ハイアンドローゲームのコードは↓↓をクリック
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 ゲームを終了します。
いきなりコードを見るのではなく練習問題形式で作成したい人は↓↓をクリック
数字当てゲームゲームのコードは↓↓をクリック
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 ゲームを終了します。
いきなりコードを見るのではなく練習問題形式で作成したい人は↓↓をクリック
じゃんけんゲームのコードは↓↓をクリック
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 あなたの負けです!
いきなりコードを見るのではなく練習問題形式で作成したい人は↓↓をクリック
石取りゲームゲームのコードは↓↓をクリック
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円でした。 丁半賭博ゲームを終わります。
いきなりコードを見るのではなく練習問題形式で作成したい人は↓↓をクリック
丁半賭博ゲームのコードは↓↓をクリック
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点 コンピュータの勝利です!
いきなりコードを見るのではなく練習問題形式で作成したい人は↓↓をクリック
ナインゲームのコードは↓↓をクリック
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 ドラゴンを捕まえられなかった。ゲームオーバー! 捕まえたモンスター: [スライム] ゲーム終了
いきなりコードを見るのではなく練習問題形式で作成したい人は↓↓をクリック
モンスター捕獲ゲームのコードは↓↓をクリック
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%上昇! ...
いきなりコードを見るのではなく練習問題形式で作成したい人は↓↓をクリック
モンスターとのバトルゲームのコードは↓↓をクリック
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 の勝利です!
いきなりコードを見るのではなく練習問題形式で作成したい人は↓↓をクリック
マルバツゲームのコードは↓↓をクリック
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(); } } } }
マルバツのコードは以上です。楽しんでください^^
コードの解説はこちらを参照。
今後追加予定のゲーム一覧
以下のゲームのコードを順次追加予定です。
- 高度なじゃんけんゲーム
- ポーカーゲーム
- ブラックジャック
- 神経衰弱