この記事の練習問題で使用する知識:
入力と出力の基本、変数と定数、文字列操作、乱数生成、比較演算子と論理演算子、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:target_numberに1から100までのランダムな数を生成して代入
2:「数当てゲームへようこそ!」と出力
3:「1から100までの数を当ててください。」と出力
4:while文による無限ループを開始
□ 「あなたの推測: 」と表示し、ユーザーから数値を入力して整数に変換して変数guessに代入
□ if文にてguessがtarget_numberより小さいかを判定
□ □ 真の場合、「もっと大きい数です。」と出力
□ elsif文にてguessがtarget_numberより大きいかを判定
□ □ 真の場合、「もっと小さい数です。」と出力
□ else文
□ □ 「おめでとうございます!正解です。」と出力し、breakでループを終了
以下のコードをコピーし、コメントに従ってコードを完成させて下さい。
# 数当てゲーム # 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を活用しています。
問題ないことは確認していますが、もし間違いや表現の違和感などありましたら、ご指摘頂けると大変助かります。