From 42b0ddd041a119b991e3160119ae7d2480a58b76 Mon Sep 17 00:00:00 2001 From: haeseon lee Date: Thu, 12 Mar 2026 15:34:03 +0900 Subject: [PATCH 01/30] =?UTF-8?q?refactor:=20=EB=B6=88=ED=95=84=EC=9A=94?= =?UTF-8?q?=ED=95=9C=20import=EB=AC=B8=20=EC=82=AD=EC=A0=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/blackjack/service/Game.java | 5 ----- src/main/java/blackjack/service/RandomCardPicker.java | 1 - src/test/java/blackjackTest/domain/CardTest.java | 1 - 3 files changed, 7 deletions(-) diff --git a/src/main/java/blackjack/service/Game.java b/src/main/java/blackjack/service/Game.java index 616e3e5bf98..6f05b1be763 100644 --- a/src/main/java/blackjack/service/Game.java +++ b/src/main/java/blackjack/service/Game.java @@ -1,12 +1,7 @@ package blackjack.service; import blackjack.domain.*; -import blackjack.view.InputView; -import blackjack.view.OutputView; - -import java.util.HashMap; import java.util.List; -import java.util.Map; public class Game { diff --git a/src/main/java/blackjack/service/RandomCardPicker.java b/src/main/java/blackjack/service/RandomCardPicker.java index 62d1c4a7ee3..086323220d5 100644 --- a/src/main/java/blackjack/service/RandomCardPicker.java +++ b/src/main/java/blackjack/service/RandomCardPicker.java @@ -7,7 +7,6 @@ import java.util.ArrayList; import java.util.List; -import java.util.Random; public class RandomCardPicker implements CardPicker { private final NumberGenerator numberGenerator; diff --git a/src/test/java/blackjackTest/domain/CardTest.java b/src/test/java/blackjackTest/domain/CardTest.java index 05c9d4930eb..c26b0b10f09 100644 --- a/src/test/java/blackjackTest/domain/CardTest.java +++ b/src/test/java/blackjackTest/domain/CardTest.java @@ -1,7 +1,6 @@ package blackjackTest.domain; import static org.assertj.core.api.Assertions.assertThat; -import static org.assertj.core.api.Assertions.assertThatThrownBy; import blackjack.domain.Card; import blackjack.domain.Rank; From 1efb71c2d53f938428afa458201e1e5d10d102b8 Mon Sep 17 00:00:00 2001 From: haeseon lee Date: Thu, 12 Mar 2026 16:19:28 +0900 Subject: [PATCH 02/30] =?UTF-8?q?refactor:=20Player=20=EB=B6=88=ED=95=84?= =?UTF-8?q?=EC=9A=94=ED=95=9C=20=ED=95=84=EB=93=9C=20&=20=EB=A9=94?= =?UTF-8?q?=EC=84=9C=EB=93=9C=20=EC=82=AD=EC=A0=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/blackjack/domain/Player.java | 7 ------- 1 file changed, 7 deletions(-) diff --git a/src/main/java/blackjack/domain/Player.java b/src/main/java/blackjack/domain/Player.java index 9c86f4bc61a..b8d235b9d32 100644 --- a/src/main/java/blackjack/domain/Player.java +++ b/src/main/java/blackjack/domain/Player.java @@ -1,14 +1,7 @@ package blackjack.domain; public class Player extends Participant { - private final String name; - public Player(String name) { super(name); - this.name = name; - } - - public String getName() { - return name; } } From bfcb4f20243e8b8629f1b297c677509212eabf66 Mon Sep 17 00:00:00 2001 From: haeseon lee Date: Fri, 13 Mar 2026 10:57:03 +0900 Subject: [PATCH 03/30] =?UTF-8?q?docs:=20=EB=B0=B0=ED=8C=85=20=EC=B6=94?= =?UTF-8?q?=EA=B0=80=20=EA=B8=B0=EB=8A=A5=20=EB=AA=A9=EB=A1=9D=20=EC=9E=91?= =?UTF-8?q?=EC=84=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 27 +++++++++++++++++++++++++-- 1 file changed, 25 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 2f845848790..7537c12f80d 100644 --- a/README.md +++ b/README.md @@ -1,7 +1,8 @@ # java-blackjack -블랙잭 미션 저장소 +## 블랙잭 미션 저장소 +### 구현 기능 목록 - [x] 카드 점수 계산 (숫자는 그대로, J,Q,K는 10으로 계산) - [x] 카드 합계 계산 - [x] Ace 개수 계산 @@ -33,4 +34,26 @@ - [x] 출력 - [x] 분배 받은 카드 목록 출력 - [x] 딜러와 참가자 카드 합계 결과 출력 - - [x] 최종 승패 결과 출력 \ No newline at end of file + - [x] 최종 승패 결과 출력 + +### 추가 기능 구현 목록 +- [ ] 입력 + - [ ] 참여하는 Player의 배팅 금액을 입력받는다. + +- [ ] 출력 + - [ ] 딜러와 참가자의 최종 수익을 출력한다. + +- [ ] 배팅 금액 + - [ ] 플레이어와 딜러는 배팅 금액을 가진다. + - [ ] 플레이어와 딜러는 배팅 금액을 얻거나 잃는다. + +- [ ] Player & Dealer 블랙잭 판단 + - [ ] 플레이어와 딜러의 초기 카드 2장의 합이 21인지 판단한다. + - [ ] 플레이어에게 1.5배 지급하는 겅우 + - [ ] 플레이어의 초기 카드 2장이 21인 경우 + - [ ] 플레이어가 배팅 금액을 모두 잃는 경우 + - [ ] 딜러의 초기 카드 2장이 21인 경우 + - [ ] 플레이어가 버스트인 경우 + - [ ] 플레이어가 배팅한 금액을 그대로 받는 경우 + - [ ] 플레이어가 카드를 계속 뽑아서 21이 되는 경우 + - [ ] 딜러가 버스트인 경우 \ No newline at end of file From 85f57699a6a7c48cbc15b787cf8efb3b54abf5ef Mon Sep 17 00:00:00 2001 From: haeseon lee Date: Fri, 13 Mar 2026 10:58:51 +0900 Subject: [PATCH 04/30] =?UTF-8?q?refactor:=20printDealerCardDrawnResult=20?= =?UTF-8?q?=EC=B6=9C=EB=A0=A5=20=EB=AC=B8=EA=B5=AC=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/blackjack/view/OutputView.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/blackjack/view/OutputView.java b/src/main/java/blackjack/view/OutputView.java index 758f388c3f8..f92f603d86f 100644 --- a/src/main/java/blackjack/view/OutputView.java +++ b/src/main/java/blackjack/view/OutputView.java @@ -30,7 +30,7 @@ private static void printFinalDrawnCards(String playerName, List cardNam public static void printDealerCardDrawnResult(int cardCount) { System.out.println(); - System.out.println("딜러는 " + cardCount + "장의 카드를 더 뽑았습니다."); + System.out.println("딜러는 16이하라" + cardCount + "장의 카드를 더 뽑았습니다."); } public static void printFinalCardScores(List playerResult, ParticipantResult dealerResult) { From fca8b22ca5d4d6d302b1a8ef77c53a148643decc Mon Sep 17 00:00:00 2001 From: haeseon lee Date: Fri, 13 Mar 2026 11:03:39 +0900 Subject: [PATCH 05/30] =?UTF-8?q?feat:=20=ED=94=8C=EB=A0=88=EC=9D=B4?= =?UTF-8?q?=EC=96=B4=20=EB=B0=B0=ED=8C=85=20=EA=B8=88=EC=95=A1=20=EC=9E=85?= =?UTF-8?q?=EB=A0=A5=20=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 --- src/main/java/blackjack/view/InputView.java | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/main/java/blackjack/view/InputView.java b/src/main/java/blackjack/view/InputView.java index fad744f5fd1..500be000768 100644 --- a/src/main/java/blackjack/view/InputView.java +++ b/src/main/java/blackjack/view/InputView.java @@ -17,4 +17,9 @@ public static String askHitOrStand(String playerName) { System.out.printf(ASK_HIT_OR_STAND, playerName); return scanner.nextLine(); } + + public static int askPlayerBettingAmount(String playerName) { + System.out.printf("%s의 배팅 금액은?", playerName); + return scanner.nextInt(); + } } From af2d198260adc3732867901e7e21c3a53d08aef8 Mon Sep 17 00:00:00 2001 From: haeseon lee Date: Fri, 13 Mar 2026 11:11:00 +0900 Subject: [PATCH 06/30] =?UTF-8?q?docs:=20=EC=B6=94=EA=B0=80=20=EA=B8=B0?= =?UTF-8?q?=EB=8A=A5=20=EA=B5=AC=ED=98=84=20=EB=AA=A9=EB=A1=9D=20=EC=88=98?= =?UTF-8?q?=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/README.md b/README.md index 7537c12f80d..2fc3794a21d 100644 --- a/README.md +++ b/README.md @@ -37,11 +37,8 @@ - [x] 최종 승패 결과 출력 ### 추가 기능 구현 목록 -- [ ] 입력 - - [ ] 참여하는 Player의 배팅 금액을 입력받는다. - -- [ ] 출력 - - [ ] 딜러와 참가자의 최종 수익을 출력한다. +- [x] 입력 + - [x] 참여하는 Player의 배팅 금액을 입력받는다. - [ ] 배팅 금액 - [ ] 플레이어와 딜러는 배팅 금액을 가진다. @@ -56,4 +53,7 @@ - [ ] 플레이어가 버스트인 경우 - [ ] 플레이어가 배팅한 금액을 그대로 받는 경우 - [ ] 플레이어가 카드를 계속 뽑아서 21이 되는 경우 - - [ ] 딜러가 버스트인 경우 \ No newline at end of file + - [ ] 딜러가 버스트인 경우 + +- [ ] 출력 + - [ ] 딜러와 참가자의 최종 수익을 출력한다. From 1c0939a07f140c5959336e4acd9b4b347d50b490 Mon Sep 17 00:00:00 2001 From: haeseon lee Date: Fri, 13 Mar 2026 11:37:28 +0900 Subject: [PATCH 07/30] =?UTF-8?q?refactor:=20=EB=B0=B0=ED=8C=85=20?= =?UTF-8?q?=EA=B8=88=EC=95=A1=20=EC=9E=85=EB=A0=A5=20=ED=83=80=EC=9E=85=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/java/blackjack/view/InputView.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/java/blackjack/view/InputView.java b/src/main/java/blackjack/view/InputView.java index 500be000768..2ab272fd13c 100644 --- a/src/main/java/blackjack/view/InputView.java +++ b/src/main/java/blackjack/view/InputView.java @@ -18,8 +18,8 @@ public static String askHitOrStand(String playerName) { return scanner.nextLine(); } - public static int askPlayerBettingAmount(String playerName) { + public static String askPlayerBettingAmount(String playerName) { System.out.printf("%s의 배팅 금액은?", playerName); - return scanner.nextInt(); + return scanner.nextLine(); } } From 318db5bcd498066390543a2ec820e6cd4813269b Mon Sep 17 00:00:00 2001 From: haeseon lee Date: Fri, 13 Mar 2026 13:49:58 +0900 Subject: [PATCH 08/30] =?UTF-8?q?feat:=20=ED=94=8C=EB=A0=88=EC=9D=B4?= =?UTF-8?q?=EC=96=B4=20=EB=B0=B0=ED=8C=85=20=EA=B8=88=EC=95=A1=20=EC=A0=80?= =?UTF-8?q?=EC=9E=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 5 ++--- src/main/java/blackjack/domain/Money.java | 14 ++++++++++++++ 2 files changed, 16 insertions(+), 3 deletions(-) create mode 100644 src/main/java/blackjack/domain/Money.java diff --git a/README.md b/README.md index 2fc3794a21d..b82159fe677 100644 --- a/README.md +++ b/README.md @@ -40,9 +40,8 @@ - [x] 입력 - [x] 참여하는 Player의 배팅 금액을 입력받는다. -- [ ] 배팅 금액 - - [ ] 플레이어와 딜러는 배팅 금액을 가진다. - - [ ] 플레이어와 딜러는 배팅 금액을 얻거나 잃는다. +- [x] 배팅 금액 + - [x] 플레이어와 딜러는 배팅 금액을 가진다. - [ ] Player & Dealer 블랙잭 판단 - [ ] 플레이어와 딜러의 초기 카드 2장의 합이 21인지 판단한다. diff --git a/src/main/java/blackjack/domain/Money.java b/src/main/java/blackjack/domain/Money.java new file mode 100644 index 00000000000..2700ce22649 --- /dev/null +++ b/src/main/java/blackjack/domain/Money.java @@ -0,0 +1,14 @@ +package blackjack.domain; + +public class Money { + + private final int bettingMoney; + + public Money(int bettingMoney) { + this.bettingMoney = bettingMoney; + } + + public int getBettingMoney() { + return bettingMoney; + } +} From 3235007ae6143655e0cc50b02bccf5b2e41e5863 Mon Sep 17 00:00:00 2001 From: haeseon lee Date: Fri, 13 Mar 2026 14:52:02 +0900 Subject: [PATCH 09/30] =?UTF-8?q?feat:=20=EB=B0=B0=ED=8C=85=20=EA=B8=88?= =?UTF-8?q?=EC=95=A1=20=EC=9E=85=EB=A0=A5=EA=B0=92=20=EA=B2=80=EC=A6=9D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/blackjack/utils/InputParser.java | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/src/main/java/blackjack/utils/InputParser.java b/src/main/java/blackjack/utils/InputParser.java index b9a482fb86f..ff9a5676f27 100644 --- a/src/main/java/blackjack/utils/InputParser.java +++ b/src/main/java/blackjack/utils/InputParser.java @@ -17,6 +17,14 @@ public static List splitPlayerNames(String input) { .toList(); } + public static int convertNumber(String input) { + try { + return Integer.parseInt(input); + } catch (NumberFormatException e) { + throw new IllegalArgumentException("[ERROR] 숫자 이외의 값은 입력할 수 없습니다."); + } + } + private static void validateNameEmpty(String name) { if (name.trim().isEmpty()) { throw new IllegalArgumentException("[ERROR] 플레이어 이름은 공백이 될 수 없습니다."); From ebd112a09b011c23a8dee5e5104f316565808346 Mon Sep 17 00:00:00 2001 From: haeseon lee Date: Fri, 13 Mar 2026 21:25:40 +0900 Subject: [PATCH 10/30] =?UTF-8?q?test:=20=ED=94=8C=EB=A0=88=EC=9D=B4?= =?UTF-8?q?=EC=96=B4=20=EC=B4=88=EA=B8=B0=20=EC=B9=B4=EB=93=9C=202?= =?UTF-8?q?=EC=9E=A5=20=ED=95=A9=EC=9D=B4=2021=EC=9D=B8=EC=A7=80=20?= =?UTF-8?q?=ED=8C=90=EB=8B=A8=ED=95=98=EB=8A=94=20=EB=A9=94=EC=84=9C?= =?UTF-8?q?=EB=93=9C=20=ED=85=8C=EC=8A=A4=ED=8A=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../blackjackTest/service/BlackjackTest.java | 21 +++++++++++++++++++ 1 file changed, 21 insertions(+) create mode 100644 src/test/java/blackjackTest/service/BlackjackTest.java diff --git a/src/test/java/blackjackTest/service/BlackjackTest.java b/src/test/java/blackjackTest/service/BlackjackTest.java new file mode 100644 index 00000000000..c9a6876c595 --- /dev/null +++ b/src/test/java/blackjackTest/service/BlackjackTest.java @@ -0,0 +1,21 @@ +package blackjackTest.service; + +import blackjack.domain.Card; +import blackjack.domain.Player; +import blackjack.domain.Rank; +import blackjack.domain.Shape; +import org.junit.jupiter.api.Test; + +import static org.assertj.core.api.Assertions.assertThat; + +public class BlackjackTest { + + @Test + void 플레이어_초기카드_합_21인지_확인() { + Player pobi = new Player("pobi"); + pobi.receiveOneCard(new Card(Rank.ACE, Shape.HEART)); + pobi.receiveOneCard(new Card(Rank.TEN, Shape.SPADE)); + + assertThat(pobi.isBlackjack()).isEqualTo(true); + } +} From b0cf70927a97618708d574a4ddfa2a53acb8400f Mon Sep 17 00:00:00 2001 From: haeseon lee Date: Fri, 13 Mar 2026 22:00:38 +0900 Subject: [PATCH 11/30] =?UTF-8?q?test:=20=ED=94=8C=EB=A0=88=EC=9D=B4?= =?UTF-8?q?=EC=96=B4=20=EC=B4=88=EA=B8=B0=20=EC=B9=B4=EB=93=9C=202?= =?UTF-8?q?=EC=9E=A5=20=ED=95=A9=EC=9D=B4=2021=EC=9D=B4=20=EC=95=84?= =?UTF-8?q?=EB=8B=8C=20=ED=85=8C=EC=8A=A4=ED=8A=B8=20=EC=BC=80=EC=9D=B4?= =?UTF-8?q?=EC=8A=A4=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../blackjackTest/service/BlackjackTest.java | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/src/test/java/blackjackTest/service/BlackjackTest.java b/src/test/java/blackjackTest/service/BlackjackTest.java index c9a6876c595..03b38b0e8fc 100644 --- a/src/test/java/blackjackTest/service/BlackjackTest.java +++ b/src/test/java/blackjackTest/service/BlackjackTest.java @@ -18,4 +18,23 @@ public class BlackjackTest { assertThat(pobi.isBlackjack()).isEqualTo(true); } + + @Test + void 플레이어_초기카드_합_21_아닌경우_1() { + Player pobi = new Player("pobi"); + pobi.receiveOneCard(new Card(Rank.TWO, Shape.HEART)); + pobi.receiveOneCard(new Card(Rank.TEN, Shape.SPADE)); + + assertThat(pobi.isBlackjack()).isEqualTo(false); + } + + @Test + void 플레이어_초기카드_합_21_아닌경우_2() { + Player pobi = new Player("pobi"); + pobi.receiveOneCard(new Card(Rank.TWO, Shape.HEART)); + pobi.receiveOneCard(new Card(Rank.TEN, Shape.SPADE)); + pobi.receiveOneCard(new Card(Rank.NINE, Shape.SPADE)); + + assertThat(pobi.isBlackjack()).isEqualTo(false); + } } From 11bb5f77ac5a223c17228e4c421d803da345774a Mon Sep 17 00:00:00 2001 From: haeseon lee Date: Fri, 13 Mar 2026 22:01:16 +0900 Subject: [PATCH 12/30] =?UTF-8?q?feat:=20=ED=94=8C=EB=A0=88=EC=9D=B4?= =?UTF-8?q?=EC=96=B4=20=EC=B4=88=EA=B8=B0=20=EC=B9=B4=EB=93=9C=202?= =?UTF-8?q?=EC=9E=A5=20=ED=95=A9=EC=9D=B4=2021=EC=9D=B8=EC=A7=80=20?= =?UTF-8?q?=ED=8C=90=EB=8B=A8=ED=95=98=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 --- src/main/java/blackjack/domain/Cards.java | 4 ++++ src/main/java/blackjack/domain/Participant.java | 4 ++++ 2 files changed, 8 insertions(+) diff --git a/src/main/java/blackjack/domain/Cards.java b/src/main/java/blackjack/domain/Cards.java index 189eee5ccea..bd7231f97e6 100644 --- a/src/main/java/blackjack/domain/Cards.java +++ b/src/main/java/blackjack/domain/Cards.java @@ -41,4 +41,8 @@ public List getCardNames() { } return cardNames; } + + public int getSize() { + return cards.size(); + } } \ No newline at end of file diff --git a/src/main/java/blackjack/domain/Participant.java b/src/main/java/blackjack/domain/Participant.java index 9ec2827e48b..d68cd057df3 100644 --- a/src/main/java/blackjack/domain/Participant.java +++ b/src/main/java/blackjack/domain/Participant.java @@ -41,6 +41,10 @@ public boolean isBust() { return drawnCards.sumScore() > 21; } + public boolean isBlackjack() { + return drawnCards.sumScore() == 21 && drawnCards.getSize() == 2; + } + public int calculateTotalScore() { return drawnCards.sumScore(); } From ce7705a24d594cf1415bb519a98e42ef3c4aba68 Mon Sep 17 00:00:00 2001 From: haeseon lee Date: Fri, 13 Mar 2026 22:46:06 +0900 Subject: [PATCH 13/30] =?UTF-8?q?test:=20=ED=94=8C=EB=A0=88=EC=9D=B4?= =?UTF-8?q?=EC=96=B4=20=EC=B4=88=EA=B8=B0=20=EC=B9=B4=EB=93=9C=202?= =?UTF-8?q?=EC=9E=A5=20=ED=95=A9=EC=9D=B4=2021=EC=9D=B4=EB=A9=B4=20?= =?UTF-8?q?=EB=B0=B0=ED=8C=85=20=EA=B8=88=EC=95=A1=EC=9D=98=201.5=EB=B0=B0?= =?UTF-8?q?=20=EC=A7=80=EA=B8=89=20=ED=85=8C=EC=8A=A4=ED=8A=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../blackjackTest/service/BlackjackTest.java | 19 +++++++++++++++---- 1 file changed, 15 insertions(+), 4 deletions(-) diff --git a/src/test/java/blackjackTest/service/BlackjackTest.java b/src/test/java/blackjackTest/service/BlackjackTest.java index 03b38b0e8fc..08342d086d8 100644 --- a/src/test/java/blackjackTest/service/BlackjackTest.java +++ b/src/test/java/blackjackTest/service/BlackjackTest.java @@ -1,9 +1,6 @@ package blackjackTest.service; -import blackjack.domain.Card; -import blackjack.domain.Player; -import blackjack.domain.Rank; -import blackjack.domain.Shape; +import blackjack.domain.*; import org.junit.jupiter.api.Test; import static org.assertj.core.api.Assertions.assertThat; @@ -37,4 +34,18 @@ public class BlackjackTest { assertThat(pobi.isBlackjack()).isEqualTo(false); } + + @Test + void 플레이어_초기카드_합_21이면_배팅금액의_1_5배_지급() { + Money bettingAmount = new Money(10000); + Player pobi = new Player("pobi", bettingAmount); + Dealer dealer = new Dealer(); + + pobi.receiveOneCard(new Card(Rank.ACE, Shape.HEART)); + pobi.receiveOneCard(new Card(Rank.TEN, Shape.SPADE)); + + int profit = pobi.calculateFinalProfit(dealer); + + assertThat(profit).isEqualTo(15000); + } } From b3e49dc32a5f98555ed559e766edc31a944498e6 Mon Sep 17 00:00:00 2001 From: haeseon lee Date: Fri, 13 Mar 2026 23:40:31 +0900 Subject: [PATCH 14/30] =?UTF-8?q?feat:=20=ED=94=8C=EB=A0=88=EC=9D=B4?= =?UTF-8?q?=EC=96=B4=20=EC=B4=88=EA=B8=B0=20=EC=B9=B4=EB=93=9C=202?= =?UTF-8?q?=EC=9E=A5=20=ED=95=A9=EC=9D=B4=2021=EC=9D=B4=EB=A9=B4=20?= =?UTF-8?q?=EB=B0=B0=ED=8C=85=20=EA=B8=88=EC=95=A1=EC=9D=98=201.5=EB=B0=B0?= =?UTF-8?q?=20=EC=A7=80=EA=B8=89=20=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 | 9 +++++---- .../blackjack/controller/BlackjackController.java | 15 ++++++++------- src/main/java/blackjack/domain/Participant.java | 4 ++-- src/main/java/blackjack/domain/Player.java | 14 +++++++++++++- src/main/java/blackjack/view/InputView.java | 2 +- src/test/java/blackjackTest/domain/BustTest.java | 4 ++-- .../java/blackjackTest/domain/PlayerTest.java | 9 +++------ .../java/blackjackTest/service/BlackjackTest.java | 6 +++--- src/test/java/blackjackTest/service/GameTest.java | 2 +- 9 files changed, 38 insertions(+), 27 deletions(-) diff --git a/README.md b/README.md index b82159fe677..f1b1802f44b 100644 --- a/README.md +++ b/README.md @@ -31,6 +31,7 @@ -[x] 입력 - [x] 게임 참가자 이름 입력 - [x] 카드 더받기 유무 입력 + - [x] 출력 - [x] 분배 받은 카드 목록 출력 - [x] 딜러와 참가자 카드 합계 결과 출력 @@ -43,10 +44,10 @@ - [x] 배팅 금액 - [x] 플레이어와 딜러는 배팅 금액을 가진다. -- [ ] Player & Dealer 블랙잭 판단 - - [ ] 플레이어와 딜러의 초기 카드 2장의 합이 21인지 판단한다. - - [ ] 플레이어에게 1.5배 지급하는 겅우 - - [ ] 플레이어의 초기 카드 2장이 21인 경우 +- [x] Player & Dealer 블랙잭 판단 + - [x] 플레이어와 딜러의 초기 카드 2장의 합이 21인지 판단한다. + - [x] 플레이어에게 1.5배 지급하는 겅우 + - [x] 플레이어의 초기 카드 2장이 21인 경우 - [ ] 플레이어가 배팅 금액을 모두 잃는 경우 - [ ] 딜러의 초기 카드 2장이 21인 경우 - [ ] 플레이어가 버스트인 경우 diff --git a/src/main/java/blackjack/controller/BlackjackController.java b/src/main/java/blackjack/controller/BlackjackController.java index 0a07577ad84..cf750447022 100644 --- a/src/main/java/blackjack/controller/BlackjackController.java +++ b/src/main/java/blackjack/controller/BlackjackController.java @@ -23,8 +23,7 @@ public BlackjackController(CardDistributor cardDistributor) { public void startGame() { List playerNames = getPlayerNames(); - List players = getPlayers(playerNames); - + List players = createPlayers(playerNames); Participant dealer = Participant.createDealer(); setupInitialHand(players, dealer, playerNames); @@ -35,15 +34,17 @@ public void startGame() { calculateFinalGameResult(players, dealer); } - private static List getPlayerNames() { - String playerNamesStr = InputView.askPlayerNames(); - return InputParser.splitPlayerNames(playerNamesStr); + private List getPlayerNames() { + String names = InputView.askPlayerNames(); + return InputParser.splitPlayerNames(names); } - private List getPlayers(List playerNames) { + private List createPlayers(List playerNames) { List players = new ArrayList<>(); for (String playerName : playerNames) { - players.add(Participant.createPlayer(playerName)); + String amountStr = InputView.askPlayerBettingAmount(playerName); + int amount = InputParser.convertNumber(amountStr); + players.add(Participant.createPlayer(playerName, new Money(amount))); } return players; } diff --git a/src/main/java/blackjack/domain/Participant.java b/src/main/java/blackjack/domain/Participant.java index d68cd057df3..82e477f2e7a 100644 --- a/src/main/java/blackjack/domain/Participant.java +++ b/src/main/java/blackjack/domain/Participant.java @@ -21,8 +21,8 @@ public boolean isDealerNotDone() { return false; } - public static Participant createPlayer(String name) { - return new Player(name); + public static Participant createPlayer(String name, Money money) { + return new Player(name, money); } public static Participant createDealer() { diff --git a/src/main/java/blackjack/domain/Player.java b/src/main/java/blackjack/domain/Player.java index b8d235b9d32..7086588600e 100644 --- a/src/main/java/blackjack/domain/Player.java +++ b/src/main/java/blackjack/domain/Player.java @@ -1,7 +1,19 @@ package blackjack.domain; public class Player extends Participant { - public Player(String name) { + + private final Money money; + + public Player(String name, Money money) { super(name); + this.money = money; + } + + public int calculateFinalProfit(Participant dealer) { + int profitAmount = 0; + if (this.isBlackjack() && !dealer.isBlackjack()) { + profitAmount = (int) (money.getBettingMoney() * 1.5); + } + return profitAmount; } } diff --git a/src/main/java/blackjack/view/InputView.java b/src/main/java/blackjack/view/InputView.java index 2ab272fd13c..e41d88c1dc6 100644 --- a/src/main/java/blackjack/view/InputView.java +++ b/src/main/java/blackjack/view/InputView.java @@ -19,7 +19,7 @@ public static String askHitOrStand(String playerName) { } public static String askPlayerBettingAmount(String playerName) { - System.out.printf("%s의 배팅 금액은?", playerName); + System.out.printf("%n%s의 배팅 금액은?%n", playerName); return scanner.nextLine(); } } diff --git a/src/test/java/blackjackTest/domain/BustTest.java b/src/test/java/blackjackTest/domain/BustTest.java index 15624908661..b7ac2b14ae0 100644 --- a/src/test/java/blackjackTest/domain/BustTest.java +++ b/src/test/java/blackjackTest/domain/BustTest.java @@ -9,7 +9,7 @@ public class BustTest { @Test void player_busts_when_sum_exceeds_21() { - Player player = new Player("Alice"); + Player player = new Player("Alice", new Money(10000)); player.receiveOneCard(new Card(Rank.TWO, Shape.HEART)); player.receiveOneCard(new Card(Rank.QUEEN, Shape.SPADE)); player.receiveOneCard(new Card(Rank.TEN, Shape.CLOVER)); @@ -29,7 +29,7 @@ void dealer_busts_when_sum_exceeds_21() { @Test void player_not_busts_when_sum_21_or_less() { - Player player = new Player("Alice"); + Player player = new Player("Alice", new Money(10000)); player.receiveOneCard(new Card(Rank.ACE, Shape.HEART)); player.receiveOneCard(new Card(Rank.QUEEN, Shape.SPADE)); player.receiveOneCard(new Card(Rank.TEN, Shape.CLOVER)); diff --git a/src/test/java/blackjackTest/domain/PlayerTest.java b/src/test/java/blackjackTest/domain/PlayerTest.java index 12af26cf9a2..b545d4f5db7 100644 --- a/src/test/java/blackjackTest/domain/PlayerTest.java +++ b/src/test/java/blackjackTest/domain/PlayerTest.java @@ -2,16 +2,13 @@ import static org.assertj.core.api.Assertions.assertThat; -import blackjack.domain.Card; -import blackjack.domain.Player; -import blackjack.domain.Rank; -import blackjack.domain.Shape; +import blackjack.domain.*; import org.junit.jupiter.api.Test; public class PlayerTest { @Test void player_total_score_blackJack() { - Player player = new Player("player1"); + Player player = new Player("player1", new Money(10000)); player.receiveOneCard(new Card(Rank.ACE, Shape.HEART)); player.receiveOneCard(new Card(Rank.QUEEN, Shape.SPADE)); assertThat(player.calculateTotalScore()).isEqualTo(21); @@ -19,7 +16,7 @@ void player_total_score_blackJack() { @Test void player_total_score_not_blackjack() { - Player player = new Player("player2"); + Player player = new Player("player2", new Money(10000)); player.receiveOneCard(new Card(Rank.THREE, Shape.HEART)); player.receiveOneCard(new Card(Rank.TEN, Shape.SPADE)); assertThat(player.calculateTotalScore()).isEqualTo(13); diff --git a/src/test/java/blackjackTest/service/BlackjackTest.java b/src/test/java/blackjackTest/service/BlackjackTest.java index 08342d086d8..7ebc3a8e0b8 100644 --- a/src/test/java/blackjackTest/service/BlackjackTest.java +++ b/src/test/java/blackjackTest/service/BlackjackTest.java @@ -9,7 +9,7 @@ public class BlackjackTest { @Test void 플레이어_초기카드_합_21인지_확인() { - Player pobi = new Player("pobi"); + Player pobi = new Player("pobi", new Money(10000)); pobi.receiveOneCard(new Card(Rank.ACE, Shape.HEART)); pobi.receiveOneCard(new Card(Rank.TEN, Shape.SPADE)); @@ -18,7 +18,7 @@ public class BlackjackTest { @Test void 플레이어_초기카드_합_21_아닌경우_1() { - Player pobi = new Player("pobi"); + Player pobi = new Player("pobi", new Money(10000)); pobi.receiveOneCard(new Card(Rank.TWO, Shape.HEART)); pobi.receiveOneCard(new Card(Rank.TEN, Shape.SPADE)); @@ -27,7 +27,7 @@ public class BlackjackTest { @Test void 플레이어_초기카드_합_21_아닌경우_2() { - Player pobi = new Player("pobi"); + Player pobi = new Player("pobi", new Money(10000)); pobi.receiveOneCard(new Card(Rank.TWO, Shape.HEART)); pobi.receiveOneCard(new Card(Rank.TEN, Shape.SPADE)); pobi.receiveOneCard(new Card(Rank.NINE, Shape.SPADE)); diff --git a/src/test/java/blackjackTest/service/GameTest.java b/src/test/java/blackjackTest/service/GameTest.java index 5e0663228cf..5fb1f13532d 100644 --- a/src/test/java/blackjackTest/service/GameTest.java +++ b/src/test/java/blackjackTest/service/GameTest.java @@ -55,7 +55,7 @@ void judge_total_winner_result() { } private Player createPlayer(String name, String... cards) { - Player player = new Player(name); + Player player = new Player(name, new Money(10000)); for (String card : cards) { String[] parts = card.split(":"); Rank rank = Rank.from(parts[0]); From 2e3e0f20ba9c61b5a5308b70425f43df2866053a Mon Sep 17 00:00:00 2001 From: haeseon lee Date: Fri, 13 Mar 2026 23:51:23 +0900 Subject: [PATCH 15/30] =?UTF-8?q?test:=20=ED=94=8C=EB=A0=88=EC=9D=B4?= =?UTF-8?q?=EC=96=B4=20=EC=B9=B4=EB=93=9C=20=ED=95=A9=2021=20=EB=84=98?= =?UTF-8?q?=EC=96=B4=EA=B0=80=EB=A9=B4=20=EB=B0=B0=ED=8C=85=20=EA=B8=88?= =?UTF-8?q?=EC=95=A1=20=EC=9E=83=EB=8A=94=20=EA=B8=B0=EB=8A=A5=20=ED=85=8C?= =?UTF-8?q?=EC=8A=A4=ED=8A=B8=20=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/blackjackTest/service/BlackjackTest.java | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/src/test/java/blackjackTest/service/BlackjackTest.java b/src/test/java/blackjackTest/service/BlackjackTest.java index 7ebc3a8e0b8..cf8b1f7878c 100644 --- a/src/test/java/blackjackTest/service/BlackjackTest.java +++ b/src/test/java/blackjackTest/service/BlackjackTest.java @@ -48,4 +48,19 @@ public class BlackjackTest { assertThat(profit).isEqualTo(15000); } + + @Test + void 플레이어_카드합_21_넘으면_배팅금액_모두_읾음() { + Money bettingAmount = new Money(10000); + Player pobi = new Player("pobi", bettingAmount); + Dealer dealer = new Dealer(); + + pobi.receiveOneCard(new Card(Rank.TEN, Shape.HEART)); + pobi.receiveOneCard(new Card(Rank.TEN, Shape.SPADE)); + pobi.receiveOneCard(new Card(Rank.TWO, Shape.CLOVER)); + + int profit = pobi.calculateFinalProfit(dealer); + + assertThat(profit).isEqualTo(-10000); + } } From e4824d77409f19b200e7ea7d34c3803a8b24beb3 Mon Sep 17 00:00:00 2001 From: haeseon lee Date: Fri, 13 Mar 2026 23:58:15 +0900 Subject: [PATCH 16/30] =?UTF-8?q?test:=20=EB=94=9C=EB=9F=AC=20=EC=B4=88?= =?UTF-8?q?=EA=B8=B0=20=EC=B9=B4=EB=93=9C=ED=95=A9=2021=EC=9D=B4=EB=A9=B4?= =?UTF-8?q?=20=EB=B0=B0=ED=8C=85=20=EA=B8=88=EC=95=A1=20=EC=9E=83=EB=8A=94?= =?UTF-8?q?=20=ED=85=8C=EC=8A=A4=ED=8A=B8=20=EC=BC=80=EC=9D=B4=EC=8A=A4=20?= =?UTF-8?q?=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../blackjackTest/service/BlackjackTest.java | 18 +++++++++++++++++- 1 file changed, 17 insertions(+), 1 deletion(-) diff --git a/src/test/java/blackjackTest/service/BlackjackTest.java b/src/test/java/blackjackTest/service/BlackjackTest.java index cf8b1f7878c..726fdc8fae7 100644 --- a/src/test/java/blackjackTest/service/BlackjackTest.java +++ b/src/test/java/blackjackTest/service/BlackjackTest.java @@ -50,7 +50,7 @@ public class BlackjackTest { } @Test - void 플레이어_카드합_21_넘으면_배팅금액_모두_읾음() { + void 플레이어_카드합_21_넘으면_배팅금액_모두_잃음() { Money bettingAmount = new Money(10000); Player pobi = new Player("pobi", bettingAmount); Dealer dealer = new Dealer(); @@ -63,4 +63,20 @@ public class BlackjackTest { assertThat(profit).isEqualTo(-10000); } + + @Test + void 딜러_초기카드_합_21이면_배팅금액_모두_잃음() { + Money bettingAmount = new Money(10000); + Player pobi = new Player("pobi", bettingAmount); + Dealer dealer = new Dealer(); + + pobi.receiveOneCard(new Card(Rank.TEN, Shape.HEART)); + pobi.receiveOneCard(new Card(Rank.TEN, Shape.SPADE)); + dealer.receiveOneCard(new Card(Rank.ACE, Shape.CLOVER)); + dealer.receiveOneCard(new Card(Rank.QUEEN, Shape.SPADE)); + + int profit = pobi.calculateFinalProfit(dealer); + + assertThat(profit).isEqualTo(-10000); + } } From 1b492bacbf1362445b634121541a0998e3e2c16e Mon Sep 17 00:00:00 2001 From: haeseon lee Date: Sat, 14 Mar 2026 00:13:12 +0900 Subject: [PATCH 17/30] =?UTF-8?q?feat:=20=ED=94=8C=EB=A0=88=EC=9D=B4?= =?UTF-8?q?=EC=96=B4=EA=B0=80=20=EB=B0=B0=ED=8C=85=20=EA=B8=88=EC=95=A1?= =?UTF-8?q?=EC=9D=84=20=EC=9E=83=EB=8A=94=20=EA=B2=BD=EC=9A=B0=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 | 6 +++--- src/main/java/blackjack/domain/Player.java | 9 ++++++--- 2 files changed, 9 insertions(+), 6 deletions(-) diff --git a/README.md b/README.md index f1b1802f44b..ad4f0120b8e 100644 --- a/README.md +++ b/README.md @@ -48,9 +48,9 @@ - [x] 플레이어와 딜러의 초기 카드 2장의 합이 21인지 판단한다. - [x] 플레이어에게 1.5배 지급하는 겅우 - [x] 플레이어의 초기 카드 2장이 21인 경우 - - [ ] 플레이어가 배팅 금액을 모두 잃는 경우 - - [ ] 딜러의 초기 카드 2장이 21인 경우 - - [ ] 플레이어가 버스트인 경우 + - [x] 플레이어가 배팅 금액을 모두 잃는 경우 + - [x] 딜러의 초기 카드 2장이 21인 경우 + - [x] 플레이어가 버스트인 경우 - [ ] 플레이어가 배팅한 금액을 그대로 받는 경우 - [ ] 플레이어가 카드를 계속 뽑아서 21이 되는 경우 - [ ] 딜러가 버스트인 경우 diff --git a/src/main/java/blackjack/domain/Player.java b/src/main/java/blackjack/domain/Player.java index 7086588600e..b804c109e65 100644 --- a/src/main/java/blackjack/domain/Player.java +++ b/src/main/java/blackjack/domain/Player.java @@ -10,10 +10,13 @@ public Player(String name, Money money) { } public int calculateFinalProfit(Participant dealer) { - int profitAmount = 0; if (this.isBlackjack() && !dealer.isBlackjack()) { - profitAmount = (int) (money.getBettingMoney() * 1.5); + return (int) (money.getBettingMoney() * 1.5); } - return profitAmount; + + if (this.isBust() || dealer.isBlackjack()) { + return -money.getBettingMoney(); + } + return 0; } } From 9be7e57db7e52f5d17bc6126471267797ab24dea Mon Sep 17 00:00:00 2001 From: haeseon lee Date: Sat, 14 Mar 2026 00:18:54 +0900 Subject: [PATCH 18/30] =?UTF-8?q?docs:=20=ED=94=8C=EB=A0=88=EC=9D=B4?= =?UTF-8?q?=EC=96=B4=EA=B0=80=20=EB=B0=B0=ED=8C=85=20=EA=B8=88=EC=95=A1?= =?UTF-8?q?=EC=9D=84=20=EA=B7=B8=EB=8C=80=EB=A1=9C=20=EB=B0=9B=EB=8A=94=20?= =?UTF-8?q?=EA=B2=BD=EC=9A=B0=20=EB=AA=A9=EB=A1=9D=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index ad4f0120b8e..3a58c27b9d3 100644 --- a/README.md +++ b/README.md @@ -52,6 +52,7 @@ - [x] 딜러의 초기 카드 2장이 21인 경우 - [x] 플레이어가 버스트인 경우 - [ ] 플레이어가 배팅한 금액을 그대로 받는 경우 + - [ ] 딜러와 플레이어 모두 초기 카드 합이 21인 경우 - [ ] 플레이어가 카드를 계속 뽑아서 21이 되는 경우 - [ ] 딜러가 버스트인 경우 From 414e765778e963a8103bd22475b0e41744b7b97e Mon Sep 17 00:00:00 2001 From: haeseon lee Date: Sat, 14 Mar 2026 00:38:12 +0900 Subject: [PATCH 19/30] =?UTF-8?q?test:=20=ED=94=8C=EB=A0=88=EC=9D=B4?= =?UTF-8?q?=EC=96=B4=EC=99=80=20=EB=94=9C=EB=9F=AC=20=EB=AA=A8=EB=91=90=20?= =?UTF-8?q?=EC=B4=88=EA=B8=B0=20=EC=B9=B4=EB=93=9C=ED=95=A9=2021=EC=9D=B8?= =?UTF-8?q?=20=EA=B2=BD=EC=9A=B0=20=EB=B0=B0=ED=8C=85=20=EA=B8=88=EC=95=A1?= =?UTF-8?q?=20=EB=8F=8C=EB=A0=A4=EB=B0=9B=EB=8A=94=20=EA=B8=B0=EB=8A=A5=20?= =?UTF-8?q?=ED=85=8C=EC=8A=A4=ED=8A=B8=20=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../blackjackTest/service/BlackjackTest.java | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/src/test/java/blackjackTest/service/BlackjackTest.java b/src/test/java/blackjackTest/service/BlackjackTest.java index 726fdc8fae7..4a3cdf8c070 100644 --- a/src/test/java/blackjackTest/service/BlackjackTest.java +++ b/src/test/java/blackjackTest/service/BlackjackTest.java @@ -79,4 +79,20 @@ public class BlackjackTest { assertThat(profit).isEqualTo(-10000); } + + @Test + void 딜러와_플레이어_모두_초기카드_합_21이면_배팅금액_돌려받음() { + Money bettingAmount = new Money(10000); + Player pobi = new Player("pobi", bettingAmount); + Dealer dealer = new Dealer(); + + pobi.receiveOneCard(new Card(Rank.TEN, Shape.HEART)); + pobi.receiveOneCard(new Card(Rank.ACE, Shape.SPADE)); + dealer.receiveOneCard(new Card(Rank.ACE, Shape.CLOVER)); + dealer.receiveOneCard(new Card(Rank.QUEEN, Shape.SPADE)); + + int profit = pobi.calculateFinalProfit(dealer); + + assertThat(profit).isEqualTo(10000); + } } From 081cb1cea34f21ed35ddc985838e39700f35dba3 Mon Sep 17 00:00:00 2001 From: haeseon lee Date: Sat, 14 Mar 2026 00:39:45 +0900 Subject: [PATCH 20/30] =?UTF-8?q?feat:=20=ED=94=8C=EB=A0=88=EC=9D=B4?= =?UTF-8?q?=EC=96=B4=EC=99=80=20=EB=94=9C=EB=9F=AC=20=EB=AA=A8=EB=91=90=20?= =?UTF-8?q?=EC=B4=88=EA=B8=B0=20=EC=B9=B4=EB=93=9C=ED=95=A9=2021=EC=9D=B8?= =?UTF-8?q?=20=EA=B2=BD=EC=9A=B0=20=EB=B0=B0=ED=8C=85=20=EA=B8=88=EC=95=A1?= =?UTF-8?q?=20=EB=8F=8C=EB=A0=A4=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 --- src/main/java/blackjack/domain/Player.java | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/main/java/blackjack/domain/Player.java b/src/main/java/blackjack/domain/Player.java index b804c109e65..c215402f505 100644 --- a/src/main/java/blackjack/domain/Player.java +++ b/src/main/java/blackjack/domain/Player.java @@ -10,6 +10,10 @@ public Player(String name, Money money) { } public int calculateFinalProfit(Participant dealer) { + if (this.isBlackjack() && dealer.isBlackjack()) { + return money.getBettingMoney(); + } + if (this.isBlackjack() && !dealer.isBlackjack()) { return (int) (money.getBettingMoney() * 1.5); } From 61ef165b88028b0fc005618a1f0adb013b5c6bc7 Mon Sep 17 00:00:00 2001 From: haeseon lee Date: Sat, 14 Mar 2026 00:50:45 +0900 Subject: [PATCH 21/30] =?UTF-8?q?test:=20=ED=94=8C=EB=A0=88=EC=9D=B4?= =?UTF-8?q?=EC=96=B4=EC=99=80=20=EB=94=9C=EB=9F=AC=EB=B3=B4=EB=8B=A4=20?= =?UTF-8?q?=EC=B9=B4=EB=93=9C=20=EC=A0=90=EC=88=98=20=ED=95=A9=EC=9D=B4=20?= =?UTF-8?q?=ED=81=AC=EB=A9=B4=20=EB=B0=B0=ED=8C=85=20=EA=B8=88=EC=95=A1=20?= =?UTF-8?q?=EB=8F=8C=EB=A0=A4=EB=B0=9B=EB=8A=94=20=EA=B8=B0=EB=8A=A5=20?= =?UTF-8?q?=ED=85=8C=EC=8A=A4=ED=8A=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 7 +++---- .../blackjackTest/service/BlackjackTest.java | 18 ++++++++++++++++++ 2 files changed, 21 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index 3a58c27b9d3..d047d1537a9 100644 --- a/README.md +++ b/README.md @@ -51,10 +51,9 @@ - [x] 플레이어가 배팅 금액을 모두 잃는 경우 - [x] 딜러의 초기 카드 2장이 21인 경우 - [x] 플레이어가 버스트인 경우 - - [ ] 플레이어가 배팅한 금액을 그대로 받는 경우 - - [ ] 딜러와 플레이어 모두 초기 카드 합이 21인 경우 - - [ ] 플레이어가 카드를 계속 뽑아서 21이 되는 경우 - - [ ] 딜러가 버스트인 경우 + - [x] 플레이어가 배팅한 금액을 그대로 받는 경우 + - [x] 딜러와 플레이어 모두 초기 카드 합이 21인 경우 + - [ ] 플레이어가 카드를 계속 뽑아서 딜러보다 카드 합이 높은 경우 - [ ] 출력 - [ ] 딜러와 참가자의 최종 수익을 출력한다. diff --git a/src/test/java/blackjackTest/service/BlackjackTest.java b/src/test/java/blackjackTest/service/BlackjackTest.java index 4a3cdf8c070..59580eed09f 100644 --- a/src/test/java/blackjackTest/service/BlackjackTest.java +++ b/src/test/java/blackjackTest/service/BlackjackTest.java @@ -95,4 +95,22 @@ public class BlackjackTest { assertThat(profit).isEqualTo(10000); } + + @Test + void 플레이어가_딜러보다_점수가_높으면_배팅금액_돌려받음() { + Money bettingAmount = new Money(10000); + Player pobi = new Player("pobi", bettingAmount); + Dealer dealer = new Dealer(); + + pobi.receiveOneCard(new Card(Rank.TEN, Shape.HEART)); + pobi.receiveOneCard(new Card(Rank.TWO, Shape.SPADE)); + pobi.receiveOneCard(new Card(Rank.EIGHT, Shape.CLOVER)); + + dealer.receiveOneCard(new Card(Rank.EIGHT, Shape.CLOVER)); + dealer.receiveOneCard(new Card(Rank.QUEEN, Shape.SPADE)); + + int profit = pobi.calculateFinalProfit(dealer); + + assertThat(profit).isEqualTo(10000); + } } From 0f1a896a6594dae0a7d7e67468458f27069f1e46 Mon Sep 17 00:00:00 2001 From: haeseon lee Date: Sat, 14 Mar 2026 00:52:50 +0900 Subject: [PATCH 22/30] =?UTF-8?q?feat:=20=ED=94=8C=EB=A0=88=EC=9D=B4?= =?UTF-8?q?=EC=96=B4=EC=99=80=20=EB=94=9C=EB=9F=AC=EB=B3=B4=EB=8B=A4=20?= =?UTF-8?q?=EC=B9=B4=EB=93=9C=20=EC=A0=90=EC=88=98=20=ED=95=A9=EC=9D=B4=20?= =?UTF-8?q?=ED=81=AC=EB=A9=B4=20=EB=B0=B0=ED=8C=85=20=EA=B8=88=EC=95=A1=20?= =?UTF-8?q?=EB=8F=8C=EB=A0=A4=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/java/blackjack/domain/Player.java | 4 ++++ 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index d047d1537a9..d83b69224cd 100644 --- a/README.md +++ b/README.md @@ -53,7 +53,7 @@ - [x] 플레이어가 버스트인 경우 - [x] 플레이어가 배팅한 금액을 그대로 받는 경우 - [x] 딜러와 플레이어 모두 초기 카드 합이 21인 경우 - - [ ] 플레이어가 카드를 계속 뽑아서 딜러보다 카드 합이 높은 경우 + - [x] 플레이어가 카드를 계속 뽑아서 딜러보다 카드 합이 높은 경우 - [ ] 출력 - [ ] 딜러와 참가자의 최종 수익을 출력한다. diff --git a/src/main/java/blackjack/domain/Player.java b/src/main/java/blackjack/domain/Player.java index c215402f505..3bcb420e56c 100644 --- a/src/main/java/blackjack/domain/Player.java +++ b/src/main/java/blackjack/domain/Player.java @@ -21,6 +21,10 @@ public int calculateFinalProfit(Participant dealer) { if (this.isBust() || dealer.isBlackjack()) { return -money.getBettingMoney(); } + + if (this.calculateTotalScore() > dealer.calculateTotalScore()) { + return money.getBettingMoney(); + } return 0; } } From 9f2eba073265a524646420adfa78156480577b69 Mon Sep 17 00:00:00 2001 From: haeseon lee Date: Sat, 14 Mar 2026 02:11:55 +0900 Subject: [PATCH 23/30] =?UTF-8?q?feat:=20=EC=B5=9C=EC=A2=85=20=EC=88=98?= =?UTF-8?q?=EC=9D=B5=20=EA=B2=B0=EA=B3=BC=20=EC=B6=9C=EB=A0=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 | 4 +-- .../controller/BlackjackController.java | 25 ++++++++------- src/main/java/blackjack/view/OutputView.java | 31 ++++--------------- 3 files changed, 22 insertions(+), 38 deletions(-) diff --git a/README.md b/README.md index d83b69224cd..acd9dedbeb9 100644 --- a/README.md +++ b/README.md @@ -55,5 +55,5 @@ - [x] 딜러와 플레이어 모두 초기 카드 합이 21인 경우 - [x] 플레이어가 카드를 계속 뽑아서 딜러보다 카드 합이 높은 경우 -- [ ] 출력 - - [ ] 딜러와 참가자의 최종 수익을 출력한다. +- [x] 출력 + - [x] 딜러와 참가자의 최종 수익을 출력한다. diff --git a/src/main/java/blackjack/controller/BlackjackController.java b/src/main/java/blackjack/controller/BlackjackController.java index cf750447022..84250ed347e 100644 --- a/src/main/java/blackjack/controller/BlackjackController.java +++ b/src/main/java/blackjack/controller/BlackjackController.java @@ -31,7 +31,7 @@ public void startGame() { playDealerTurn(dealer); calculateFinalScore(players, dealer); - calculateFinalGameResult(players, dealer); + calculateFinalGameProfit(players, dealer); } private List getPlayerNames() { @@ -79,7 +79,9 @@ private void drawUntilPlayerStand(Participant player) { private void playDealerTurn(Participant dealer) { int additionalCount = game.dealerDrawsCardsUntilDone(dealer); - OutputView.printDealerCardDrawnResult(additionalCount); + if (additionalCount > 0) { + OutputView.printDealerCardDrawnResult(additionalCount); + } } private boolean isHit(Participant player) { @@ -104,16 +106,17 @@ private void calculateFinalScore(List players, Participant dealer) OutputView.printFinalCardScores(playerResults, dealerResult); } - private void calculateFinalGameResult(List players, Participant dealer) { - GameResult gameResult = dealer.judgeResult(players, dealer); - Map dealerResult = gameResult.dealerResult(); - Map playerResult = gameResult.playerResults(); - HashMap playerNameResult = new HashMap<>(); + public void calculateFinalGameProfit(List players, Participant dealer) { + HashMap playersProfit = new HashMap<>(); + int totalPlayerProfit = 0; - for (Entry entry : playerResult.entrySet()) { - playerNameResult.put(entry.getKey().getName(), entry.getValue()); + for (Participant player : players) { + int profit = player.calculateFinalProfit(dealer); + playersProfit.put(player.getName(), profit); + totalPlayerProfit += profit; } - OutputView.printFinalResult(dealerResult, playerNameResult); - } + int dealerProfit = -totalPlayerProfit; + OutputView.printFinalProfit(dealerProfit, playersProfit); + } } diff --git a/src/main/java/blackjack/view/OutputView.java b/src/main/java/blackjack/view/OutputView.java index f92f603d86f..a445f49088a 100644 --- a/src/main/java/blackjack/view/OutputView.java +++ b/src/main/java/blackjack/view/OutputView.java @@ -30,7 +30,7 @@ private static void printFinalDrawnCards(String playerName, List cardNam public static void printDealerCardDrawnResult(int cardCount) { System.out.println(); - System.out.println("딜러는 16이하라" + cardCount + "장의 카드를 더 뽑았습니다."); + System.out.println("딜러는 16이하라 " + cardCount + "장의 카드를 더 뽑았습니다."); } public static void printFinalCardScores(List playerResult, ParticipantResult dealerResult) { @@ -45,30 +45,11 @@ public static void printFinalCardScores(List playerResult, Pa } } - public static void printFinalResult( - Map dealerResult, - Map playerResults) { - System.out.println(); - System.out.println("## 최종 승패"); - int wins = dealerResult.getOrDefault(ScoreCompareResult.DEALER_WIN, 0); - int losses = dealerResult.getOrDefault(ScoreCompareResult.DEALER_LOSS, 0); - int pushes = dealerResult.getOrDefault(ScoreCompareResult.PUSH, 0); - System.out.printf("딜러: %d승 %d무 %d패%n", wins, pushes, losses); - - for (Map.Entry entry : playerResults.entrySet()) { - System.out.println(entry.getKey() + ": " + toKorean(entry.getValue())); - } - } - - private static String toKorean(ScoreCompareResult result) { - if (result == ScoreCompareResult.PLAYER_WIN) { - return "승"; - } - if (result == ScoreCompareResult.PLAYER_LOSS) { - return "패"; + public static void printFinalProfit(int dealerProfit, Map playersProfit) { + System.out.println("\n## 최종 수익"); + System.out.println("딜러: " + dealerProfit); + for (Map.Entry entry : playersProfit.entrySet()) { + System.out.println(entry.getKey() + ": " + entry.getValue()); } - return "무"; } - - } From ca323a53a1532d48689769322bd4272530d3813f Mon Sep 17 00:00:00 2001 From: haeseon lee Date: Sat, 14 Mar 2026 02:12:46 +0900 Subject: [PATCH 24/30] =?UTF-8?q?refactor:=20=EC=88=98=EC=9D=B5=20?= =?UTF-8?q?=EA=B2=B0=EA=B3=BC=20=EA=B3=84=EC=82=B0=20=EB=B6=84=EA=B8=B0=20?= =?UTF-8?q?=EB=A1=9C=EC=A7=81=20=EB=A6=AC=ED=8C=A9=ED=84=B0=EB=A7=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/blackjack/domain/Participant.java | 4 ++++ src/main/java/blackjack/domain/Player.java | 15 +++++---------- 2 files changed, 9 insertions(+), 10 deletions(-) diff --git a/src/main/java/blackjack/domain/Participant.java b/src/main/java/blackjack/domain/Participant.java index 82e477f2e7a..de21346a8bc 100644 --- a/src/main/java/blackjack/domain/Participant.java +++ b/src/main/java/blackjack/domain/Participant.java @@ -52,4 +52,8 @@ public int calculateTotalScore() { public GameResult judgeResult(List players, Participant dealer) { return new GameResult(new HashMap<>(), new HashMap<>()); } + + public int calculateFinalProfit(Participant dealer) { + return 0; + } } diff --git a/src/main/java/blackjack/domain/Player.java b/src/main/java/blackjack/domain/Player.java index 3bcb420e56c..5ed868105e4 100644 --- a/src/main/java/blackjack/domain/Player.java +++ b/src/main/java/blackjack/domain/Player.java @@ -9,22 +9,17 @@ public Player(String name, Money money) { this.money = money; } + @Override public int calculateFinalProfit(Participant dealer) { - if (this.isBlackjack() && dealer.isBlackjack()) { + if (isBlackjack() && dealer.isBlackjack()) { return money.getBettingMoney(); } - - if (this.isBlackjack() && !dealer.isBlackjack()) { + if (isBlackjack()) { return (int) (money.getBettingMoney() * 1.5); } - - if (this.isBust() || dealer.isBlackjack()) { + if (isBust() || dealer.isBlackjack() || (calculateTotalScore() < dealer.calculateTotalScore() && !dealer.isBust())) { return -money.getBettingMoney(); } - - if (this.calculateTotalScore() > dealer.calculateTotalScore()) { - return money.getBettingMoney(); - } - return 0; + return money.getBettingMoney(); } } From 81dbce6d656c25c0fef48d982fc4cff9682f4995 Mon Sep 17 00:00:00 2001 From: haeseon lee Date: Sat, 14 Mar 2026 13:01:00 +0900 Subject: [PATCH 25/30] =?UTF-8?q?docs:=20=EA=B8=B0=EB=8A=A5=20=EB=AA=A9?= =?UTF-8?q?=EB=A1=9D=20=EB=9D=84=EC=96=B4=EC=93=B0=EA=B8=B0=20=EC=88=98?= =?UTF-8?q?=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index acd9dedbeb9..d15a1adcd08 100644 --- a/README.md +++ b/README.md @@ -28,7 +28,7 @@ - [x] 마지막 참가자가 버스트가 되거나 카드를 안받을 경우 게임 종료 - [x] 전체 플레이어 승패 결과 계산 --[x] 입력 +- [x] 입력 - [x] 게임 참가자 이름 입력 - [x] 카드 더받기 유무 입력 From ca3350e0fb6e06447b60b798f7bb78ef7913e354 Mon Sep 17 00:00:00 2001 From: haeseon lee Date: Sat, 14 Mar 2026 13:22:56 +0900 Subject: [PATCH 26/30] =?UTF-8?q?refactor:=20Participant=20=EC=9D=B4?= =?UTF-8?q?=EB=A6=84=20String=EC=97=90=EC=84=9C=20Name=20=EA=B0=9D?= =?UTF-8?q?=EC=B2=B4=EB=A1=9C=20=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/blackjack/domain/Name.java | 20 +++++++++++++++++++ .../java/blackjack/domain/Participant.java | 6 +++--- .../java/blackjack/utils/InputParser.java | 14 +++---------- 3 files changed, 26 insertions(+), 14 deletions(-) create mode 100644 src/main/java/blackjack/domain/Name.java diff --git a/src/main/java/blackjack/domain/Name.java b/src/main/java/blackjack/domain/Name.java new file mode 100644 index 00000000000..fff65b05904 --- /dev/null +++ b/src/main/java/blackjack/domain/Name.java @@ -0,0 +1,20 @@ +package blackjack.domain; + +public class Name { + private final String name; + + public Name(String name) { + validate(name); + this.name = name; + } + + private void validate(String name) { + if (name == null || name.trim().isEmpty()) { + throw new IllegalArgumentException("[ERROR] 이름을 정확하게 입력해주세요."); + } + } + + public String getName() { + return name; + } +} diff --git a/src/main/java/blackjack/domain/Participant.java b/src/main/java/blackjack/domain/Participant.java index de21346a8bc..cc60adc6ef9 100644 --- a/src/main/java/blackjack/domain/Participant.java +++ b/src/main/java/blackjack/domain/Participant.java @@ -5,16 +5,16 @@ public abstract class Participant { - protected final String name; + protected final Name name; protected final Cards drawnCards; protected Participant(String name) { - this.name = name; + this.name = new Name(name); this.drawnCards = new Cards(); } public String getName() { - return name; + return name.getName(); } public boolean isDealerNotDone() { diff --git a/src/main/java/blackjack/utils/InputParser.java b/src/main/java/blackjack/utils/InputParser.java index ff9a5676f27..16d018344b9 100644 --- a/src/main/java/blackjack/utils/InputParser.java +++ b/src/main/java/blackjack/utils/InputParser.java @@ -1,18 +1,16 @@ package blackjack.utils; import java.util.List; +import java.util.stream.Stream; public class InputParser { public static List splitPlayerNames(String input) { if (input == null || input.trim().isEmpty()) { - throw new IllegalArgumentException("[ERROR] 플레이어 이름을 입력해주세요."); + throw new IllegalArgumentException("[ERROR] 이름을 정확하게 입력해주세요."); } String[] names = input.split(","); - for (String name : names) { - validateNameEmpty(name); - } - return List.of(names).stream() + return Stream.of(names) .map(String::trim) .toList(); } @@ -24,10 +22,4 @@ public static int convertNumber(String input) { throw new IllegalArgumentException("[ERROR] 숫자 이외의 값은 입력할 수 없습니다."); } } - - private static void validateNameEmpty(String name) { - if (name.trim().isEmpty()) { - throw new IllegalArgumentException("[ERROR] 플레이어 이름은 공백이 될 수 없습니다."); - } - } } From 72d918eea94fedb2c50cb3516210c0cea903c327 Mon Sep 17 00:00:00 2001 From: haeseon lee Date: Sat, 14 Mar 2026 13:35:45 +0900 Subject: [PATCH 27/30] =?UTF-8?q?refactor:=20Participant=20=ED=81=B4?= =?UTF-8?q?=EB=9E=98=EC=84=9C=20=EB=A9=94=EC=84=9C=EB=93=9C=20=EC=9C=84?= =?UTF-8?q?=EC=B9=98=20=EC=A1=B0=EC=A0=95=20=EB=B0=8F=20=EC=83=81=EC=88=98?= =?UTF-8?q?=20=EC=84=A4=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/blackjack/domain/Participant.java | 31 ++++++++++--------- 1 file changed, 17 insertions(+), 14 deletions(-) diff --git a/src/main/java/blackjack/domain/Participant.java b/src/main/java/blackjack/domain/Participant.java index cc60adc6ef9..9200c8688d3 100644 --- a/src/main/java/blackjack/domain/Participant.java +++ b/src/main/java/blackjack/domain/Participant.java @@ -5,6 +5,9 @@ public abstract class Participant { + private static final int BLACKJACK_SCORE = 21; + private static final int BLACKJACK_SIZE = 2; + protected final Name name; protected final Cards drawnCards; @@ -13,14 +16,6 @@ protected Participant(String name) { this.drawnCards = new Cards(); } - public String getName() { - return name.getName(); - } - - public boolean isDealerNotDone() { - return false; - } - public static Participant createPlayer(String name, Money money) { return new Player(name, money); } @@ -33,27 +28,35 @@ public void receiveOneCard(Card card) { drawnCards.addCard(card); } - public List getCardNames() { - return drawnCards.getCardNames(); + public boolean isDealerNotDone() { + return false; } public boolean isBust() { - return drawnCards.sumScore() > 21; + return drawnCards.sumScore() > BLACKJACK_SCORE; } public boolean isBlackjack() { - return drawnCards.sumScore() == 21 && drawnCards.getSize() == 2; + return drawnCards.sumScore() == BLACKJACK_SCORE && drawnCards.getSize() == BLACKJACK_SIZE; } public int calculateTotalScore() { return drawnCards.sumScore(); } + public int calculateFinalProfit(Participant dealer) { + return 0; + } + public GameResult judgeResult(List players, Participant dealer) { return new GameResult(new HashMap<>(), new HashMap<>()); } - public int calculateFinalProfit(Participant dealer) { - return 0; + public String getName() { + return name.getName(); + } + + public List getCardNames() { + return drawnCards.getCardNames(); } } From 9d4143dbdff718fc6e5de996d3f1acc06e83908f Mon Sep 17 00:00:00 2001 From: haeseon lee Date: Sat, 14 Mar 2026 14:04:44 +0900 Subject: [PATCH 28/30] =?UTF-8?q?refactor:=20addCard=20=EC=A0=9C=EC=95=BD?= =?UTF-8?q?=20=EC=82=AC=ED=95=AD=20=EC=84=A4=EC=A0=95=20=EB=B0=8F=20getCar?= =?UTF-8?q?dNames=20stream=20=EC=82=AC=EC=9A=A9=20=EB=A6=AC=ED=8C=A9?= =?UTF-8?q?=ED=84=B0=EB=A7=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/blackjack/domain/Cards.java | 20 +++++++++++--------- 1 file changed, 11 insertions(+), 9 deletions(-) diff --git a/src/main/java/blackjack/domain/Cards.java b/src/main/java/blackjack/domain/Cards.java index bd7231f97e6..268c1222898 100644 --- a/src/main/java/blackjack/domain/Cards.java +++ b/src/main/java/blackjack/domain/Cards.java @@ -2,8 +2,11 @@ import java.util.ArrayList; import java.util.List; +import java.util.stream.Collectors; public class Cards { + private static final int BLACKJACK_SCORE = 21; + private static final int ACE_SCORE = 10; private final List cards; @@ -21,25 +24,24 @@ public int sumScore() { totalScore += card.getScore(); } int aceCount = (int) cards.stream().filter(Card::isAce).count(); - - while (totalScore > 21 && aceCount > 0) { - totalScore -= 10; + while (totalScore > BLACKJACK_SCORE && aceCount > 0) { + totalScore -= ACE_SCORE; aceCount--; } return totalScore; } public void addCard(Card card) { + if (card == null || sumScore() > BLACKJACK_SCORE) { + throw new IllegalArgumentException("[ERROR] 카드를 추가할 수 없습니다."); + } cards.add(card); } public List getCardNames() { - List cardNames = new ArrayList<>(); - for (Card card : cards) { - String cardName = card.getCardName(); - cardNames.add(cardName); - } - return cardNames; + return cards.stream() + .map(Card::getCardName) + .collect(Collectors.toList()); } public int getSize() { From 2d0dfb145151448353afad0d19aae90e48dd0c87 Mon Sep 17 00:00:00 2001 From: haeseon lee Date: Sat, 14 Mar 2026 14:29:44 +0900 Subject: [PATCH 29/30] =?UTF-8?q?refactor:=20BlackjackController=EC=9D=98?= =?UTF-8?q?=20calculateFinalScore=20=EB=A9=94=EC=84=9C=EB=93=9C=20stream?= =?UTF-8?q?=20=EC=82=AC=EC=9A=A9=20=EB=A6=AC=ED=8C=A9=ED=84=B0=EB=A7=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../blackjack/controller/BlackjackController.java | 12 ++++-------- 1 file changed, 4 insertions(+), 8 deletions(-) diff --git a/src/main/java/blackjack/controller/BlackjackController.java b/src/main/java/blackjack/controller/BlackjackController.java index 84250ed347e..ce75dfae8f7 100644 --- a/src/main/java/blackjack/controller/BlackjackController.java +++ b/src/main/java/blackjack/controller/BlackjackController.java @@ -9,7 +9,7 @@ import java.util.HashMap; import java.util.List; import java.util.Map; -import java.util.Map.Entry; +import java.util.stream.Collectors; import blackjack.view.InputView; import blackjack.view.OutputView; @@ -96,11 +96,9 @@ private boolean isHit(Participant player) { } private void calculateFinalScore(List players, Participant dealer) { - List playerResults = new ArrayList<>(); - for (Participant player : players) { - ParticipantResult participantResult = new ParticipantResult(player.getName(), player.getCardNames(), player.calculateTotalScore()); - playerResults.add(participantResult); - } + List playerResults = players.stream() + .map(player -> new ParticipantResult(player.getName(), player.getCardNames(), player.calculateTotalScore())) + .collect(Collectors.toList()); ParticipantResult dealerResult = new ParticipantResult(dealer.getName(), dealer.getCardNames(), dealer.calculateTotalScore()); OutputView.printFinalCardScores(playerResults, dealerResult); @@ -109,13 +107,11 @@ private void calculateFinalScore(List players, Participant dealer) public void calculateFinalGameProfit(List players, Participant dealer) { HashMap playersProfit = new HashMap<>(); int totalPlayerProfit = 0; - for (Participant player : players) { int profit = player.calculateFinalProfit(dealer); playersProfit.put(player.getName(), profit); totalPlayerProfit += profit; } - int dealerProfit = -totalPlayerProfit; OutputView.printFinalProfit(dealerProfit, playersProfit); } From 7caf5d0d9111e3cc7e140145b85ac57bc7ed2998 Mon Sep 17 00:00:00 2001 From: haeseon lee Date: Sat, 14 Mar 2026 14:55:47 +0900 Subject: [PATCH 30/30] =?UTF-8?q?test:=20BlackjackTest=20=EC=BD=94?= =?UTF-8?q?=EB=93=9C=20=EB=A7=A4=EC=A7=81=EB=84=98=EB=B2=84=20=EC=A0=9C?= =?UTF-8?q?=EA=B1=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../blackjackTest/service/BlackjackTest.java | 32 +++++++++++-------- 1 file changed, 18 insertions(+), 14 deletions(-) diff --git a/src/test/java/blackjackTest/service/BlackjackTest.java b/src/test/java/blackjackTest/service/BlackjackTest.java index 59580eed09f..e0382019929 100644 --- a/src/test/java/blackjackTest/service/BlackjackTest.java +++ b/src/test/java/blackjackTest/service/BlackjackTest.java @@ -37,7 +37,8 @@ public class BlackjackTest { @Test void 플레이어_초기카드_합_21이면_배팅금액의_1_5배_지급() { - Money bettingAmount = new Money(10000); + int bettingAmountValue = 10000; + Money bettingAmount = new Money(bettingAmountValue); Player pobi = new Player("pobi", bettingAmount); Dealer dealer = new Dealer(); @@ -45,13 +46,14 @@ public class BlackjackTest { pobi.receiveOneCard(new Card(Rank.TEN, Shape.SPADE)); int profit = pobi.calculateFinalProfit(dealer); - - assertThat(profit).isEqualTo(15000); + int expectedAmount = (int) (bettingAmountValue * 1.5); + assertThat(profit).isEqualTo(expectedAmount); } @Test void 플레이어_카드합_21_넘으면_배팅금액_모두_잃음() { - Money bettingAmount = new Money(10000); + int bettingAmountValue = 10000; + Money bettingAmount = new Money(bettingAmountValue); Player pobi = new Player("pobi", bettingAmount); Dealer dealer = new Dealer(); @@ -60,13 +62,14 @@ public class BlackjackTest { pobi.receiveOneCard(new Card(Rank.TWO, Shape.CLOVER)); int profit = pobi.calculateFinalProfit(dealer); - - assertThat(profit).isEqualTo(-10000); + int expectedAmount = -bettingAmountValue; + assertThat(profit).isEqualTo(expectedAmount); } @Test void 딜러_초기카드_합_21이면_배팅금액_모두_잃음() { - Money bettingAmount = new Money(10000); + int bettingAmountValue = 10000; + Money bettingAmount = new Money(bettingAmountValue); Player pobi = new Player("pobi", bettingAmount); Dealer dealer = new Dealer(); @@ -76,13 +79,14 @@ public class BlackjackTest { dealer.receiveOneCard(new Card(Rank.QUEEN, Shape.SPADE)); int profit = pobi.calculateFinalProfit(dealer); - - assertThat(profit).isEqualTo(-10000); + int expectedAmount = -bettingAmountValue; + assertThat(profit).isEqualTo(expectedAmount); } @Test void 딜러와_플레이어_모두_초기카드_합_21이면_배팅금액_돌려받음() { - Money bettingAmount = new Money(10000); + int bettingAmountValue = 10000; + Money bettingAmount = new Money(bettingAmountValue); Player pobi = new Player("pobi", bettingAmount); Dealer dealer = new Dealer(); @@ -92,13 +96,13 @@ public class BlackjackTest { dealer.receiveOneCard(new Card(Rank.QUEEN, Shape.SPADE)); int profit = pobi.calculateFinalProfit(dealer); - - assertThat(profit).isEqualTo(10000); + assertThat(profit).isEqualTo(bettingAmountValue); } @Test void 플레이어가_딜러보다_점수가_높으면_배팅금액_돌려받음() { - Money bettingAmount = new Money(10000); + int bettingAmountValue = 10000; + Money bettingAmount = new Money(bettingAmountValue); Player pobi = new Player("pobi", bettingAmount); Dealer dealer = new Dealer(); @@ -111,6 +115,6 @@ public class BlackjackTest { int profit = pobi.calculateFinalProfit(dealer); - assertThat(profit).isEqualTo(10000); + assertThat(profit).isEqualTo(bettingAmountValue); } }