From e039818f569b51e76dc369b5b3cf04e40258ab78 Mon Sep 17 00:00:00 2001 From: dean Date: Sat, 11 Nov 2023 22:47:54 +0900 Subject: [PATCH 01/17] =?UTF-8?q?Readme=20=EA=B5=AC=ED=98=84=ED=95=A0=20?= =?UTF-8?q?=EA=B8=B0=EB=8A=A5=20=EC=A0=95=EC=9D=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 18 +++++++++++++++++- 1 file changed, 17 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index e1c7c927d8..4c2427e144 100644 --- a/README.md +++ b/README.md @@ -1 +1,17 @@ -# kotlin-blackjack \ No newline at end of file +# kotlin-blackjack + +[] 숫자와 문양을 가진 카드 구현 + +[] 카드 뭉치인 덱 구현 + +[] 점수 합계를 계산할 수 있는 카드목록 구현 + +[] 이름과 카드 목록을 가질 수 있는 플레이어 구현 + +[] 카드를 두 장 받는 기능 구현 + +[] 카드를 한 장 더 받는 기능 구현 + +[] 블랙잭 게임을 마치는 기능 구현 + +[] 입출력 기능 구현 From a77fbed6366109176294fca5e5edec870356eecf Mon Sep 17 00:00:00 2001 From: dean Date: Sat, 11 Nov 2023 23:42:52 +0900 Subject: [PATCH 02/17] =?UTF-8?q?=EC=88=AB=EC=9E=90=EC=99=80=20=EB=AC=B8?= =?UTF-8?q?=EC=96=91=EC=9D=84=20=EA=B0=80=EC=A7=84=20=EC=B9=B4=EB=93=9C=20?= =?UTF-8?q?=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 2 +- src/main/kotlin/blackjack/domain/Card.kt | 6 ++++++ src/main/kotlin/blackjack/domain/Rank.kt | 17 +++++++++++++++++ src/main/kotlin/blackjack/domain/Suit.kt | 8 ++++++++ 4 files changed, 32 insertions(+), 1 deletion(-) create mode 100644 src/main/kotlin/blackjack/domain/Card.kt create mode 100644 src/main/kotlin/blackjack/domain/Rank.kt create mode 100644 src/main/kotlin/blackjack/domain/Suit.kt diff --git a/README.md b/README.md index 4c2427e144..870db4eaec 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,6 @@ # kotlin-blackjack -[] 숫자와 문양을 가진 카드 구현 +[x] 숫자와 문양을 가진 카드 구현 [] 카드 뭉치인 덱 구현 diff --git a/src/main/kotlin/blackjack/domain/Card.kt b/src/main/kotlin/blackjack/domain/Card.kt new file mode 100644 index 0000000000..c0d869222c --- /dev/null +++ b/src/main/kotlin/blackjack/domain/Card.kt @@ -0,0 +1,6 @@ +package blackjack.domain + +data class Card( + val suit: Suit, + val rank: Rank, +) diff --git a/src/main/kotlin/blackjack/domain/Rank.kt b/src/main/kotlin/blackjack/domain/Rank.kt new file mode 100644 index 0000000000..6e368d75b0 --- /dev/null +++ b/src/main/kotlin/blackjack/domain/Rank.kt @@ -0,0 +1,17 @@ +package blackjack.domain + +enum class Rank(val value: Int) { + Ace(1), + Two(2), + Three(3), + Four(4), + Five(5), + Six(6), + Seven(7), + Eight(8), + Nine(9), + Ten(10), + Jack(10), + Queen(10), + King(10), +} diff --git a/src/main/kotlin/blackjack/domain/Suit.kt b/src/main/kotlin/blackjack/domain/Suit.kt new file mode 100644 index 0000000000..20297bcbda --- /dev/null +++ b/src/main/kotlin/blackjack/domain/Suit.kt @@ -0,0 +1,8 @@ +package blackjack.domain + +enum class Suit(val value: String) { + Spade("♠"), + Club("♣"), + Diamond("♦"), + Heart("♥"), +} From cd114624c0a0b63d8f8e765e806f46559af05ce1 Mon Sep 17 00:00:00 2001 From: dean Date: Sat, 11 Nov 2023 23:59:48 +0900 Subject: [PATCH 03/17] =?UTF-8?q?=EC=B9=B4=EB=93=9C=20=EB=AD=89=EC=B9=98?= =?UTF-8?q?=EC=9D=B8=20=EB=8D=B1=20=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 2 +- src/main/kotlin/blackjack/domain/Deck.kt | 21 ++++++++++++++ src/test/kotlin/blackjack/domain/DeckTest.kt | 29 ++++++++++++++++++++ 3 files changed, 51 insertions(+), 1 deletion(-) create mode 100644 src/main/kotlin/blackjack/domain/Deck.kt create mode 100644 src/test/kotlin/blackjack/domain/DeckTest.kt diff --git a/README.md b/README.md index 870db4eaec..23e13647af 100644 --- a/README.md +++ b/README.md @@ -2,7 +2,7 @@ [x] 숫자와 문양을 가진 카드 구현 -[] 카드 뭉치인 덱 구현 +[x] 카드 뭉치인 덱 구현 [] 점수 합계를 계산할 수 있는 카드목록 구현 diff --git a/src/main/kotlin/blackjack/domain/Deck.kt b/src/main/kotlin/blackjack/domain/Deck.kt new file mode 100644 index 0000000000..4a1894c3ee --- /dev/null +++ b/src/main/kotlin/blackjack/domain/Deck.kt @@ -0,0 +1,21 @@ +package blackjack.domain + +class Deck { + private val cards = ArrayList(setupDeck()) + + fun draw(): Card { + check(cards.isNotEmpty()) { + "덱에 남아있는 카드가 없습니다." + } + + return cards.removeFirst() + } + + private fun setupDeck(): List { + return Suit.values().flatMap { suit -> + Rank.values().map { rank -> + Card(suit, rank) + } + } + } +} diff --git a/src/test/kotlin/blackjack/domain/DeckTest.kt b/src/test/kotlin/blackjack/domain/DeckTest.kt new file mode 100644 index 0000000000..ab35b60392 --- /dev/null +++ b/src/test/kotlin/blackjack/domain/DeckTest.kt @@ -0,0 +1,29 @@ +package blackjack.domain + +import org.junit.jupiter.api.Test +import org.junit.jupiter.api.assertDoesNotThrow +import org.junit.jupiter.api.assertThrows + +class DeckTest { + @Test + fun `Deck은 52장의 카드를 뽑을 수 있다`() { + val deck = Deck() + + assertDoesNotThrow { + repeat(52) { + deck.draw() + } + } + } + + @Test + fun `Deck은 52장 초과로 카드를 뽑을 수 없다`() { + val deck = Deck() + + assertThrows { + repeat(53) { + deck.draw() + } + } + } +} \ No newline at end of file From 4e905edeaedb9921364b22d9bd2f27f5fe1c0c36 Mon Sep 17 00:00:00 2001 From: dean Date: Sun, 12 Nov 2023 01:38:11 +0900 Subject: [PATCH 04/17] =?UTF-8?q?=EC=A0=90=EC=88=98=20=ED=95=A9=EA=B3=84?= =?UTF-8?q?=EB=A5=BC=20=EA=B3=84=EC=82=B0=ED=95=A0=20=EC=88=98=20=EC=9E=88?= =?UTF-8?q?=EB=8A=94=20=EC=B9=B4=EB=93=9C=EB=AA=A9=EB=A1=9D=20=EA=B5=AC?= =?UTF-8?q?=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 2 +- .../blackjack/domain/CardPointStrategy.kt | 5 ++++ src/main/kotlin/blackjack/domain/Cards.kt | 10 +++++++ .../blackjack/domain/HardAcePointStrategy.kt | 7 +++++ .../blackjack/domain/SoftAcePointStrategy.kt | 10 +++++++ src/test/kotlin/blackjack/domain/CardsTest.kt | 21 ++++++++++++++ .../domain/HardAcePointStrategyTest.kt | 18 ++++++++++++ .../domain/SoftAcePointStrategyTest.kt | 29 +++++++++++++++++++ 8 files changed, 101 insertions(+), 1 deletion(-) create mode 100644 src/main/kotlin/blackjack/domain/CardPointStrategy.kt create mode 100644 src/main/kotlin/blackjack/domain/Cards.kt create mode 100644 src/main/kotlin/blackjack/domain/HardAcePointStrategy.kt create mode 100644 src/main/kotlin/blackjack/domain/SoftAcePointStrategy.kt create mode 100644 src/test/kotlin/blackjack/domain/CardsTest.kt create mode 100644 src/test/kotlin/blackjack/domain/HardAcePointStrategyTest.kt create mode 100644 src/test/kotlin/blackjack/domain/SoftAcePointStrategyTest.kt diff --git a/README.md b/README.md index 23e13647af..8497f5c839 100644 --- a/README.md +++ b/README.md @@ -4,7 +4,7 @@ [x] 카드 뭉치인 덱 구현 -[] 점수 합계를 계산할 수 있는 카드목록 구현 +[x] 점수 합계를 계산할 수 있는 카드목록 구현 [] 이름과 카드 목록을 가질 수 있는 플레이어 구현 diff --git a/src/main/kotlin/blackjack/domain/CardPointStrategy.kt b/src/main/kotlin/blackjack/domain/CardPointStrategy.kt new file mode 100644 index 0000000000..f1bbeed8fb --- /dev/null +++ b/src/main/kotlin/blackjack/domain/CardPointStrategy.kt @@ -0,0 +1,5 @@ +package blackjack.domain + +fun interface CardPointStrategy { + fun getPoint(rank: Rank): Int +} diff --git a/src/main/kotlin/blackjack/domain/Cards.kt b/src/main/kotlin/blackjack/domain/Cards.kt new file mode 100644 index 0000000000..cafadd7b20 --- /dev/null +++ b/src/main/kotlin/blackjack/domain/Cards.kt @@ -0,0 +1,10 @@ +package blackjack.domain + +@JvmInline +value class Cards(val value: List) { + fun getPoints(cardPointStrategy: CardPointStrategy): Int { + return value.sumOf { card -> + cardPointStrategy.getPoint(card.rank) + } + } +} diff --git a/src/main/kotlin/blackjack/domain/HardAcePointStrategy.kt b/src/main/kotlin/blackjack/domain/HardAcePointStrategy.kt new file mode 100644 index 0000000000..3e7dd12021 --- /dev/null +++ b/src/main/kotlin/blackjack/domain/HardAcePointStrategy.kt @@ -0,0 +1,7 @@ +package blackjack.domain + +class HardAcePointStrategy : CardPointStrategy { + override fun getPoint(rank: Rank): Int { + return rank.value + } +} diff --git a/src/main/kotlin/blackjack/domain/SoftAcePointStrategy.kt b/src/main/kotlin/blackjack/domain/SoftAcePointStrategy.kt new file mode 100644 index 0000000000..8f55b75692 --- /dev/null +++ b/src/main/kotlin/blackjack/domain/SoftAcePointStrategy.kt @@ -0,0 +1,10 @@ +package blackjack.domain + +class SoftAcePointStrategy : CardPointStrategy { + override fun getPoint(rank: Rank): Int { + return when(rank) { + Rank.Ace -> 11 + else -> rank.value + } + } +} diff --git a/src/test/kotlin/blackjack/domain/CardsTest.kt b/src/test/kotlin/blackjack/domain/CardsTest.kt new file mode 100644 index 0000000000..fc029c59d8 --- /dev/null +++ b/src/test/kotlin/blackjack/domain/CardsTest.kt @@ -0,0 +1,21 @@ +package blackjack.domain + +import org.assertj.core.api.Assertions.assertThat +import org.junit.jupiter.api.Test + +class CardsTest { + @Test + fun `모든 카드의 점수 총 합을 구할 수 있다`() { + val pointStrategy = CardPointStrategy { it.value } + val cards = Cards( + listOf( + Card(Suit.Spade, Rank.Ace), + Card(Suit.Spade, Rank.Two), + ) + ) + + val totalPoint = cards.getPoints(pointStrategy) + + assertThat(totalPoint).isEqualTo(3) + } +} \ No newline at end of file diff --git a/src/test/kotlin/blackjack/domain/HardAcePointStrategyTest.kt b/src/test/kotlin/blackjack/domain/HardAcePointStrategyTest.kt new file mode 100644 index 0000000000..e911b5446b --- /dev/null +++ b/src/test/kotlin/blackjack/domain/HardAcePointStrategyTest.kt @@ -0,0 +1,18 @@ +package blackjack.domain + +import org.assertj.core.api.Assertions +import org.junit.jupiter.params.ParameterizedTest +import org.junit.jupiter.params.provider.EnumSource + +class HardAcePointStrategyTest { + @ParameterizedTest + @EnumSource(value = Rank::class) + fun `모든 카드는 원래의 점수로 계산한다`(rank: Rank) { + val hardAcePointStrategy = HardAcePointStrategy() + + val actualPoint = hardAcePointStrategy.getPoint(rank) + val expectedPoint = rank.value + + Assertions.assertThat(actualPoint).isEqualTo(expectedPoint) + } +} diff --git a/src/test/kotlin/blackjack/domain/SoftAcePointStrategyTest.kt b/src/test/kotlin/blackjack/domain/SoftAcePointStrategyTest.kt new file mode 100644 index 0000000000..abaf7cb320 --- /dev/null +++ b/src/test/kotlin/blackjack/domain/SoftAcePointStrategyTest.kt @@ -0,0 +1,29 @@ +package blackjack.domain + +import org.assertj.core.api.Assertions.assertThat +import org.junit.jupiter.api.Test +import org.junit.jupiter.params.ParameterizedTest +import org.junit.jupiter.params.provider.EnumSource + +class SoftAcePointStrategyTest { + @Test + fun `Ace는 11점으로 계산한다`() { + val softAcePointStrategy = SoftAcePointStrategy() + + val actualPoint = softAcePointStrategy.getPoint(Rank.Ace) + val expectedPoint = 11 + + assertThat(actualPoint).isEqualTo(expectedPoint) + } + + @ParameterizedTest + @EnumSource(value = Rank::class, names = ["Ace"], mode = EnumSource.Mode.EXCLUDE) + fun `Ace가 아니면 원래의 점수로 계산한다`(rank: Rank) { + val softAcePointStrategy = SoftAcePointStrategy() + + val actualPoint = softAcePointStrategy.getPoint(rank) + val expectedPoint = rank.value + + assertThat(actualPoint).isEqualTo(expectedPoint) + } +} From 17c30fb438408dd4cd4b45cb31858f400b8b33b1 Mon Sep 17 00:00:00 2001 From: dean Date: Sun, 12 Nov 2023 01:43:40 +0900 Subject: [PATCH 05/17] =?UTF-8?q?=EC=9D=B4=EB=A6=84=EA=B3=BC=20=EC=B9=B4?= =?UTF-8?q?=EB=93=9C=20=EB=AA=A9=EB=A1=9D=EC=9D=84=20=EA=B0=80=EC=A7=88=20?= =?UTF-8?q?=EC=88=98=20=EC=9E=88=EB=8A=94=20=ED=94=8C=EB=A0=88=EC=9D=B4?= =?UTF-8?q?=EC=96=B4=20=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 2 +- src/main/kotlin/blackjack/domain/Player.kt | 6 ++++++ 2 files changed, 7 insertions(+), 1 deletion(-) create mode 100644 src/main/kotlin/blackjack/domain/Player.kt diff --git a/README.md b/README.md index 8497f5c839..592055733d 100644 --- a/README.md +++ b/README.md @@ -6,7 +6,7 @@ [x] 점수 합계를 계산할 수 있는 카드목록 구현 -[] 이름과 카드 목록을 가질 수 있는 플레이어 구현 +[x] 이름과 카드 목록을 가질 수 있는 플레이어 구현 [] 카드를 두 장 받는 기능 구현 diff --git a/src/main/kotlin/blackjack/domain/Player.kt b/src/main/kotlin/blackjack/domain/Player.kt new file mode 100644 index 0000000000..e302640270 --- /dev/null +++ b/src/main/kotlin/blackjack/domain/Player.kt @@ -0,0 +1,6 @@ +package blackjack.domain + +data class Player( + val name: String, + val cards: Cards = Cards(emptyList()), +) From 1aa3e0e8c425641c48484e6306f9a08bdc0d878f Mon Sep 17 00:00:00 2001 From: dean Date: Sun, 12 Nov 2023 15:24:11 +0900 Subject: [PATCH 06/17] =?UTF-8?q?=EC=B9=B4=EB=93=9C=EB=A5=BC=20=EB=91=90?= =?UTF-8?q?=20=EC=9E=A5=20=EB=B0=9B=EB=8A=94=20=EA=B8=B0=EB=8A=A5=20?= =?UTF-8?q?=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 2 +- src/main/kotlin/blackjack/domain/BlackJack.kt | 18 ++++++++++ .../kotlin/blackjack/domain/OnGoingPlayer.kt | 6 ++++ src/main/kotlin/blackjack/domain/Player.kt | 8 ++--- .../kotlin/blackjack/domain/PreparedPlayer.kt | 7 ++++ .../kotlin/blackjack/domain/BlackJackTest.kt | 34 +++++++++++++++++++ 6 files changed, 70 insertions(+), 5 deletions(-) create mode 100644 src/main/kotlin/blackjack/domain/BlackJack.kt create mode 100644 src/main/kotlin/blackjack/domain/OnGoingPlayer.kt create mode 100644 src/main/kotlin/blackjack/domain/PreparedPlayer.kt create mode 100644 src/test/kotlin/blackjack/domain/BlackJackTest.kt diff --git a/README.md b/README.md index 592055733d..d4d4884ff3 100644 --- a/README.md +++ b/README.md @@ -8,7 +8,7 @@ [x] 이름과 카드 목록을 가질 수 있는 플레이어 구현 -[] 카드를 두 장 받는 기능 구현 +[x] 카드를 두 장 받는 기능 구현 [] 카드를 한 장 더 받는 기능 구현 diff --git a/src/main/kotlin/blackjack/domain/BlackJack.kt b/src/main/kotlin/blackjack/domain/BlackJack.kt new file mode 100644 index 0000000000..4bae60d485 --- /dev/null +++ b/src/main/kotlin/blackjack/domain/BlackJack.kt @@ -0,0 +1,18 @@ +package blackjack.domain + +class BlackJack( + private val deck: Deck, +) { + fun play(players: List): List { + return players.map { player -> + val drawnCards = Cards( + listOf( + deck.draw(), + deck.draw(), + ) + ) + + OnGoingPlayer(player.name, drawnCards) + } + } +} diff --git a/src/main/kotlin/blackjack/domain/OnGoingPlayer.kt b/src/main/kotlin/blackjack/domain/OnGoingPlayer.kt new file mode 100644 index 0000000000..b09efe8aae --- /dev/null +++ b/src/main/kotlin/blackjack/domain/OnGoingPlayer.kt @@ -0,0 +1,6 @@ +package blackjack.domain + +class OnGoingPlayer( + override val name: String, + override val cards: Cards, +) : Player diff --git a/src/main/kotlin/blackjack/domain/Player.kt b/src/main/kotlin/blackjack/domain/Player.kt index e302640270..e1a8b50e0c 100644 --- a/src/main/kotlin/blackjack/domain/Player.kt +++ b/src/main/kotlin/blackjack/domain/Player.kt @@ -1,6 +1,6 @@ package blackjack.domain -data class Player( - val name: String, - val cards: Cards = Cards(emptyList()), -) +interface Player { + val name: String + val cards: Cards +} diff --git a/src/main/kotlin/blackjack/domain/PreparedPlayer.kt b/src/main/kotlin/blackjack/domain/PreparedPlayer.kt new file mode 100644 index 0000000000..8687057141 --- /dev/null +++ b/src/main/kotlin/blackjack/domain/PreparedPlayer.kt @@ -0,0 +1,7 @@ +package blackjack.domain + +class PreparedPlayer( + override val name: String, +) : Player { + override val cards: Cards = Cards(emptyList()) +} diff --git a/src/test/kotlin/blackjack/domain/BlackJackTest.kt b/src/test/kotlin/blackjack/domain/BlackJackTest.kt new file mode 100644 index 0000000000..df98433a24 --- /dev/null +++ b/src/test/kotlin/blackjack/domain/BlackJackTest.kt @@ -0,0 +1,34 @@ +package blackjack.domain + +import org.assertj.core.api.Assertions.assertThat +import org.junit.jupiter.api.Test + +class BlackJackTest { + @Test + fun `PreparedPlayer는 카드 두 장을 받은 OngoingPlayer가 된다`() { + val deck = Deck() + val blackJack = BlackJack(deck) + + val preparedPlayers = listOf(PreparedPlayer("a")) + val onGoingPlayers = blackJack.play(preparedPlayers) + + val actualCardsCount = onGoingPlayers.first().cards.value.size + val expectedCardsCount = 2 + + assertThat(actualCardsCount).isEqualTo(expectedCardsCount) + } + + @Test + fun `PreparedPlayer는 OngoingPlayer가 되더라도 이름이 유지된다`() { + val deck = Deck() + val blackJack = BlackJack(deck) + + val preparedPlayers = listOf(PreparedPlayer("a")) + val onGoingPlayers = blackJack.play(preparedPlayers) + + val actualPlayerName = onGoingPlayers.first().name + val expectedPlayerName = "a" + + assertThat(actualPlayerName).isEqualTo(expectedPlayerName) + } +} From 3134426d95b77524cd7b6abfe05df43804695c2c Mon Sep 17 00:00:00 2001 From: dean Date: Sun, 12 Nov 2023 15:32:51 +0900 Subject: [PATCH 07/17] =?UTF-8?q?=EC=B9=B4=EB=93=9C=EB=A5=BC=20=ED=95=9C?= =?UTF-8?q?=20=EC=9E=A5=20=EB=8D=94=20=EB=B0=9B=EB=8A=94=20=EA=B8=B0?= =?UTF-8?q?=EB=8A=A5=20=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 2 +- src/main/kotlin/blackjack/domain/BlackJack.kt | 6 ++++++ src/main/kotlin/blackjack/domain/Cards.kt | 4 ++++ src/test/kotlin/blackjack/domain/BlackJackTest.kt | 14 ++++++++++++++ 4 files changed, 25 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index d4d4884ff3..e3a3d2275f 100644 --- a/README.md +++ b/README.md @@ -10,7 +10,7 @@ [x] 카드를 두 장 받는 기능 구현 -[] 카드를 한 장 더 받는 기능 구현 +[x] 카드를 한 장 더 받는 기능 구현 [] 블랙잭 게임을 마치는 기능 구현 diff --git a/src/main/kotlin/blackjack/domain/BlackJack.kt b/src/main/kotlin/blackjack/domain/BlackJack.kt index 4bae60d485..9d7589033d 100644 --- a/src/main/kotlin/blackjack/domain/BlackJack.kt +++ b/src/main/kotlin/blackjack/domain/BlackJack.kt @@ -15,4 +15,10 @@ class BlackJack( OnGoingPlayer(player.name, drawnCards) } } + + fun hit(player: OnGoingPlayer): OnGoingPlayer { + val drawnCard = deck.draw() + + return OnGoingPlayer(player.name, player.cards + drawnCard) + } } diff --git a/src/main/kotlin/blackjack/domain/Cards.kt b/src/main/kotlin/blackjack/domain/Cards.kt index cafadd7b20..215cbf441f 100644 --- a/src/main/kotlin/blackjack/domain/Cards.kt +++ b/src/main/kotlin/blackjack/domain/Cards.kt @@ -7,4 +7,8 @@ value class Cards(val value: List) { cardPointStrategy.getPoint(card.rank) } } + + operator fun plus(other: Card): Cards { + return Cards(value + other) + } } diff --git a/src/test/kotlin/blackjack/domain/BlackJackTest.kt b/src/test/kotlin/blackjack/domain/BlackJackTest.kt index df98433a24..c48f7af48f 100644 --- a/src/test/kotlin/blackjack/domain/BlackJackTest.kt +++ b/src/test/kotlin/blackjack/domain/BlackJackTest.kt @@ -31,4 +31,18 @@ class BlackJackTest { assertThat(actualPlayerName).isEqualTo(expectedPlayerName) } + + @Test + fun `진행중인 플레이어는 카드를 더 뽑을 수 있다`() { + val deck = Deck() + val blackJack = BlackJack(deck) + val player = OnGoingPlayer("a", Cards(listOf())) + + val onGoingPlayer = blackJack.hit(player) + + val actualCardsCount = onGoingPlayer.cards.value.size + val expectedCardsCount = 1 + + assertThat(actualCardsCount).isEqualTo(expectedCardsCount) + } } From f7b3ae6de93fb8c43af53cfa57e3bf437349d57c Mon Sep 17 00:00:00 2001 From: dean Date: Sun, 12 Nov 2023 15:33:49 +0900 Subject: [PATCH 08/17] =?UTF-8?q?ReadMe=20=EA=B8=B0=EB=8A=A5=20=EB=AA=85?= =?UTF-8?q?=EC=84=B8=20=EC=97=85=EB=8D=B0=EC=9D=B4=ED=8A=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index e3a3d2275f..17a02c5e72 100644 --- a/README.md +++ b/README.md @@ -12,6 +12,8 @@ [x] 카드를 한 장 더 받는 기능 구현 -[] 블랙잭 게임을 마치는 기능 구현 +[] 21이 초과했는지 판별하는 기능 구현 + +[] 카드를 그만 받는 기능 구현 [] 입출력 기능 구현 From 28b90752cb9dd3c4ffb9c7e07f0eec3370ae4ee1 Mon Sep 17 00:00:00 2001 From: dean Date: Sun, 12 Nov 2023 15:50:44 +0900 Subject: [PATCH 09/17] =?UTF-8?q?21=EC=9D=B4=20=EC=B4=88=EA=B3=BC=ED=96=88?= =?UTF-8?q?=EB=8A=94=EC=A7=80=20=ED=8C=90=EB=B3=84=ED=95=98=EB=8A=94=20?= =?UTF-8?q?=EA=B8=B0=EB=8A=A5=20=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 2 +- src/main/kotlin/blackjack/domain/BlackJack.kt | 12 ++++++++---- .../blackjack/domain/BlackJackedPlayer.kt | 6 ++++++ .../kotlin/blackjack/domain/BustedPlayer.kt | 6 ++++++ .../kotlin/blackjack/domain/OnGoingPlayer.kt | 16 +++++++++++++++- .../kotlin/blackjack/domain/BlackJackTest.kt | 18 ++++++++++++++++++ 6 files changed, 54 insertions(+), 6 deletions(-) create mode 100644 src/main/kotlin/blackjack/domain/BlackJackedPlayer.kt create mode 100644 src/main/kotlin/blackjack/domain/BustedPlayer.kt diff --git a/README.md b/README.md index 17a02c5e72..abcba132b7 100644 --- a/README.md +++ b/README.md @@ -12,7 +12,7 @@ [x] 카드를 한 장 더 받는 기능 구현 -[] 21이 초과했는지 판별하는 기능 구현 +[x] 21이 초과했는지 판별하는 기능 구현 [] 카드를 그만 받는 기능 구현 diff --git a/src/main/kotlin/blackjack/domain/BlackJack.kt b/src/main/kotlin/blackjack/domain/BlackJack.kt index 9d7589033d..665e7f0d35 100644 --- a/src/main/kotlin/blackjack/domain/BlackJack.kt +++ b/src/main/kotlin/blackjack/domain/BlackJack.kt @@ -3,7 +3,7 @@ package blackjack.domain class BlackJack( private val deck: Deck, ) { - fun play(players: List): List { + fun play(players: List): List { return players.map { player -> val drawnCards = Cards( listOf( @@ -12,13 +12,17 @@ class BlackJack( ) ) - OnGoingPlayer(player.name, drawnCards) + OnGoingPlayer.of(player.name, drawnCards) } } - fun hit(player: OnGoingPlayer): OnGoingPlayer { + fun hit(player: OnGoingPlayer): Player { val drawnCard = deck.draw() - return OnGoingPlayer(player.name, player.cards + drawnCard) + return OnGoingPlayer.of(player.name, player.cards + drawnCard) + } + + companion object { + const val BlackJackedNumber = 21 } } diff --git a/src/main/kotlin/blackjack/domain/BlackJackedPlayer.kt b/src/main/kotlin/blackjack/domain/BlackJackedPlayer.kt new file mode 100644 index 0000000000..16392a1c71 --- /dev/null +++ b/src/main/kotlin/blackjack/domain/BlackJackedPlayer.kt @@ -0,0 +1,6 @@ +package blackjack.domain + +class BlackJackedPlayer( + override val name: String, + override val cards: Cards, +) : Player diff --git a/src/main/kotlin/blackjack/domain/BustedPlayer.kt b/src/main/kotlin/blackjack/domain/BustedPlayer.kt new file mode 100644 index 0000000000..c0e700045b --- /dev/null +++ b/src/main/kotlin/blackjack/domain/BustedPlayer.kt @@ -0,0 +1,6 @@ +package blackjack.domain + +class BustedPlayer( + override val name: String, + override val cards: Cards, +) : Player diff --git a/src/main/kotlin/blackjack/domain/OnGoingPlayer.kt b/src/main/kotlin/blackjack/domain/OnGoingPlayer.kt index b09efe8aae..85b298caf0 100644 --- a/src/main/kotlin/blackjack/domain/OnGoingPlayer.kt +++ b/src/main/kotlin/blackjack/domain/OnGoingPlayer.kt @@ -3,4 +3,18 @@ package blackjack.domain class OnGoingPlayer( override val name: String, override val cards: Cards, -) : Player +) : Player { + companion object { + fun of(name: String, cards: Cards): Player { + val hardAcePoint = cards.getPoints(HardAcePointStrategy()) + + return if (hardAcePoint == BlackJack.BlackJackedNumber) { + BlackJackedPlayer(name, cards) + } else if (hardAcePoint > BlackJack.BlackJackedNumber) { + BustedPlayer(name, cards) + } else { + OnGoingPlayer(name, cards) + } + } + } +} diff --git a/src/test/kotlin/blackjack/domain/BlackJackTest.kt b/src/test/kotlin/blackjack/domain/BlackJackTest.kt index c48f7af48f..16f2f16643 100644 --- a/src/test/kotlin/blackjack/domain/BlackJackTest.kt +++ b/src/test/kotlin/blackjack/domain/BlackJackTest.kt @@ -45,4 +45,22 @@ class BlackJackTest { assertThat(actualCardsCount).isEqualTo(expectedCardsCount) } + + @Test + fun `카드를 뽑았을 때 21을 초과하면 버스트된 플레이어가 된다`() { + val deck = Deck() + val blackJack = BlackJack(deck) + val cards = Cards( + listOf( + Card(Suit.Spade, Rank.Ten), + Card(Suit.Spade, Rank.Ten), + Card(Suit.Spade, Rank.Ace), + ) + ) + val player = OnGoingPlayer("a", cards) + + val bustedPlayer = blackJack.hit(player) + + assertThat(bustedPlayer).isInstanceOf(BustedPlayer::class.java) + } } From bec11d4f6d95a58fe1e2829c3e7f85e6986fcf20 Mon Sep 17 00:00:00 2001 From: dean Date: Sun, 12 Nov 2023 15:54:07 +0900 Subject: [PATCH 10/17] =?UTF-8?q?=EC=B9=B4=EB=93=9C=EB=A5=BC=20=EA=B7=B8?= =?UTF-8?q?=EB=A7=8C=20=EB=B0=9B=EB=8A=94=20=EA=B8=B0=EB=8A=A5=20=EA=B5=AC?= =?UTF-8?q?=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 2 +- src/main/kotlin/blackjack/domain/BlackJack.kt | 4 ++++ src/main/kotlin/blackjack/domain/FinishedPlayer.kt | 3 +++ src/test/kotlin/blackjack/domain/BlackJackTest.kt | 14 ++++++++++++++ 4 files changed, 22 insertions(+), 1 deletion(-) create mode 100644 src/main/kotlin/blackjack/domain/FinishedPlayer.kt diff --git a/README.md b/README.md index abcba132b7..a262a0c422 100644 --- a/README.md +++ b/README.md @@ -14,6 +14,6 @@ [x] 21이 초과했는지 판별하는 기능 구현 -[] 카드를 그만 받는 기능 구현 +[x] 카드를 그만 받는 기능 구현 [] 입출력 기능 구현 diff --git a/src/main/kotlin/blackjack/domain/BlackJack.kt b/src/main/kotlin/blackjack/domain/BlackJack.kt index 665e7f0d35..2d56c40304 100644 --- a/src/main/kotlin/blackjack/domain/BlackJack.kt +++ b/src/main/kotlin/blackjack/domain/BlackJack.kt @@ -22,6 +22,10 @@ class BlackJack( return OnGoingPlayer.of(player.name, player.cards + drawnCard) } + fun stay(player: Player): FinishedPlayer { + return FinishedPlayer(player) + } + companion object { const val BlackJackedNumber = 21 } diff --git a/src/main/kotlin/blackjack/domain/FinishedPlayer.kt b/src/main/kotlin/blackjack/domain/FinishedPlayer.kt new file mode 100644 index 0000000000..7571d395c4 --- /dev/null +++ b/src/main/kotlin/blackjack/domain/FinishedPlayer.kt @@ -0,0 +1,3 @@ +package blackjack.domain + +class FinishedPlayer(player: Player) : Player by player diff --git a/src/test/kotlin/blackjack/domain/BlackJackTest.kt b/src/test/kotlin/blackjack/domain/BlackJackTest.kt index 16f2f16643..f0dd2e8398 100644 --- a/src/test/kotlin/blackjack/domain/BlackJackTest.kt +++ b/src/test/kotlin/blackjack/domain/BlackJackTest.kt @@ -63,4 +63,18 @@ class BlackJackTest { assertThat(bustedPlayer).isInstanceOf(BustedPlayer::class.java) } + + @Test + fun `스테이 하면 종료한 플레이어가 된다`() { + val deck = Deck() + val blackJack = BlackJack(deck) + val player = object : Player { + override val name: String = "" + override val cards: Cards = Cards(emptyList()) + } + + val finishedPlayer = blackJack.stay(player) + + assertThat(finishedPlayer).isInstanceOf(FinishedPlayer::class.java) + } } From 5d53b839d3fc70e027e58e88b050996dc6c8f7ef Mon Sep 17 00:00:00 2001 From: dean Date: Wed, 22 Nov 2023 01:01:33 +0900 Subject: [PATCH 11/17] =?UTF-8?q?=EC=9E=85=EC=B6=9C=EB=A0=A5=20=EA=B8=B0?= =?UTF-8?q?=EB=8A=A5=20=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 2 +- src/main/kotlin/blackjack/Main.kt | 40 ++++++++++++++++++++ src/main/kotlin/blackjack/domain/Suit.kt | 8 ++-- src/main/kotlin/blackjack/view/InputView.kt | 22 +++++++++++ src/main/kotlin/blackjack/view/OutputView.kt | 20 ++++++++++ 5 files changed, 87 insertions(+), 5 deletions(-) create mode 100644 src/main/kotlin/blackjack/Main.kt create mode 100644 src/main/kotlin/blackjack/view/InputView.kt create mode 100644 src/main/kotlin/blackjack/view/OutputView.kt diff --git a/README.md b/README.md index a262a0c422..b3aa3cd3aa 100644 --- a/README.md +++ b/README.md @@ -16,4 +16,4 @@ [x] 카드를 그만 받는 기능 구현 -[] 입출력 기능 구현 +[x] 입출력 기능 구현 diff --git a/src/main/kotlin/blackjack/Main.kt b/src/main/kotlin/blackjack/Main.kt new file mode 100644 index 0000000000..1d98b0dd43 --- /dev/null +++ b/src/main/kotlin/blackjack/Main.kt @@ -0,0 +1,40 @@ +package blackjack + +import blackjack.domain.BlackJack +import blackjack.domain.Deck +import blackjack.domain.OnGoingPlayer +import blackjack.domain.Player +import blackjack.view.InputView +import blackjack.view.OutputView + +fun main() { + val players = InputView.getPlayers() + + val blackJack = BlackJack(Deck()) + + val finishedPlayers: List = blackJack.play(players) + .onEach { OutputView.printCards(it) } + .map { player -> + var onGoingPlayer = player + + while (true) { + if (onGoingPlayer !is OnGoingPlayer) { + break + } + + val isHit = InputView.isHit(onGoingPlayer.name) + + if (!isHit) { + break + } + + onGoingPlayer = blackJack.hit(onGoingPlayer) + } + + onGoingPlayer + } + + finishedPlayers.forEach { + OutputView.printResult(it) + } +} diff --git a/src/main/kotlin/blackjack/domain/Suit.kt b/src/main/kotlin/blackjack/domain/Suit.kt index 20297bcbda..b83a68219b 100644 --- a/src/main/kotlin/blackjack/domain/Suit.kt +++ b/src/main/kotlin/blackjack/domain/Suit.kt @@ -1,8 +1,8 @@ package blackjack.domain enum class Suit(val value: String) { - Spade("♠"), - Club("♣"), - Diamond("♦"), - Heart("♥"), + Spade("스페이드"), + Club("클로버"), + Diamond("다이아몬드"), + Heart("하트"), } diff --git a/src/main/kotlin/blackjack/view/InputView.kt b/src/main/kotlin/blackjack/view/InputView.kt new file mode 100644 index 0000000000..3fecd05944 --- /dev/null +++ b/src/main/kotlin/blackjack/view/InputView.kt @@ -0,0 +1,22 @@ +package blackjack.view + +import blackjack.domain.PreparedPlayer + +object InputView { + fun getPlayers(): List { + println("게임에 참여할 사람의 이름을 입력하세요.(쉼표 기준으로 분리)") + + return readln().split(",") + .map { PreparedPlayer(it) } + } + + fun isHit(name: String): Boolean { + println("${name}는 한장의 카드를 더 받겠습니까?(예는 y, 아니오는 n)") + + return when (readln()) { + "y" -> true + "n" -> false + else -> error("y/n 으로만 입력해주세요") + } + } +} diff --git a/src/main/kotlin/blackjack/view/OutputView.kt b/src/main/kotlin/blackjack/view/OutputView.kt new file mode 100644 index 0000000000..c5201f4d54 --- /dev/null +++ b/src/main/kotlin/blackjack/view/OutputView.kt @@ -0,0 +1,20 @@ +package blackjack.view + +import blackjack.domain.HardAcePointStrategy +import blackjack.domain.Player + +object OutputView { + fun printCards(player: Player) { + println("${player.name}카드: ${player.cards.value.joinToString { "${it.rank.value}${it.suit.value}" }}") + } + + fun printResult(player: Player) { + println( + "${player.name}카드: ${player.cards.value.joinToString { "${it.rank.value}${it.suit.value}" }} - 결과: ${ + player.cards.getPoints( + HardAcePointStrategy() + ) + }" + ) + } +} From 00b832166392ec533995654c0c4d5281706e5d95 Mon Sep 17 00:00:00 2001 From: dean Date: Wed, 22 Nov 2023 01:05:43 +0900 Subject: [PATCH 12/17] =?UTF-8?q?=EC=B9=B4=EB=93=9C=20=EC=85=94=ED=94=8C?= =?UTF-8?q?=ED=95=98=EB=8A=94=20=EA=B8=B0=EB=8A=A5=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/kotlin/blackjack/domain/Deck.kt | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/src/main/kotlin/blackjack/domain/Deck.kt b/src/main/kotlin/blackjack/domain/Deck.kt index 4a1894c3ee..37e42fe287 100644 --- a/src/main/kotlin/blackjack/domain/Deck.kt +++ b/src/main/kotlin/blackjack/domain/Deck.kt @@ -12,10 +12,12 @@ class Deck { } private fun setupDeck(): List { - return Suit.values().flatMap { suit -> - Rank.values().map { rank -> - Card(suit, rank) + return Suit.values() + .flatMap { suit -> + Rank.values().map { rank -> + Card(suit, rank) + } } - } + .shuffled() } } From a9fd79ed07e3dcb57af835606f2acfe1cded2159 Mon Sep 17 00:00:00 2001 From: dean Date: Wed, 22 Nov 2023 01:05:54 +0900 Subject: [PATCH 13/17] =?UTF-8?q?=EC=B6=9C=EB=A0=A5=20=EA=B5=AC=EB=AC=B8?= =?UTF-8?q?=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/kotlin/blackjack/Main.kt | 1 + 1 file changed, 1 insertion(+) diff --git a/src/main/kotlin/blackjack/Main.kt b/src/main/kotlin/blackjack/Main.kt index 1d98b0dd43..b49e33d7f8 100644 --- a/src/main/kotlin/blackjack/Main.kt +++ b/src/main/kotlin/blackjack/Main.kt @@ -29,6 +29,7 @@ fun main() { } onGoingPlayer = blackJack.hit(onGoingPlayer) + OutputView.printCards(onGoingPlayer) } onGoingPlayer From 89d78148e1e2ea3238f2a0b260d250837a9ec9f1 Mon Sep 17 00:00:00 2001 From: dean Date: Wed, 22 Nov 2023 01:16:16 +0900 Subject: [PATCH 14/17] =?UTF-8?q?Cards=20=EC=A0=90=EC=88=98=20=EA=B3=84?= =?UTF-8?q?=EC=82=B0=ED=95=A0=20=EB=95=8C=20strategy=20=EB=B0=9B=EC=A7=80?= =?UTF-8?q?=20=EC=95=8A=EB=8F=84=EB=A1=9D=20=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/kotlin/blackjack/domain/Cards.kt | 12 +++++++--- .../kotlin/blackjack/domain/OnGoingPlayer.kt | 2 +- src/main/kotlin/blackjack/view/OutputView.kt | 4 +--- src/test/kotlin/blackjack/domain/CardsTest.kt | 22 +++++++++++++++---- 4 files changed, 29 insertions(+), 11 deletions(-) diff --git a/src/main/kotlin/blackjack/domain/Cards.kt b/src/main/kotlin/blackjack/domain/Cards.kt index 215cbf441f..4e0b66ea8f 100644 --- a/src/main/kotlin/blackjack/domain/Cards.kt +++ b/src/main/kotlin/blackjack/domain/Cards.kt @@ -2,10 +2,16 @@ package blackjack.domain @JvmInline value class Cards(val value: List) { - fun getPoints(cardPointStrategy: CardPointStrategy): Int { - return value.sumOf { card -> - cardPointStrategy.getPoint(card.rank) + fun getPoints(): Int { + val hardAcePoint = value.sumOf { card -> + HardAcePointStrategy().getPoint(card.rank) } + + val softAcePointStrategy = value.sumOf { card -> + SoftAcePointStrategy().getPoint(card.rank) + } + + return softAcePointStrategy.takeIf { it <= 21 } ?: hardAcePoint } operator fun plus(other: Card): Cards { diff --git a/src/main/kotlin/blackjack/domain/OnGoingPlayer.kt b/src/main/kotlin/blackjack/domain/OnGoingPlayer.kt index 85b298caf0..d911dcc69c 100644 --- a/src/main/kotlin/blackjack/domain/OnGoingPlayer.kt +++ b/src/main/kotlin/blackjack/domain/OnGoingPlayer.kt @@ -6,7 +6,7 @@ class OnGoingPlayer( ) : Player { companion object { fun of(name: String, cards: Cards): Player { - val hardAcePoint = cards.getPoints(HardAcePointStrategy()) + val hardAcePoint = cards.getPoints() return if (hardAcePoint == BlackJack.BlackJackedNumber) { BlackJackedPlayer(name, cards) diff --git a/src/main/kotlin/blackjack/view/OutputView.kt b/src/main/kotlin/blackjack/view/OutputView.kt index c5201f4d54..e779f984e9 100644 --- a/src/main/kotlin/blackjack/view/OutputView.kt +++ b/src/main/kotlin/blackjack/view/OutputView.kt @@ -11,9 +11,7 @@ object OutputView { fun printResult(player: Player) { println( "${player.name}카드: ${player.cards.value.joinToString { "${it.rank.value}${it.suit.value}" }} - 결과: ${ - player.cards.getPoints( - HardAcePointStrategy() - ) + player.cards.getPoints() }" ) } diff --git a/src/test/kotlin/blackjack/domain/CardsTest.kt b/src/test/kotlin/blackjack/domain/CardsTest.kt index fc029c59d8..aebfea5179 100644 --- a/src/test/kotlin/blackjack/domain/CardsTest.kt +++ b/src/test/kotlin/blackjack/domain/CardsTest.kt @@ -5,8 +5,7 @@ import org.junit.jupiter.api.Test class CardsTest { @Test - fun `모든 카드의 점수 총 합을 구할 수 있다`() { - val pointStrategy = CardPointStrategy { it.value } + fun `Ace는 카드의 총 합이 21을 넘지 않으면 11으로 활용한다`() { val cards = Cards( listOf( Card(Suit.Spade, Rank.Ace), @@ -14,8 +13,23 @@ class CardsTest { ) ) - val totalPoint = cards.getPoints(pointStrategy) + val totalPoint = cards.getPoints() - assertThat(totalPoint).isEqualTo(3) + assertThat(totalPoint).isEqualTo(13) + } + + @Test + fun `Ace를 11로 사용해서 카드의 총 합이 21을 넘는 경우 1로 활용한다`() { + val cards = Cards( + listOf( + Card(Suit.Spade, Rank.Ace), + Card(Suit.Spade, Rank.Two), + Card(Suit.Spade, Rank.Ten), + ) + ) + + val totalPoint = cards.getPoints() + + assertThat(totalPoint).isEqualTo(13) } } \ No newline at end of file From 0630506beb62d1eaf5493d288f6dca2451dad3c7 Mon Sep 17 00:00:00 2001 From: dean Date: Wed, 22 Nov 2023 01:19:55 +0900 Subject: [PATCH 15/17] =?UTF-8?q?=EC=88=AB=EC=9E=90=20=ED=91=9C=EA=B8=B0?= =?UTF-8?q?=ED=95=A0=20=EB=95=8C=20=EC=B9=B4=EB=93=9C=EC=9D=B4=EB=A6=84=20?= =?UTF-8?q?=ED=91=9C=EA=B8=B0=ED=95=98=EB=8F=84=EB=A1=9D=20=EB=B3=80?= =?UTF-8?q?=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/kotlin/blackjack/domain/Rank.kt | 28 ++++++++++---------- src/main/kotlin/blackjack/view/OutputView.kt | 5 ++-- 2 files changed, 16 insertions(+), 17 deletions(-) diff --git a/src/main/kotlin/blackjack/domain/Rank.kt b/src/main/kotlin/blackjack/domain/Rank.kt index 6e368d75b0..ec505d78a5 100644 --- a/src/main/kotlin/blackjack/domain/Rank.kt +++ b/src/main/kotlin/blackjack/domain/Rank.kt @@ -1,17 +1,17 @@ package blackjack.domain -enum class Rank(val value: Int) { - Ace(1), - Two(2), - Three(3), - Four(4), - Five(5), - Six(6), - Seven(7), - Eight(8), - Nine(9), - Ten(10), - Jack(10), - Queen(10), - King(10), +enum class Rank(val value: Int, val nameValue: String) { + Ace(1, "1"), + Two(2, "2"), + Three(3, "3"), + Four(4, "4"), + Five(5, "5"), + Six(6, "6"), + Seven(7, "7"), + Eight(8, "8"), + Nine(9, "9"), + Ten(10, "10"), + Jack(10, "J"), + Queen(10, "Q"), + King(10, "K"), } diff --git a/src/main/kotlin/blackjack/view/OutputView.kt b/src/main/kotlin/blackjack/view/OutputView.kt index e779f984e9..e440642cba 100644 --- a/src/main/kotlin/blackjack/view/OutputView.kt +++ b/src/main/kotlin/blackjack/view/OutputView.kt @@ -1,16 +1,15 @@ package blackjack.view -import blackjack.domain.HardAcePointStrategy import blackjack.domain.Player object OutputView { fun printCards(player: Player) { - println("${player.name}카드: ${player.cards.value.joinToString { "${it.rank.value}${it.suit.value}" }}") + println("${player.name}카드: ${player.cards.value.joinToString { "${it.rank.nameValue}${it.suit.value}" }}") } fun printResult(player: Player) { println( - "${player.name}카드: ${player.cards.value.joinToString { "${it.rank.value}${it.suit.value}" }} - 결과: ${ + "${player.name}카드: ${player.cards.value.joinToString { "${it.rank.nameValue}${it.suit.value}" }} - 결과: ${ player.cards.getPoints() }" ) From 571e42563d08d506f70b41a93047dbc0e64f8692 Mon Sep 17 00:00:00 2001 From: dean Date: Wed, 22 Nov 2023 01:21:38 +0900 Subject: [PATCH 16/17] =?UTF-8?q?21=20=EC=83=81=EC=88=98=EB=A1=9C=20?= =?UTF-8?q?=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/kotlin/blackjack/domain/Cards.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/kotlin/blackjack/domain/Cards.kt b/src/main/kotlin/blackjack/domain/Cards.kt index 4e0b66ea8f..61bd802483 100644 --- a/src/main/kotlin/blackjack/domain/Cards.kt +++ b/src/main/kotlin/blackjack/domain/Cards.kt @@ -11,7 +11,7 @@ value class Cards(val value: List) { SoftAcePointStrategy().getPoint(card.rank) } - return softAcePointStrategy.takeIf { it <= 21 } ?: hardAcePoint + return softAcePointStrategy.takeIf { it <= BlackJack.BlackJackedNumber } ?: hardAcePoint } operator fun plus(other: Card): Cards { From ce767561301cdff64b3fb495efd7f925a4b1e162 Mon Sep 17 00:00:00 2001 From: dean Date: Wed, 22 Nov 2023 01:22:47 +0900 Subject: [PATCH 17/17] =?UTF-8?q?new=20line=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/test/kotlin/blackjack/domain/CardsTest.kt | 2 +- src/test/kotlin/blackjack/domain/DeckTest.kt | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/test/kotlin/blackjack/domain/CardsTest.kt b/src/test/kotlin/blackjack/domain/CardsTest.kt index aebfea5179..269cb09986 100644 --- a/src/test/kotlin/blackjack/domain/CardsTest.kt +++ b/src/test/kotlin/blackjack/domain/CardsTest.kt @@ -32,4 +32,4 @@ class CardsTest { assertThat(totalPoint).isEqualTo(13) } -} \ No newline at end of file +} diff --git a/src/test/kotlin/blackjack/domain/DeckTest.kt b/src/test/kotlin/blackjack/domain/DeckTest.kt index ab35b60392..23a901c902 100644 --- a/src/test/kotlin/blackjack/domain/DeckTest.kt +++ b/src/test/kotlin/blackjack/domain/DeckTest.kt @@ -26,4 +26,4 @@ class DeckTest { } } } -} \ No newline at end of file +}