この記述は Coding Dojo_Bowling の記述を元にしています。
問題を解ききることは重要ではありません。 TDDのプラクティスである、「レッド:失敗するテスト」「グリーン:最低限の実装」「リファクタリング」を積み重ねを体験することが目的。
ボウリングの 1 ゲーム分の投球記録が与えられたとき、そのゲームの合計スコアを生成するプログラムを作成してください。
スコア計算の参考例
※ スコアリングの際、「X
」はストライク、「/
」はスペア、「-
」はミスを意味します。
12 34 56 78 9- -- 11 11 X X5/
上記の記録を渡したら 99 点を返す。
ここでのボウリングの採点について説明します。
- ボウリングの 1 ゲームには、投手のターン、つまり「フレーム」が 10 回あります。
- 各フレームでは、投手は最大 2 回の投球ですべてのピンを倒すことができます。
- 2 回の投球ですべて倒せなかった場合、そのフレームのスコアは 2 回の投球で倒したピンの数の合計となります。
- 2 回ですべて倒した場合は「スペア」と呼び、そのフレームのスコアは 10 + 次の投球で倒したピンの数(次のターン)となります。
- フレーム内の最初の投球で、彼がすべてのピンを倒した場合、これをストライクと呼びます。彼のターンは終了し、フレームの彼のスコアは 10 + 彼の次の 2 回の投球で倒したピンの合計になります。
- 最後の( 10 個目の)フレームでスペアまたはストライクを取った場合、投手は、それぞれ 1 個または 2 個のボーナスボールをさらに投げられます。これらのボーナススローは、同じターンの一部として行われます。ボーナススローですべてのピンを倒した場合、このプロセスは繰り返されません。ボーナススローは、最終フレームのスコアを計算するためにのみ使用されます。
- ゲームスコアは、全フレームのスコアの合計です。
ルールの詳細はこちらで。ボウリングのスコアリング方法
まずは仕様を洗い出して TODO リストに書き出しましょう。 本ワークショップでは7分間のタイムボックスで TODO リストの作成を行ってください。
TODO リストの作り方はそれぞれの TODO をタイトルとした空のテストを作成する方法がおすすめです。
TODO リストの作成が終わったら簡単なテストから「レッド」「グリーン」「リファクタリング」の手順を確認しながら早速実装してみましょう!
最初に用意する TODO として以下の TODO(テストケース) を用意することをおすすめします。
- 2投とも1ピンのフレームが10連続なら20点を返す
以降の TODO はペアで相談して問題から洗い出してみましょう。
ピンポンプログラミングを試してみましょう。
- 開発者A, Bでペアプロする時
- AがTODOの中でテストを作り、そのテストが失敗することを確認する
- Bがそのテストが成功するように最小限の実装をする
- A,Bで相談し、リファクタリングを実施する
- 1~3を繰り返す。繰り返すごとにA,Bの役割を反転させる
TDDサイクルのなかでリファクタリングの余地がないと感じたときは、リファクタリングをしないという決断をしましょう。
X X X X X X X X X X X X
(12 投球: 12 ストライク)5/ 5/ 5/ 5/ 5/ 5/ 5/ 5/ 5/ 5/5
(21 投球: 10 スペア)1- 1- 1- 1- 1- 1- 1- 1- 1- 1-
(20 投球: 1 とミスの繰り返し)
のところが、パッとわからなかったので、具体例(
11 11 11 11 11 11 11 11 11 11
)みたいな感じで書いておいた方がスムーズに進められるかもしれないです。