簡単なゲームの作成
数当てゲーム
数当てゲームのプログラムを作成します。この数当てゲームは、最初、プログラム内でランダムな数を生成します。プレイヤーは、その数を予測して入力します。
プログラムは、正解値と入力値を比較して、入力値が大きければ正解は入力値より小さいです。と表示し、入力値が小さければ正解は入力値より大きいです。と表示します。 正解値と入力値が同じにであれば正解です。と表示します。
正解になるまで、何度も繰り返します。
プログラムファイルの作成
プログラムのファイル名をnumber_guessing_game.rbとして、作成します。

ランダムな数の生成
Rubyには、ランダムな整数を生成するrandメソッドが用意されています。
rand(0) # 0.0から1.0未満の間の実数をランダムに生成
rand(10) # 0から9の間の整数をランダムに生成
rand(1..10) #1から10の間の整数をランダムに生成
より詳しく知りたい人は、Rubyリファレンスマニュアルのrandを参照してください。
ここでは、1から100の間の整数を生成することにします。生成した整数は、変数seikaiに代入します。
seikai = rand(1..100)
想定通りに動作するか、生成した値を表示させて確認します。プログラムを、以下のように書いてください。
seikai = rand(1..100)
puts seikai
プログラムを実行します。
ruby number_guessing_game.rb
1から100の間の整数が表示されます。
86

何度か実行を繰り返してみてください。
プレーヤーの値入力
プレーヤーが値を入力するプログラムを書きます。Rubyの基礎 - メソッドのプログラムを参考にします。入力した整数は、変数nyuryokuに代入します。
puts seikaiは、コメントにして(コメントアウトと言います)実行されないようにします。
seikai = rand(1..100)
# puts seikai
print "正解と思う整数を入力してください:"
nyuryoku = gets.chomp.to_i
puts nyuryoku
実行すると、
正解と思う整数を入力してください:55
55
入力した整数が正しく表示されました。

条件分岐
正解値と入力値を比較して、結果を表示するプログラムを書きます。Rubyの言語仕様1 - 条件分岐の説明を参考にします。
いろいろな書き方ができますので、自分なりに考えてみてください。
プログラムが正しいか判断するため、puts seikaiのコメントを外して、正解値を表示します。
puts nyuryokuは不要なので、削除します。
seikai = rand(1..100)
puts "正解:#{seikai}"
print "正解と思う整数を入力してください:"
nyuryoku = gets.chomp.to_i
if seikai < nyuryoku
puts "正解は入力値より小さいです。"
elsif seikai > nyuryoku
puts "正解は入力値より大きいです。"
else
puts "正解です。"
end
正しく表示されるか、複数回実行して確認してください。
正解:21
正解と思う整数を入力してください:21
正解です。
正解:35
正解と思う整数を入力してください:34
正解は入力値より大きいです。

繰り返し
上記のプログラムでは、1回入力したら終了してしまいます。繰り返して入力できるようにします。
ここでは、while文を使うこととします。
hazure変数に初期値としてtrueを代入しておき、while文の条件式に使います。
正解時、hazure変数をfalseに変更します。次の条件式の評価でfalseとなり、繰り返しが終了します。
プレイヤーの入力と結果表示のコードをwhile〜endで囲みます。
seikai = rand(1..100)
puts "正解:#{seikai}"
hazure = true
while hazure
print "正解と思う整数を入力してください:"
nyuryoku = gets.chomp.to_i
if seikai < nyuryoku
puts "正解は入力値より小さいです。"
elsif seikai > nyuryoku
puts "正解は入力値より大きいです。"
else
puts "正解です。"
hazure = false
end
end
while〜endの中に入るコードの行の先頭に半角スペース2個を入れて、字下げしています。これをインデントと呼びます。 適切にインデントを入れると、プログラムが読みやすくなります。
正解:88
正解と思う整数を入力してください:70
正解は入力値より大きいです。
正解と思う整数を入力してください:90
正解は入力値より小さいです。
正解と思う整数を入力してください:88
正解です。
正解するとプログラムが終了します。

仕上げ
プログラムは、想定通りに動作しました。最後に仕上げをします。
- 確認用の正解値表示をコメントアウトする。
- プログラム実行直後、ゲーム名と遊び方を表示する。
- ファイルの先頭に、プログラム名と説明を追加する。
# プログラム名:数当てゲーム(number-guessing-game.rb)
# 説明:ランダム生成した整数を予測して当てるゲーム
puts "数当てゲーム"
puts "1から100までの整数をランダム生成します。その数を当ててください。"
seikai = rand(1..100)
# puts "正解:#{seikai}"
hazure = true
while hazure
print "正解と思う整数を入力してください:"
nyuryoku = gets.chomp.to_i
if seikai < nyuryoku
puts "正解は入力値より小さいです。"
elsif seikai > nyuryoku
puts "正解は入力値より大きいです。"
else
puts "正解です。"
hazure = false
end
end
実行してみて、問題なく動作すればプログラムの完成です。
プログラムの改良
この数当てゲームを改良してみましょう。
- 何回目の入力で正解したか表示する。
- 正解した後、もう一度最初から始めるか、やめるか選択できるようにする。
- 正解値の上限100を変更(プレイヤーが指定)できるようにする。