【Ruby】レッスン2-☆2:数当てゲームを作ろう

一つ前のページではハイアンドロー ゲームを作成しました。
今回は 数当てゲーム を作っていきましょう。
Lesson1:基礎文法編
Lesson2:制御構造編
・Lesson2-1:比較演算子と論理演算子を理解しよう
・Lesson2-2:if文による分岐処理を理解しよう
・Lesson2-3:case文による分岐処理を理解しよう
・Lesson2-4:for文による繰り返し処理を理解しよう
・Lesson2-5:while文による繰り返し処理を理解しよう
・Lesson2-6:until文による繰り返し処理を理解しよう
・Lesson2-7:繰り返しを制御しよう
・確認問題2-☆1:ハイアンドロー ゲームを作ろう
・確認問題2-☆2:数当てゲームを作ろう ◁今回はココ
・確認問題2-☆3:簡単なじゃんけんゲームを作ろう
Lesson3:メソッド編
Lesson4:コレクション編
Lesson5:オブジェクト指向編
確認問題|数当てゲームでwhile文とrandメソッドを復習しよう

1から100までのランダムな数を生成し、プレイヤーがその数を当てる「数当てゲーム」を作成しましょう。
プレイヤーが数を推測し、正解するまで大きいか小さいかをヒントとして表示します。
プレイヤーが正しい数を当てたらゲームを終了させます。
以下の要件に従ってコードを完成させてください。
rand(1..100)
を使用して、1から100までのランダムな数を生成すること。puts
を使ってゲームの開始メッセージと説明を表示すること。while
文を使って、プレイヤーが正解するまで繰り返し処理を行うこと。- プレイヤーの入力を
gets.to_i
で取得し、その値がランダムな数より小さい場合は「もっと大きい数です」、大きい場合は「もっと小さい数です」と表示すること。 - プレイヤーが正しい数を当てた場合は「おめでとうございます!正解です。」と表示し、ループを終了すること。
ただし、以下のような実行結果となること。
数当てゲームへようこそ! 1から100までの数を当ててください。 あなたの推測: 50 もっと大きい数です。 あなたの推測: 75 もっと小さい数です。 あなたの推測: 60 もっと大きい数です。 あなたの推測: 65 もっと小さい数です。 あなたの推測: 63 もっと大きい数です。 あなたの推測: 64 おめでとうございます!正解です。
【ヒント】自力で解くのが難しい人へ
1からコードを組み立てることが難しい場合は、以下のヒントを開いて参考にしましょう。
- ヒント1【コードの構成を見る】
-
正解のコードは上から順に以下のような構成となっています。
(※下記の□はコード内のインデントを表しています)1:target_numberに1から100までのランダムな数を生成して代入
2:「数当てゲームへようこそ!」と出力
3:「1から100までの数を当ててください。」と出力
4:while文による無限ループを開始
□ 「あなたの推測: 」と表示し、ユーザーから数値を入力して整数に変換して変数guessに代入
□ if文にてguessがtarget_numberより小さいかを判定
□ □ 真の場合、「もっと大きい数です。」と出力
□ elsif文にてguessがtarget_numberより大きいかを判定
□ □ 真の場合、「もっと小さい数です。」と出力
□ else文
□ □ 「おめでとうございます!正解です。」と出力し、breakでループを終了
- ヒント2【穴埋め問題にする】
-
以下のコードをコピーし、コメントに従ってコードを完成させて下さい。
# 数当てゲーム # 1から100までのランダムな数を生成 =begin 【穴埋め問題1】 ここにrand(1..100)を使ってランダムな数を生成し、target_numberに代入するコードを書いてください。 =end # ゲーム開始のメッセージを表示 puts "数当てゲームへようこそ!" puts "1から100までの数を当ててください。" # プレイヤーが正しい数を当てるまで繰り返す while true # プレイヤーの推測を入力として受け取る print "あなたの推測: " guess = gets.to_i # プレイヤーの推測と目標の数を比較 =begin 【穴埋め問題2】 ここにif文でプレイヤーの推測がtarget_numberより小さい、大きい、または等しいかを判定し、適切なメッセージを表示するコードを書いてください。 =end end
このヒントを見てもまだ回答を導き出すのが難しいと感じる場合は、先に正解のコードと解説を見て内容を理解するようにしましょう。
この問題の解答例と解説
この問題の正解コードとその解説は以下の通りです。
クリックして開いて確認してください。
- 正解コード
-
# 数当てゲーム # 1から100までのランダムな数を生成 target_number = rand(1..100) # ゲーム開始のメッセージを表示 puts "数当てゲームへようこそ!" puts "1から100までの数を当ててください。" # プレイヤーが正しい数を当てるまで繰り返す while true # プレイヤーの推測を入力として受け取る print "あなたの推測: " guess = gets.to_i # プレイヤーの推測と目標の数を比較 if guess < target_number puts "もっと大きい数です。" elsif guess > target_number puts "もっと小さい数です。" else puts "おめでとうございます!正解です。" break end end
- 正解コードの解説
-
コードをブロックごとに分割して解説します。
乱数の生成とゲーム開始メッセージの表示
target_number = rand(1..100) puts "数当てゲームへようこそ!" puts "1から100までの数を当ててください。"
rand(1..100)
は1から100までのランダムな整数を生成するメソッドです。この乱数を
target_number
という変数に格納し、プレイヤーに推測させます。次に
puts
を使ってゲームの説明と開始メッセージを表示します。プレイヤーの入力を受け取る部分
while true print "あなたの推測: " guess = gets.to_i
while true
は無限ループを開始する構文です。このループはプレイヤーが正しい数を当てるまで繰り返されます。print
で「あなたの推測:」と表示し、gets.to_i
でプレイヤーの入力を受け取って数値に変換します。推測に基づいた条件分岐
if guess < target_number puts "もっと大きい数です。" elsif guess > target_number puts "もっと小さい数です。" else puts "おめでとうございます!正解です。" break end
プレイヤーが入力した
guess
が生成されたtarget_number
より小さいか大きいかをif
文で判断します。if guess < target_number
の条件が真であれば「もっと大きい数です。」と表示し、逆に大きければ「もっと小さい数です。」と表示します。もしプレイヤーが正しい数を当てた場合
else
ブロックに入り、「おめでとうございます!正解です。」と表示されます。その後
break
文によって無限ループを終了します。
まとめ
この数当てゲームでは繰り返し処理や条件分岐を使って、プレイヤーが正解にたどり着くまでゲームが続きます。
rand
による乱数生成とif-else
構文を使った条件分岐が、ゲームの基本的な仕組みとなっています。
Rubyの基本的な文法を理解しながら楽しめるシンプルなゲームです。