Rubyでじゃんけんゲームを作成していて、つまづいた箇所を記載していきます。
つまづいた箇所
puts "数字を入力してください。"
puts "0:グー, 1:チョキ, 2:パー"
input_hand = gets.to_i
while true
if input_hand == 0 #if 条件を書く(「input_hand」(取得した値)が「0, 1, 2」のいずれかの場合だった場合)
return input_hand #「input_hand」(取得した値)をそのまま返します。
elsif input_hand == 1
return input_hand
elsif input_hand == 2
return input_hand
else
puts "もう一度数字を入力してください。"
puts "0:グー, 1:チョキ, 2:パー"
input_hand = gets.to_i
end
end
#以降じゃんけんをさせる処理を記載
最初はこう記載し、処理を実行させてみました。すると、
0~2以外の数字を入力した場合は正しい動作(elseの処理)をしますが、文字列を入力した場合、0:グーを入力したとみなされ、処理されてしまいました。
この原因は、gets.to_iをinput_handに代入していたことでした。
to_iメソッドとは、整数に変換するメソッドです。
これを文字に使うと、0になるというメソッドの仕様があります。したがって、文字列を入力した際に0となり、処理されたということでした。
これを解決する一つの方法として、私はこのようにコードを書きました。
puts "数字を入力してください。"
puts "0:グー, 1:チョキ, 2:パー"
input_hand = gets.chomp
while true
unless input_hand == "0" || input_hand == "1" ||
input_hand == "2"
puts "0〜2の数字を入力してください。"
else
return input_hand.to_i
end
puts "もう一度数字を入力してください。"
puts "0:グー, 1:チョキ, 2:パー"
input_hand = gets.chomp
end
#以降じゃんけんをさせる処理を記載
gets.to_iの部分を、gets.chompに変更したことで、入力した数字も文字列情報として扱われます。それにより、入力したモノをそのままの形で条件分岐に入れることができます。
また、input_handが0,1,2の数字でなければ、"0〜2の数字を入力してください。"→"もう一度数字を入力してください。"という表示がされるような処理になっています。そして、0,1,2の数字を入力することで、入力したキーボードから返ってきた文字列を整数に変換して返してくれます。
こうすることで、純粋に0,1,2以外の数字と文字は受け付けなくなりました。