【Ruby】確認問題2-☆2:数当てゲームを作ろう

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

この記事の練習問題で使用する知識:
入力と出力の基本変数と定数文字列操作乱数生成比較演算子と論理演算子if文による分岐処理while文による繰り返し処理繰り返しの制御

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

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

確認問題:数当てゲームを作ろう

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

正解コードの解説

この数当てゲームではプレイヤーが1から100までのランダムな数を推測し、その数を当てるまで繰り返し入力を行います。

プログラム内で使われている文法とその動作について、以下で詳しく説明します。

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

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のゲームコード一覧はこちら

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

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

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

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






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