2
1

More than 3 years have passed since last update.

Ruby 条件分岐,ループ処理を利用した簡易的なゲーム作成

Last updated at Posted at 2020-04-11

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以外の数字と文字は受け付けなくなりました。

2
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1