【Kotlin】確認問題2-☆1:ハイアンドロー ゲームを作ろう

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

この記事の練習問題で使用する知識:
メイン関数入力と出力の基本コメントの書き方変数と定数Null安全性文字列の連結と埋め込み文字列操作import文比較演算子と論理演算子when文による分岐処理

Kotlinのゲームコード一覧はこちら

<<前のページ Kotlin記事一覧 次のページ>>

確認問題:ハイアンドローゲームを作ろう

「ハイアンドローゲーム」を作成しましょう。

このゲームではプレイヤーとコンピュータにランダムでカード(1〜13の数字)が配られます。

プレイヤーはコンピュータのカードが自分のカードより「大きい」か「小さい」かを予測し、結果を確認します。

この問題の要件

以下の要件に従ってコードを完成させてください。

  1. ゲーム開始時に「=== ハイアンドローゲームへようこそ! ===」と表示すること。
  2. プレイヤーとコンピュータにランダムなカード(1〜13の整数)を配ること。
  3. 配られたカードを以下の形式で表示すること「【プレイヤー】<プレイヤーのカード> VS ??【コンピュータ】」
  4. プレイヤーが、コンピュータのカードが「大きい」か「小さい」かを入力できるようにすること。
  5. コンピュータのカードを以下の形式で表示すること「【プレイヤー】<プレイヤーのカード> VS <コンピュータのカード>【コンピュータ】」
  6. 勝敗を次のルールで判定し、結果を表示すること:
    • プレイヤーの予測が正しい場合:「正解!あなたの勝ち!」
    • プレイヤーの予測が間違っている場合:「残念!あなたの負け!」
    • プレイヤーとコンピュータのカードが同じ場合:「引き分け!」

ただし、以下のような実行結果となるコードを書くこと。

*****↓↓正解コードの実行結果の例↓↓*****

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

この問題を解くヒント

1からコードを組み立てることが難しい場合は、以下のヒントを開いて参考にしましょう。

ヒント1【コードの構成を見る】

正解のコードは上から順に以下のような構成となっています。
(※下記の□はコード内のインデントを表しています)

1:main関数の定義
  □ println関数を使用してゲームの開始メッセージを出力
  □ playerCardに1〜13の範囲でランダムな整数を代入
  □ computerCardに1〜13の範囲でランダムな整数を代入
  □ プレイヤーのカードを表示し、コンピュータのカードは隠して出力
  □ println関数でプレイヤーに対しカードの大小を予想する選択肢を提示
  □ println関数を使用して選択肢を出力
  □ print関数を使用して選択肢入力のプロンプトを表示
  □ ユーザーの入力をreadLineで取得し、toIntOrNullで整数型に変換してchoiceに代入
  □ プレイヤーとコンピュータのカードを表示
  □ when式でプレイヤーの予想結果を判定
  □ □ playerCardがcomputerCardと等しい場合に「引き分け」を出力
  □ □ playerCardがcomputerCardより小さく、choiceが2の場合、またはplayerCardがcomputerCardより大きく、choiceが1の場合に「正解!あなたの勝ち!」を出力
  □ □ 上記以外の場合に「残念!あなたの負け!」を出力

ヒント2【穴埋め問題にする】

以下のコードをコピーし、コメントに従ってコードを完成させて下さい。

import kotlin.random.Random

fun main() {
    println("=== ハイアンドローゲームへようこそ! ===")

    // プレイヤーとコンピュータにランダムなカード(1〜13の数字)を配る
    /*【穴埋め問題1】
    ここでプレイヤーとコンピュータにランダムな数字(1〜13)を配り、変数playerCardとcomputerCardに代入するコードを書いてください。
    */

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

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

    // ユーザーの入力を取得
    print("⇒ ")
    /*【穴埋め問題2】
    ここでユーザーから入力を受け取り、その値を整数に変換してchoice変数に代入するコードを書いてください。
    */

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

    // 勝負の結果を判定
    /*【穴埋め問題3】
    ここでwhen式を使用して、勝敗を判定し、その結果に応じたメッセージを出力するコードを書いてください。
    */
}

