MENU

【Kotlin】レッスン2-☆2:数字当てゲームを作ろう|ランダムとループ処理の練習

tggaa478@yahoo.co.jp

一つ前のページではハイアンドローゲームを作成しました。

今回は 数字当てゲーム を作成していきましょう。

Lesson1:基礎文法編
Lesson2:制御構造編

 ・Lesson2-1:比較演算子と論理演算子を理解しよう
 ・Lesson2-2:if文による分岐処理を理解しよう
 ・Lesson2-3:when文による分岐処理を理解しよう
 ・Lesson2-4:スマートキャストを理解しよう
 ・Lesson2-5:for文による繰り返し処理を理解しよう
 ・Lesson2-6:while文による繰り返し処理を理解しよう
 ・Lesson2-7:繰り返しを制御しよう
 ・Lesson2-8:エラーメッセージを読めるようになろう
 ・Lesson2-9:例外処理を理解しよう
 ・確認問題2-☆1:ハイアンドローゲームを作ろう
 ・確認問題2-☆2:数字当てゲームを作ろう ◁今回はココ
 ・確認問題2-☆3:簡単なじゃんけんゲームを作ろう
Lesson3:関数編
Lesson4:コレクション編
Lesson5:オブジェクト指向編

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

<<前のページ

学習記事一覧

次のページ>>

確認問題:ランダム値とループを使った数字当てゲームの作成

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

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

ユーザーが正しい数字を当てるまでゲームは続き、正解した時点で試行回数が表示されます。

この問題の要件

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

  • 1から100までのランダムな整数を生成し、targetNumberという変数に格納してください。
  • ユーザーが入力した数字をuserGuessという変数に格納し、正しい数字を当てるまでループを使って繰り返し処理を行います。
  • ユーザーの入力が有効な整数かどうかを確認してください。無効な入力の場合、エラーメッセージを表示し、再入力を促します。
  • ユーザーの入力した数字が、targetNumberより小さいか大きいかを判定し、それに応じて「もっと大きい数字です」や「もっと小さい数字です」と表示します。
  • ユーザーが正しい数字を当てた場合、「正解です!」と表示し、試行回数を表示してゲームを終了します。
  • ゲーム終了時に「ゲームを終了します。」と表示します。

ただし、以下のような実行結果となること。

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

この問題を解くヒント

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

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

正解のコードは上から順に以下のような構成となっています。

1:Randomクラスをインポート
2:main関数の定義
  □ Randomクラスを使用して1〜100の範囲でランダムな整数を生成し、targetNumberに代入
  □ userGuess変数をInt?型で宣言し初期化
  □ attemptCount変数を初期化
  □ whileループを開始し、userGuessがtargetNumberと一致するまで繰り返す
  □ □ 「1から100までの数字を入力してください: 」と出力
  □ □ readLineで入力を取得し、input変数に代入
  □ □ inputをtoIntOrNullで変換し、userGuessに代入
  □ □ if文でuserGuessがnullでないかを判定
  □ □ □ attemptCountをインクリメント
  □ □ □ when式でuserGuessとtargetNumberを比較
  □ □ □ □ userGuessがtargetNumberより小さい場合、「もっと大きい数字です。」と出力
  □ □ □ □ userGuessがtargetNumberより大きい場合、「もっと小さい数字です。」と出力
  □ □ □ □ elseの場合、「正解です!試行回数: attemptCount」を出力
  □ □ elseの場合、「有効な数字を入力してください。」と出力
  □ whileループ終了後、「ゲームを終了します。」と出力

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

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

import kotlin.random.Random

fun main() {
    /*【穴埋め問題1】
    ここで1〜100のランダムな整数を生成し、変数targetNumberに代入するコードを書いてください。
    */

    /*【穴埋め問題2】
    ユーザーの入力を格納するInt?型の変数userGuessを初期化するコードを書いてください。
    */

    /*【穴埋め問題3】
    試行回数を記録するための変数attemptCountを初期化するコードを書いてください。
    */

    // ユーザーが正しい数字を当てるまで繰り返す
    /*【穴埋め問題4】
    whileループを開始し、userGuessがtargetNumberと一致するまで繰り返す条件式を書いてください。
    */

        print("1から100までの数字を入力してください: ")

        /*【穴埋め問題5】
        ユーザーの入力を取得し、Int?型に変換してuserGuessに代入するコードを書いてください。
        */

        /*【穴埋め問題6】
        if文でuserGuessがnullでない場合の条件を記述してください。
        */

            /*【穴埋め問題7】
            試行回数を記録する変数attemptCountをインクリメントするコードを書いてください。
            */

            /*【穴埋め問題8】
            when式を使用してuserGuessとtargetNumberを比較し、次の指示に従ったコードを書いてください。
            ・userGuessがtargetNumberより小さい場合、「もっと大きい数字です。」と出力
            ・userGuessがtargetNumberより大きい場合、「もっと小さい数字です。」と出力
            ・正解の場合、「正解です!試行回数: attemptCount」と出力
            */

        /*【穴埋め問題9】
        userGuessがnullの場合、「有効な数字を入力してください。」と出力するコードを書いてください。
        */

    println("ゲームを終了します。")
}

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

