From 78838ee71cea9e346fbcd9c86b09e907342ecdce Mon Sep 17 00:00:00 2001 From: jihyun park Date: Fri, 11 Feb 2022 16:33:08 +0900 Subject: [PATCH 01/57] docs: Update README.md --- README.md | 24 +++++++++++++++++++++++- 1 file changed, 23 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 03ba7ed3..c90a6c07 100644 --- a/README.md +++ b/README.md @@ -1 +1,23 @@ -# java-blackjack \ No newline at end of file +# 연료 주입 +## 기능 요구 사항 +우리 회사는 렌터카를 운영하고 있다 +현재 보유하고 있는 차량은 Sonata 2대, Avante 1대, K5 2대로 총 5대의 차량을 보유하고 있다. +고객이 인터넷으로부터 예약할 때 여행할 목적지의 대략적인 이동거리를 입력 받는다. +이 이동거리를 활용해 차량 별로 필요한 연료를 주입한다. +차량 별로 주입해야 할 연료량을 확인할 수 있는 보고서를 생성해야 한다. + +각 차량별 연비는 다음과 같다. +* Sonata : 10km/리터 +* Avante : 15km/리터 +* K5 : 13km/리터 + +## 기능 구현 사항 +- [ ] 자동차를 보유하는 렌터카 회사는 factory method를 사용해 생성한다. RentCompany#create() +- [ ] 자동차 인스턴스를 생성할 시 이동할 거리를 인자로 받는다. +- [ ] 렌터카 회사에 있는 자동차들은 Car 추상클래스를 상속받는다. Car - Sonata, Avante, K5 +- [ ] 차량 별로 주입해야 할 연료량을 확인할 수 있는 보고서를 생성한다. OutputView + +# 블랙잭 +## 기능 요구 사항 + +## 기능 구현 사항 \ No newline at end of file From 76baf2a061d5f0093a8e461316ce741f0da62a8c Mon Sep 17 00:00:00 2001 From: jihyun park Date: Fri, 11 Feb 2022 16:57:00 +0900 Subject: [PATCH 02/57] =?UTF-8?q?feat:=20Sonata=20=EC=97=B0=EB=B9=84,=20?= =?UTF-8?q?=EC=97=AC=ED=96=89=EA=B1=B0=EB=A6=AC=20=EA=B4=80=EB=A0=A8=20?= =?UTF-8?q?=EB=A9=94=EC=86=8C=EB=93=9C=20=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 생성자 호출시 인자를 통한 여행거리 초기화 - 연비 구하는 기능 getDistancePerLiter() 상수를 사용하여 return Constant - 여행 거리를 구하는 기능 getTripDistance() 멤버변수를 반환 --- src/main/java/empty.txt | 0 src/main/java/rentcar/RentCarMain.java | 5 ++++ src/main/java/rentcar/domain/Avante.java | 5 ++++ src/main/java/rentcar/domain/Car.java | 26 +++++++++++++++++++ src/main/java/rentcar/domain/K5.java | 5 ++++ src/main/java/rentcar/domain/RentCompnay.java | 5 ++++ src/main/java/rentcar/domain/Sonata.java | 26 +++++++++++++++++++ src/main/java/rentcar/util/Constant.java | 9 +++++++ src/main/java/rentcar/view/OutputView.java | 5 ++++ src/test/java/empty.txt | 0 src/test/java/rentcar/domain/SonataTest.java | 26 +++++++++++++++++++ 11 files changed, 112 insertions(+) delete mode 100644 src/main/java/empty.txt create mode 100644 src/main/java/rentcar/RentCarMain.java create mode 100644 src/main/java/rentcar/domain/Avante.java create mode 100644 src/main/java/rentcar/domain/Car.java create mode 100644 src/main/java/rentcar/domain/K5.java create mode 100644 src/main/java/rentcar/domain/RentCompnay.java create mode 100644 src/main/java/rentcar/domain/Sonata.java create mode 100644 src/main/java/rentcar/util/Constant.java create mode 100644 src/main/java/rentcar/view/OutputView.java delete mode 100644 src/test/java/empty.txt create mode 100644 src/test/java/rentcar/domain/SonataTest.java diff --git a/src/main/java/empty.txt b/src/main/java/empty.txt deleted file mode 100644 index e69de29b..00000000 diff --git a/src/main/java/rentcar/RentCarMain.java b/src/main/java/rentcar/RentCarMain.java new file mode 100644 index 00000000..7d911b48 --- /dev/null +++ b/src/main/java/rentcar/RentCarMain.java @@ -0,0 +1,5 @@ +package rentcar; + +public class RentCarMain { + +} diff --git a/src/main/java/rentcar/domain/Avante.java b/src/main/java/rentcar/domain/Avante.java new file mode 100644 index 00000000..cf4e9dbc --- /dev/null +++ b/src/main/java/rentcar/domain/Avante.java @@ -0,0 +1,5 @@ +package rentcar.domain; + +public class Avante { + +} diff --git a/src/main/java/rentcar/domain/Car.java b/src/main/java/rentcar/domain/Car.java new file mode 100644 index 00000000..30622a4f --- /dev/null +++ b/src/main/java/rentcar/domain/Car.java @@ -0,0 +1,26 @@ +package rentcar.domain; + +public abstract class Car { + + /** + * 리터당 이동 거리. 즉, 연비 + */ + abstract double getDistancePerLiter(); + + /** + * 여행하려는 거리 + */ + abstract double getTripDistance(); + + /** + * 차종의 이름 + */ + abstract String getName(); + + /** + * 주입해야할 연료량을 구한다. + */ + double getChargeQuantity() { + return getTripDistance() / getDistancePerLiter(); + } +} \ No newline at end of file diff --git a/src/main/java/rentcar/domain/K5.java b/src/main/java/rentcar/domain/K5.java new file mode 100644 index 00000000..69014b63 --- /dev/null +++ b/src/main/java/rentcar/domain/K5.java @@ -0,0 +1,5 @@ +package rentcar.domain; + +public class K5 { + +} diff --git a/src/main/java/rentcar/domain/RentCompnay.java b/src/main/java/rentcar/domain/RentCompnay.java new file mode 100644 index 00000000..06a0d3ad --- /dev/null +++ b/src/main/java/rentcar/domain/RentCompnay.java @@ -0,0 +1,5 @@ +package rentcar.domain; + +public class RentCompnay { + +} diff --git a/src/main/java/rentcar/domain/Sonata.java b/src/main/java/rentcar/domain/Sonata.java new file mode 100644 index 00000000..d03cee41 --- /dev/null +++ b/src/main/java/rentcar/domain/Sonata.java @@ -0,0 +1,26 @@ +package rentcar.domain; + +import static rentcar.util.Constant.SONATA_DISTANCE_PER_LITER; + +public class Sonata extends Car { + + private final double tripDistance; + public Sonata(double tripDistance) { + this.tripDistance = tripDistance; + } + + @Override + double getDistancePerLiter() { + return SONATA_DISTANCE_PER_LITER; + } + + @Override + double getTripDistance() { + return tripDistance; + } + + @Override + String getName() { + return null; + } +} diff --git a/src/main/java/rentcar/util/Constant.java b/src/main/java/rentcar/util/Constant.java new file mode 100644 index 00000000..270e911d --- /dev/null +++ b/src/main/java/rentcar/util/Constant.java @@ -0,0 +1,9 @@ +package rentcar.util; + +public class Constant { + + private Constant() { + } + + public static final double SONATA_DISTANCE_PER_LITER = 10; +} diff --git a/src/main/java/rentcar/view/OutputView.java b/src/main/java/rentcar/view/OutputView.java new file mode 100644 index 00000000..42999a75 --- /dev/null +++ b/src/main/java/rentcar/view/OutputView.java @@ -0,0 +1,5 @@ +package rentcar.view; + +public class OutputView { + +} diff --git a/src/test/java/empty.txt b/src/test/java/empty.txt deleted file mode 100644 index e69de29b..00000000 diff --git a/src/test/java/rentcar/domain/SonataTest.java b/src/test/java/rentcar/domain/SonataTest.java new file mode 100644 index 00000000..03aae3fc --- /dev/null +++ b/src/test/java/rentcar/domain/SonataTest.java @@ -0,0 +1,26 @@ +package rentcar.domain; + +import static org.assertj.core.api.Assertions.*; + +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.params.ParameterizedTest; +import org.junit.jupiter.params.provider.ValueSource; + +class SonataTest { + + @ValueSource(ints = {150,200,300,400}) + @ParameterizedTest + @DisplayName("Sonata는 연비는 10km/리터 이다") + void testSonataDistancePerLiter(final double number){ + assertThat(new Sonata(number).getDistancePerLiter()) + .isEqualTo(10.0); + } + + @ValueSource(ints = {150,200,300,400}) + @ParameterizedTest + void testSonataTripDistance(final double number){ + assertThat(new Sonata(number).getTripDistance()) + .isEqualTo(number); + } +} \ No newline at end of file From 572a12f73b6697b6723cbd17a555775981127b35 Mon Sep 17 00:00:00 2001 From: jihyun park Date: Fri, 11 Feb 2022 17:04:23 +0900 Subject: [PATCH 03/57] =?UTF-8?q?feat:=20Sonata=20=ED=81=B4=EB=9E=98?= =?UTF-8?q?=EC=8A=A4=20getName()=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/rentcar/domain/Sonata.java | 3 ++- src/main/java/rentcar/util/Constant.java | 2 ++ src/test/java/rentcar/domain/SonataTest.java | 8 ++++++++ 3 files changed, 12 insertions(+), 1 deletion(-) diff --git a/src/main/java/rentcar/domain/Sonata.java b/src/main/java/rentcar/domain/Sonata.java index d03cee41..a82bea12 100644 --- a/src/main/java/rentcar/domain/Sonata.java +++ b/src/main/java/rentcar/domain/Sonata.java @@ -1,6 +1,7 @@ package rentcar.domain; import static rentcar.util.Constant.SONATA_DISTANCE_PER_LITER; +import static rentcar.util.Constant.SONATA_NAME; public class Sonata extends Car { @@ -21,6 +22,6 @@ public Sonata(double tripDistance) { @Override String getName() { - return null; + return SONATA_NAME; } } diff --git a/src/main/java/rentcar/util/Constant.java b/src/main/java/rentcar/util/Constant.java index 270e911d..3544eca0 100644 --- a/src/main/java/rentcar/util/Constant.java +++ b/src/main/java/rentcar/util/Constant.java @@ -6,4 +6,6 @@ private Constant() { } public static final double SONATA_DISTANCE_PER_LITER = 10; + + public static final String SONATA_NAME = "Sonata"; } diff --git a/src/test/java/rentcar/domain/SonataTest.java b/src/test/java/rentcar/domain/SonataTest.java index 03aae3fc..50fd24c8 100644 --- a/src/test/java/rentcar/domain/SonataTest.java +++ b/src/test/java/rentcar/domain/SonataTest.java @@ -23,4 +23,12 @@ void testSonataTripDistance(final double number){ assertThat(new Sonata(number).getTripDistance()) .isEqualTo(number); } + + @Test + void testSonataName() { + //given + final double distance = 150; + assertThat(new Sonata(distance).getName()) + .isEqualTo("Sonata"); + } } \ No newline at end of file From ef8ae7150d31e59a3f2dcd6211925bacad348ce5 Mon Sep 17 00:00:00 2001 From: xxell8 Date: Fri, 11 Feb 2022 17:11:26 +0900 Subject: [PATCH 04/57] =?UTF-8?q?feat:=20Avante=20=ED=81=B4=EB=9E=98?= =?UTF-8?q?=EC=8A=A4=20getDistancePerLiter()=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/rentcar/domain/Avante.java | 25 +++++++++++++++++++- src/main/java/rentcar/util/Constant.java | 1 + src/test/java/rentcar/domain/AvanteTest.java | 19 +++++++++++++++ 3 files changed, 44 insertions(+), 1 deletion(-) create mode 100644 src/test/java/rentcar/domain/AvanteTest.java diff --git a/src/main/java/rentcar/domain/Avante.java b/src/main/java/rentcar/domain/Avante.java index cf4e9dbc..49f89923 100644 --- a/src/main/java/rentcar/domain/Avante.java +++ b/src/main/java/rentcar/domain/Avante.java @@ -1,5 +1,28 @@ package rentcar.domain; -public class Avante { +import static rentcar.util.Constant.AVANTE_DISTANCE_PER_LITER; + +public class Avante extends Car { + + private final double tripDistance; + + public Avante(double tripDistance) { + this.tripDistance = tripDistance; + } + + @Override + double getDistancePerLiter() { + return AVANTE_DISTANCE_PER_LITER; + } + + @Override + double getTripDistance() { + return 0; + } + + @Override + String getName() { + return "0"; + } } diff --git a/src/main/java/rentcar/util/Constant.java b/src/main/java/rentcar/util/Constant.java index 3544eca0..8bf6ee22 100644 --- a/src/main/java/rentcar/util/Constant.java +++ b/src/main/java/rentcar/util/Constant.java @@ -6,6 +6,7 @@ private Constant() { } public static final double SONATA_DISTANCE_PER_LITER = 10; + public static final double AVANTE_DISTANCE_PER_LITER = 15; public static final String SONATA_NAME = "Sonata"; } diff --git a/src/test/java/rentcar/domain/AvanteTest.java b/src/test/java/rentcar/domain/AvanteTest.java new file mode 100644 index 00000000..3c23d329 --- /dev/null +++ b/src/test/java/rentcar/domain/AvanteTest.java @@ -0,0 +1,19 @@ +package rentcar.domain; + +import static org.assertj.core.api.Assertions.*; + +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.params.ParameterizedTest; +import org.junit.jupiter.params.provider.ValueSource; + +class AvanteTest { + + @ValueSource(ints = {150,200,300,400}) + @ParameterizedTest + @DisplayName("Avante는 연비는 15km/리터 이다") + void testAvanteDistancePerLiter(final double number){ + assertThat(new Avante(number).getDistancePerLiter()) + .isEqualTo(15.0); + } +} From b2c6ca706650630d92af457033b9c37101f3252f Mon Sep 17 00:00:00 2001 From: xxell8 Date: Fri, 11 Feb 2022 17:14:32 +0900 Subject: [PATCH 05/57] =?UTF-8?q?feat:=20Avante=20=ED=81=B4=EB=9E=98?= =?UTF-8?q?=EC=8A=A4=20getTripDistance()=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/rentcar/domain/Avante.java | 2 +- src/test/java/rentcar/domain/AvanteTest.java | 7 +++++++ 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/src/main/java/rentcar/domain/Avante.java b/src/main/java/rentcar/domain/Avante.java index 49f89923..3ad41f20 100644 --- a/src/main/java/rentcar/domain/Avante.java +++ b/src/main/java/rentcar/domain/Avante.java @@ -18,7 +18,7 @@ public Avante(double tripDistance) { @Override double getTripDistance() { - return 0; + return tripDistance; } @Override diff --git a/src/test/java/rentcar/domain/AvanteTest.java b/src/test/java/rentcar/domain/AvanteTest.java index 3c23d329..f61ce5d2 100644 --- a/src/test/java/rentcar/domain/AvanteTest.java +++ b/src/test/java/rentcar/domain/AvanteTest.java @@ -16,4 +16,11 @@ void testAvanteDistancePerLiter(final double number){ assertThat(new Avante(number).getDistancePerLiter()) .isEqualTo(15.0); } + + @ValueSource(ints = {150,200,300,400}) + @ParameterizedTest + void testAvanteTripDistance(final double number){ + assertThat(new Avante(number).getTripDistance()) + .isEqualTo(number); + } } From 1d32d7464282dc8096e4cd206d52df760a18b77f Mon Sep 17 00:00:00 2001 From: xxell8 Date: Fri, 11 Feb 2022 17:16:17 +0900 Subject: [PATCH 06/57] =?UTF-8?q?feat:=20Avante=20=ED=81=B4=EB=9E=98?= =?UTF-8?q?=EC=8A=A4=20getName()=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/rentcar/domain/Avante.java | 3 ++- src/main/java/rentcar/util/Constant.java | 1 + src/test/java/rentcar/domain/AvanteTest.java | 7 +++++++ 3 files changed, 10 insertions(+), 1 deletion(-) diff --git a/src/main/java/rentcar/domain/Avante.java b/src/main/java/rentcar/domain/Avante.java index 3ad41f20..c6601e6d 100644 --- a/src/main/java/rentcar/domain/Avante.java +++ b/src/main/java/rentcar/domain/Avante.java @@ -2,6 +2,7 @@ import static rentcar.util.Constant.AVANTE_DISTANCE_PER_LITER; +import static rentcar.util.Constant.AVANTE_NAME; public class Avante extends Car { @@ -23,6 +24,6 @@ public Avante(double tripDistance) { @Override String getName() { - return "0"; + return AVANTE_NAME; } } diff --git a/src/main/java/rentcar/util/Constant.java b/src/main/java/rentcar/util/Constant.java index 8bf6ee22..ed27ce66 100644 --- a/src/main/java/rentcar/util/Constant.java +++ b/src/main/java/rentcar/util/Constant.java @@ -9,4 +9,5 @@ private Constant() { public static final double AVANTE_DISTANCE_PER_LITER = 15; public static final String SONATA_NAME = "Sonata"; + public static final String AVANTE_NAME = "Avante"; } diff --git a/src/test/java/rentcar/domain/AvanteTest.java b/src/test/java/rentcar/domain/AvanteTest.java index f61ce5d2..68e5ef79 100644 --- a/src/test/java/rentcar/domain/AvanteTest.java +++ b/src/test/java/rentcar/domain/AvanteTest.java @@ -23,4 +23,11 @@ void testAvanteTripDistance(final double number){ assertThat(new Avante(number).getTripDistance()) .isEqualTo(number); } + + @Test + void testAvanteName() { + final double distance = 150; + assertThat(new Avante(distance).getName()) + .isEqualTo("Avante"); + } } From 8fbfde365edb0086907d57e976404c18268b8fe4 Mon Sep 17 00:00:00 2001 From: xxell8 Date: Fri, 11 Feb 2022 17:20:15 +0900 Subject: [PATCH 07/57] =?UTF-8?q?feat:=20K5=20=ED=81=B4=EB=9E=98=EC=8A=A4?= =?UTF-8?q?=20getDistancePerLiter()=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 --- src/main/java/rentcar/domain/K5.java | 21 ++++++++++++++++++++- src/main/java/rentcar/util/Constant.java | 1 + src/test/java/rentcar/domain/K5Test.java | 17 +++++++++++++++++ 3 files changed, 38 insertions(+), 1 deletion(-) create mode 100644 src/test/java/rentcar/domain/K5Test.java diff --git a/src/main/java/rentcar/domain/K5.java b/src/main/java/rentcar/domain/K5.java index 69014b63..72970832 100644 --- a/src/main/java/rentcar/domain/K5.java +++ b/src/main/java/rentcar/domain/K5.java @@ -1,5 +1,24 @@ package rentcar.domain; -public class K5 { +import static rentcar.util.Constant.K5_DISTANCE_PER_LITER; +public class K5 extends Car { + + public K5(double tripDistance) { + } + + @Override + double getDistancePerLiter() { + return K5_DISTANCE_PER_LITER; + } + + @Override + double getTripDistance() { + return 0; + } + + @Override + String getName() { + return "0"; + } } diff --git a/src/main/java/rentcar/util/Constant.java b/src/main/java/rentcar/util/Constant.java index ed27ce66..11e65f2a 100644 --- a/src/main/java/rentcar/util/Constant.java +++ b/src/main/java/rentcar/util/Constant.java @@ -7,6 +7,7 @@ private Constant() { public static final double SONATA_DISTANCE_PER_LITER = 10; public static final double AVANTE_DISTANCE_PER_LITER = 15; + public static final double K5_DISTANCE_PER_LITER = 13; public static final String SONATA_NAME = "Sonata"; public static final String AVANTE_NAME = "Avante"; diff --git a/src/test/java/rentcar/domain/K5Test.java b/src/test/java/rentcar/domain/K5Test.java new file mode 100644 index 00000000..9d70d5a8 --- /dev/null +++ b/src/test/java/rentcar/domain/K5Test.java @@ -0,0 +1,17 @@ +package rentcar.domain; + +import static org.assertj.core.api.Assertions.*; + +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.params.ParameterizedTest; +import org.junit.jupiter.params.provider.ValueSource; + +class K5Test { + @ValueSource(ints = {150,200,300,400}) + @ParameterizedTest + @DisplayName("K5는 연비는 13km/리터 이다") + void testK5DistancePerLiter(final double number){ + assertThat(new K5(number).getDistancePerLiter()) + .isEqualTo(13.0); + } +} From e6ffc5ca2217883004be0b69ab124413f66db02e Mon Sep 17 00:00:00 2001 From: xxell8 Date: Fri, 11 Feb 2022 17:21:24 +0900 Subject: [PATCH 08/57] =?UTF-8?q?feat:=20Constant=EC=97=90=20NEWLINE=20?= =?UTF-8?q?=EC=83=81=EC=88=98=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/rentcar/util/Constant.java | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/main/java/rentcar/util/Constant.java b/src/main/java/rentcar/util/Constant.java index 11e65f2a..e201200b 100644 --- a/src/main/java/rentcar/util/Constant.java +++ b/src/main/java/rentcar/util/Constant.java @@ -11,4 +11,6 @@ private Constant() { public static final String SONATA_NAME = "Sonata"; public static final String AVANTE_NAME = "Avante"; + + public static final String NEWLINE = "\n"; } From 1a6cd6c8717474b39b41475ab6c1eb2190610dec Mon Sep 17 00:00:00 2001 From: xxell8 Date: Fri, 11 Feb 2022 17:23:50 +0900 Subject: [PATCH 09/57] =?UTF-8?q?feat:=20K5=20=ED=81=B4=EB=9E=98=EC=8A=A4?= =?UTF-8?q?=20getTripDistance()=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/rentcar/domain/K5.java | 5 ++++- src/test/java/rentcar/domain/K5Test.java | 7 +++++++ 2 files changed, 11 insertions(+), 1 deletion(-) diff --git a/src/main/java/rentcar/domain/K5.java b/src/main/java/rentcar/domain/K5.java index 72970832..af00ab3d 100644 --- a/src/main/java/rentcar/domain/K5.java +++ b/src/main/java/rentcar/domain/K5.java @@ -4,7 +4,10 @@ public class K5 extends Car { + private final double tripDistance; + public K5(double tripDistance) { + this.tripDistance = tripDistance; } @Override @@ -14,7 +17,7 @@ public K5(double tripDistance) { @Override double getTripDistance() { - return 0; + return tripDistance; } @Override diff --git a/src/test/java/rentcar/domain/K5Test.java b/src/test/java/rentcar/domain/K5Test.java index 9d70d5a8..d25d40fd 100644 --- a/src/test/java/rentcar/domain/K5Test.java +++ b/src/test/java/rentcar/domain/K5Test.java @@ -14,4 +14,11 @@ void testK5DistancePerLiter(final double number){ assertThat(new K5(number).getDistancePerLiter()) .isEqualTo(13.0); } + + @ValueSource(ints = {150,200,300,400}) + @ParameterizedTest + void testK5TripDistance(final double number){ + assertThat(new K5(number).getTripDistance()) + .isEqualTo(number); + } } From df8c0479f21bafe0073f4cd572cb7fa9e616b56c Mon Sep 17 00:00:00 2001 From: xxell8 Date: Fri, 11 Feb 2022 17:25:19 +0900 Subject: [PATCH 10/57] =?UTF-8?q?feat:=20K5=20=ED=81=B4=EB=9E=98=EC=8A=A4?= =?UTF-8?q?=20getName()=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/rentcar/domain/K5.java | 3 ++- src/main/java/rentcar/util/Constant.java | 1 + src/test/java/rentcar/domain/K5Test.java | 8 ++++++++ 3 files changed, 11 insertions(+), 1 deletion(-) diff --git a/src/main/java/rentcar/domain/K5.java b/src/main/java/rentcar/domain/K5.java index af00ab3d..d65def4c 100644 --- a/src/main/java/rentcar/domain/K5.java +++ b/src/main/java/rentcar/domain/K5.java @@ -1,6 +1,7 @@ package rentcar.domain; import static rentcar.util.Constant.K5_DISTANCE_PER_LITER; +import static rentcar.util.Constant.K5_NAME; public class K5 extends Car { @@ -22,6 +23,6 @@ public K5(double tripDistance) { @Override String getName() { - return "0"; + return K5_NAME; } } diff --git a/src/main/java/rentcar/util/Constant.java b/src/main/java/rentcar/util/Constant.java index e201200b..d3b617b9 100644 --- a/src/main/java/rentcar/util/Constant.java +++ b/src/main/java/rentcar/util/Constant.java @@ -11,6 +11,7 @@ private Constant() { public static final String SONATA_NAME = "Sonata"; public static final String AVANTE_NAME = "Avante"; + public static final String K5_NAME = "K5"; public static final String NEWLINE = "\n"; } diff --git a/src/test/java/rentcar/domain/K5Test.java b/src/test/java/rentcar/domain/K5Test.java index d25d40fd..33cb2a2d 100644 --- a/src/test/java/rentcar/domain/K5Test.java +++ b/src/test/java/rentcar/domain/K5Test.java @@ -3,6 +3,7 @@ import static org.assertj.core.api.Assertions.*; import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Test; import org.junit.jupiter.params.ParameterizedTest; import org.junit.jupiter.params.provider.ValueSource; @@ -21,4 +22,11 @@ void testK5TripDistance(final double number){ assertThat(new K5(number).getTripDistance()) .isEqualTo(number); } + + @Test + void testK5Name() { + final double distance = 150; + assertThat(new K5(distance).getName()) + .isEqualTo("K5"); + } } From 42c3c1f62c48f1b8d8c28f87d2d00e6b869050a5 Mon Sep 17 00:00:00 2001 From: xxell8 Date: Fri, 11 Feb 2022 17:29:06 +0900 Subject: [PATCH 11/57] =?UTF-8?q?test:=20Sonata=20=EC=97=B0=EB=A3=8C=20?= =?UTF-8?q?=EC=A3=BC=EC=9E=85=EB=9F=89=20=EB=B0=98=ED=99=98=20=ED=85=8C?= =?UTF-8?q?=EC=8A=A4=ED=8A=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/test/java/rentcar/domain/SonataTest.java | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/src/test/java/rentcar/domain/SonataTest.java b/src/test/java/rentcar/domain/SonataTest.java index 50fd24c8..e0d096aa 100644 --- a/src/test/java/rentcar/domain/SonataTest.java +++ b/src/test/java/rentcar/domain/SonataTest.java @@ -5,6 +5,7 @@ import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Test; import org.junit.jupiter.params.ParameterizedTest; +import org.junit.jupiter.params.provider.CsvSource; import org.junit.jupiter.params.provider.ValueSource; class SonataTest { @@ -31,4 +32,11 @@ void testSonataName() { assertThat(new Sonata(distance).getName()) .isEqualTo("Sonata"); } -} \ No newline at end of file + + @ParameterizedTest + @CsvSource({"150,15", "200, 20", "60,6"}) + void testChargeQuantity(double tripDistance, double liter) { + assertThat(new Sonata(tripDistance).getChargeQuantity()) + .isEqualTo(liter); + } +} From fb8df818e442747082b70c9a652e1809e0efb930 Mon Sep 17 00:00:00 2001 From: xxell8 Date: Fri, 11 Feb 2022 17:30:14 +0900 Subject: [PATCH 12/57] =?UTF-8?q?test:=20K5=20=EC=97=B0=EB=A3=8C=20?= =?UTF-8?q?=EC=A3=BC=EC=9E=85=EB=9F=89=20=EB=B0=98=ED=99=98=20=ED=85=8C?= =?UTF-8?q?=EC=8A=A4=ED=8A=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/test/java/rentcar/domain/K5Test.java | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/src/test/java/rentcar/domain/K5Test.java b/src/test/java/rentcar/domain/K5Test.java index 33cb2a2d..3b7e5341 100644 --- a/src/test/java/rentcar/domain/K5Test.java +++ b/src/test/java/rentcar/domain/K5Test.java @@ -5,6 +5,7 @@ import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Test; import org.junit.jupiter.params.ParameterizedTest; +import org.junit.jupiter.params.provider.CsvSource; import org.junit.jupiter.params.provider.ValueSource; class K5Test { @@ -29,4 +30,11 @@ void testK5Name() { assertThat(new K5(distance).getName()) .isEqualTo("K5"); } + + @ParameterizedTest + @CsvSource({"130,10", "260, 20", "390,30"}) + void testChargeQuantity(double tripDistance, double liter) { + assertThat(new K5(tripDistance).getChargeQuantity()) + .isEqualTo(liter); + } } From 85078161f17e8c52e7d6f977ca704ae7d01dedec Mon Sep 17 00:00:00 2001 From: xxell8 Date: Fri, 11 Feb 2022 17:31:20 +0900 Subject: [PATCH 13/57] =?UTF-8?q?test:=20Avante=20=EC=97=B0=EB=A3=8C=20?= =?UTF-8?q?=EC=A3=BC=EC=9E=85=EB=9F=89=20=EB=B0=98=ED=99=98=20=ED=85=8C?= =?UTF-8?q?=EC=8A=A4=ED=8A=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/test/java/rentcar/domain/AvanteTest.java | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/src/test/java/rentcar/domain/AvanteTest.java b/src/test/java/rentcar/domain/AvanteTest.java index 68e5ef79..c4eb5840 100644 --- a/src/test/java/rentcar/domain/AvanteTest.java +++ b/src/test/java/rentcar/domain/AvanteTest.java @@ -5,6 +5,7 @@ import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Test; import org.junit.jupiter.params.ParameterizedTest; +import org.junit.jupiter.params.provider.CsvSource; import org.junit.jupiter.params.provider.ValueSource; class AvanteTest { @@ -30,4 +31,11 @@ void testAvanteName() { assertThat(new Avante(distance).getName()) .isEqualTo("Avante"); } + + @ParameterizedTest + @CsvSource({"150,10", "300, 20", "1500,100"}) + void testChargeQuantity(double tripDistance, double liter) { + assertThat(new Avante(tripDistance).getChargeQuantity()) + .isEqualTo(liter); + } } From aa70fd3c35659bc25516d14781da7cbb103081fe Mon Sep 17 00:00:00 2001 From: xxell8 Date: Fri, 11 Feb 2022 17:35:05 +0900 Subject: [PATCH 14/57] =?UTF-8?q?test:=20RentCompany=20report=20=EB=B0=98?= =?UTF-8?q?=ED=99=98=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 --- .../java/rentcar/domain/RentCompanyTest.java | 28 +++++++++++++++++++ 1 file changed, 28 insertions(+) create mode 100644 src/test/java/rentcar/domain/RentCompanyTest.java diff --git a/src/test/java/rentcar/domain/RentCompanyTest.java b/src/test/java/rentcar/domain/RentCompanyTest.java new file mode 100644 index 00000000..33e1b46c --- /dev/null +++ b/src/test/java/rentcar/domain/RentCompanyTest.java @@ -0,0 +1,28 @@ +package rentcar.domain; + +import static org.assertj.core.api.Assertions.*; + +import org.junit.jupiter.api.Test; + +public class RentCompanyTest { + private static final String NEWLINE = System.getProperty("line.separator"); + + @Test + public void report() throws Exception { + RentCompany company = RentCompany.create(); + company.addCar(new Sonata(150)); + company.addCar(new K5(260)); + company.addCar(new Sonata(120)); + company.addCar(new Avante(300)); + company.addCar(new K5(390)); + + String report = company.generateReport(); + assertThat(report).isEqualTo( + "Sonata : 15리터" + NEWLINE + + "K5 : 20리터" + NEWLINE + + "Sonata : 12리터" + NEWLINE + + "Avante : 20리터" + NEWLINE + + "K5 : 30리터" + NEWLINE + ); + } +} From bcc45beab1e4ef56e3de7b9421f6a1f33f111663 Mon Sep 17 00:00:00 2001 From: xxell-8 Date: Fri, 11 Feb 2022 18:44:03 +0900 Subject: [PATCH 15/57] =?UTF-8?q?feat:=20Constant=EC=97=90=20DELIMITER,=20?= =?UTF-8?q?UNIT=20=EC=83=81=EC=88=98=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/rentcar/util/Constant.java | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/main/java/rentcar/util/Constant.java b/src/main/java/rentcar/util/Constant.java index d3b617b9..c232efe3 100644 --- a/src/main/java/rentcar/util/Constant.java +++ b/src/main/java/rentcar/util/Constant.java @@ -14,4 +14,6 @@ private Constant() { public static final String K5_NAME = "K5"; public static final String NEWLINE = "\n"; + public static final String DELIMITER = " : "; + public static final String UNIT = "리터"; } From c0caff45497c529a2b7e965eea4ccf60616bc264 Mon Sep 17 00:00:00 2001 From: xxell-8 Date: Fri, 11 Feb 2022 18:45:16 +0900 Subject: [PATCH 16/57] =?UTF-8?q?feat:=20TDD=EC=97=90=20=EB=94=B0=EB=A5=B8?= =?UTF-8?q?=20RentCompany=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/java/rentcar/domain/RentCompany.java | 31 +++++++++++++++++++ src/main/java/rentcar/domain/RentCompnay.java | 5 --- 2 files changed, 31 insertions(+), 5 deletions(-) create mode 100644 src/main/java/rentcar/domain/RentCompany.java delete mode 100644 src/main/java/rentcar/domain/RentCompnay.java diff --git a/src/main/java/rentcar/domain/RentCompany.java b/src/main/java/rentcar/domain/RentCompany.java new file mode 100644 index 00000000..27bf6ff2 --- /dev/null +++ b/src/main/java/rentcar/domain/RentCompany.java @@ -0,0 +1,31 @@ +package rentcar.domain; + +import static rentcar.util.Constant.NEWLINE; + +import java.util.ArrayList; +import java.util.List; + +public class RentCompany { + + private static List rentCars; + + private RentCompany() { + rentCars = new ArrayList<>(); + } + + public static RentCompany create() { + return new RentCompany(); + } + + public void addCar(Car car) { + rentCars.add(car); + } + + public String generateReport() { + StringBuilder stringBuilder = new StringBuilder(); + for (Car car : rentCars) { + stringBuilder.append(car.toString()).append(NEWLINE); + } + return stringBuilder.toString(); + } +} diff --git a/src/main/java/rentcar/domain/RentCompnay.java b/src/main/java/rentcar/domain/RentCompnay.java deleted file mode 100644 index 06a0d3ad..00000000 --- a/src/main/java/rentcar/domain/RentCompnay.java +++ /dev/null @@ -1,5 +0,0 @@ -package rentcar.domain; - -public class RentCompnay { - -} From 2e0d35d121cd24fa10aa074fe2e14ea710c3d5b0 Mon Sep 17 00:00:00 2001 From: xxell-8 Date: Fri, 11 Feb 2022 18:46:51 +0900 Subject: [PATCH 17/57] =?UTF-8?q?feat:=20generateReport()=20=EB=A5=BC=20?= =?UTF-8?q?=EC=9C=84=ED=95=9C=20toString()=20=EB=A9=94=EC=84=9C=EB=93=9C?= =?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/java/rentcar/domain/Car.java | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/src/main/java/rentcar/domain/Car.java b/src/main/java/rentcar/domain/Car.java index 30622a4f..417fbe11 100644 --- a/src/main/java/rentcar/domain/Car.java +++ b/src/main/java/rentcar/domain/Car.java @@ -1,5 +1,10 @@ package rentcar.domain; +import static rentcar.util.Constant.UNIT; +import static rentcar.util.Constant.DELIMITER; + +import java.math.BigDecimal; + public abstract class Car { /** @@ -23,4 +28,11 @@ public abstract class Car { double getChargeQuantity() { return getTripDistance() / getDistancePerLiter(); } -} \ No newline at end of file + + @Override + public String toString() { + return getName() + DELIMITER + BigDecimal.valueOf(getChargeQuantity()).stripTrailingZeros().toPlainString() + UNIT; + } + + +} From 750bb83ac6502b1d276bb8972f74dfa5acb332f3 Mon Sep 17 00:00:00 2001 From: jihyun park Date: Mon, 14 Feb 2022 16:44:16 +0900 Subject: [PATCH 18/57] =?UTF-8?q?refactor:=20Car=20Interface=20=EC=B6=94?= =?UTF-8?q?=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 자동차 구현클래스들은 RentCar 추상 클래스를 상속받고, RentCar는 Car 인터페이스를 구현한다. --- src/main/java/rentcar/domain/Avante.java | 8 +++--- src/main/java/rentcar/domain/Car.java | 27 +++---------------- src/main/java/rentcar/domain/K5.java | 8 +++--- src/main/java/rentcar/domain/RentCar.java | 23 ++++++++++++++++ src/main/java/rentcar/domain/RentCompany.java | 6 ++--- src/main/java/rentcar/domain/Sonata.java | 8 +++--- 6 files changed, 42 insertions(+), 38 deletions(-) create mode 100644 src/main/java/rentcar/domain/RentCar.java diff --git a/src/main/java/rentcar/domain/Avante.java b/src/main/java/rentcar/domain/Avante.java index c6601e6d..3a7cacd2 100644 --- a/src/main/java/rentcar/domain/Avante.java +++ b/src/main/java/rentcar/domain/Avante.java @@ -4,7 +4,7 @@ import static rentcar.util.Constant.AVANTE_DISTANCE_PER_LITER; import static rentcar.util.Constant.AVANTE_NAME; -public class Avante extends Car { +public class Avante extends RentCar { private final double tripDistance; @@ -13,17 +13,17 @@ public Avante(double tripDistance) { } @Override - double getDistancePerLiter() { + public double getDistancePerLiter() { return AVANTE_DISTANCE_PER_LITER; } @Override - double getTripDistance() { + public double getTripDistance() { return tripDistance; } @Override - String getName() { + public String getName() { return AVANTE_NAME; } } diff --git a/src/main/java/rentcar/domain/Car.java b/src/main/java/rentcar/domain/Car.java index 417fbe11..2cdf001b 100644 --- a/src/main/java/rentcar/domain/Car.java +++ b/src/main/java/rentcar/domain/Car.java @@ -1,38 +1,19 @@ package rentcar.domain; -import static rentcar.util.Constant.UNIT; -import static rentcar.util.Constant.DELIMITER; - -import java.math.BigDecimal; - -public abstract class Car { +public interface Car { /** * 리터당 이동 거리. 즉, 연비 */ - abstract double getDistancePerLiter(); + double getDistancePerLiter(); /** * 여행하려는 거리 */ - abstract double getTripDistance(); + double getTripDistance(); /** * 차종의 이름 */ - abstract String getName(); - - /** - * 주입해야할 연료량을 구한다. - */ - double getChargeQuantity() { - return getTripDistance() / getDistancePerLiter(); - } - - @Override - public String toString() { - return getName() + DELIMITER + BigDecimal.valueOf(getChargeQuantity()).stripTrailingZeros().toPlainString() + UNIT; - } - - + String getName(); } diff --git a/src/main/java/rentcar/domain/K5.java b/src/main/java/rentcar/domain/K5.java index d65def4c..8a398a16 100644 --- a/src/main/java/rentcar/domain/K5.java +++ b/src/main/java/rentcar/domain/K5.java @@ -3,7 +3,7 @@ import static rentcar.util.Constant.K5_DISTANCE_PER_LITER; import static rentcar.util.Constant.K5_NAME; -public class K5 extends Car { +public class K5 extends RentCar { private final double tripDistance; @@ -12,17 +12,17 @@ public K5(double tripDistance) { } @Override - double getDistancePerLiter() { + public double getDistancePerLiter() { return K5_DISTANCE_PER_LITER; } @Override - double getTripDistance() { + public double getTripDistance() { return tripDistance; } @Override - String getName() { + public String getName() { return K5_NAME; } } diff --git a/src/main/java/rentcar/domain/RentCar.java b/src/main/java/rentcar/domain/RentCar.java new file mode 100644 index 00000000..e20ded0c --- /dev/null +++ b/src/main/java/rentcar/domain/RentCar.java @@ -0,0 +1,23 @@ +package rentcar.domain; + +import static rentcar.util.Constant.UNIT; +import static rentcar.util.Constant.DELIMITER; + +import java.math.BigDecimal; + +public abstract class RentCar implements Car { + + /** + * 주입해야할 연료량을 구한다. + */ + double getChargeQuantity() { + return getTripDistance() / getDistancePerLiter(); + } + + @Override + public String toString() { + return getName() + DELIMITER + BigDecimal.valueOf(getChargeQuantity()).stripTrailingZeros() + .toPlainString() + UNIT; + } + +} diff --git a/src/main/java/rentcar/domain/RentCompany.java b/src/main/java/rentcar/domain/RentCompany.java index 27bf6ff2..2f11e0fd 100644 --- a/src/main/java/rentcar/domain/RentCompany.java +++ b/src/main/java/rentcar/domain/RentCompany.java @@ -7,7 +7,7 @@ public class RentCompany { - private static List rentCars; + private static List rentCars; private RentCompany() { rentCars = new ArrayList<>(); @@ -17,13 +17,13 @@ public static RentCompany create() { return new RentCompany(); } - public void addCar(Car car) { + public void addCar(RentCar car) { rentCars.add(car); } public String generateReport() { StringBuilder stringBuilder = new StringBuilder(); - for (Car car : rentCars) { + for (RentCar car : rentCars) { stringBuilder.append(car.toString()).append(NEWLINE); } return stringBuilder.toString(); diff --git a/src/main/java/rentcar/domain/Sonata.java b/src/main/java/rentcar/domain/Sonata.java index a82bea12..ec5c10b0 100644 --- a/src/main/java/rentcar/domain/Sonata.java +++ b/src/main/java/rentcar/domain/Sonata.java @@ -3,7 +3,7 @@ import static rentcar.util.Constant.SONATA_DISTANCE_PER_LITER; import static rentcar.util.Constant.SONATA_NAME; -public class Sonata extends Car { +public class Sonata extends RentCar { private final double tripDistance; public Sonata(double tripDistance) { @@ -11,17 +11,17 @@ public Sonata(double tripDistance) { } @Override - double getDistancePerLiter() { + public double getDistancePerLiter() { return SONATA_DISTANCE_PER_LITER; } @Override - double getTripDistance() { + public double getTripDistance() { return tripDistance; } @Override - String getName() { + public String getName() { return SONATA_NAME; } } From 3ec67a7d461c8274598e83637c4864dc922d7da5 Mon Sep 17 00:00:00 2001 From: jihyun park Date: Mon, 14 Feb 2022 16:49:19 +0900 Subject: [PATCH 19/57] =?UTF-8?q?docs:=20=EC=97=B0=EB=A3=8C=EC=A3=BC?= =?UTF-8?q?=EC=9E=85=20=EA=B8=B0=EB=8A=A5=20=EB=AA=85=EC=84=B8=20update?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 10 +++++----- src/main/java/rentcar/view/OutputView.java | 5 ----- 2 files changed, 5 insertions(+), 10 deletions(-) delete mode 100644 src/main/java/rentcar/view/OutputView.java diff --git a/README.md b/README.md index c90a6c07..dde6d02a 100644 --- a/README.md +++ b/README.md @@ -12,12 +12,12 @@ * K5 : 13km/리터 ## 기능 구현 사항 -- [ ] 자동차를 보유하는 렌터카 회사는 factory method를 사용해 생성한다. RentCompany#create() -- [ ] 자동차 인스턴스를 생성할 시 이동할 거리를 인자로 받는다. -- [ ] 렌터카 회사에 있는 자동차들은 Car 추상클래스를 상속받는다. Car - Sonata, Avante, K5 -- [ ] 차량 별로 주입해야 할 연료량을 확인할 수 있는 보고서를 생성한다. OutputView +- [x] 자동차를 보유하는 렌터카 회사는 factory method를 사용해 생성한다. RentCompany#create() +- [x] 자동차 인스턴스를 생성할 시 이동할 거리를 인자로 받는다. +- [x] RentCar 추상 클래스는 필드에 대한 getter 메소드를 가지는 Car 인터페이스를 구현한다. +- [x] 렌터카 회사에 있는 자동차들은 RentCar 추상클래스를 상속받는다. RentCar - Sonata, Avante, K5 # 블랙잭 ## 기능 요구 사항 -## 기능 구현 사항 \ No newline at end of file +## 기능 구현 사항 diff --git a/src/main/java/rentcar/view/OutputView.java b/src/main/java/rentcar/view/OutputView.java deleted file mode 100644 index 42999a75..00000000 --- a/src/main/java/rentcar/view/OutputView.java +++ /dev/null @@ -1,5 +0,0 @@ -package rentcar.view; - -public class OutputView { - -} From a3f1de09d13519a6ebffab69f34b9f54c856889d Mon Sep 17 00:00:00 2001 From: jihyun park Date: Mon, 14 Feb 2022 17:18:43 +0900 Subject: [PATCH 20/57] =?UTF-8?q?feat:=20Card=EB=A5=BC=20=EA=B5=AC?= =?UTF-8?q?=EC=84=B1=ED=95=98=EB=8A=94=20=EC=88=AB=EC=9E=90=EC=99=80=20?= =?UTF-8?q?=EB=AC=B8=EC=96=91=20=ED=83=80=EC=9E=85=EC=9D=98=20Enum=20?= =?UTF-8?q?=EC=83=9D=EC=84=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 17 +++++++++ src/main/java/blackjack/domain/Card.java | 5 +++ .../java/blackjack/domain/Denomination.java | 37 +++++++++++++++++++ src/main/java/blackjack/domain/Suit.java | 18 +++++++++ src/test/java/blackjack/domain/CardTest.java | 7 ++++ 5 files changed, 84 insertions(+) create mode 100644 src/main/java/blackjack/domain/Card.java create mode 100644 src/main/java/blackjack/domain/Denomination.java create mode 100644 src/main/java/blackjack/domain/Suit.java create mode 100644 src/test/java/blackjack/domain/CardTest.java diff --git a/README.md b/README.md index dde6d02a..f43d6d5a 100644 --- a/README.md +++ b/README.md @@ -19,5 +19,22 @@ # 블랙잭 ## 기능 요구 사항 +블랙잭 게임은 딜러와 플레이어 중 카드의 합이 21 또는 21에 가장 가까운 숫자를 가지는 쪽이 이기는 게임이다. +카드의 숫자 계산은 카드 숫자를 기본으로 하며, 예외로 Ace는 1 또는 11로 계산할 수 있으며, King, Queen, Jack은 각각 10으로 계산한다. +게임을 시작하면 플레이어는 두 장의 카드를 지급 받으며, 두 장의 카드 숫자를 합쳐 21을 초과하지 않으면서 21에 가깝게 만들면 이긴다. 21을 넘지 않을 경우 원한다면 얼마든지 카드를 계속 뽑을 수 있다. +딜러는 처음에 받은 2장의 합계가 16이하이면 반드시 1장의 카드를 추가로 받아야 하고, 17점 이상이면 추가로 받을 수 없다. +게임을 완료한 후 각 플레이어별로 승패를 출력한다. ## 기능 구현 사항 +- [ ] 게임에 참여할 사람을 쉼표로 구분한다. - InputView +- [ ] 카드는 숫자랑 문양으로 이루어진다. - Card + - [x] 숫자와 문양은 Enum 형태로 관리한다. + - [ ] Ace는 1또는 11로 계산할 수 있다. + - [ ] King, Queen, Jack은 각각 10으로 계산한다. +- [ ] 카드는 덱으로 관리한다. - CardDeck + - [ ] 게임을 시작할 때 shuffle을 한 번 수행한다. + - [ ] 카드는 문양 + 숫자 조합이 하나씩만 존재한다. +- [ ] 게임을 시작하면 딜러를 포함한 모든 플레이어들에게 카드를 2장씩 나누어준다. + - [ ] 딜레를 제외한 플레이어는 21을 초과하지 않을 때까지 카드를 계속 받을지 선택한다. + - [ ] 딜러는 처음 받은 카드 두 장의 합이 16이하면 한 장의 카드를 더 받는다. + diff --git a/src/main/java/blackjack/domain/Card.java b/src/main/java/blackjack/domain/Card.java new file mode 100644 index 00000000..c7a20673 --- /dev/null +++ b/src/main/java/blackjack/domain/Card.java @@ -0,0 +1,5 @@ +package blackjack.domain; + +public class Card { + +} diff --git a/src/main/java/blackjack/domain/Denomination.java b/src/main/java/blackjack/domain/Denomination.java new file mode 100644 index 00000000..8b133aa0 --- /dev/null +++ b/src/main/java/blackjack/domain/Denomination.java @@ -0,0 +1,37 @@ +package blackjack.domain; + +public enum Denomination { + ACE(1, "A"), + 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"); + + private final int score; + private final String alias; + + Denomination(final int score, final String alias) { + this.score = score; + this.alias = alias; + } + + public boolean isAce() { + return this == ACE; + } + + public int getScore() { + return score; + } + + public String getAlias() { + return alias; + } +} diff --git a/src/main/java/blackjack/domain/Suit.java b/src/main/java/blackjack/domain/Suit.java new file mode 100644 index 00000000..be876261 --- /dev/null +++ b/src/main/java/blackjack/domain/Suit.java @@ -0,0 +1,18 @@ +package blackjack.domain; + +public enum Suit { + CLUBS("클로버"), + DIAMONDS("다이아몬드"), + HEARTS("하트"), + SPADES("스페이드"); + + private final String name; + + Suit(final String name) { + this.name = name; + } + + public String getName() { + return name; + } +} diff --git a/src/test/java/blackjack/domain/CardTest.java b/src/test/java/blackjack/domain/CardTest.java new file mode 100644 index 00000000..86adc144 --- /dev/null +++ b/src/test/java/blackjack/domain/CardTest.java @@ -0,0 +1,7 @@ +package blackjack.domain; + +import static org.junit.jupiter.api.Assertions.*; + +class CardTest { + +} From 57df0313577c663e15fe96c04c89a85d513c1e92 Mon Sep 17 00:00:00 2001 From: jihyun park Date: Mon, 14 Feb 2022 17:36:55 +0900 Subject: [PATCH 21/57] =?UTF-8?q?feat:=20Card=20=ED=81=B4=EB=9E=98?= =?UTF-8?q?=EC=8A=A4=20=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 4 ++-- src/main/java/blackjack/domain/Card.java | 8 ++++++++ src/test/java/blackjack/domain/CardTest.java | 3 +++ 3 files changed, 13 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index f43d6d5a..26d5bf72 100644 --- a/README.md +++ b/README.md @@ -27,10 +27,10 @@ ## 기능 구현 사항 - [ ] 게임에 참여할 사람을 쉼표로 구분한다. - InputView -- [ ] 카드는 숫자랑 문양으로 이루어진다. - Card +- [x] 카드는 숫자랑 문양으로 이루어진다. - Card - [x] 숫자와 문양은 Enum 형태로 관리한다. - [ ] Ace는 1또는 11로 계산할 수 있다. - - [ ] King, Queen, Jack은 각각 10으로 계산한다. + - [x] King, Queen, Jack은 각각 10으로 계산한다. - [ ] 카드는 덱으로 관리한다. - CardDeck - [ ] 게임을 시작할 때 shuffle을 한 번 수행한다. - [ ] 카드는 문양 + 숫자 조합이 하나씩만 존재한다. diff --git a/src/main/java/blackjack/domain/Card.java b/src/main/java/blackjack/domain/Card.java index c7a20673..ee14f714 100644 --- a/src/main/java/blackjack/domain/Card.java +++ b/src/main/java/blackjack/domain/Card.java @@ -2,4 +2,12 @@ public class Card { + private final Suit suit; + private final Denomination denomination; + + public Card(Suit suit, Denomination denomination) { + this.suit = suit; + this.denomination = denomination; + } + } diff --git a/src/test/java/blackjack/domain/CardTest.java b/src/test/java/blackjack/domain/CardTest.java index 86adc144..4145410e 100644 --- a/src/test/java/blackjack/domain/CardTest.java +++ b/src/test/java/blackjack/domain/CardTest.java @@ -2,6 +2,9 @@ import static org.junit.jupiter.api.Assertions.*; +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Test; + class CardTest { } From 966bd00f3ad7369a53e63657da127ece24a306e9 Mon Sep 17 00:00:00 2001 From: jihyun park Date: Mon, 14 Feb 2022 18:09:41 +0900 Subject: [PATCH 22/57] =?UTF-8?q?feat:=20CardDeck=20=EC=83=9D=EC=84=B1=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 - 초기 카드덱 생성시 Collections.shuffle() 메소드를 통해 카드를 섞는다. --- README.md | 4 +-- src/main/java/blackjack/domain/Card.java | 5 ++- src/main/java/blackjack/domain/CardDeck.java | 34 ++++++++++++++++++++ src/test/java/blackjack/domain/CardTest.java | 16 ++++++++- 4 files changed, 55 insertions(+), 4 deletions(-) create mode 100644 src/main/java/blackjack/domain/CardDeck.java diff --git a/README.md b/README.md index 26d5bf72..f1004908 100644 --- a/README.md +++ b/README.md @@ -31,8 +31,8 @@ - [x] 숫자와 문양은 Enum 형태로 관리한다. - [ ] Ace는 1또는 11로 계산할 수 있다. - [x] King, Queen, Jack은 각각 10으로 계산한다. -- [ ] 카드는 덱으로 관리한다. - CardDeck - - [ ] 게임을 시작할 때 shuffle을 한 번 수행한다. +- [x] 카드는 덱으로 관리한다. - CardDeck + - [x] 게임을 시작할 때 shuffle을 한 번 수행한다. - [ ] 카드는 문양 + 숫자 조합이 하나씩만 존재한다. - [ ] 게임을 시작하면 딜러를 포함한 모든 플레이어들에게 카드를 2장씩 나누어준다. - [ ] 딜레를 제외한 플레이어는 21을 초과하지 않을 때까지 카드를 계속 받을지 선택한다. diff --git a/src/main/java/blackjack/domain/Card.java b/src/main/java/blackjack/domain/Card.java index ee14f714..285373ec 100644 --- a/src/main/java/blackjack/domain/Card.java +++ b/src/main/java/blackjack/domain/Card.java @@ -1,7 +1,9 @@ package blackjack.domain; -public class Card { +import java.util.HashMap; +import java.util.Map; +public class Card { private final Suit suit; private final Denomination denomination; @@ -10,4 +12,5 @@ public Card(Suit suit, Denomination denomination) { this.denomination = denomination; } + } diff --git a/src/main/java/blackjack/domain/CardDeck.java b/src/main/java/blackjack/domain/CardDeck.java new file mode 100644 index 00000000..6205e33d --- /dev/null +++ b/src/main/java/blackjack/domain/CardDeck.java @@ -0,0 +1,34 @@ +package blackjack.domain; + +import java.util.ArrayList; +import java.util.Collections; +import java.util.List; + +public class CardDeck { + + private final List cardDeck; + + public CardDeck() { + cardDeck = initDeck(); + } + + public List initDeck() { + List deck = new ArrayList<>(); + for (Suit suit : Suit.values()) { + for (Denomination denomination : Denomination.values()) { + deck.add(new Card(suit, denomination)); + } + } + Collections.shuffle(deck); + return deck; + } + + public Card popCard() { + int target = cardDeck.size() - 1; + Card card = cardDeck.get(target); + cardDeck.remove(target); + + return card; + } + +} diff --git a/src/test/java/blackjack/domain/CardTest.java b/src/test/java/blackjack/domain/CardTest.java index 4145410e..53067e8f 100644 --- a/src/test/java/blackjack/domain/CardTest.java +++ b/src/test/java/blackjack/domain/CardTest.java @@ -1,10 +1,24 @@ package blackjack.domain; +import static org.assertj.core.api.Assertions.assertThat; import static org.junit.jupiter.api.Assertions.*; +import java.util.HashSet; +import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Test; -class CardTest { +class CardDeckTest { + private CardDeck cardDeck; + + @BeforeEach + void setUp() { + cardDeck = new CardDeck(); + } + + @Test + void 초기_카드덱은_문양숫자조합으로_구별되는_52가지의_카드를_가진다() { + assertThat(new HashSet<>(cardDeck.initDeck()).size()).isEqualTo(52); + } } From 3e50ca12d016151f3607301c07e49ce81d2da6b6 Mon Sep 17 00:00:00 2001 From: jihyun park Date: Mon, 14 Feb 2022 18:11:28 +0900 Subject: [PATCH 23/57] docs: update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index f1004908..749c095a 100644 --- a/README.md +++ b/README.md @@ -33,7 +33,7 @@ - [x] King, Queen, Jack은 각각 10으로 계산한다. - [x] 카드는 덱으로 관리한다. - CardDeck - [x] 게임을 시작할 때 shuffle을 한 번 수행한다. - - [ ] 카드는 문양 + 숫자 조합이 하나씩만 존재한다. + - [x] 카드는 문양 + 숫자 조합이 하나씩만 존재한다. - [ ] 게임을 시작하면 딜러를 포함한 모든 플레이어들에게 카드를 2장씩 나누어준다. - [ ] 딜레를 제외한 플레이어는 21을 초과하지 않을 때까지 카드를 계속 받을지 선택한다. - [ ] 딜러는 처음 받은 카드 두 장의 합이 16이하면 한 장의 카드를 더 받는다. From 131a640e4e681ed6018caad195b4aad44d87242d Mon Sep 17 00:00:00 2001 From: jihyun park Date: Mon, 14 Feb 2022 18:28:49 +0900 Subject: [PATCH 24/57] =?UTF-8?q?feat:=20=EC=82=AC=EC=9A=A9=EC=9E=90=20?= =?UTF-8?q?=EC=9E=85=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/domain/CardDeck.java | 3 +++ src/main/java/blackjack/view/InputView.java | 21 ++++++++++++++++++++ src/test/java/blackjack/domain/CardTest.java | 6 ++++++ 3 files changed, 30 insertions(+) create mode 100644 src/main/java/blackjack/view/InputView.java diff --git a/src/main/java/blackjack/domain/CardDeck.java b/src/main/java/blackjack/domain/CardDeck.java index 6205e33d..f2db4d15 100644 --- a/src/main/java/blackjack/domain/CardDeck.java +++ b/src/main/java/blackjack/domain/CardDeck.java @@ -31,4 +31,7 @@ public Card popCard() { return card; } + public boolean contains(Card target) { + return cardDeck.contains(target); + } } diff --git a/src/main/java/blackjack/view/InputView.java b/src/main/java/blackjack/view/InputView.java new file mode 100644 index 00000000..84854097 --- /dev/null +++ b/src/main/java/blackjack/view/InputView.java @@ -0,0 +1,21 @@ +package blackjack.view; + +import java.util.Scanner; + +public class InputView { + + private static final String INIT_PLAYER_MESSAGE = "게임에 참여할 사람의 이름을 입력하세요.(쉼표 기준으로 분리)"; + private static final String CARD_DISTRIBUTE_MESSAGE = "딜러와 %s에게 2장의 나누었습니다."; + private static final String MORE_CARD_MESSAGE = "%s는 한장의 카드를 더 받겠습니까?(예는 y, 아니오는 n)"; + + private static Scanner scanner = new Scanner(System.in); + + public void inputPlayerNames() { + System.out.println(INIT_PLAYER_MESSAGE); + } + + public void getUserResponse() { + + } + +} diff --git a/src/test/java/blackjack/domain/CardTest.java b/src/test/java/blackjack/domain/CardTest.java index 53067e8f..ff9c1b4e 100644 --- a/src/test/java/blackjack/domain/CardTest.java +++ b/src/test/java/blackjack/domain/CardTest.java @@ -21,4 +21,10 @@ void setUp() { void 초기_카드덱은_문양숫자조합으로_구별되는_52가지의_카드를_가진다() { assertThat(new HashSet<>(cardDeck.initDeck()).size()).isEqualTo(52); } + + @Test + void 한_번_뽑힌_카드는_덱에_존재하지_않아야_한다() { + Card target = cardDeck.popCard(); + assertThat(cardDeck.contains(target)).isFalse(); + } } From 2cbc1e07d4336024d9e72774522e1a062ee51306 Mon Sep 17 00:00:00 2001 From: xxell8 Date: Tue, 15 Feb 2022 17:15:47 +0900 Subject: [PATCH 25/57] =?UTF-8?q?feat:=20=EB=AC=B8=EC=9E=90=EC=97=B4=20?= =?UTF-8?q?=EC=8A=A4=ED=94=8C=EB=A6=BF=EC=9D=84=20=EC=9C=84=ED=95=9C=20uti?= =?UTF-8?q?ls=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/blackjack/utils/Spliter.java | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) create mode 100644 src/main/java/blackjack/utils/Spliter.java diff --git a/src/main/java/blackjack/utils/Spliter.java b/src/main/java/blackjack/utils/Spliter.java new file mode 100644 index 00000000..be87cf01 --- /dev/null +++ b/src/main/java/blackjack/utils/Spliter.java @@ -0,0 +1,16 @@ +package blackjack.utils; + +import java.util.Arrays; +import java.util.List; + +public class Spliter { + + private static final String DELIMITER = ","; + + private Spliter() { + } + + public static List commaSplit(String playerNames) { + return Arrays.asList(playerNames.replace(" ","").split(DELIMITER)); + } + } From 087506a31d318b717a9d611549617629cfae8b71 Mon Sep 17 00:00:00 2001 From: xxell8 Date: Tue, 15 Feb 2022 17:16:18 +0900 Subject: [PATCH 26/57] =?UTF-8?q?feat:=20=EC=82=AC=EC=9A=A9=EC=9E=90=20?= =?UTF-8?q?=EC=9E=85=EB=A0=A5=EC=9D=84=20=EC=9C=84=ED=95=9C=20InputView=20?= =?UTF-8?q?=EC=83=9D=EC=84=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/blackjack/view/InputView.java | 28 ++++++++++++++++++--- 1 file changed, 25 insertions(+), 3 deletions(-) diff --git a/src/main/java/blackjack/view/InputView.java b/src/main/java/blackjack/view/InputView.java index 84854097..0e85b6e2 100644 --- a/src/main/java/blackjack/view/InputView.java +++ b/src/main/java/blackjack/view/InputView.java @@ -1,21 +1,43 @@ package blackjack.view; +import blackjack.utils.Spliter; +import java.util.List; import java.util.Scanner; public class InputView { private static final String INIT_PLAYER_MESSAGE = "게임에 참여할 사람의 이름을 입력하세요.(쉼표 기준으로 분리)"; - private static final String CARD_DISTRIBUTE_MESSAGE = "딜러와 %s에게 2장의 나누었습니다."; private static final String MORE_CARD_MESSAGE = "%s는 한장의 카드를 더 받겠습니까?(예는 y, 아니오는 n)"; + private static final String BLANK_EXCEPTION = "1명 이상의 플레이어 이름을 입력해주세요."; + private static final String WRONG_ANSWER_EXCEPTION = "응답은 y 또는 n이어야 합니다."; private static Scanner scanner = new Scanner(System.in); - public void inputPlayerNames() { + public List inputPlayerNames() { System.out.println(INIT_PLAYER_MESSAGE); + String input = scanner.nextLine(); + checkBlank(input); + return Spliter.commaSplit(input); } - public void getUserResponse() { + public String getUserResponse() { + System.out.println(MORE_CARD_MESSAGE); + String input = scanner.nextLine(); + checkResponse(input); + return input; + } + + private void checkResponse(String input) { + checkBlank(input); + if (!input.contains("y") && !input.contains("n")) { + throw new IllegalArgumentException(WRONG_ANSWER_EXCEPTION); + } + } + private void checkBlank(String text) { + if (text == null || text.trim().equals("")) { + throw new IllegalArgumentException(BLANK_EXCEPTION); + } } } From 7aae53af25e06edf695b1180692f85993e1c484c Mon Sep 17 00:00:00 2001 From: xxell8 Date: Tue, 15 Feb 2022 17:16:38 +0900 Subject: [PATCH 27/57] docs: Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 749c095a..0aaccb49 100644 --- a/README.md +++ b/README.md @@ -26,7 +26,7 @@ 게임을 완료한 후 각 플레이어별로 승패를 출력한다. ## 기능 구현 사항 -- [ ] 게임에 참여할 사람을 쉼표로 구분한다. - InputView +- [x] 게임에 참여할 사람을 쉼표로 구분한다. - InputView - [x] 카드는 숫자랑 문양으로 이루어진다. - Card - [x] 숫자와 문양은 Enum 형태로 관리한다. - [ ] Ace는 1또는 11로 계산할 수 있다. From e0783b038b937c2d8bd72c2144d1d63ded4c9aa5 Mon Sep 17 00:00:00 2001 From: xxell8 Date: Tue, 15 Feb 2022 17:42:15 +0900 Subject: [PATCH 28/57] =?UTF-8?q?feat:=20Card=EB=A5=BC=20=EB=8B=B4?= =?UTF-8?q?=EB=8A=94=20Cards=20=ED=81=B4=EB=9E=98=EC=8A=A4=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 - 카드를 추가하는 addCard() 메서드 추가 --- src/main/java/blackjack/domain/Cards.java | 20 ++++++++++ src/test/java/blackjack/domain/CardsTest.java | 38 +++++++++++++++++++ 2 files changed, 58 insertions(+) create mode 100644 src/main/java/blackjack/domain/Cards.java create mode 100644 src/test/java/blackjack/domain/CardsTest.java diff --git a/src/main/java/blackjack/domain/Cards.java b/src/main/java/blackjack/domain/Cards.java new file mode 100644 index 00000000..96adaa42 --- /dev/null +++ b/src/main/java/blackjack/domain/Cards.java @@ -0,0 +1,20 @@ +package blackjack.domain; + +import java.util.List; + +public class Cards { + + private final List cards; + + public Cards(List cards) { + this.cards = cards; + } + + public List getCards() { + return cards; + } + + public void addCard(Card card) { + cards.add(card); + } +} diff --git a/src/test/java/blackjack/domain/CardsTest.java b/src/test/java/blackjack/domain/CardsTest.java new file mode 100644 index 00000000..be16a7fa --- /dev/null +++ b/src/test/java/blackjack/domain/CardsTest.java @@ -0,0 +1,38 @@ +package blackjack.domain; + +import static blackjack.domain.Denomination.ACE; +import static blackjack.domain.Denomination.TWO; +import static blackjack.domain.Suit.CLUBS; +import static blackjack.domain.Suit.HEARTS; +import static org.assertj.core.api.Assertions.*; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Test; + +class CardsTest { + + private Cards cards; + + @BeforeEach + void setUp() { + cards = new Cards(new ArrayList<>(Arrays.asList(new Card(CLUBS, ACE)))); + } + + @DisplayName("새로운 카드를 추가할 수 있다") + @Test + void addCard() { + Card testCard = new Card(HEARTS, TWO); + + cards.addCard(testCard); + + List testCards = cards.getCards(); + + assertThat(testCards).contains(testCard); + assertThat(testCards.size()).isEqualTo(2); + } + +} From f5591ff353512c7bc0fc498a267e1c48dc047a2a Mon Sep 17 00:00:00 2001 From: xxell8 Date: Tue, 15 Feb 2022 17:48:43 +0900 Subject: [PATCH 29/57] =?UTF-8?q?feat:=20Player=20=ED=81=B4=EB=9E=98?= =?UTF-8?q?=EC=8A=A4=20=EC=83=9D=EC=84=B1=20-=20=EA=B2=8C=EC=9E=84=20?= =?UTF-8?q?=EC=8B=9C=EC=9E=91=20=EC=8B=9C,=20=EB=91=90=20=EC=9E=A5?= =?UTF-8?q?=EC=9D=98=20=EC=B9=B4=EB=93=9C=EB=A5=BC=20=EB=B0=B0=EB=B6=84?= =?UTF-8?q?=ED=95=98=EB=8A=94=20deal()=20=EB=A9=94=EC=84=9C=EB=93=9C=20?= =?UTF-8?q?=EC=83=9D=EC=84=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/blackjack/domain/Player.java | 15 +++++++++++++++ 1 file changed, 15 insertions(+) create mode 100644 src/main/java/blackjack/domain/Player.java diff --git a/src/main/java/blackjack/domain/Player.java b/src/main/java/blackjack/domain/Player.java new file mode 100644 index 00000000..7252878f --- /dev/null +++ b/src/main/java/blackjack/domain/Player.java @@ -0,0 +1,15 @@ +package blackjack.domain; + +public class Player { + + private final Cards cards; + + public Player(Cards cards) { + this.cards = cards; + } + + public void deal(CardDeck deck) { + cards.addCard(deck.popCard()); + cards.addCard(deck.popCard()); + } +} From 51f72fb803446797aa3c8fadab9d07b6480f80ab Mon Sep 17 00:00:00 2001 From: xxell8 Date: Tue, 15 Feb 2022 17:58:14 +0900 Subject: [PATCH 30/57] =?UTF-8?q?feat:=20=EC=B9=B4=EB=93=9C=EB=93=A4?= =?UTF-8?q?=EC=9D=98=20=EC=A0=90=EC=88=98=EB=A5=BC=20=EA=B3=84=EC=82=B0?= =?UTF-8?q?=ED=95=B4=20=EB=B0=98=ED=99=98=ED=95=98=EB=8A=94=20getScore()?= =?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/java/blackjack/domain/Cards.java | 16 ++++++++++++---- src/test/java/blackjack/domain/CardsTest.java | 17 +++++++++++++++++ 2 files changed, 29 insertions(+), 4 deletions(-) diff --git a/src/main/java/blackjack/domain/Cards.java b/src/main/java/blackjack/domain/Cards.java index 96adaa42..43d4e24e 100644 --- a/src/main/java/blackjack/domain/Cards.java +++ b/src/main/java/blackjack/domain/Cards.java @@ -10,11 +10,19 @@ public Cards(List cards) { this.cards = cards; } - public List getCards() { - return cards; - } - public void addCard(Card card) { cards.add(card); } + + public int getScore() { + int result = 0; + for (Card card : cards) { + result += card.getDenomination().getScore(); + } + return result; + } + + public List getCards() { + return cards; + } } diff --git a/src/test/java/blackjack/domain/CardsTest.java b/src/test/java/blackjack/domain/CardsTest.java index be16a7fa..716fe348 100644 --- a/src/test/java/blackjack/domain/CardsTest.java +++ b/src/test/java/blackjack/domain/CardsTest.java @@ -1,6 +1,9 @@ package blackjack.domain; import static blackjack.domain.Denomination.ACE; +import static blackjack.domain.Denomination.FIVE; +import static blackjack.domain.Denomination.FOUR; +import static blackjack.domain.Denomination.THREE; import static blackjack.domain.Denomination.TWO; import static blackjack.domain.Suit.CLUBS; import static blackjack.domain.Suit.HEARTS; @@ -35,4 +38,18 @@ void addCard() { assertThat(testCards.size()).isEqualTo(2); } + @DisplayName("카드들의 점수 합을 반환한다") + @Test + void getScore() { + List cards = Arrays.asList( + new Card(CLUBS, ACE), + new Card(CLUBS, TWO), + new Card(CLUBS, THREE), + new Card(CLUBS, FOUR), + new Card(CLUBS, FIVE) + ); + + Cards testCards = new Cards(cards); + assertThat(testCards.getScore()).isEqualTo(15); + } } From 2346f97091eca89f9ffe3821c689d23bfeb8090c Mon Sep 17 00:00:00 2001 From: xxell8 Date: Tue, 15 Feb 2022 18:36:59 +0900 Subject: [PATCH 31/57] =?UTF-8?q?feat:=20Getter=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/blackjack/domain/Card.java | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/main/java/blackjack/domain/Card.java b/src/main/java/blackjack/domain/Card.java index 285373ec..9b181db1 100644 --- a/src/main/java/blackjack/domain/Card.java +++ b/src/main/java/blackjack/domain/Card.java @@ -12,5 +12,7 @@ public Card(Suit suit, Denomination denomination) { this.denomination = denomination; } - + public Denomination getDenomination() { + return denomination; + } } From 6ebcf44bc90994d37db9f557e7a0c68e43c476c5 Mon Sep 17 00:00:00 2001 From: xxell8 Date: Tue, 15 Feb 2022 18:38:14 +0900 Subject: [PATCH 32/57] =?UTF-8?q?feat:=20=ED=98=84=EC=9E=AC=20=EC=A0=90?= =?UTF-8?q?=EC=88=98=EB=A5=BC=20=EB=B0=98=ED=99=98=ED=95=98=EB=8A=94=20get?= =?UTF-8?q?Score()=20=EB=A9=94=EC=84=9C=EB=93=9C=20=EC=B6=94=EA=B0=80?= 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 7252878f..263b9157 100644 --- a/src/main/java/blackjack/domain/Player.java +++ b/src/main/java/blackjack/domain/Player.java @@ -12,4 +12,8 @@ public void deal(CardDeck deck) { cards.addCard(deck.popCard()); cards.addCard(deck.popCard()); } + + public int getScore() { + return cards.getScore(); + } } From df9f9e8c031b4f5dd472bfbcd526e7374683bc3f Mon Sep 17 00:00:00 2001 From: xxell8 Date: Tue, 15 Feb 2022 18:38:43 +0900 Subject: [PATCH 33/57] =?UTF-8?q?feat:=20=EB=94=9C=EB=9F=AC=EA=B0=80=20?= =?UTF-8?q?=EC=B6=94=EA=B0=80=EB=A1=9C=20=EC=B9=B4=EB=93=9C=EB=A5=BC=20?= =?UTF-8?q?=EB=B0=9B=EC=9D=84=EC=A7=80=20=EB=A7=90=EC=A7=80=20=ED=99=95?= =?UTF-8?q?=EC=9D=B8=ED=95=98=EB=8A=94=20=EB=A9=94=EC=84=9C=EB=93=9C=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 --- src/main/java/blackjack/domain/Dealer.java | 14 ++++++ .../java/blackjack/domain/DealerTest.java | 44 +++++++++++++++++++ 2 files changed, 58 insertions(+) create mode 100644 src/main/java/blackjack/domain/Dealer.java create mode 100644 src/test/java/blackjack/domain/DealerTest.java diff --git a/src/main/java/blackjack/domain/Dealer.java b/src/main/java/blackjack/domain/Dealer.java new file mode 100644 index 00000000..5c52640a --- /dev/null +++ b/src/main/java/blackjack/domain/Dealer.java @@ -0,0 +1,14 @@ +package blackjack.domain; + +public class Dealer extends Player { + private static final int LIMIT_MORE_CARD = 16; + + public Dealer(Cards cards) { + super(cards); + } + + public boolean checkHitOrNot() { + return getScore() <= LIMIT_MORE_CARD; + } + +} diff --git a/src/test/java/blackjack/domain/DealerTest.java b/src/test/java/blackjack/domain/DealerTest.java new file mode 100644 index 00000000..aa1aca10 --- /dev/null +++ b/src/test/java/blackjack/domain/DealerTest.java @@ -0,0 +1,44 @@ +package blackjack.domain; + +import static blackjack.domain.Denomination.ACE; +import static blackjack.domain.Denomination.FIVE; +import static blackjack.domain.Denomination.KING; +import static blackjack.domain.Denomination.QUEEN; +import static blackjack.domain.Suit.CLUBS; +import static org.assertj.core.api.Assertions.assertThat; + +import java.util.Arrays; +import java.util.List; +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Test; + +class DealerTest { + + @DisplayName("카드 점수의 합이 16 이하일 때, 카드를 한 장 더 받는다") + @Test + void hitWhenCardsScoreIsUnder17() { + List cards = Arrays.asList( + new Card(CLUBS, ACE), + new Card(CLUBS, FIVE) + ); + + Cards testCards = new Cards(cards); + Dealer dealer = new Dealer(testCards); + + assertThat(dealer.checkHitOrNot()).isTrue(); + } + + @DisplayName("카드 점수의 합이 17을 넘으면, 카드를 받을 수 없다") + @Test + void noHitWhenCardsScoreIsOver17() { + List cards = Arrays.asList( + new Card(CLUBS, KING), + new Card(CLUBS, QUEEN) + ); + + Cards testCards = new Cards(cards); + Dealer dealer = new Dealer(testCards); + + assertThat(dealer.checkHitOrNot()).isFalse(); + } +} From a8aafeb43bddcccaff5b2941725f7dd90572fe97 Mon Sep 17 00:00:00 2001 From: jihyun park Date: Wed, 16 Feb 2022 17:05:27 +0900 Subject: [PATCH 34/57] =?UTF-8?q?feat:=20hit=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 | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/main/java/blackjack/domain/Player.java b/src/main/java/blackjack/domain/Player.java index 263b9157..fdccb7e2 100644 --- a/src/main/java/blackjack/domain/Player.java +++ b/src/main/java/blackjack/domain/Player.java @@ -9,7 +9,11 @@ public Player(Cards cards) { } public void deal(CardDeck deck) { - cards.addCard(deck.popCard()); + hit(deck); + hit(deck); + } + + public void hit(CardDeck deck) { cards.addCard(deck.popCard()); } From d1759fbe01f70e3e1f5bf4c5a68043f9eddf3d71 Mon Sep 17 00:00:00 2001 From: jihyun park Date: Wed, 16 Feb 2022 17:30:16 +0900 Subject: [PATCH 35/57] =?UTF-8?q?feat:=20play=20bust=20=ED=99=95=EC=9D=B8?= =?UTF-8?q?=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/domain/Player.java | 7 +++ src/main/java/blackjack/utils/Constant.java | 9 ++++ .../java/blackjack/domain/PlayerTest.java | 44 +++++++++++++++++++ 3 files changed, 60 insertions(+) create mode 100644 src/main/java/blackjack/utils/Constant.java create mode 100644 src/test/java/blackjack/domain/PlayerTest.java diff --git a/src/main/java/blackjack/domain/Player.java b/src/main/java/blackjack/domain/Player.java index fdccb7e2..b1657afe 100644 --- a/src/main/java/blackjack/domain/Player.java +++ b/src/main/java/blackjack/domain/Player.java @@ -1,5 +1,8 @@ package blackjack.domain; + +import static blackjack.utils.Constant.BUST_LIMIT; + public class Player { private final Cards cards; @@ -20,4 +23,8 @@ public void hit(CardDeck deck) { public int getScore() { return cards.getScore(); } + + public boolean isBusted() { + return cards.getScore() >= BUST_LIMIT; + } } diff --git a/src/main/java/blackjack/utils/Constant.java b/src/main/java/blackjack/utils/Constant.java new file mode 100644 index 00000000..41f7211d --- /dev/null +++ b/src/main/java/blackjack/utils/Constant.java @@ -0,0 +1,9 @@ +package blackjack.utils; + +public class Constant { + + private Constant() { + } + + public final static int BUST_LIMIT = 21; +} diff --git a/src/test/java/blackjack/domain/PlayerTest.java b/src/test/java/blackjack/domain/PlayerTest.java new file mode 100644 index 00000000..0f83bc8e --- /dev/null +++ b/src/test/java/blackjack/domain/PlayerTest.java @@ -0,0 +1,44 @@ +package blackjack.domain; + +import static blackjack.domain.Denomination.ACE; +import static blackjack.domain.Denomination.FIVE; +import static blackjack.domain.Denomination.JACK; +import static blackjack.domain.Denomination.KING; +import static blackjack.domain.Denomination.QUEEN; +import static blackjack.domain.Suit.CLUBS; +import static org.assertj.core.api.Assertions.assertThat; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Test; + +class PlayerTest { + + private Player player; + private CardDeck cardDeck; + + @BeforeEach + void setUp() { + player = new Player(new Cards(new ArrayList<>(Arrays.asList(new Card(CLUBS, ACE))))); + cardDeck = new CardDeck(); + } + + @DisplayName("카드 숫자의 총합이 21이상이면 player는 bust한다") + @Test + void bustWhenCardsScoreIsOver21() { + List cards = Arrays.asList( + new Card(CLUBS, KING), + new Card(CLUBS, QUEEN), + new Card(CLUBS, JACK) + ); + + Cards testCards = new Cards(cards); + Player player = new Player(testCards); + + assertThat(player.isBusted()).isTrue(); + } + +} From 5e39a050071997b3bceb9fcffc1fbe37e386efa5 Mon Sep 17 00:00:00 2001 From: jihyun park Date: Wed, 16 Feb 2022 18:28:23 +0900 Subject: [PATCH 36/57] =?UTF-8?q?feat:=20=EC=B5=9C=EC=8B=A0=EC=83=81?= =?UTF-8?q?=ED=99=A9=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 --- .../controller/BlackJackController.java | 23 +++++++++++++++ .../java/blackjack/domain/BackJackGame.java | 6 ++++ src/main/java/blackjack/domain/Dealer.java | 2 +- .../java/blackjack/domain/Participant.java | 29 +++++++++++++++++++ src/main/java/blackjack/domain/Player.java | 26 ++++++----------- src/main/java/blackjack/domain/Players.java | 16 ++++++++++ src/main/java/blackjack/view/InputView.java | 14 +++++---- .../blackjack/domain/BackJackGameTest.java | 16 ++++++++++ .../java/blackjack/domain/PlayerTest.java | 5 ++-- .../java/blackjack/domain/PlayersTest.java | 8 +++++ 10 files changed, 120 insertions(+), 25 deletions(-) create mode 100644 src/main/java/blackjack/controller/BlackJackController.java create mode 100644 src/main/java/blackjack/domain/BackJackGame.java create mode 100644 src/main/java/blackjack/domain/Participant.java create mode 100644 src/main/java/blackjack/domain/Players.java create mode 100644 src/test/java/blackjack/domain/BackJackGameTest.java create mode 100644 src/test/java/blackjack/domain/PlayersTest.java diff --git a/src/main/java/blackjack/controller/BlackJackController.java b/src/main/java/blackjack/controller/BlackJackController.java new file mode 100644 index 00000000..22fbea1d --- /dev/null +++ b/src/main/java/blackjack/controller/BlackJackController.java @@ -0,0 +1,23 @@ +package blackjack.controller; + +import blackjack.domain.CardDeck; +import blackjack.domain.Players; +import blackjack.view.InputView; +import java.util.List; + +public class BlackJackController { + + public BlackJackController() { + } + + public void run() { + List playerNames = InputView.inputPlayerNames(); + CardDeck cardDeck = new CardDeck(); + Players players = new Players(playerNames); + + + + + + } +} diff --git a/src/main/java/blackjack/domain/BackJackGame.java b/src/main/java/blackjack/domain/BackJackGame.java new file mode 100644 index 00000000..545070ea --- /dev/null +++ b/src/main/java/blackjack/domain/BackJackGame.java @@ -0,0 +1,6 @@ +package blackjack.domain; + +public class BackJackGame { + + private Players players; +} diff --git a/src/main/java/blackjack/domain/Dealer.java b/src/main/java/blackjack/domain/Dealer.java index 5c52640a..0aa60833 100644 --- a/src/main/java/blackjack/domain/Dealer.java +++ b/src/main/java/blackjack/domain/Dealer.java @@ -1,6 +1,6 @@ package blackjack.domain; -public class Dealer extends Player { +public class Dealer extends Participant { private static final int LIMIT_MORE_CARD = 16; public Dealer(Cards cards) { diff --git a/src/main/java/blackjack/domain/Participant.java b/src/main/java/blackjack/domain/Participant.java new file mode 100644 index 00000000..67591070 --- /dev/null +++ b/src/main/java/blackjack/domain/Participant.java @@ -0,0 +1,29 @@ +package blackjack.domain; + +import static blackjack.utils.Constant.BUST_LIMIT; + +public class Participant { + + private final Cards cards; + + public Participant(Cards cards) { + this.cards = cards; + } + + public void deal(CardDeck deck) { + hit(deck); + hit(deck); + } + + public void hit(CardDeck deck) { + cards.addCard(deck.popCard()); + } + + public int getScore() { + return cards.getScore(); + } + + public boolean isBusted() { + return cards.getScore() >= BUST_LIMIT; + } +} diff --git a/src/main/java/blackjack/domain/Player.java b/src/main/java/blackjack/domain/Player.java index b1657afe..860e3a47 100644 --- a/src/main/java/blackjack/domain/Player.java +++ b/src/main/java/blackjack/domain/Player.java @@ -3,28 +3,20 @@ import static blackjack.utils.Constant.BUST_LIMIT; -public class Player { +import java.util.ArrayList; - private final Cards cards; +public class Player extends Participant { - public Player(Cards cards) { - this.cards = cards; - } - - public void deal(CardDeck deck) { - hit(deck); - hit(deck); - } + private final String name; - public void hit(CardDeck deck) { - cards.addCard(deck.popCard()); + public Player(Cards cards, String name) { + super(cards); + this.name = name; } - public int getScore() { - return cards.getScore(); + public static Player from(String name) { + Cards cards = new Cards(new ArrayList<>()); + return new Player(cards, name); } - public boolean isBusted() { - return cards.getScore() >= BUST_LIMIT; - } } diff --git a/src/main/java/blackjack/domain/Players.java b/src/main/java/blackjack/domain/Players.java new file mode 100644 index 00000000..8bff4380 --- /dev/null +++ b/src/main/java/blackjack/domain/Players.java @@ -0,0 +1,16 @@ +package blackjack.domain; + +import java.util.ArrayList; +import java.util.List; +import java.util.stream.Collectors; + +public class Players { + + private final List players; + + public Players(List playerNames) { + this.players = playerNames.stream() + .map(Player::from) + .collect(Collectors.toList()); + } +} diff --git a/src/main/java/blackjack/view/InputView.java b/src/main/java/blackjack/view/InputView.java index 0e85b6e2..eedb62e5 100644 --- a/src/main/java/blackjack/view/InputView.java +++ b/src/main/java/blackjack/view/InputView.java @@ -11,30 +11,34 @@ public class InputView { private static final String BLANK_EXCEPTION = "1명 이상의 플레이어 이름을 입력해주세요."; private static final String WRONG_ANSWER_EXCEPTION = "응답은 y 또는 n이어야 합니다."; - private static Scanner scanner = new Scanner(System.in); + private static final Scanner scanner = new Scanner(System.in); - public List inputPlayerNames() { + private InputView() { + + } + + public static List inputPlayerNames() { System.out.println(INIT_PLAYER_MESSAGE); String input = scanner.nextLine(); checkBlank(input); return Spliter.commaSplit(input); } - public String getUserResponse() { + public static String getUserResponse() { System.out.println(MORE_CARD_MESSAGE); String input = scanner.nextLine(); checkResponse(input); return input; } - private void checkResponse(String input) { + private static void checkResponse(String input) { checkBlank(input); if (!input.contains("y") && !input.contains("n")) { throw new IllegalArgumentException(WRONG_ANSWER_EXCEPTION); } } - private void checkBlank(String text) { + private static void checkBlank(String text) { if (text == null || text.trim().equals("")) { throw new IllegalArgumentException(BLANK_EXCEPTION); } diff --git a/src/test/java/blackjack/domain/BackJackGameTest.java b/src/test/java/blackjack/domain/BackJackGameTest.java new file mode 100644 index 00000000..815fc60d --- /dev/null +++ b/src/test/java/blackjack/domain/BackJackGameTest.java @@ -0,0 +1,16 @@ +package blackjack.domain; + +import static org.junit.jupiter.api.Assertions.*; + +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Test; + +class BackJackGameTest { + + @DisplayName("게임을 시작하면, 모든 참가자는 2장의 카드를 받는다") + @Test + void test(){ + + } + +} diff --git a/src/test/java/blackjack/domain/PlayerTest.java b/src/test/java/blackjack/domain/PlayerTest.java index 0f83bc8e..8d8c6d5d 100644 --- a/src/test/java/blackjack/domain/PlayerTest.java +++ b/src/test/java/blackjack/domain/PlayerTest.java @@ -22,7 +22,7 @@ class PlayerTest { @BeforeEach void setUp() { - player = new Player(new Cards(new ArrayList<>(Arrays.asList(new Card(CLUBS, ACE))))); + player = new Player(new Cards(new ArrayList<>(Arrays.asList(new Card(CLUBS, ACE)))), "james"); cardDeck = new CardDeck(); } @@ -36,9 +36,10 @@ void bustWhenCardsScoreIsOver21() { ); Cards testCards = new Cards(cards); - Player player = new Player(testCards); + Player player = new Player(testCards, "james"); assertThat(player.isBusted()).isTrue(); } + } diff --git a/src/test/java/blackjack/domain/PlayersTest.java b/src/test/java/blackjack/domain/PlayersTest.java new file mode 100644 index 00000000..cc2964bc --- /dev/null +++ b/src/test/java/blackjack/domain/PlayersTest.java @@ -0,0 +1,8 @@ +package blackjack.domain; + +import static org.junit.jupiter.api.Assertions.*; + +class PlayersTest { + + +} From cbd3f09d667814cb9b90495c8721e0b8e4b84da4 Mon Sep 17 00:00:00 2001 From: xxell-8 Date: Wed, 16 Feb 2022 19:30:58 +0900 Subject: [PATCH 37/57] =?UTF-8?q?feat:=20=EC=B9=B4=EB=93=9C=EB=AA=85=20?= =?UTF-8?q?=EC=B6=9C=EB=A0=A5=EC=9D=84=20=EC=9C=84=ED=95=9C=20toString()?= =?UTF-8?q?=20=EC=83=9D=EC=84=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/blackjack/domain/Card.java | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/src/main/java/blackjack/domain/Card.java b/src/main/java/blackjack/domain/Card.java index 9b181db1..5be2e8df 100644 --- a/src/main/java/blackjack/domain/Card.java +++ b/src/main/java/blackjack/domain/Card.java @@ -1,8 +1,5 @@ package blackjack.domain; -import java.util.HashMap; -import java.util.Map; - public class Card { private final Suit suit; private final Denomination denomination; @@ -15,4 +12,9 @@ public Card(Suit suit, Denomination denomination) { public Denomination getDenomination() { return denomination; } + + @Override + public String toString() { + return denomination.getAlias() + suit.getName(); + } } From 8fce6da40719d1c70a7b57ca2e851427862a82c2 Mon Sep 17 00:00:00 2001 From: xxell-8 Date: Wed, 16 Feb 2022 19:42:03 +0900 Subject: [PATCH 38/57] =?UTF-8?q?test:=20=EC=B2=AB=20=EB=B2=88=EC=A7=B8=20?= =?UTF-8?q?=EC=B9=B4=EB=93=9C=20=EC=98=A4=ED=94=88=20=EA=B2=B0=EA=B3=BC=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 --- src/test/java/blackjack/domain/DealerTest.java | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/src/test/java/blackjack/domain/DealerTest.java b/src/test/java/blackjack/domain/DealerTest.java index aa1aca10..6ba32645 100644 --- a/src/test/java/blackjack/domain/DealerTest.java +++ b/src/test/java/blackjack/domain/DealerTest.java @@ -41,4 +41,18 @@ void noHitWhenCardsScoreIsOver17() { assertThat(dealer.checkHitOrNot()).isFalse(); } + + @DisplayName("딜러가 받은 카드 한 장을 출력한다") + @Test + void printCardAfterFirstDeal() { + List cards = Arrays.asList( + new Card(CLUBS, KING), + new Card(CLUBS, QUEEN) + ); + + Cards testCards = new Cards(cards); + Dealer dealer = new Dealer(testCards); + + assertThat(dealer.openCard()).isEqualTo("딜러 카드: K클로버"); + } } From 4a7d92bb1256b146049ad5b1eae66eb588359684 Mon Sep 17 00:00:00 2001 From: xxell-8 Date: Wed, 16 Feb 2022 19:42:55 +0900 Subject: [PATCH 39/57] =?UTF-8?q?feat:=20=EC=83=88=EB=A1=9C=EC=9A=B4=20?= =?UTF-8?q?=EB=94=9C=EB=9F=AC=EB=A5=BC=20=EC=83=9D=EC=84=B1=ED=95=98?= =?UTF-8?q?=EB=8A=94=20=ED=8C=A9=ED=86=A0=EB=A6=AC=20=EB=A9=94=EC=84=9C?= =?UTF-8?q?=EB=93=9C=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/blackjack/domain/Dealer.java | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/src/main/java/blackjack/domain/Dealer.java b/src/main/java/blackjack/domain/Dealer.java index 0aa60833..37cdc2b4 100644 --- a/src/main/java/blackjack/domain/Dealer.java +++ b/src/main/java/blackjack/domain/Dealer.java @@ -1,5 +1,7 @@ package blackjack.domain; +import java.util.ArrayList; + public class Dealer extends Participant { private static final int LIMIT_MORE_CARD = 16; @@ -7,6 +9,11 @@ public Dealer(Cards cards) { super(cards); } + public static Dealer create() { + Cards cards = new Cards(new ArrayList<>()); + return new Dealer(cards); + } + public boolean checkHitOrNot() { return getScore() <= LIMIT_MORE_CARD; } From 858753e9cb5bec3e33cb1f20e4735064bd3d0aa7 Mon Sep 17 00:00:00 2001 From: xxell-8 Date: Wed, 16 Feb 2022 19:43:31 +0900 Subject: [PATCH 40/57] =?UTF-8?q?feat:=20=EB=B0=9B=EC=9D=80=20=EC=B9=B4?= =?UTF-8?q?=EB=93=9C=20=EC=A4=91=20=ED=95=9C=20=EC=9E=A5=EC=9D=84=20?= =?UTF-8?q?=EB=B0=98=ED=99=98=ED=95=98=EB=8A=94=20openCard()=20=EC=83=9D?= =?UTF-8?q?=EC=84=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/blackjack/domain/Dealer.java | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/main/java/blackjack/domain/Dealer.java b/src/main/java/blackjack/domain/Dealer.java index 37cdc2b4..f7093bb1 100644 --- a/src/main/java/blackjack/domain/Dealer.java +++ b/src/main/java/blackjack/domain/Dealer.java @@ -3,6 +3,7 @@ import java.util.ArrayList; public class Dealer extends Participant { + private static final String NAME_TAG = "딜러 카드: "; private static final int LIMIT_MORE_CARD = 16; public Dealer(Cards cards) { @@ -18,4 +19,7 @@ public boolean checkHitOrNot() { return getScore() <= LIMIT_MORE_CARD; } + public String openCard() { + return NAME_TAG + getCardNames().get(0); + } } From 1a3569bd1094d84567f8d4a8d576d9ab25ea0b4e Mon Sep 17 00:00:00 2001 From: xxell-8 Date: Wed, 16 Feb 2022 19:44:30 +0900 Subject: [PATCH 41/57] =?UTF-8?q?refactor:=20=EC=82=AC=EC=9A=A9=ED=95=98?= =?UTF-8?q?=EC=A7=80=20=EC=95=8A=EB=8A=94=20=EC=84=B8=ED=8C=85=20=EC=82=AD?= =?UTF-8?q?=EC=A0=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/test/java/blackjack/domain/PlayerTest.java | 9 --------- 1 file changed, 9 deletions(-) diff --git a/src/test/java/blackjack/domain/PlayerTest.java b/src/test/java/blackjack/domain/PlayerTest.java index 8d8c6d5d..4af6c3a9 100644 --- a/src/test/java/blackjack/domain/PlayerTest.java +++ b/src/test/java/blackjack/domain/PlayerTest.java @@ -17,15 +17,6 @@ class PlayerTest { - private Player player; - private CardDeck cardDeck; - - @BeforeEach - void setUp() { - player = new Player(new Cards(new ArrayList<>(Arrays.asList(new Card(CLUBS, ACE)))), "james"); - cardDeck = new CardDeck(); - } - @DisplayName("카드 숫자의 총합이 21이상이면 player는 bust한다") @Test void bustWhenCardsScoreIsOver21() { From c95aeb41d3040d908495f7805bd745ea73a04141 Mon Sep 17 00:00:00 2001 From: xxell-8 Date: Wed, 16 Feb 2022 19:49:12 +0900 Subject: [PATCH 42/57] =?UTF-8?q?test:=20=ED=94=8C=EB=A0=88=EC=9D=B4?= =?UTF-8?q?=EC=96=B4=EA=B0=80=20=EA=B0=80=EC=A7=84=20=EC=B9=B4=EB=93=9C=20?= =?UTF-8?q?=EC=B6=9C=EB=A0=A5=20=ED=85=8C=EC=8A=A4=ED=8A=B8=20=EC=83=9D?= =?UTF-8?q?=EC=84=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/test/java/blackjack/domain/PlayerTest.java | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/src/test/java/blackjack/domain/PlayerTest.java b/src/test/java/blackjack/domain/PlayerTest.java index 4af6c3a9..1adee810 100644 --- a/src/test/java/blackjack/domain/PlayerTest.java +++ b/src/test/java/blackjack/domain/PlayerTest.java @@ -32,5 +32,19 @@ void bustWhenCardsScoreIsOver21() { assertThat(player.isBusted()).isTrue(); } + @DisplayName("플레이어가 받은 카드 한 장을 출력한다") + @Test + void printCardAfterFirstDeal() { + List cards = Arrays.asList( + new Card(CLUBS, KING), + new Card(CLUBS, QUEEN) + ); + + Cards testCards = new Cards(cards); + Player player = new Player(testCards, "test"); + + assertThat(player.openCard()).isEqualTo("test카드: K클로버, Q클로버"); + } + } From ccdac4c0e196b1a64e3085be03b4fa9b302558ea Mon Sep 17 00:00:00 2001 From: xxell-8 Date: Wed, 16 Feb 2022 19:50:05 +0900 Subject: [PATCH 43/57] =?UTF-8?q?feat:=20=ED=94=8C=EB=A0=88=EC=9D=B4?= =?UTF-8?q?=EC=96=B4=EA=B0=80=20=EA=B0=80=EC=A7=84=20=EB=AA=A8=EB=93=A0=20?= =?UTF-8?q?=EC=B9=B4=EB=93=9C=EB=A5=BC=20=EC=B6=9C=EB=A0=A5=ED=95=98?= =?UTF-8?q?=EB=8A=94=20openCard()=20=EC=83=9D=EC=84=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/blackjack/domain/Player.java | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/main/java/blackjack/domain/Player.java b/src/main/java/blackjack/domain/Player.java index 860e3a47..29330b3c 100644 --- a/src/main/java/blackjack/domain/Player.java +++ b/src/main/java/blackjack/domain/Player.java @@ -7,6 +7,8 @@ public class Player extends Participant { + private static final String CARD_TAG = "카드: "; + private final String name; public Player(Cards cards, String name) { @@ -19,4 +21,7 @@ public static Player from(String name) { return new Player(cards, name); } + public String openCard() { + return name + CARD_TAG + String.join(", ", getCardNames()); + } } From a2f4d6fbea56512b2851c4b7620bdcaa76a34195 Mon Sep 17 00:00:00 2001 From: xxell-8 Date: Wed, 16 Feb 2022 22:30:36 +0900 Subject: [PATCH 44/57] =?UTF-8?q?feat:=20=EC=B9=B4=EB=93=9C=20=EC=A0=90?= =?UTF-8?q?=EC=88=98=20=EC=A7=91=EA=B3=84=20=EC=8B=9C,=20ace=20=EA=B3=84?= =?UTF-8?q?=EC=82=B0=20=EB=B0=A9=EC=8B=9D=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - checkAceOneOrEleven() 메서드 추가하고, 11을 더해도 버스트가 되지 않으면 에이스를 11로 취급하도록 수정 --- src/main/java/blackjack/domain/Cards.java | 18 ++++++++++++++---- 1 file changed, 14 insertions(+), 4 deletions(-) diff --git a/src/main/java/blackjack/domain/Cards.java b/src/main/java/blackjack/domain/Cards.java index 43d4e24e..18223f95 100644 --- a/src/main/java/blackjack/domain/Cards.java +++ b/src/main/java/blackjack/domain/Cards.java @@ -1,6 +1,7 @@ package blackjack.domain; import java.util.List; +import java.util.stream.Collectors; public class Cards { @@ -15,11 +16,20 @@ public void addCard(Card card) { } public int getScore() { - int result = 0; - for (Card card : cards) { - result += card.getDenomination().getScore(); + int total = cards.stream().mapToInt(card -> card.getDenomination().getScore()).sum(); + int aceCount = (int) cards.stream().filter(card -> card.getDenomination().isAce()).count(); + for (int i = 0; i < aceCount; i++) { + total = checkAceOneOrEleven(total); } - return result; + + return total; + } + + private int checkAceOneOrEleven(int total) { + if (total + 10 <= 21) { + return total + 10; + } + return total; } public List getCards() { From 22cb340d984f7b12007a1069c7e826a3eb4acb63 Mon Sep 17 00:00:00 2001 From: xxell-8 Date: Thu, 17 Feb 2022 00:32:05 +0900 Subject: [PATCH 45/57] =?UTF-8?q?feat:=20BlackJackMain=20=EB=A9=94?= =?UTF-8?q?=EC=84=9C=EB=93=9C=20=EC=83=9D=EC=84=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/blackjack/BlackJackMain.java | 11 +++++++++++ 1 file changed, 11 insertions(+) create mode 100644 src/main/java/blackjack/BlackJackMain.java diff --git a/src/main/java/blackjack/BlackJackMain.java b/src/main/java/blackjack/BlackJackMain.java new file mode 100644 index 00000000..0be10640 --- /dev/null +++ b/src/main/java/blackjack/BlackJackMain.java @@ -0,0 +1,11 @@ +package blackjack; + +import blackjack.controller.BlackJackController; + +public class BlackJackMain { + + public static void main(String[] args) { + BlackJackController blackJackController = new BlackJackController(); + blackJackController.run(); + } +} From daaa86068260248c032031699db52952345f6210 Mon Sep 17 00:00:00 2001 From: xxell-8 Date: Thu, 17 Feb 2022 00:33:56 +0900 Subject: [PATCH 46/57] =?UTF-8?q?feat:=20=EC=B0=B8=EC=97=AC=EC=9E=90=20?= =?UTF-8?q?=EA=B8=B0=EB=B3=B8=20Getter=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - getCardNames(): 참여자가 가진 카드 리스트 반환 - getAllCards(): 참여자가 가진 모든 카드의 이름을 문자열로 join해 반환 --- src/main/java/blackjack/domain/Participant.java | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/src/main/java/blackjack/domain/Participant.java b/src/main/java/blackjack/domain/Participant.java index 67591070..f4f453d4 100644 --- a/src/main/java/blackjack/domain/Participant.java +++ b/src/main/java/blackjack/domain/Participant.java @@ -2,6 +2,8 @@ import static blackjack.utils.Constant.BUST_LIMIT; +import java.util.List; + public class Participant { private final Cards cards; @@ -24,6 +26,14 @@ public int getScore() { } public boolean isBusted() { - return cards.getScore() >= BUST_LIMIT; + return getScore() > BUST_LIMIT; + } + + public List getCardNames() { + return cards.getCardNames(); + } + + public String getAllCards() { + return String.join(", ", getCardNames()); } } From cfd0ecd5f33c1c8812313c4f3686a553592f1148 Mon Sep 17 00:00:00 2001 From: xxell-8 Date: Thu, 17 Feb 2022 00:34:49 +0900 Subject: [PATCH 47/57] =?UTF-8?q?refactor:=20=EB=94=9C=20=EC=9D=B4?= =?UTF-8?q?=ED=9B=84=20=EB=94=9C=EB=9F=AC=EC=9D=98=20=EC=B2=AB=20=EB=B2=88?= =?UTF-8?q?=EC=A7=B8=20=EC=B9=B4=EB=93=9C=EB=A7=8C=20=EB=B0=98=ED=99=98?= =?UTF-8?q?=ED=95=98=EB=8F=84=EB=A1=9D=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/domain/Dealer.java | 4 ++-- src/test/java/blackjack/domain/DealerTest.java | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/main/java/blackjack/domain/Dealer.java b/src/main/java/blackjack/domain/Dealer.java index f7093bb1..4c1ee421 100644 --- a/src/main/java/blackjack/domain/Dealer.java +++ b/src/main/java/blackjack/domain/Dealer.java @@ -19,7 +19,7 @@ public boolean checkHitOrNot() { return getScore() <= LIMIT_MORE_CARD; } - public String openCard() { - return NAME_TAG + getCardNames().get(0); + public String openOneCard() { + return getCardNames().get(0); } } diff --git a/src/test/java/blackjack/domain/DealerTest.java b/src/test/java/blackjack/domain/DealerTest.java index 6ba32645..10844d20 100644 --- a/src/test/java/blackjack/domain/DealerTest.java +++ b/src/test/java/blackjack/domain/DealerTest.java @@ -53,6 +53,6 @@ void printCardAfterFirstDeal() { Cards testCards = new Cards(cards); Dealer dealer = new Dealer(testCards); - assertThat(dealer.openCard()).isEqualTo("딜러 카드: K클로버"); + assertThat(dealer.openOneCard()).isEqualTo("K클로버"); } } From f21535af4e9195413d610d3d664536fc1b2c676b Mon Sep 17 00:00:00 2001 From: xxell-8 Date: Thu, 17 Feb 2022 00:36:02 +0900 Subject: [PATCH 48/57] =?UTF-8?q?feat:=20=ED=94=8C=EB=A0=88=EC=9D=B4?= =?UTF-8?q?=EC=96=B4=20=EC=A0=84=EC=9B=90=EC=97=90=EA=B2=8C=20=EB=94=9C?= =?UTF-8?q?=ED=95=98=EB=8A=94=20=EB=A9=94=EC=84=9C=EB=93=9C=20=EC=B6=94?= =?UTF-8?q?=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/blackjack/domain/Players.java | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/src/main/java/blackjack/domain/Players.java b/src/main/java/blackjack/domain/Players.java index 8bff4380..3bafe22e 100644 --- a/src/main/java/blackjack/domain/Players.java +++ b/src/main/java/blackjack/domain/Players.java @@ -13,4 +13,15 @@ public Players(List playerNames) { .map(Player::from) .collect(Collectors.toList()); } + + public void deal(CardDeck deck) { + for (Player player : players) { + player.deal(deck); + } + } + + public List get() { + return players; + } + } From 0873b358fc377d7199dbc75ad2e910ebc2fbd360 Mon Sep 17 00:00:00 2001 From: xxell-8 Date: Thu, 17 Feb 2022 00:38:09 +0900 Subject: [PATCH 49/57] =?UTF-8?q?refactor:=20=EC=83=81=EC=9C=84=20?= =?UTF-8?q?=ED=81=B4=EB=9E=98=EC=8A=A4=EC=99=80=20=EC=A4=91=EB=B3=B5?= =?UTF-8?q?=EB=90=98=EB=8A=94=20=EB=A9=94=EC=84=9C=EB=93=9C=20=EC=82=AD?= =?UTF-8?q?=EC=A0=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 대신, getName() 메서드 추가 --- src/main/java/blackjack/domain/Player.java | 7 ++----- src/test/java/blackjack/domain/PlayerTest.java | 2 +- 2 files changed, 3 insertions(+), 6 deletions(-) diff --git a/src/main/java/blackjack/domain/Player.java b/src/main/java/blackjack/domain/Player.java index 29330b3c..3f49bb70 100644 --- a/src/main/java/blackjack/domain/Player.java +++ b/src/main/java/blackjack/domain/Player.java @@ -1,8 +1,5 @@ package blackjack.domain; - -import static blackjack.utils.Constant.BUST_LIMIT; - import java.util.ArrayList; public class Player extends Participant { @@ -21,7 +18,7 @@ public static Player from(String name) { return new Player(cards, name); } - public String openCard() { - return name + CARD_TAG + String.join(", ", getCardNames()); + public String getName() { + return name; } } diff --git a/src/test/java/blackjack/domain/PlayerTest.java b/src/test/java/blackjack/domain/PlayerTest.java index 1adee810..3d25fbec 100644 --- a/src/test/java/blackjack/domain/PlayerTest.java +++ b/src/test/java/blackjack/domain/PlayerTest.java @@ -43,7 +43,7 @@ void printCardAfterFirstDeal() { Cards testCards = new Cards(cards); Player player = new Player(testCards, "test"); - assertThat(player.openCard()).isEqualTo("test카드: K클로버, Q클로버"); + assertThat(player.getAllCards()).isEqualTo("K클로버, Q클로버"); } From a984d8b838e8b9792574c8d9ceeaea9e046f86b7 Mon Sep 17 00:00:00 2001 From: xxell-8 Date: Thu, 17 Feb 2022 00:39:25 +0900 Subject: [PATCH 50/57] =?UTF-8?q?feat:=20View=20=EB=A1=9C=EC=A7=81?= =?UTF-8?q?=EC=9D=84=20=ED=8F=AC=ED=95=A8=ED=95=98=EC=A7=80=20=EC=95=8A?= =?UTF-8?q?=EB=8A=94=20=EA=B2=8C=EC=9E=84=20=EA=B4=80=EB=A0=A8=20=EB=A9=94?= =?UTF-8?q?=EC=84=9C=EB=93=9C=20=EC=9E=91=EC=84=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/blackjack/domain/BackJackGame.java | 6 -- src/main/java/blackjack/domain/Game.java | 93 +++++++++++++++++++ 2 files changed, 93 insertions(+), 6 deletions(-) delete mode 100644 src/main/java/blackjack/domain/BackJackGame.java create mode 100644 src/main/java/blackjack/domain/Game.java diff --git a/src/main/java/blackjack/domain/BackJackGame.java b/src/main/java/blackjack/domain/BackJackGame.java deleted file mode 100644 index 545070ea..00000000 --- a/src/main/java/blackjack/domain/BackJackGame.java +++ /dev/null @@ -1,6 +0,0 @@ -package blackjack.domain; - -public class BackJackGame { - - private Players players; -} diff --git a/src/main/java/blackjack/domain/Game.java b/src/main/java/blackjack/domain/Game.java new file mode 100644 index 00000000..fe333657 --- /dev/null +++ b/src/main/java/blackjack/domain/Game.java @@ -0,0 +1,93 @@ +package blackjack.domain; + +import java.util.HashMap; +import java.util.Map; + +public class Game { + + private static final String WIN = "승"; + private static final String PUSH = "무"; + private static final String LOSE = "패"; + + private final Players players; + private final Dealer dealer; + private final CardDeck deck; + private final Map playerResults = new HashMap<>(); + private int dealerWin = 0; + private int dealerPush = 0; + private int dealerLose = 0; + + public Game(Dealer dealer, Players players, CardDeck deck) { + this.players = players; + this.dealer = dealer; + this.deck = deck; + } + + public void init() { + dealer.deal(deck); + players.deal(deck); + } + + public void mapResults() { + for (Player player : players.get()) { + playerResults.put(player.getName(), judge(player)); + } + } + + private String judge(Player player) { + if (player.isBusted() && dealer.isBusted()) { + dealerLose++; + return LOSE; + } + + if (dealer.isBusted()) { + dealerLose++; + return WIN; + } + + if (player.isBusted()) { + dealerWin++; + return LOSE; + } + + int playerScore = player.getScore(); + int dealerScore = dealer.getScore(); + + if (playerScore > dealerScore) { + dealerLose++; + return WIN; + } else if (playerScore < dealerScore) { + dealerWin++; + return LOSE; + } + + dealerPush++; + return PUSH; + + } + + public Map getPlayerResults() { + return playerResults; + } + + public String getDealerWin() { + if (dealerWin > 0) { + return dealerWin + WIN; + } + return ""; + } + + public String getDealerPush() { + if (dealerPush > 0) { + return dealerPush + PUSH; + } + return ""; + } + + public String getDealerLose() { + if (dealerLose > 0) { + return dealerLose + LOSE; + } + return ""; + } +} From 031c81d640072bd7fc0101ae9c54e59937b5a61b Mon Sep 17 00:00:00 2001 From: xxell-8 Date: Thu, 17 Feb 2022 00:40:04 +0900 Subject: [PATCH 51/57] =?UTF-8?q?feat:=20=EC=B9=B4=EB=93=9C=20=EC=9D=B4?= =?UTF-8?q?=EB=A6=84=20=EB=A6=AC=EC=8A=A4=ED=8A=B8=EB=A5=BC=20=EB=B0=98?= =?UTF-8?q?=ED=99=98=ED=95=98=EB=8A=94=20=EB=A9=94=EC=84=9C=EB=93=9C=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 --- src/main/java/blackjack/domain/Cards.java | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/src/main/java/blackjack/domain/Cards.java b/src/main/java/blackjack/domain/Cards.java index 18223f95..f98159de 100644 --- a/src/main/java/blackjack/domain/Cards.java +++ b/src/main/java/blackjack/domain/Cards.java @@ -35,4 +35,10 @@ private int checkAceOneOrEleven(int total) { public List getCards() { return cards; } + + public List getCardNames() { + return cards.stream() + .map(Card::toString) + .collect(Collectors.toList()); + } } From 6dd2a34c9393989169df953583ac7b54854a4f9e Mon Sep 17 00:00:00 2001 From: xxell-8 Date: Thu, 17 Feb 2022 00:41:37 +0900 Subject: [PATCH 52/57] =?UTF-8?q?style:=20=EC=9E=98=EB=AA=BB=EB=90=9C=20?= =?UTF-8?q?=ED=81=B4=EB=9E=98=EC=8A=A4=20=EC=9D=B4=EB=A6=84=20=EC=88=98?= =?UTF-8?q?=EC=A0=95=20=EB=B0=8F=20=EB=A9=94=EC=84=9C=EB=93=9C=20=EB=B6=84?= =?UTF-8?q?=EB=A6=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/blackjack/domain/CardDeckTest.java | 28 +++++++++++++++++++ src/test/java/blackjack/domain/CardTest.java | 27 ++++-------------- 2 files changed, 34 insertions(+), 21 deletions(-) create mode 100644 src/test/java/blackjack/domain/CardDeckTest.java diff --git a/src/test/java/blackjack/domain/CardDeckTest.java b/src/test/java/blackjack/domain/CardDeckTest.java new file mode 100644 index 00000000..e9d8684f --- /dev/null +++ b/src/test/java/blackjack/domain/CardDeckTest.java @@ -0,0 +1,28 @@ +package blackjack.domain; + +import static org.assertj.core.api.Assertions.assertThat; + +import java.util.HashSet; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; + +class CardDeckTest { + + private CardDeck cardDeck; + + @BeforeEach + void setUp() { + cardDeck = new CardDeck(); + } + + @Test + void 초기_카드덱은_문양숫자조합으로_구별되는_52가지의_카드를_가진다() { + assertThat(new HashSet<>(cardDeck.initDeck()).size()).isEqualTo(52); + } + + @Test + void 한_번_뽑힌_카드는_덱에_존재하지_않아야_한다() { + Card target = cardDeck.popCard(); + assertThat(cardDeck.contains(target)).isFalse(); + } +} diff --git a/src/test/java/blackjack/domain/CardTest.java b/src/test/java/blackjack/domain/CardTest.java index ff9c1b4e..fbcb2cef 100644 --- a/src/test/java/blackjack/domain/CardTest.java +++ b/src/test/java/blackjack/domain/CardTest.java @@ -1,30 +1,15 @@ package blackjack.domain; -import static org.assertj.core.api.Assertions.assertThat; -import static org.junit.jupiter.api.Assertions.*; +import static org.assertj.core.api.Assertions.*; -import java.util.HashSet; -import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Test; -class CardDeckTest { - - private CardDeck cardDeck; - - @BeforeEach - void setUp() { - cardDeck = new CardDeck(); - } - - @Test - void 초기_카드덱은_문양숫자조합으로_구별되는_52가지의_카드를_가진다() { - assertThat(new HashSet<>(cardDeck.initDeck()).size()).isEqualTo(52); - } - +class CardTest { + @DisplayName("카드 속성에 따라 이름을 표기한다") @Test - void 한_번_뽑힌_카드는_덱에_존재하지_않아야_한다() { - Card target = cardDeck.popCard(); - assertThat(cardDeck.contains(target)).isFalse(); + void givenCard_whenCallToString_ThenReturnName() { + Card card = new Card(Suit.HEARTS, Denomination.FIVE); + assertThat(card.toString()).isEqualTo("5하트"); } } From 6ecc4d90377e6b8b947d6167b0cbee614f63c817 Mon Sep 17 00:00:00 2001 From: xxell-8 Date: Thu, 17 Feb 2022 00:42:21 +0900 Subject: [PATCH 53/57] =?UTF-8?q?refactor:=20=EC=82=AC=EC=9A=A9=EC=9E=90?= =?UTF-8?q?=EC=97=90=EA=B2=8C=20y,=20n=20=EC=9E=85=EB=A0=A5=20=EB=B0=9B?= =?UTF-8?q?=EB=8A=94=20=EB=A9=94=EC=84=9C=EB=93=9C=20=EC=B2=98=EB=A6=AC=20?= =?UTF-8?q?=EB=A1=9C=EC=A7=81=20=EC=9D=BC=EB=B6=80=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/InputView.java | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/src/main/java/blackjack/view/InputView.java b/src/main/java/blackjack/view/InputView.java index eedb62e5..b8a1baba 100644 --- a/src/main/java/blackjack/view/InputView.java +++ b/src/main/java/blackjack/view/InputView.java @@ -24,22 +24,22 @@ public static List inputPlayerNames() { return Spliter.commaSplit(input); } - public static String getUserResponse() { - System.out.println(MORE_CARD_MESSAGE); - String input = scanner.nextLine(); + public static boolean askHitOrStand(String playerName) { + System.out.printf((MORE_CARD_MESSAGE) + "%n", playerName); + String input = scanner.nextLine().trim(); checkResponse(input); - return input; + return input.equals("y"); } private static void checkResponse(String input) { checkBlank(input); - if (!input.contains("y") && !input.contains("n")) { + if (!input.equals("y") && !input.equals("n")) { throw new IllegalArgumentException(WRONG_ANSWER_EXCEPTION); } } private static void checkBlank(String text) { - if (text == null || text.trim().equals("")) { + if (text == null || text.equals("")) { throw new IllegalArgumentException(BLANK_EXCEPTION); } } From 4a20002c8f0ea8d72fa7061dad02f7d47a2cdea0 Mon Sep 17 00:00:00 2001 From: xxell-8 Date: Thu, 17 Feb 2022 00:42:46 +0900 Subject: [PATCH 54/57] =?UTF-8?q?feat:=20OutputView=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/blackjack/view/OutputView.java | 67 ++++++++++++++++++++ 1 file changed, 67 insertions(+) create mode 100644 src/main/java/blackjack/view/OutputView.java diff --git a/src/main/java/blackjack/view/OutputView.java b/src/main/java/blackjack/view/OutputView.java new file mode 100644 index 00000000..87be6595 --- /dev/null +++ b/src/main/java/blackjack/view/OutputView.java @@ -0,0 +1,67 @@ +package blackjack.view; + +import blackjack.domain.Game; +import blackjack.dto.PlayerDTO; +import blackjack.dto.FinalScoreDTO; +import java.util.List; +import java.util.Map; + +public class OutputView { + + private static final String CARD_TAG = "카드: "; + private static final String RESULT_FLAG = " - 결과: "; + private static final String RESULT_FIRST_DEAL = "딜러와 %s에게 2장의 카드를 나누었습니다."; + private static final String DEALER_HIT_MESSAGE = "딜러는 16이하라 한장의 카드를 더 받았습니다."; + + public static void printCards(String playerNames, List results) { + System.out.printf((RESULT_FIRST_DEAL) + "%n", playerNames); + for (PlayerDTO result : results) { + printCard(result); + } + } + + public static void printCard(PlayerDTO result) { + System.out.println( + result.getName() + CARD_TAG + + result.getCards() + ); + } + + public static void printDealerHit() { + System.out.println(); + System.out.println(DEALER_HIT_MESSAGE); + } + + public static void printGameResults(List results) { + System.out.println(); + for (FinalScoreDTO result : results) { + printResult(result); + } + } + + public static void printResult(FinalScoreDTO result) { + System.out.println( + result.getName() + CARD_TAG + + result.getCards() + + RESULT_FLAG + result.getScore() + ); + } + + public static void printWinOrLose(Game game) { + System.out.println(); + System.out.println("##최종 승패"); + printDealerResult(game); + printPlayerResults(game.getPlayerResults()); + } + + private static void printDealerResult(Game game) { + System.out.println( + "딜러: " + game.getDealerWin() + game.getDealerPush() + game.getDealerLose() + ); + } + + private static void printPlayerResults(Map results) { + results.forEach((name, result) -> System.out.println(name + ": " + result)); + } + +} From f0726bd626ad8b2cff8fd66c5ac9ababe7a1c2fe Mon Sep 17 00:00:00 2001 From: xxell-8 Date: Thu, 17 Feb 2022 00:43:09 +0900 Subject: [PATCH 55/57] =?UTF-8?q?feat:=20=EC=B6=9C=EB=A0=A5=EC=9D=84=20?= =?UTF-8?q?=EC=9C=84=ED=95=9C=20dto=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/blackjack/dto/FinalScoreDTO.java | 44 +++++++++++++++++++ src/main/java/blackjack/dto/PlayerDTO.java | 36 +++++++++++++++ 2 files changed, 80 insertions(+) create mode 100644 src/main/java/blackjack/dto/FinalScoreDTO.java create mode 100644 src/main/java/blackjack/dto/PlayerDTO.java diff --git a/src/main/java/blackjack/dto/FinalScoreDTO.java b/src/main/java/blackjack/dto/FinalScoreDTO.java new file mode 100644 index 00000000..3cae516b --- /dev/null +++ b/src/main/java/blackjack/dto/FinalScoreDTO.java @@ -0,0 +1,44 @@ +package blackjack.dto; + +import blackjack.domain.Dealer; +import blackjack.domain.Player; + +public class FinalScoreDTO { + private final String name; + private final int score; + private final String cards; + + private FinalScoreDTO(String name, int score, String cards) { + this.name = name; + this.score = score; + this.cards = cards; + } + + public String getName() { + return name; + } + + public int getScore() { + return score; + } + + public String getCards() { + return cards; + } + + public static FinalScoreDTO from(Dealer dealer) { + return new FinalScoreDTO( + "딜러", + dealer.getScore(), + dealer.getAllCards() + ); + } + + public static FinalScoreDTO from(Player player) { + return new FinalScoreDTO( + player.getName(), + player.getScore(), + player.getAllCards() + ); + } +} diff --git a/src/main/java/blackjack/dto/PlayerDTO.java b/src/main/java/blackjack/dto/PlayerDTO.java new file mode 100644 index 00000000..e9bba759 --- /dev/null +++ b/src/main/java/blackjack/dto/PlayerDTO.java @@ -0,0 +1,36 @@ +package blackjack.dto; + +import blackjack.domain.Dealer; +import blackjack.domain.Player; + +public class PlayerDTO { + private final String name; + private final String cards; + + private PlayerDTO(String name, String cards) { + this.name = name; + this.cards = cards; + } + + public String getName() { + return name; + } + + public String getCards() { + return cards; + } + + public static PlayerDTO from(Dealer dealer) { + return new PlayerDTO( + "딜러", + dealer.openOneCard() + ); + } + + public static PlayerDTO from(Player player) { + return new PlayerDTO( + player.getName(), + player.getAllCards() + ); + } +} From e24a2d59524a2fd9daa4a86a475a1836183764f9 Mon Sep 17 00:00:00 2001 From: xxell-8 Date: Thu, 17 Feb 2022 00:43:39 +0900 Subject: [PATCH 56/57] =?UTF-8?q?feat:=20=EC=BB=A8=ED=8A=B8=EB=A1=A4?= =?UTF-8?q?=EB=9F=AC=20=EC=9E=91=EC=84=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/BlackJackController.java | 66 ++++++++++++++++++- 1 file changed, 65 insertions(+), 1 deletion(-) diff --git a/src/main/java/blackjack/controller/BlackJackController.java b/src/main/java/blackjack/controller/BlackJackController.java index 22fbea1d..3578a91e 100644 --- a/src/main/java/blackjack/controller/BlackJackController.java +++ b/src/main/java/blackjack/controller/BlackJackController.java @@ -1,8 +1,15 @@ package blackjack.controller; import blackjack.domain.CardDeck; +import blackjack.domain.Dealer; +import blackjack.domain.Game; +import blackjack.domain.Player; import blackjack.domain.Players; +import blackjack.dto.PlayerDTO; +import blackjack.dto.FinalScoreDTO; import blackjack.view.InputView; +import blackjack.view.OutputView; +import java.util.ArrayList; import java.util.List; public class BlackJackController { @@ -12,12 +19,69 @@ public BlackJackController() { public void run() { List playerNames = InputView.inputPlayerNames(); - CardDeck cardDeck = new CardDeck(); + CardDeck deck = new CardDeck(); + Dealer dealer = Dealer.create(); Players players = new Players(playerNames); + Game game = new Game(dealer, players, deck); + game.init(); + printResultOfDeal(dealer, players, playerNames); + playerTurn(deck, players); + dealerTurn(deck, dealer); + printFinalResult(dealer, players); + printWinOrLose(game); + } + + + private void printResultOfDeal(Dealer dealer, Players players, List playerNames) { + List results = new ArrayList<>(); + results.add(PlayerDTO.from(dealer)); + for (Player player : players.get()) { + results.add(PlayerDTO.from(player)); + } + + OutputView.printCards(String.join(", ", playerNames), results); + } + + private void playerTurn(CardDeck deck,Players players) { + for (Player player : players.get()) { + askMoreCard(deck, player); + } + } + + private void askMoreCard(CardDeck deck,Player player) { + while (!player.isBusted()) { + boolean answer = InputView.askHitOrStand(player.getName()); + if (!answer) break; + player.hit(deck); + OutputView.printCard(PlayerDTO.from(player)); + } } + + private void dealerTurn(CardDeck deck, Dealer dealer) { + while (dealer.checkHitOrNot()) { + dealer.hit(deck); + OutputView.printDealerHit(); + } + } + + private void printFinalResult(Dealer dealer, Players players) { + List results = new ArrayList<>(); + results.add(FinalScoreDTO.from(dealer)); + for (Player player : players.get()) { + results.add(FinalScoreDTO.from(player)); + } + + OutputView.printGameResults(results); + } + + private void printWinOrLose(Game game) { + game.mapResults(); + OutputView.printWinOrLose(game); + } + } From 74a299a807cefab6148a81786c66942825b7ce44 Mon Sep 17 00:00:00 2001 From: jihyun park Date: Thu, 17 Feb 2022 18:25:56 +0900 Subject: [PATCH 57/57] =?UTF-8?q?feat:=20blackjack=20=EA=B2=B0=EA=B3=BC=20?= =?UTF-8?q?=EA=B4=80=EB=A0=A8=20=EA=B8=B0=EB=8A=A5=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Gmae 내 결과 산출 기능 메소드 분리 - dealer와 players를 전달하여 GameResult 클래스에서 최종결과 산출 --- .../controller/BlackJackController.java | 18 +++-- src/main/java/blackjack/domain/Dealer.java | 1 + src/main/java/blackjack/domain/Game.java | 71 ------------------- .../java/blackjack/domain/GameResult.java | 58 +++++++++++++++ src/main/java/blackjack/domain/Player.java | 17 +++++ src/main/java/blackjack/utils/Constant.java | 3 + src/main/java/blackjack/view/InputView.java | 6 +- src/main/java/blackjack/view/OutputView.java | 22 +++--- .../blackjack/domain/BackJackGameTest.java | 16 ----- 9 files changed, 107 insertions(+), 105 deletions(-) create mode 100644 src/main/java/blackjack/domain/GameResult.java delete mode 100644 src/test/java/blackjack/domain/BackJackGameTest.java diff --git a/src/main/java/blackjack/controller/BlackJackController.java b/src/main/java/blackjack/controller/BlackJackController.java index 3578a91e..0e4acd77 100644 --- a/src/main/java/blackjack/controller/BlackJackController.java +++ b/src/main/java/blackjack/controller/BlackJackController.java @@ -3,6 +3,7 @@ import blackjack.domain.CardDeck; import blackjack.domain.Dealer; import blackjack.domain.Game; +import blackjack.domain.GameResult; import blackjack.domain.Player; import blackjack.domain.Players; import blackjack.dto.PlayerDTO; @@ -32,7 +33,7 @@ public void run() { dealerTurn(deck, dealer); printFinalResult(dealer, players); - printWinOrLose(game); + printWinOrLose(dealer, players); } @@ -46,16 +47,18 @@ private void printResultOfDeal(Dealer dealer, Players players, List play OutputView.printCards(String.join(", ", playerNames), results); } - private void playerTurn(CardDeck deck,Players players) { + private void playerTurn(CardDeck deck, Players players) { for (Player player : players.get()) { askMoreCard(deck, player); } } - private void askMoreCard(CardDeck deck,Player player) { + private void askMoreCard(CardDeck deck, Player player) { while (!player.isBusted()) { boolean answer = InputView.askHitOrStand(player.getName()); - if (!answer) break; + if (!answer) { + break; + } player.hit(deck); OutputView.printCard(PlayerDTO.from(player)); @@ -79,9 +82,10 @@ private void printFinalResult(Dealer dealer, Players players) { OutputView.printGameResults(results); } - private void printWinOrLose(Game game) { - game.mapResults(); - OutputView.printWinOrLose(game); + private void printWinOrLose(Dealer dealer, Players players) { + GameResult gameResult = new GameResult(); + gameResult.mapResults(players, dealer); + OutputView.printWinOrLose(gameResult); } } diff --git a/src/main/java/blackjack/domain/Dealer.java b/src/main/java/blackjack/domain/Dealer.java index 4c1ee421..35f0f61b 100644 --- a/src/main/java/blackjack/domain/Dealer.java +++ b/src/main/java/blackjack/domain/Dealer.java @@ -3,6 +3,7 @@ import java.util.ArrayList; public class Dealer extends Participant { + private static final String NAME_TAG = "딜러 카드: "; private static final int LIMIT_MORE_CARD = 16; diff --git a/src/main/java/blackjack/domain/Game.java b/src/main/java/blackjack/domain/Game.java index fe333657..583740f9 100644 --- a/src/main/java/blackjack/domain/Game.java +++ b/src/main/java/blackjack/domain/Game.java @@ -5,17 +5,9 @@ public class Game { - private static final String WIN = "승"; - private static final String PUSH = "무"; - private static final String LOSE = "패"; - private final Players players; private final Dealer dealer; private final CardDeck deck; - private final Map playerResults = new HashMap<>(); - private int dealerWin = 0; - private int dealerPush = 0; - private int dealerLose = 0; public Game(Dealer dealer, Players players, CardDeck deck) { this.players = players; @@ -27,67 +19,4 @@ public void init() { dealer.deal(deck); players.deal(deck); } - - public void mapResults() { - for (Player player : players.get()) { - playerResults.put(player.getName(), judge(player)); - } - } - - private String judge(Player player) { - if (player.isBusted() && dealer.isBusted()) { - dealerLose++; - return LOSE; - } - - if (dealer.isBusted()) { - dealerLose++; - return WIN; - } - - if (player.isBusted()) { - dealerWin++; - return LOSE; - } - - int playerScore = player.getScore(); - int dealerScore = dealer.getScore(); - - if (playerScore > dealerScore) { - dealerLose++; - return WIN; - } else if (playerScore < dealerScore) { - dealerWin++; - return LOSE; - } - - dealerPush++; - return PUSH; - - } - - public Map getPlayerResults() { - return playerResults; - } - - public String getDealerWin() { - if (dealerWin > 0) { - return dealerWin + WIN; - } - return ""; - } - - public String getDealerPush() { - if (dealerPush > 0) { - return dealerPush + PUSH; - } - return ""; - } - - public String getDealerLose() { - if (dealerLose > 0) { - return dealerLose + LOSE; - } - return ""; - } } diff --git a/src/main/java/blackjack/domain/GameResult.java b/src/main/java/blackjack/domain/GameResult.java new file mode 100644 index 00000000..b0c2f102 --- /dev/null +++ b/src/main/java/blackjack/domain/GameResult.java @@ -0,0 +1,58 @@ +package blackjack.domain; + +import static blackjack.utils.Constant.LOSE; +import static blackjack.utils.Constant.PUSH; +import static blackjack.utils.Constant.WIN; + +import java.util.Arrays; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +public class GameResult { + + private final Map playerResults = new HashMap<>(); + private final Map dealersResults = new HashMap<>(); + + public void mapResults(Players players, Dealer dealer) { + for (Player player : players.get()) { + playerResults.put(player.getName(), player.getGameResult(dealer)); + } + updateDealerResult(dealer); + } + + private void updateDealerResult(Dealer dealer) { + for (String result : playerResults.values()) { + if (dealer.isBusted()) { + dealersResults.put(LOSE, dealersResults.getOrDefault(LOSE, 0) + 1); + continue; + } + String deal = WIN; + if (result.equals(WIN)) { + deal = LOSE; + } + if (result.equals(PUSH)) { + deal = PUSH; + } + dealersResults.put(deal, dealersResults.getOrDefault(deal, 0) + 1); + } + } + + public Map getPlayerResults() { + return playerResults; + } + + public String getDealerResult() { + StringBuilder result = new StringBuilder(); + List orders = Arrays.asList(WIN, PUSH, LOSE); + + for (String order : orders) { + if (dealersResults.containsKey(order)) { + result.append(dealersResults.get(order)).append(order); + } + } + + return result.toString(); + } + +} diff --git a/src/main/java/blackjack/domain/Player.java b/src/main/java/blackjack/domain/Player.java index 3f49bb70..9525bce7 100644 --- a/src/main/java/blackjack/domain/Player.java +++ b/src/main/java/blackjack/domain/Player.java @@ -1,5 +1,9 @@ package blackjack.domain; +import static blackjack.utils.Constant.LOSE; +import static blackjack.utils.Constant.PUSH; +import static blackjack.utils.Constant.WIN; + import java.util.ArrayList; public class Player extends Participant { @@ -21,4 +25,17 @@ public static Player from(String name) { public String getName() { return name; } + + public String getGameResult(Dealer dealer) { + if (isBusted()) { + return LOSE; + } + if (dealer.isBusted() || dealer.getScore() < getScore()) { + return WIN; + } + if (dealer.getScore() == getScore()) { + return PUSH; + } + return LOSE; + } } diff --git a/src/main/java/blackjack/utils/Constant.java b/src/main/java/blackjack/utils/Constant.java index 41f7211d..2b2bf079 100644 --- a/src/main/java/blackjack/utils/Constant.java +++ b/src/main/java/blackjack/utils/Constant.java @@ -6,4 +6,7 @@ private Constant() { } public final static int BUST_LIMIT = 21; + public static final String WIN = "승"; + public static final String PUSH = "무"; + public static final String LOSE = "패"; } diff --git a/src/main/java/blackjack/view/InputView.java b/src/main/java/blackjack/view/InputView.java index b8a1baba..b17eeb7f 100644 --- a/src/main/java/blackjack/view/InputView.java +++ b/src/main/java/blackjack/view/InputView.java @@ -10,6 +10,8 @@ public class InputView { private static final String MORE_CARD_MESSAGE = "%s는 한장의 카드를 더 받겠습니까?(예는 y, 아니오는 n)"; private static final String BLANK_EXCEPTION = "1명 이상의 플레이어 이름을 입력해주세요."; private static final String WRONG_ANSWER_EXCEPTION = "응답은 y 또는 n이어야 합니다."; + private static final String YES = "y"; + private static final String NO = "n"; private static final Scanner scanner = new Scanner(System.in); @@ -28,12 +30,12 @@ public static boolean askHitOrStand(String playerName) { System.out.printf((MORE_CARD_MESSAGE) + "%n", playerName); String input = scanner.nextLine().trim(); checkResponse(input); - return input.equals("y"); + return input.equals(YES); } private static void checkResponse(String input) { checkBlank(input); - if (!input.equals("y") && !input.equals("n")) { + if (!input.equals(YES) && !input.equals(NO)) { throw new IllegalArgumentException(WRONG_ANSWER_EXCEPTION); } } diff --git a/src/main/java/blackjack/view/OutputView.java b/src/main/java/blackjack/view/OutputView.java index 87be6595..1742b39c 100644 --- a/src/main/java/blackjack/view/OutputView.java +++ b/src/main/java/blackjack/view/OutputView.java @@ -1,6 +1,10 @@ package blackjack.view; -import blackjack.domain.Game; +import static blackjack.utils.Constant.LOSE; +import static blackjack.utils.Constant.PUSH; +import static blackjack.utils.Constant.WIN; + +import blackjack.domain.GameResult; import blackjack.dto.PlayerDTO; import blackjack.dto.FinalScoreDTO; import java.util.List; @@ -9,9 +13,11 @@ public class OutputView { private static final String CARD_TAG = "카드: "; + private static final String DEALER_TAG = "딜러: "; private static final String RESULT_FLAG = " - 결과: "; private static final String RESULT_FIRST_DEAL = "딜러와 %s에게 2장의 카드를 나누었습니다."; private static final String DEALER_HIT_MESSAGE = "딜러는 16이하라 한장의 카드를 더 받았습니다."; + private static final String FINAL_RESULT_TITLE = "## 최종 승패"; public static void printCards(String playerNames, List results) { System.out.printf((RESULT_FIRST_DEAL) + "%n", playerNames); @@ -47,17 +53,15 @@ public static void printResult(FinalScoreDTO result) { ); } - public static void printWinOrLose(Game game) { + public static void printWinOrLose(GameResult gameResult) { System.out.println(); - System.out.println("##최종 승패"); - printDealerResult(game); - printPlayerResults(game.getPlayerResults()); + System.out.println(FINAL_RESULT_TITLE); + printDealerResult(gameResult.getDealerResult()); + printPlayerResults(gameResult.getPlayerResults()); } - private static void printDealerResult(Game game) { - System.out.println( - "딜러: " + game.getDealerWin() + game.getDealerPush() + game.getDealerLose() - ); + private static void printDealerResult(String results) { + System.out.println(DEALER_TAG + results); } private static void printPlayerResults(Map results) { diff --git a/src/test/java/blackjack/domain/BackJackGameTest.java b/src/test/java/blackjack/domain/BackJackGameTest.java deleted file mode 100644 index 815fc60d..00000000 --- a/src/test/java/blackjack/domain/BackJackGameTest.java +++ /dev/null @@ -1,16 +0,0 @@ -package blackjack.domain; - -import static org.junit.jupiter.api.Assertions.*; - -import org.junit.jupiter.api.DisplayName; -import org.junit.jupiter.api.Test; - -class BackJackGameTest { - - @DisplayName("게임을 시작하면, 모든 참가자는 2장의 카드를 받는다") - @Test - void test(){ - - } - -}