簡単なゲームの作成

数当てゲーム

数当てゲームのプログラムを作成します。この数当てゲームは、最初、プログラム内でランダムな数を生成します。プレイヤーは、その数を予測して入力します。

プログラムは、正解値と入力値を比較して、入力値が大きければ正解は入力値より小さいです。と表示し、入力値が小さければ正解は入力値より大きいです。と表示します。 正解値と入力値が同じにであれば正解です。と表示します。

正解になるまで、何度も繰り返します。

プログラムファイルの作成

プログラムのファイル名をnumber_guessing_game.rbとして、作成します。

VSCode Ruby Version

ランダムな数の生成

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
VSCode Ruby Version

何度か実行を繰り返してみてください。

プレーヤーの値入力

プレーヤーが値を入力するプログラムを書きます。Rubyの基礎 - メソッドのプログラムを参考にします。入力した整数は、変数nyuryokuに代入します。

puts seikaiは、コメントにして(コメントアウトと言います)実行されないようにします。

seikai = rand(1..100)
# puts seikai

print "正解と思う整数を入力してください:"
nyuryoku = gets.chomp.to_i
puts nyuryoku

実行すると、

正解と思う整数を入力してください:55
55

入力した整数が正しく表示されました。

VSCode Ruby Version

条件分岐

正解値と入力値を比較して、結果を表示するプログラムを書きます。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
正解は入力値より大きいです。
VSCode Ruby Version

繰り返し

上記のプログラムでは、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
正解です。

正解するとプログラムが終了します。

VSCode Ruby Version

仕上げ

プログラムは、想定通りに動作しました。最後に仕上げをします。

  • 確認用の正解値表示をコメントアウトする。
  • プログラム実行直後、ゲーム名と遊び方を表示する。
  • ファイルの先頭に、プログラム名と説明を追加する。
# プログラム名:数当てゲーム(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

実行してみて、問題なく動作すればプログラムの完成です。

プログラムの改良

この数当てゲームを改良してみましょう。

  1. 何回目の入力で正解したか表示する。
  2. 正解した後、もう一度最初から始めるか、やめるか選択できるようにする。
  3. 正解値の上限100を変更(プレイヤーが指定)できるようにする。

更新日: