Sie sind auf Seite 1von 2

Class Kata Bowling

Entwickle eine Klasse zur Zhlung von Bowling-Spielen. Ein Bowling-Spiel besteht aus Wrfen (engl. roll), um 10 Pins am Ende der Bowling-Bahn abzurumen. Mit jedem Wurf knnen also 0 bis 10 Pins umgeworfen werden. Pro Runde hat ein Spieler max. 2 Wrfe, um die 10 Pins abzurumen. Wrfe werden zu Rahmen (engl. frame) zusammengefasst, die jeweils eine Punktzahl zugeordnet bekommen. Ein Spiel besteht aus 10 Runden oder Rahmen. Wieviele Wrfe pro Runde von einem Spieler gemacht werden drfen, hngt davon ab, wieviele Pins mit ihnen geworfen werden: Wenn der erste Wurf eines Spielers alle 10 Pins abrumt (engl. strike), ist er der einzige Wurf in der Runde. Ansonsten enthalten die Rahmen immer zwei Wrfe, jeder mit 0 bis 10 Pins. o Ausnahme: Wenn der 10. Rahmen als ersten Wurf einen strike enthlt oder beide Wrfe zusammen einen spare (s.u.) ergeben, dann kann ein drittes Mal geworfen werden.

Fr die Berechnung der Punktzahl eines Rahmens gibt es einige Regeln: Ein Rahmen, dessen beide Wrfe zusammen maximal 9 Pins gerissen haben, erhlt die Summe der Pins als Punktzahl. Ein Rahmen dessen beide Wrfe zusammen 10 Pins berissen haben (engl. spare), erhlt als Punktzahl 10 + die Zahl der Pins des nchsten Wurfes. Ein Rahmen mit einem strike erhlt als Punktzahl 10 + die Summe der Pins der nchsten beiden Wrfe.

Bei Robert C. Martin findet sich diese Darstellung [1] fr ein Bowling-Spiel:

Jeder Rahmen zeigt den ersten und zweiten und beim letzten sogar den dritten Wurf mit ihren Pins sowie die kummulierte Punktzahl. Ist das Kstchen fr den zweiten Wurf halb ausgefllt, liegt ein spare vor, ist es ganz ausgefllt, war der erste Wurf ein strike.

http://ccd-school.de

Das Interface der Klasse soll wie folgt aussehen:


class Game { void AddRoll(int pins) {...} Frame[] Frames() {...} int TotalScore() {...} bool Over() {...} } class Frame { int[] PinsRolled; int Score; // Punktzahl nur dieses Frame }

AddRoll() wirft eine Exception, falls nach Spielende noch Wrfe registriert werden sollen. Das Spiel aus der obigen Abbildung mit Game durchgefhrt:
AddRoll() Frames() TotalScore

1 4 4 5 6 4 5 5 10 0 1 7 3 6 4 10 2 8 6

([1],1) ([1,4],5) ([1,4],5), ([4],4) ([1,4],5), ([4,5],9) ..., ([6],6) ..., ([6,4],10) ..., ([6,4],15), ([5],5) ..., ([5,5],10) ..., ([5,5],10), ([10],10) ..., ([10],10), ([0],0) ..., ([10],11), ([0,1],1) ..., ([7],7) ..., ([7,3],10) ..., ([7,3],16), ([6],6) ..., ([6,4],10) ..., ([6,4],20), ([10],10) ..., ([10],12), ([2],2) ..., ([10],20), ([2,8],10) ..., ([2,8,6],16)

1 5 9 14 20 24 34 39 59 59 61 68 71 83 87 107 111 127 133

Over() false

true

Ressourcen
[1] Rober C. Martin, Bowling Game Kata, http://butunclebob.com/files/downloads/Bowling%20Game%20Kata.ppt

Quelle
http://codingdojo.org/cgi-bin/wiki.pl?KataBowling

http://ccd-school.de

Das könnte Ihnen auch gefallen