この記事の練習問題で使用する知識:
丸暗記構文、入力と出力の基本、コメントの書き方、変数と定数、算術演算子、文字列の操作、import文、比較演算子と論理演算子、if文による分岐処理
JAVAのゲームコード一覧はこちら
<<前のページ | 問題集Top |
次のページ>> |
確認問題2-☆1:ハイアンドロー ゲームを作ろう
簡単なハイアンドローゲームを作成しましょう。
このゲームは、プレイヤーとコンピュータにランダムなカード(1から13までの整数)が配られ、プレイヤーは自分のカードを見た後、コンピュータのカードが自分のカードよりも大きいか小さいかを予想します。
プレイヤーが予想した後、コンピュータのカードを表示し、予想が正しければプレイヤーの勝ち、間違っていれば負けとなります。
この問題の要件
以下の要件に従ってコードを完成させてください。
Random
クラスを使用して、プレイヤーとコンピュータにランダムなカード(1から13の範囲)をそれぞれ配ること。- プレイヤーのカードを画面に表示し、コンピュータのカードは伏せておくこと。
- プレイヤーに「コンピュータのカードが自分のカードより大きいか小さいか」を予想させ、予想を入力させること。
- プレイヤーの入力(1: 大きい、2: 小さい)に応じて、予想の結果を判定すること。
- コンピュータのカードを表示し、予想が当たったかどうかを結果として表示すること。
ただし、以下のような実行結果となるコードを書くこと。
*****↓↓正解コードの実行結果の例↓↓*****
=== ハイアンドローゲームへようこそ! === 【プレイヤー】8 VS ??【コンピュータ】 あなたのカードはコンピュータのカードより大きい?小さい? 1: 大きい、2: 小さい ⇒ 2 【プレイヤー】8 VS 10【コンピュータ】 正解!あなたの勝ち!
この問題を解くヒント
1からコードを組み立てることが難しい場合は、以下のヒントを開いて参考にしましょう。
正解のコードは上から順に以下のような構成となっています。
(※下記の□はコード内のインデントを表しています)
1:Randomクラスをインポート
2:Scannerクラスをインポート
3:HighAndLowGameクラスの定義
□ mainメソッドの定義
□ □ 「ハイアンドローゲームへようこそ!」と出力
□ □ Randomオブジェクトrandの初期化
□ □ 変数playerCardに1から13までのランダムな数値を代入
□ □ 変数computerCardに1から13までのランダムな数値を代入
□ □ プレイヤーのカードのみ表示し、コンピュータのカードは非表示
□ □ 「あなたのカードはコンピュータのカードより大きい?小さい?」と出力
□ □ 「1: 大きい、2: 小さい」と選択肢を出力
□ □ Scannerオブジェクトscannerを用いてユーザーの入力を取得し、変数choiceに代入
□ □ プレイヤーとコンピュータのカードを表示
□ □ if文でplayerCardとcomputerCardが同じかを判定
□ □ □ 真の場合、「引き分け!」と出力
□ □ else if文でplayerCardとcomputerCardの比較およびchoiceの一致を判定
□ □ □ □ 真の場合、「正解!あなたの勝ち!」と出力
□ □ □ 偽の場合、「残念!あなたの負け!」と出力
以下のコードをコピーし、コメントに従ってコードを完成させて下さい。
import java.util.Random; import java.util.Scanner; public class HighAndLowGame { public static void main(String[] args) { // ゲーム開始メッセージ /* 【穴埋め問題1】 ここに「=== ハイアンドローゲームへようこそ! ===」というメッセージを出力するコードを書いてください。 */ // プレイヤーとコンピュータにランダムなカード(1〜13の数字)を配る Random rand = new Random(); /* 【穴埋め問題2】 ここでランダムなカードを生成し、それぞれ playerCard と computerCard に代入するコードを書いてください。 */ // プレイヤーに配られたカードを表示し、コンピュータのカードはまだ表示しない /* 【穴埋め問題3】 ここにプレイヤーのカードを表示し、コンピュータのカードを「??」と表示するコードを書いてください。 */ // プレイヤーにコンピュータのカードが大きいか小さいかを予想させる /* 【穴埋め問題4】 ここで「あなたのカードはコンピュータのカードより大きい?小さい?」と「1: 大きい、2: 小さい」という選択肢を表示するコードを書いてください。 */ // ユーザーの入力を取得 Scanner scanner = new Scanner(System.in); /* 【穴埋め問題5】 ここでユーザーの入力を受け取り、変数 choice に代入するコードを書いてください。 */ // コンピュータのカードを表示 /* 【穴埋め問題6】 ここにプレイヤーのカードとコンピュータのカードを並べて表示するコードを書いてください。 */ // 勝負の結果を判定 /* 【穴埋め問題7】 ここでプレイヤーとコンピュータのカードが同じ場合の処理を追加し、「引き分け!」というメッセージを表示してください。 */ /* 【穴埋め問題8】 プレイヤーの選択(choice)とカードの大小関係を判定し、勝敗に応じて「正解!あなたの勝ち!」または「残念!あなたの負け!」と表示するコードを書いてください。 */ } }
この問題の穴埋めコードは以上です。
このヒントを見てもまだ回答を導き出すのが難しいと感じる場合は、先に正解のコードと解説を見て内容を理解するようにしましょう。
解答例と解説
この問題の一つの正解例とそのコードの解説を以下に示します。
正解コードの例
例えば以下のようなプログラムが考えられます。
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("残念!あなたの負け!"); } } }
正解コードの解説
この解説ではJavaコード「HighAndLowGame」の各ブロックについて詳しく説明します。
このコードは、ユーザーがカードの大小を予想して勝敗を競う「ハイアンドローゲーム」を実現するものです。
ライブラリのインポート
import java.util.Random; import java.util.Scanner;
ここではJavaの標準ライブラリからRandom
クラスとScanner
クラスをインポートしています。
Random
クラスはランダムな数値を生成するために、Scanner
クラスはユーザーの入力を受け取るために使用します。
クラス定義とmainメソッド
public class HighAndLowGame { public static void main(String[] args) {
HighAndLowGame
というクラスを定義し、プログラムのエントリーポイントであるmain
メソッドを用意しています。
main
メソッド内のコードが実行されます。
ゲーム開始メッセージの表示
System.out.println("=== ハイアンドローゲームへようこそ! ===");
ゲームの開始を知らせるメッセージを表示しています。
ランダムなカードの生成
Random rand = new Random(); int playerCard = rand.nextInt(13) + 1; int computerCard = rand.nextInt(13) + 1;
Random
クラスのインスタンスrand
を使用して、1から13までのランダムな整数を生成し、playerCard
とcomputerCard
にそれぞれ割り当てています。
この値がプレイヤーとコンピュータのカードとして使用されます。
カードの表示と予想の入力を促す
System.out.println("【プレイヤー】" + playerCard + " VS ??【コンピュータ】"); System.out.println("あなたのカードはコンピュータのカードより大きい?小さい?"); System.out.println("1: 大きい、2: 小さい");
プレイヤーに配られたカードの数値を表示し、コンピュータのカードは隠した状態で「??」として表示します。
プレイヤーには「大きい」または「小さい」どちらかを選んで予想してもらいます。
ユーザーの入力を取得
Scanner scanner = new Scanner(System.in); int choice = scanner.nextInt();
Scanner
オブジェクトscanner
を使用して、プレイヤーが入力した予想(1または2)をchoice
変数に格納します。
choice
の値によって、プレイヤーがコンピュータのカードが「大きい」か「小さい」かを予想したことが記録されます。
コンピュータのカードの公開
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("残念!あなたの負け!"); }
if
文でプレイヤーとコンピュータのカードを比較し、勝敗を判定します。
- プレイヤーとコンピュータのカードが同じ場合は「引き分け!」と表示します。
- プレイヤーの予想が正しい場合(プレイヤーが「大きい」と予想し、実際にプレイヤーのカードが大きい場合、または「小さい」と予想し、実際に小さい場合)は「正解!あなたの勝ち!」と表示します。
- 予想が外れた場合は「残念!あなたの負け!」と表示します。
まとめ
この「ハイアンドローゲーム」のコードでは、JavaのRandom
とScanner
クラスを使ってユーザーとコンピュータがカードの大小を競うゲームを実現しました。
条件分岐やユーザー入力の処理といった、Javaプログラミングの基本的な要素が使われています。
初めての方は各文法を理解しながら、プログラムの流れを追ってみてください。
また今回紹介したプログラムでは、ユーザーが1か2以外の数値を入力した際、強制的に負けるようになっています。
是非コードを改変し、1か2以外の数値が入力された際には再度入力を促すようなプログラムの作成に挑戦してみて下さい。
JAVAのゲームコード一覧はこちら
<<前のページ |
問題集Top |
次のページ>> |
この記事への質問・コメント
この記事を作成するにあたりAIを活用しています。
問題ないことは確認していますが、もし間違いや表現の違和感などありましたら、ご指摘頂けると大変助かります。