@@ -11,7 +11,6 @@ import Foundation
11
11
public protocol FrameState {
12
12
var maximumBallCount : UInt { get }
13
13
var ballsRequiredForScoring : UInt { get }
14
-
15
14
func isFrameCompleted( _ frame: Frame ) -> Bool
16
15
func canBeScored( _ frame: Frame ) -> Bool
17
16
func calcualtedScore( _ frame: Frame ) -> UInt
@@ -21,37 +20,25 @@ public protocol FrameState {
21
20
22
21
public extension FrameState {
23
22
24
- func isFrameCompleted( _ frame: Frame ) -> Bool {
25
- return false
26
- }
23
+ func isFrameCompleted( _ frame: Frame ) -> Bool { false }
27
24
28
- var maximumBallCount : UInt {
29
- return 2
30
- }
25
+ var maximumBallCount : UInt { 2 }
31
26
32
- var ballsRequiredForScoring : UInt {
33
- return maximumBallCount
34
- }
27
+ var ballsRequiredForScoring : UInt { maximumBallCount }
35
28
36
- func calcualtedScore( _ frame: Frame ) -> UInt {
37
- return ballsForScoring ( frame) ? . sum ( ) ?? 0
38
- }
29
+ func calcualtedScore( _ frame: Frame ) -> UInt { ballsForScoring ( frame) ? . sum ( ) ?? 0 }
39
30
40
- func canBeScored( _ frame: Frame ) -> Bool {
41
- return ballsForScoring ( frame) ? . count == ballsRequiredForScoring
42
- }
31
+ func canBeScored( _ frame: Frame ) -> Bool { ballsForScoring ( frame) ? . count == ballsRequiredForScoring }
43
32
44
- func ballsForScoring( _ frame: Frame ) -> [ UInt ] ? {
45
- return frame. ballKnockedDownRecord
46
- }
33
+ func ballsForScoring( _ frame: Frame ) -> [ UInt ] ? { frame. ballKnockedDownRecord }
47
34
}
48
35
49
36
public protocol CompleteFrameState : FrameState { }
50
37
public extension CompleteFrameState {
51
- func isFrameCompleted( _ frame: Frame ) -> Bool {
52
- return true
53
- }
38
+ var ballsRequiredForScoring : UInt { 3 }
54
39
40
+ func isFrameCompleted( _ frame: Frame ) -> Bool { true }
41
+
55
42
func addPinsKnockedDown( _ count: UInt , frame: Frame ) {
56
43
guard frame. ballKnockedDownRecord. count < maximumBallCount else { return }
57
44
frame. addBallKnockedDownRecord ( count: count)
@@ -60,16 +47,19 @@ public extension CompleteFrameState {
60
47
61
48
public protocol FinalFrameState : FrameState { }
62
49
public extension FinalFrameState {
63
- var maximumBallCount : UInt {
64
- return 3
65
- }
50
+ var maximumBallCount : UInt { 3 }
66
51
67
- func isFrameCompleted( _ frame: Frame ) -> Bool {
68
- return canBeScored ( frame)
69
- }
52
+ func isFrameCompleted( _ frame: Frame ) -> Bool { canBeScored ( frame) }
70
53
71
54
func addPinsKnockedDown( _ count: UInt , frame: Frame ) {
72
55
guard !canBeScored( frame) else { return }
73
56
frame. addBallKnockedDownRecord ( count: count)
74
57
}
75
58
}
59
+
60
+ public struct MissedState : CompleteFrameState {
61
+ public var ballsRequiredForScoring : UInt { maximumBallCount }
62
+ }
63
+
64
+ public struct FinalFrameStrikeState : FinalFrameState { }
65
+ public struct FinalFrameSpareState : FinalFrameState { }
0 commit comments