-
Notifications
You must be signed in to change notification settings - Fork 312
/
Copy pathDealer.kt
41 lines (30 loc) · 941 Bytes
/
Dealer.kt
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
package domain.dealer
import domain.card.CardDeck
import domain.card.Cards
class Dealer(initialState: DealerState = DealerState.Hit(Cards())) {
private var state: DealerState = initialState
private var onHit: (() -> Unit)? = null
val cards: Cards
get() = state.cards
val canReceiveMoreCard: Boolean
get() = state.canReceiveMoreCard
val isBlackJack: Boolean
get() = state is DealerState.BlackJack
val isBust: Boolean
get() = state is DealerState.Bust
val result: Int
get() = state.cards.result()
fun hit(cardDeck: CardDeck) {
val capturedState = state
if (capturedState is DealerState.Hit) {
state = capturedState.hit(cardDeck.pop())
onHit?.invoke()
}
}
fun addOnHitCallback(callback: (() -> Unit)) {
onHit = callback
}
companion object {
const val DEALER_MAX_POINT = 16
}
}