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

50110130

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

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

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:オブジェクト指向編

<<前のページ

Rubyの記事一覧

次のページ>>

確認問題|数当てゲームでwhile文とrandメソッドを復習しよう

1から100までのランダムな数を生成し、プレイヤーがその数を当てる「数当てゲーム」を作成しましょう。

プレイヤーが数を推測し、正解するまで大きいか小さいかをヒントとして表示します。

プレイヤーが正しい数を当てたらゲームを終了させます。

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

  • rand(1..100)を使用して、1から100までのランダムな数を生成すること。
  • putsを使ってゲームの開始メッセージと説明を表示すること。
  • while文を使って、プレイヤーが正解するまで繰り返し処理を行うこと。
  • プレイヤーの入力をgets.to_iで取得し、その値がランダムな数より小さい場合は「もっと大きい数です」、大きい場合は「もっと小さい数です」と表示すること。
  • プレイヤーが正しい数を当てた場合は「おめでとうございます!正解です。」と表示し、ループを終了すること。

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

数当てゲームへようこそ!
1から100までの数を当ててください。
あなたの推測: 50
もっと大きい数です。
あなたの推測: 75
もっと小さい数です。
あなたの推測: 60
もっと大きい数です。
あなたの推測: 65
もっと小さい数です。
あなたの推測: 63
もっと大きい数です。
あなたの推測: 64
おめでとうございます!正解です。

【ヒント】自力で解くのが難しい人へ

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

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

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

1:target_numberに1から100までのランダムな数を生成して代入
2:「数当てゲームへようこそ!」と出力
3:「1から100までの数を当ててください。」と出力
4:while文による無限ループを開始
□ 「あなたの推測: 」と表示し、ユーザーから数値を入力して整数に変換して変数guessに代入
□ if文にてguessがtarget_numberより小さいかを判定
□ □ 真の場合、「もっと大きい数です。」と出力
□ elsif文にてguessがtarget_numberより大きいかを判定
□ □ 真の場合、「もっと小さい数です。」と出力
□ else文
□ □ 「おめでとうございます!正解です。」と出力し、breakでループを終了

Q
ヒント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

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

この問題の解答例と解説

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

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

Q
正解コード
# 数当てゲーム

# 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
Q
正解コードの解説

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

乱数の生成とゲーム開始メッセージの表示

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の基本的な文法を理解しながら楽しめるシンプルなゲームです。

<<前のページ

Rubyの記事一覧

次のページ>>

記事URLをコピーしました