Kotlinの初心者向け問題1-☆1:じゃんけんゲームを作ろう
この問題を解くために必要な知識:
コメントの書き方、変数と定数、基本データ型、算術演算と論理演算、入力と出力、import文、配列、分岐処理(if、if~else、when)、繰り返し処理(for、while、do~while)、Null安全、スマートキャスト
<<前の問題 | 問題集Top |
次の問題>> |
Kotlin練習問題1-☆1_じゃんけんゲームを作ろう
簡単な「じゃんけん」ゲームを作成しましょう。
ユーザーが「グー」「チョキ」「パー」のいずれかを入力し、コンピューターがランダムに出した手と比較して勝敗を決定します。
この問題の要件
以下の要件に従ってプログラムを作成してください。
- プレイヤーに「グー、チョキ、パー」のいずれかを選ばせるようにします。
- コンピュータはランダムに「グー、チョキ、パー」のいずれかを選びます。
- プレイヤーとコンピュータの選択に基づいて勝敗を決定し、その結果を出力します。
- じゃんけんの結果は「勝ち」「負け」「引き分け」のいずれかとし、ゲームの結果を表示します。
- ゲームは一度行うだけで終了します。
ただし、以下のような実行結果となること。
----- ↓出力される結果の例↓ -----
じゃんけんをしましょう! 0: グー, 1: チョキ, 2: パー あなたの選択: 0 あなた: グー vs コンピュータ: チョキ 結果: あなたの勝ち!
----- ↑出力される結果の例↑ -----
この問題を解くヒント
1からコードを組み立てることが難しい場合は、以下のヒントを開いて参考にしましょう。
正解のコードは上から順に以下のような構成となっています。
1.import文
1-1. kotlin.random.Randomクラスのインポート
2.main関数の定義
2-1. 「じゃんけんをしましょう!」というメッセージを出力
2-2. プレイヤーに「グー、チョキ、パー」から選ばせる選択肢を出力
2-3. プレイヤーの選択をreadLine()で取得し、toIntOrNull()で整数に変換
2-4. 入力が無効な場合のエラーメッセージを出力し、処理を終了
2-5. コンピュータの手をランダムに選択し、computerChoiceに格納
2-6. プレイヤーとコンピュータの選択を表示
2-7. when構文を使って勝敗を判定し、結果をresultに格納
2-8. 勝敗の結果を出力
以下のコードをコピーし、コメントに従ってコードを完成させて下さい。
import kotlin.random.Random fun main() { println("じゃんけんをしましょう!") println("0: グー, 1: チョキ, 2: パー") print("あなたの選択: ") /*【穴埋め問題1】 ここでプレイヤーの選択肢を入力し、整数に変換して`playerChoice`変数に格納してください。 */ if (/*【穴埋め問題2】 ここでplayerChoiceが有効かどうかを判定する条件式を書いてください */) { println("無効な入力です。ゲームを終了します。") } else { val computerChoice = /*【穴埋め問題3】 ここでコンピュータの手をランダムに決定し、computerChoice変数に格納するコードを書いてください */ val choices = arrayOf("グー", "チョキ", "パー") println("あなた: ${choices[playerChoice]} vs コンピュータ: ${choices[computerChoice]}") val result = /*【穴埋め問題4】 ここで勝敗を判定し、結果を`result`変数に格納するコードを書いてください */ println("結果: $result") } }
このヒントを見てもまだ回答を導き出すのが難しいと感じる場合は、先に正解のコードと解説を見て内容を理解するようにしましょう。
解答例
この問題の一つの正解例とそのコードの解説を以下に示します。
正解コードの例
例えば以下のようなプログラムが考えられます。
********************
import kotlin.random.Random fun main() { // プレイヤーに選択肢を表示し、選んでもらう println("じゃんけんをしましょう!") println("0: グー, 1: チョキ, 2: パー") print("あなたの選択: ") val playerChoice = readLine()?.toIntOrNull() // プレイヤーが有効な選択肢を入力しなかった場合の処理 if (playerChoice == null || playerChoice !in 0..2) { println("無効な入力です。ゲームを終了します。") } else { // コンピュータの選択をランダムに決定する val computerChoice = Random.nextInt(3) // 選択肢を文字列に変換する val choices = arrayOf("グー", "チョキ", "パー") println("あなた: ${choices[playerChoice]} vs コンピュータ: ${choices[computerChoice]}") // 勝敗の判定 val result = when { playerChoice == computerChoice -> "引き分け" (playerChoice == 0 && computerChoice == 1) || (playerChoice == 1 && computerChoice == 2) || (playerChoice == 2 && computerChoice == 0) -> "あなたの勝ち!" else -> "あなたの負け..." } // 結果を表示する println("結果: $result") } }
********************
コードの解説
「じゃんけんゲーム」コードの各部分を初心者向けに説明します。
ライブラリのインポート
import kotlin.random.Random
この行では、kotlin.random.Random
クラスをインポートしています。Random
クラスは、ランダムな数値を生成するために使用されます。
ここでは、コンピュータのじゃんけんの手をランダムに決定するために利用します。
メイン関数の開始
fun main() {
main
関数は、プログラムのエントリーポイントです。Kotlinでは、プログラムの実行がこの関数から始まります。
メッセージの表示
println("じゃんけんをしましょう!") println("0: グー, 1: チョキ, 2: パー")
println
関数を使って、ゲーム開始のメッセージと、プレイヤーに選択肢(「グー」「チョキ」「パー」)を表示します。
プレイヤーの入力を取得
print
関数でプレイヤーに選択肢を入力するよう促します。
readLine()
は、ユーザーの入力を読み取り、toIntOrNull()
を使ってその入力を整数に変換します。
もし、入力が整数に変換できなかった場合(例:文字が入力された場合)は、null
が返されます。
入力の検証
if (playerChoice == null || playerChoice !in 0..2) { println("無効な入力です。ゲームを終了します。") } else {
ここでは、プレイヤーの入力が有効なものかどうかを確認しています。
入力がnull
であるか、0
から2
の範囲に含まれていない場合、エラーメッセージを表示してゲームを終了します。
コンピュータの手をランダムに決定
val computerChoice = Random.nextInt(3)
Random.nextInt(3)
を使って、0
から2
までのランダムな整数を生成し、コンピュータの手としてcomputerChoice
に格納します。
プレイヤーとコンピュータの選択を表示
val choices = arrayOf("グー", "チョキ", "パー") println("あなた: ${choices[playerChoice]} vs コンピュータ: ${choices[computerChoice]}")
ここでは、choices
という配列を使って、0
から2
までの数値を「グー」「チョキ」「パー」に対応させています。プレイヤーとコンピュータが選んだ手を表示します。
勝敗の判定
val result = when { playerChoice == computerChoice -> "引き分け" (playerChoice == 0 && computerChoice == 1) || (playerChoice == 1 && computerChoice == 2) || (playerChoice == 2 && computerChoice == 0) -> "あなたの勝ち!" else -> "あなたの負け..." }
when
構文を使って、プレイヤーの選択とコンピュータの選択に基づいて勝敗を判定します。
引き分けの場合は「引き分け」、プレイヤーが勝った場合は「あなたの勝ち!」、それ以外は「あなたの負け…」と表示されます。
結果の表示
println("結果: $result")
最後に、println
関数を使って、じゃんけんの結果を表示します。
<<前の問題 |
問題集Top |
次の問題>> |
この問題への質問・コメント
この問題を作成するにあたりAIを活用しています。
問題ないことは確認していますが、もし間違いや表現の違和感などありましたら、ご指摘頂けると大変助かります。