diff --git a/bowling.rb b/bowling.rb index 81e499b..59bc231 100755 --- a/bowling.rb +++ b/bowling.rb @@ -19,32 +19,37 @@ end point = 0 -frames.each_with_index do |frame, index| +frames[0..7].each_with_index do |frame, index| point += frame.sum - if frame == [10, 0] && frames[index + 1].first == 10 #ストライクかつ次もストライクの場合 - point += frames[index + 2].first + # ストライクかつ次もストライクの場合 + point += frames[index + 2].first if frame == [10, 0] && frames[index + 1].first == 10 + if frame == [10, 0] # ストライク1回のみの場合 + point += frames[index + 1].sum # 次のフレームの合計値が得点となる end - if frame == [10, 0] #ストライク1回のみの場合 - point += frames[index + 1].sum #次のフレームの合計値が得点となる - end - if frame.sum == 10 && frame != [10, 0] #スペアの場合 - point += frames[index + 1].first #次のフレームの一投目が得点となる + if frame.sum == 10 && frame != [10, 0] # スペアの場合 + point += frames[index + 1].first # 次のフレームの一投目が得点となる end puts "#{index + 1}フレーム目の得点: #{point}" end -if frames[10] - point -= frames[10].first +frames[8..11].each_with_index do |frame, index| # 例外処理のためにループを分割する + point += frame.sum + if frame == [10, 0] + point += frames[index + 9].sum + print frames[index + 8] + end + if frame.sum == 10 && frame != [10, 0] + point += frames[index + 9].first + end + puts "#{index + 9}フレーム目の得点: #{point}" end -if frames[11] - point -= frames[11].first -end +point -= frames[10].sum if frames[10] # 計算結果から余剰加点を除外 +point -= frames[11].first if frames[11] == [10, 0] # 計算結果から余剰加点を除外 print frames puts point - -#ストライクは次の「2投の合計値」が得点となる!!! -#つまりストライクを仮に1フレーム目で取り、2フレーム目もストライクだった場合、1フレーム目の得点には3フレーム目の初回分までが加算される!!!! -#10フレーム目の3投目だけはスペアの加算対象としてはならない! +# ストライクは次の「2投の合計値」が得点となる!!! +# つまりストライクを仮に1フレーム目で取り、2フレーム目もストライクだった場合、1フレーム目の得点には3フレーム目の初回分までが加算される!!!! +# 10フレーム目の3投目だけはスペアの加算対象としてはならない!