みんな大好きボブおじさんのClean Coderの6章にコーディング道場という項目があり、ここで、ボウリングゲームというTDDの実演ワークショップについて書かれています。これは本の中に記載されている以下のURLで今でも見ることができます。
http://butunclebob.com/ArticleS.UncleBob.TheBowlingGameKata
これは、ボウリングのスコア計算を題材にしたTDDの手習いです。しかし、これには今となっては問題があります。近年、ボウリングのスコア計算には、新しい計算方式も用いられ始めているからです。これは「カレントフレームスコアリング」呼ばれるものです。
このワークショップは2001年からなので仕方がありません。やはり世界というものは思わぬ方向に変化しますし、ソフトウェアはその世界の変化に追随していく必要があるということの好例です。
上のワークショップ資料では Game
という具象クラスに roll(pins: int)
, score(): int
という具象メソッドを定義する形で進行していきますが、スコア計算方法が複数あるとすると、Gameを具象クラスのままにしてストラテジーを差し込めるようにするのか、Gameをインターフェースにするかなど、設計は色々ありそうです。
最近のボウリング場のオートスコアラーは、カレントフレームスコアに切り替え選択できるものもあるので、実際にそのようなプログラムがされているでしょう。また、最初から将来スコア計算方法が増えることを見越してそこまで抽象化しておくべきだったかというと、それは早すぎる最適化で、否でしょう。また、ナインピンボウリングを考慮すべきではないか話も出てきそうです。どこまで網羅して考えるべきかというのはプログラム時に大事な観点ですが、この場合、考慮が必要なケースは少ないでしょう。ナインピンボウリングファンの方がいたらすみません。とは言えヨーロッパではナインピンボウリングが主流の地域は結構あるようです。
さて、これからボウリングの2種類のスコア計算について解説していきますが、Wikipediaの10ピンボウリングの項目に記載されている通り、それぞれ、従来のスコア計算を「伝統的なスコア計算 (Traditional scoring)」、新興の計算方法を「カレントフレームスコアリング (Current frame scoring)」として解説します。
伝統的なスコア計算 (Traditional scoring)
御存知の通り、プログラミングの手習いになるくらいには、伝統的なボウリングのスコア計算はそこそこ複雑なことで知られています。具体的には以下の通り。
- 1フレームで10本のピンに対して最大2回投球をして全てのピンを倒すことを目指す
- 1投で10本倒したら「ストライク」
- 2投で10本倒したら「スペア」
- 10本倒せなかったら「オープンフレーム」
- オープンフレームの場合、そのフレームのスコアは倒ピン数となる
- ストライクやスペアの場合は倒した10点に加えて加算がつき、そのフレームのスコアが決まる
- スペアの場合、その次の投球の倒ピン数が加算される
- ストライクの場合、続く2投の倒ピン数が加算される
- 1ゲームは10フレームで構成される
- 10フレームは特殊で最大3回投球できる
- これは存在しない11フレーム以降の加算分を10フレーム内で完結させるため
ちなみに、ストライクやスペアとなることを「マークが付く」と言います。オープンフレームのことを「ミス」や「オープン」と言ったりします。
伝統的なスコア計算の複雑なところ
伝統的なボウリングのスコア計算の特に分かりづらいポイントには以下があるように思います。
- そのフレームの投球が終わっても、マークが付いた場合は、そのフレームのスコアが確定しない
- スペアの場合次のフレームの1投目が終わった時点でスコアが確定する
- ダブル(連続ストライク)が出た場合、更に前のフレームのスコアの確定が持ち越しとなる
- ストライクが続いた場合、更に次のフレームの1投目にやっと2フレーム前のスコアが確定する
- ちなみにストライクの次のフレームがスペアの場合は、ストライクのフレームの点数は20点となる。スペアに2投使っているため
各フレーム状況における、最大獲得可能なスコアは以下の通りです。
- ストライク: 30点 (ストライクを出した次とその次の投球もストライクの場合)
- スペア: 20点 (スペアの次の投球がストライクの場合)
- オープンフレーム: 9点
1フレームの最大値が30点なので10フレームで300点が1ゲームの最大スコアで、これがパーフェクトゲームです。10フレームで3回のストライクを出す必要があるためストライク12連続が達成条件です。
このスコア計算の面白さ
このスコア計算においては連続ストライクが重要で、それによって点数が大きく伸びます。逆に、ストライクを連発しないと、1フレームで20点を越えるスコアは出せません。ダブル以上を出さない限り、ストライクはスペアと同等に近い価値しか発揮されません。ストライクを連発することで、ストライクの真の価値が発揮され、スペアよりも更に点数を上乗せできるのです。
そのフレームの投球が終わってもマークが付いていればスコア確定が遅延されるため、思わぬ逆転が起きることがあるのも面白いところです。
ちなみに、全フレームノーミスでフルマークつけたとしても、ダブル以上のストライク連発がない場合は、200点を越えることはできず、基本的には190点台となります。200点丁度はぎりぎり狙えますが、ご存知ない方は、どういう場合か考えてみてください。
200点台のスコアを獲得するためには、ダブルが1回かつノーミス、またはダブル2回かターキー(3連発)があってオープン1回まで、といった具合に1ゲームを収める必要があります。ターキーでノーミスの場合は210点台までスコアが伸びます。ボウリングで200点を越えることが如何に難しいか分かるでしょう。
余談ですが、ボウリング選手は競技中マーク数でスコアを概算して把握します。ゲーム開始時にプラマイゼロから数え始め、ミスをしたらマークマイナス1、ストライクを連発したらマークをプラス1します。これで、マークプラマイゼロでゲームを終えると190点台、マークプラス1で終えると200点台、ということが導き出せるのです。このマーク数での概算はチーム戦の時により有用です。
プロレベルになると同マーク数での競り合いも多くなり、その場合は一の位のスコアで勝負が決まります。これをピン差勝負と言います。競技者にとって、1投目が9本か8本かは大きな差なのです。ボウリングの試合解説を聞くと「マーク差」「ピン差」という言葉が良く使われています。そこに注目するとより試合展開が分かり、観戦が楽しくなるでしょう。
ちなみに、マーク数については「カウントダウン」概念も併せて説明しないと片手落ちなのですが、これ以上ややこしいことを説明すると離脱されてしまいそうなので、興味のある方は調べてみてください。
カレントフレームスコアリング (Current frame scoring)
またの名をワールドボウリングスコアリング。主語の大きな名前ですが、World Bowlingという国際大会で近年使われ始めたスコア方式で、世界ボウリング連盟がそう呼んでいるためです。国際大会だけではなく、USや日本のプロの試合でも使われ始めており、今後主流になっていく可能性があるスコア計算方式です。
10本のピンに対して1フレーム最大2投まで投球し、10フレームまで繰り返すという基本的なゲーム進行は変わりません。しかし、スペアとストライク時のスコア算出方法が以下のように大きく異なります。
- スペアの場合、そのフレームの1投目の倒ピン数が加算される
- 例: 8/ (8ピンスペア) の場合18点
- ストライクは無条件で30点
- 10フレームも3投投げる必要なく、1投だけで30点となる
- 最大スコアは300点なのは変わらないが、10連続ストライクで達成できる
非常に簡単で明確です。その名の通りフレームの投球が終わった時点でそのフレームまでのスコアが確定されるため、伝統的なスコア計算のわかりづらさが解消されています。あまりにも簡単なので、プログラミングの手習いにもならなさそうです。選手も複雑なスコア計算を試合中にする必要がなくなり、10フレームに追加投球も発生しないので、試合時間の短縮も望めます。
これは、他のショースポーツでも見られるように、わかりやすさを向上させ、競技時間の短縮をすることで、間口が広がったり、テレビ放映されやすくなったりすることを目論んでいるということです。バレーボールがサイドアウト制からラリーポイント制が主流になったり、野球だと申告敬遠が設けられたことなどと近いです。ちなみに、それによって、オリンピック競技化も狙うという話もあるようですが、個人的には実現性は低いと思っています。
カレントフレームスコアリングの場合、各フレーム状況における、最大獲得可能なスコアは以下の通りとなります。
- ストライク: 30点
- スペア: 19点 (9本スペア)
- オープンフレーム: 9点
カレントフレームスコアリングの問題点
こういうルール変更によって、趣が失われてしまうというのはよくある話で、カレントフレームスコアリングにも同様の問題があり、特に以下が大きいと個人的に思います。
- 単発のストライクの価値が上がりすぎてしまう
- スペアの価値が下がる
- 連続ストライクの価値が下がる
- テンフレ勝負の醍醐味が失われる
単発のストライクの価値が上がりすぎてしまう
従来のスコア計算の場合、ストライクのスコアの最大値は30ですが、平均の期待値は選手だと20~25点くらいで、一般人だともっと低くなります。しかし、カレントフレームスコアリングの場合期待値もへったれもなく30点となるのです。
スペアの価値が下がる
それはつまり、相対的にスペアの価値が下がるということです。また、スペアの最高得点が19点になのも、スペアの価値を下げる一因です。それによって、ストライクさえ出ればよいという大味な競技性になりかねないということです。
実際、ストライク率が50%を超えるようなトッププロであってもスペアの重要性は説きます。野球に「足は裏切らない」という言葉がありますが、それと同様に「スペアは裏切らない」のです。レーンコンディションが自分にマッチしていなくてもスペアは取ることができます。レーンコンディションが最初は自分にマッチしていなくても気持ちを切らさずにスペアで辛抱し、自分にフィットするのを待って勝つ、といったジリジリとした見応えのある勝負が生まれるのもボウリングの醍醐味です。カレントフレームスコアリングで、そういった勝負が減ってしまうことが懸念されます。
連続ストライクの価値が下がる
また、伝統的スコア計算では、連続ストライクの価値が高く、それを出さないと大きな加点は得られない、という話を書きました。日本やアメリカのプロの競技シーンではアメリカン方式と呼ばれる、左右のレーンを入れ替えながら投球するスタイルがほとんどです。偶数フレームと奇数フレームで投球レーンが異なるのです。この形式でストライクを安定的に連発するためには、左右両レーンのレーンコンディションを攻略する必要があります。
つまり、伝統的なスコア計算では、両方のレーンを攻略しないと高い点数が出せないという面白い競技性があるのです。競技者は左右それぞれのレーンコンディションにあわせて投球をする必要があります。コンディションが大体同じで、左右で同じ様に投げればストライクになることもありますが、左右で全く異なるアングルで投球することも、違うボールを投げることさえあります。プロは大体10個前後のボールを試合に持ち込みます。そういう状況でもストライクを連発するプロの妙技を見て、私は舌を巻くのです。
実際、プロの試合でも片方のレーンではストライクが出るのに、もう片方のレーンでは出ず、なかなかスコアが伸ばせない、ということはあります。そんな苦しい状況から両方のレーンを攻略してストライクを連発し大逆転するというドラマが生まれることもあるのです。
なので、単発でストライクを出しただけで30点もらえるというのはあまりにも味気がない。連発できる技量があって初めてストライクのその真価が発揮される方がアツいと思うのです。
テンフレ勝負の緊迫感が失われる
もう一つの大きな問題として、テンフレ勝負の面白みが減ってしまうということがあります。テンフレ勝負というのは、10フレ(=第10フレーム)での勝負、つまり拮抗したゲームで勝敗の決定が最終フレームまで持ち込まれる展開のことです。
解説した通り、伝統的なスコア計算ではフレームのスコア確定が遅延されます。10フレまで進んでいてもストライクが続いていれば8フレ時点のスコアもまだ確定していないことになります。10フレの結果次第でのスコアの振れ幅が大きいため、10フレ開始時点では、まだまだ勝敗はわからない、というケースが多く発生します。
また、伝統的なスコア計算の場合、10フレでは最大3投球します。負けている側が10フレでの逆転を狙うために、ストライクを2回以上続けないといけない局面も良くあります。こう言ったとき観客は特に固唾を飲んで競技者がストライクを続けられるかを見守ります。
ほぼ勝ちが決まっていた側が10フレでまさかのビッグフォーのスプリットを出してスペアも取れず、相手がパンチアウト(10フレ3投を全部ストライクでしめること)で大逆転といったことも起きたりします。
伝統的なスコア計算では、緊迫感のある展開が最後まで長く続くのです。
しかし、カレントフレームスコアリングの場合、10フレ時点で9フレまでのスコアが確定してしまっていますし、1回ストライクをだせばもう30点になってしまいます。リードしている側がストライクを出したらその時点で試合終了です。伝統的なスコア計算の10フレ勝負では、負けている側がパンチアウトすれば逆転できる余地が残ることがあり、まだまだ緊張感が長く続くのです。
このクライマックスの見応えという点でも、伝統的なスコア計算の方に軍配が上がると思うのです。
世界は変化する
とは言え、カレントフレームスコアリングであっても、ボウラーに求められる技能が大きく変わるわけではなく、結局今までのボウリングが上手い人がトータルで勝つだろうので、あまり関係ないかも知れません。ドラマ性が失われてしまうと過度に感じて古参が感傷的になっているだけで、野球の申告敬遠などのルール変更同様に、残念ながら徐々に受け入れられていくのでしょう。
最近、ストリートファイター6のモダン操作について苦言を呈する一部の古参格ゲープレイヤーがいるようですが、少し離れた立ち位置からそれを見ると、完全にナンセンスに思えます。結局私のカレントフレームスコアリングに対する感情もそういった変化を受け入れられない老害の戯言でしか無いのかも知れません。
"Shut the fuck up and write some code" じゃないですが、グダグタ言ってないでボウリングに行くと良いのかも知れません。物置にマイボールが眠っていますが数年以上行っていないので誘ってくださる方歓迎です。