練習問題の解答と解説

この問題の正解コードとその解説は以下の通りです。

クリックして開いて確認してください。

Q
正解コード
import kotlin.random.Random

fun main() {
    val targetNumber = Random.nextInt(1, 101) // 1から100までのランダムな整数を生成

    var userGuess: Int? = 0 // ユーザーの入力を格納する変数を初期化
    var attemptCount = 0 // 試行回数を記録する変数を初期化

    // ユーザーが正しい数字を当てるまで繰り返す
    while (userGuess != targetNumber) {
        print("1から100までの数字を入力してください: ")
        val input = readLine()
        userGuess = input?.toIntOrNull()

        if (userGuess != null) {
            attemptCount++ // 試行回数をカウント

            // 入力された数字が正解かどうかを判定
            when {
                userGuess < targetNumber -> println("もっと大きい数字です。")
                userGuess > targetNumber -> println("もっと小さい数字です。")
                else -> println("正解です!試行回数: $attemptCount")
            }
        } else {
            println("有効な数字を入力してください。")
        }
    }

    println("ゲームを終了します。")
}
Q
正解コードの解説

コードをブロックごとに分割して解説します。

ランダム関数のインポートとエントリーポイント

import kotlin.random.Random

fun main() {
  • import kotlin.random.Random:Kotlin標準ライブラリのRandomクラスをインポートしています。このクラスを使うとランダムな数値を生成できます。
  • fun main():Kotlinプログラムのエントリーポイントであるメイン関数を定義しています。この関数内にゲーム全体の処理が記述されています。

ランダムな数値の生成

val targetNumber = Random.nextInt(1, 101) // 1から100までのランダムな整数を生成
  • 1以上100以下のランダムな整数を生成し、変数targetNumberに格納します。
  • プレイヤーが当てるべき「正解の数字」として使用されます。

変数の初期化

var userGuess: Int? = 0 // ユーザーの入力を格納する変数を初期化
var attemptCount = 0 // 試行回数を記録する変数を初期化
  1. userGuess:
    • プレイヤーが入力した数字を格納します。
    • Int?(nullable型)は、nullを許容する整数型です。最初にnullを使うことで不正な状態の防止や安全な入力チェックが可能になります。
  2. attemptCount:ゲームの試行回数を記録する変数です。プレイヤーが入力するたびにカウントを増加させます。

ゲームのループ処理

while (userGuess != targetNumber) {
  • 条件が満たされている間(userGuesstargetNumberと異なる間)ループが継続されます。
  • このループが終了するのは、プレイヤーが正解の数字を当てたときです。

ユーザー入力の取得

print("1から100までの数字を入力してください: ")
val input = readLine()
userGuess = input?.toIntOrNull()
  • print:プレイヤーに数字を入力するよう促すメッセージを表示します。
  • readLine():コンソールから入力を受け取ります。入力された値は文字列として取得されます。
  • toIntOrNull():文字列を整数に変換します。変換できない場合はnullを返します。これにより、不正な入力が処理されてもプログラムがエラーで終了しません。

入力チェック

if (userGuess != null) {
    attemptCount++ // 試行回数をカウント
  • if (userGuess != null):プレイヤーが正しい整数を入力した場合にのみ、この条件が満たされます。
  • attemptCount++:試行回数を1増加させます。

正解かどうかの判定

when {
    userGuess < targetNumber -> println("もっと大きい数字です。")
    userGuess > targetNumber -> println("もっと小さい数字です。")
    else -> println("正解です!試行回数: $attemptCount")
}
  • userGuess < targetNumber:入力が正解より小さい場合、「もっと大きい数字です」と表示します。
  • userGuess > targetNumber:入力が正解より大きい場合、「もっと小さい数字です」と表示します。
  • else:入力が正解の場合、「正解です!」と試行回数を表示します。

無効な入力への対応

} else {
    println("有効な数字を入力してください。")

プレイヤーが無効な値を入力した場合に実行されます。メッセージを表示して再入力を促します。

ゲーム終了メッセージ

println("ゲームを終了します。")

ゲームが終了したことを明示するメッセージを表示します。

まとめ

このKotlinコードではランダムな数値の生成、入力チェック、繰り返し処理、条件分岐を学ぶことができます。

ゲームを完成させたら、自分で改造して範囲を変更したり、ヒントの仕組みを追加するなど、さらなる練習に挑戦してみましょう!

もっと分かりやすいサイトにするために

この記事を読んで「ここが分かりにくかった」「ここが難しかった」等の意見を募集しています。

世界一わかりやすいKotlin学習サイトにするため、ぜひ 問い合わせフォーム からご意見下さい。

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

<<前のページ

学習記事一覧

次のページ>>

記事URLをコピーしました