紹介元
http://codingdojo.org/cgi-bin/wiki.pl?KataBowling
この概要は www.xprogramming.com/xpmag/acsBowling.htm が元になっています。
正しく与えられたボーリングの投球のシーケンスから、合計スコアを出すプログラムを書きます。
ただし、以下のことはしません。
- 投球ごとの倒したピン数が正しいかはチェックしない。
- 投球数が正しいかはチェックしない。
- フレームごとのスコアは出さなくてよい。
アプリケーションによって、この実装は正しいストーリーではないかもしれんが、型を維持するために、とりあえずやってみましょう。
上の仕様で上手く書けるようになって、もっとリアリティがほしくなる頃には、コーディングがうまくなってると思います。
簡単にボーリングのルールをおさらいするよ
- 1ゲームは10フレーム
- それぞれのフレームで、ボウラーは2回ピンを倒すチャンスがある
- フレームで全ピンを倒せなかったら、スコア=ピンを倒した数だよ
- 2回投げて10本倒れたら、スペアですよ。このフレームの得点は、10点 + 次の投球で倒したピン数ですよ
- フレーム最初の投球で全部倒したら、ストライクですよ。ストライクを出したら、順番(フレーム)は終わりで、点数は10点 + 次の投球のピン数 + 次の次の投球のピン数ですよ。
- 最後のフレームでスペアかストライクを出したら、ボーナスであと1回か2回投げることができます。これらのボーナスは、最後のフレーム自身に入ります。ボーナスですべてピンが倒れても、繰り返してまた投げることはありません。ボーナス投球は、最後のフレームのボーナス計算だけのためのものです。
- ゲームのスコアは全部のフレームの合計ですよ
ルールについてのさらなる情報はこちら
http://www.topendsports.com/sport/tenpin/scoring.htm
@misogi
このゲームのおもしろいところは、スペアやストライクが出たときの点数の予想です。
ストライクやスペアを出したときには、ボーナスが何点か計算するのに、1投球か2投球待つ必要がある。
("X" がストライク、"/" がスペア、"-" がミスだったとして)
- "XXXXXXXXXXXX" (12投: 12ストライク) = 10+10+10 + 10+10+10 + 10+10+10 + 10+10+10 + 10+10+10 + 10+10+10 + 10+10+10 + 10+10+10 + 10+10+10 + 10+10+10 = 300
- "9-9-9-9-9-9-9-9-9-9-" (20投: 9本からのミスが10回) = 9 + 9 + 9 + 9 + 9 + 9 + 9 + 9 + 9 + 9 = 90
- "5/5/5/5/5/5/5/5/5/5/5" (21投: 5本からのスペアが10回, 最後のフレームで 5) = 10+5 + 10+5 + 10+5 + 10+5 + 10+5 + 10+5 + 10+5 + 10+5 + 10+5 + 10+5 = 150
できたコードよりそれに至るあなたの決定の方が大事です。
コードを作り直すのではなく、じっと見つめてみよう。
たくさんの人が問題を考えて、どうやって挑んだか、どのデザインが取り除かれたか、どんな順番でテストケースが実装されたかを気にしよう。