この問題の穴埋めコードは以上です。

このヒントを見てもまだ回答を導き出すのが難しいと感じる場合は、先に正解のコードと解説を見て内容を理解するようにしましょう。

ハイアンドローゲームの正解コードと解説

この問題の一つの正解例とそのコードの解説を以下に示します。

正解コードの例

例えば以下のようなプログラムが考えられます。

import kotlin.random.Random

fun main() {
    println("=== ハイアンドローゲームへようこそ! ===")

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

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

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

    // ユーザーの入力を取得
    print("⇒ ")
    val choice = readLine()?.toIntOrNull()

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

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

正解コードの解説

今回のコードは「ハイアンドローゲーム」を実現するためのKotlinプログラムです。

このコードの各部分を詳しく解説します。

ランダムな数値の生成

import kotlin.random.Random

import kotlin.random.Random: Kotlinのランダムライブラリをインポートします。これを使ってランダムなカードを生成します。

メイン関数の開始

fun main() {
    println("=== ハイアンドローゲームへようこそ! ===")
  • fun main(): Kotlinプログラムのエントリーポイントです。
  • println: 文字列を画面に表示します。この場合、ゲームの開始メッセージを出力します。

ランダムなカードの配布

val playerCard = Random.nextInt(1, 14)
val computerCard = Random.nextInt(1, 14)
  • Random.nextInt(1, 14): 1から13の間でランダムな整数を生成します。プレイヤーとコンピュータそれぞれにカードを割り当てます。
  • val: 変数を宣言します。valは再代入不可の変数です。

プレイヤーのカード表示

println("【プレイヤー】$playerCard VS ??【コンピュータ】")

$playerCard: Kotlinの文字列テンプレート機能を使用し、変数playerCardの値を文字列内に埋め込みます。

プレイヤーの入力

println("あなたのカードはコンピュータのカードより大きい?小さい?")
println("1: 大きい、2: 小さい")
print("⇒ ")
val choice = readLine()?.toIntOrNull()
  • readLine(): ユーザーからの入力を文字列として受け取ります。
  • toIntOrNull(): 入力された文字列を整数に変換します。無効な入力(例: 文字列)はnullになります。
  • val choice: プレイヤーの選択肢(1または2)を保持します。

コンピュータのカード表示

println("【プレイヤー】$playerCard VS $computerCard【コンピュータ】")

コンピュータのカードが公開され、最終的な比較結果を出力します。

勝敗の判定

when {
    playerCard == computerCard -> {
        println("引き分け!")
    }
    (playerCard < computerCard && choice == 2) || (playerCard > computerCard && choice == 1) -> {
        println("正解!あなたの勝ち!")
    }
    else -> {
        println("残念!あなたの負け!")
    }
}
  • playerCard == computerCard: カードが同じ場合に「引き分け!」と表示します。
  • (playerCard < computerCard && choice == 2): コンピュータのカードが大きく、プレイヤーが「小さい」と予測した場合、「正解!」と表示します。
  • else: その他の場合に「残念!」と表示します。

まとめ

このコードではランダムなカード生成、条件分岐、ユーザー入力など、Kotlinプログラミングの基本を学べます。

この基礎をマスターすれば、さらに高度なプログラムを作れるようになります。

ぜひ、コードを実行しながら理解を深めてみてください!

Kotlinのゲームコード一覧はこちら

<<前のページ Kotlin記事一覧 次のページ>>

この記事への質問・コメント

この記事を作成するにあたりAIを活用しています。

問題ないことは確認していますが、もし間違いや表現の違和感などありましたら、ご指摘頂けると大変助かります。






    Kotlinテキスト&問題集へ戻る
    トップページへ戻る