From cb6c3adb6d35c880a600fc0796a92c04195b6e6b Mon Sep 17 00:00:00 2001 From: HyeonjuLee Date: Fri, 11 Feb 2022 16:02:01 +0900 Subject: [PATCH 01/66] =?UTF-8?q?docs(rentCar):=20=EC=97=B0=EB=A3=8C?= =?UTF-8?q?=EC=A3=BC=EC=9E=85=20=EA=B8=B0=EB=8A=A5=EC=9A=94=EA=B5=AC?= =?UTF-8?q?=EC=82=AC=ED=95=AD=20=EC=A0=95=EC=9D=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 03ba7ed3..af6b1378 100644 --- a/README.md +++ b/README.md @@ -1 +1,16 @@ -# java-blackjack \ No newline at end of file +# 연료 주입 + +## 기능요구사항 + +- [ ] 렌터카는 Sonata 2대, Avante 1대, K5 2대로 총 5대의 차량을 보유하고 있다. + - 차량 별 연비 정보를 저장하고 있다. + - Sonata : 10km/리터 + - Avante : 15km/리터 + - K5 : 13km/리터) + - 차량 별 보유 대수를 저장하고 있다. +- [ ] 고객은 여행할 목적지의 대략적인 이동거리를 입력 받는다. +- [ ] 이 이동거리를 활용해 차량 별로 필요한 연료를 주입한다. +- [ ] 차량 별로 주입해야 할 연료량을 확인할 수 있는 보고서를 생성한다. + +# java-blackjack + From c0947c330cc12089ba567ba0e53aa684dbc12743 Mon Sep 17 00:00:00 2001 From: HyeonjuLee Date: Fri, 11 Feb 2022 16:16:19 +0900 Subject: [PATCH 02/66] =?UTF-8?q?feat(main):=20Application=20=ED=81=B4?= =?UTF-8?q?=EB=9E=98=EC=8A=A4=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/rentcar/Application.java | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 src/main/java/rentcar/Application.java diff --git a/src/main/java/rentcar/Application.java b/src/main/java/rentcar/Application.java new file mode 100644 index 00000000..68829f67 --- /dev/null +++ b/src/main/java/rentcar/Application.java @@ -0,0 +1,5 @@ +package rentcar; + +public class Application { + +} From 527c83ff6d73402a33112b24c20730336a2ee1e2 Mon Sep 17 00:00:00 2001 From: HyeonjuLee Date: Fri, 11 Feb 2022 16:16:58 +0900 Subject: [PATCH 03/66] =?UTF-8?q?feat(car):=20Car=20=EC=B6=94=EC=83=81=20?= =?UTF-8?q?=ED=81=B4=EB=9E=98=EC=8A=A4=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/rentcar/domain/Car.java | 26 ++++++++++++++++++++++++++ 1 file changed, 26 insertions(+) create mode 100644 src/main/java/rentcar/domain/Car.java diff --git a/src/main/java/rentcar/domain/Car.java b/src/main/java/rentcar/domain/Car.java new file mode 100644 index 00000000..9ecdb822 --- /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(); + } +} + From 7b498facc8f180a137d31a9be7e5c587b075006a Mon Sep 17 00:00:00 2001 From: HyeonjuLee Date: Fri, 11 Feb 2022 16:18:00 +0900 Subject: [PATCH 04/66] =?UTF-8?q?feat(car):=20Car=20=EC=83=81=EC=86=8D=20?= =?UTF-8?q?=ED=81=B4=EB=9E=98=EC=8A=A4=20=EC=83=9D=EC=84=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Sonata, Avante, K5 --- src/main/java/rentcar/domain/Avante.java | 27 ++++++++++++++++++++++++ src/main/java/rentcar/domain/K5.java | 27 ++++++++++++++++++++++++ src/main/java/rentcar/domain/Sonata.java | 27 ++++++++++++++++++++++++ 3 files changed, 81 insertions(+) create mode 100644 src/main/java/rentcar/domain/Avante.java create mode 100644 src/main/java/rentcar/domain/K5.java create mode 100644 src/main/java/rentcar/domain/Sonata.java diff --git a/src/main/java/rentcar/domain/Avante.java b/src/main/java/rentcar/domain/Avante.java new file mode 100644 index 00000000..cac4e817 --- /dev/null +++ b/src/main/java/rentcar/domain/Avante.java @@ -0,0 +1,27 @@ +package rentcar.domain; + +public class Avante extends Car { + + private static final String CAR_NAME = "avante"; + private static final double DISTANCE_PER_LITER = 15; + private final double distance; + + public Avante(final double distance) { + this.distance = distance; + } + + @Override + double getDistancePerLiter() { + return 0; + } + + @Override + double getTripDistance() { + return 0; + } + + @Override + String getName() { + return null; + } +} diff --git a/src/main/java/rentcar/domain/K5.java b/src/main/java/rentcar/domain/K5.java new file mode 100644 index 00000000..2572e956 --- /dev/null +++ b/src/main/java/rentcar/domain/K5.java @@ -0,0 +1,27 @@ +package rentcar.domain; + +public class K5 extends Car { + + private static final String CAR_NAME = "K5"; + private static final double DISTANCE_PER_LITER = 13; + private final double distance; + + public K5(final double distance) { + this.distance = distance; + } + + @Override + double getDistancePerLiter() { + return 0; + } + + @Override + double getTripDistance() { + return 0; + } + + @Override + String getName() { + return null; + } +} diff --git a/src/main/java/rentcar/domain/Sonata.java b/src/main/java/rentcar/domain/Sonata.java new file mode 100644 index 00000000..0d73e538 --- /dev/null +++ b/src/main/java/rentcar/domain/Sonata.java @@ -0,0 +1,27 @@ +package rentcar.domain; + +public class Sonata extends Car { + + private static final String CAR_NAME = "sonata"; + private static final double DISTANCE_PER_LITER = 10; + private final double distance; + + public Sonata(final double distance) { + this.distance = distance; + } + + @Override + double getDistancePerLiter() { + return 0; + } + + @Override + double getTripDistance() { + return 0; + } + + @Override + String getName() { + return null; + } +} From 9f5362d6be28af570caa6178f364b5fd4d5016c1 Mon Sep 17 00:00:00 2001 From: HyeonjuLee Date: Fri, 11 Feb 2022 16:19:29 +0900 Subject: [PATCH 05/66] =?UTF-8?q?feat:=20empty.txt=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/{ => rentcar/controller}/empty.txt | 0 src/main/java/rentcar/view/empty.txt | 0 2 files changed, 0 insertions(+), 0 deletions(-) rename src/main/java/{ => rentcar/controller}/empty.txt (100%) create mode 100644 src/main/java/rentcar/view/empty.txt diff --git a/src/main/java/empty.txt b/src/main/java/rentcar/controller/empty.txt similarity index 100% rename from src/main/java/empty.txt rename to src/main/java/rentcar/controller/empty.txt diff --git a/src/main/java/rentcar/view/empty.txt b/src/main/java/rentcar/view/empty.txt new file mode 100644 index 00000000..e69de29b From 3498e4c0f700770c3d220f2a18e3f4b2dc41523f Mon Sep 17 00:00:00 2001 From: HyeonjuLee Date: Fri, 11 Feb 2022 16:36:28 +0900 Subject: [PATCH 06/66] =?UTF-8?q?feat(company):=20RentCompany=20=ED=81=B4?= =?UTF-8?q?=EB=9E=98=EC=8A=A4=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/rentcar/domain/RentCompany.java | 20 +++++++++++++++++++ 1 file changed, 20 insertions(+) create mode 100644 src/main/java/rentcar/domain/RentCompany.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..d248b820 --- /dev/null +++ b/src/main/java/rentcar/domain/RentCompany.java @@ -0,0 +1,20 @@ +package rentcar.domain; + +import java.util.ArrayList; +import java.util.List; + +public class RentCompany { + + private final List cars; + + private RentCompany() { + this.cars = new ArrayList<>(); + } + + public static RentCompany create() { + return new RentCompany(); + } + + + +} From ebcb1320793e33db35085ebf8ce889f406401987 Mon Sep 17 00:00:00 2001 From: HyeonjuLee Date: Fri, 11 Feb 2022 16:36:39 +0900 Subject: [PATCH 07/66] =?UTF-8?q?test(company):=20RentCompany=20=ED=81=B4?= =?UTF-8?q?=EB=9E=98=EC=8A=A4=20=EC=83=9D=EC=84=B1=20=ED=85=8C=EC=8A=A4?= =?UTF-8?q?=ED=8A=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/test/java/rentcar/domain/RentCompanyTest.java | 15 +++++++++++++++ 1 file changed, 15 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..d4267133 --- /dev/null +++ b/src/test/java/rentcar/domain/RentCompanyTest.java @@ -0,0 +1,15 @@ +package rentcar.domain; + +import static org.assertj.core.api.Assertions.assertThat; +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Test; + +class RentCompanyTest { + + @DisplayName("RentCompany_객체_생성_테스트") + @Test + public void createRentCarTest() { + RentCompany company = RentCompany.create(); + assertThat(company).isNotNull(); + } +} \ No newline at end of file From d8cb8706064d8ba1fa94242eb8d4ed097a9f033f Mon Sep 17 00:00:00 2001 From: HyeonjuLee Date: Fri, 11 Feb 2022 16:44:19 +0900 Subject: [PATCH 08/66] =?UTF-8?q?feat(company):=20Car=20=EA=B0=9D=EC=B2=B4?= =?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/RentCompany.java | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/src/main/java/rentcar/domain/RentCompany.java b/src/main/java/rentcar/domain/RentCompany.java index d248b820..043cfb34 100644 --- a/src/main/java/rentcar/domain/RentCompany.java +++ b/src/main/java/rentcar/domain/RentCompany.java @@ -1,6 +1,7 @@ package rentcar.domain; import java.util.ArrayList; +import java.util.Collections; import java.util.List; public class RentCompany { @@ -15,6 +16,11 @@ public static RentCompany create() { return new RentCompany(); } + public void addCar(Car car) { + cars.add(car); + } + + public List cars() { return Collections.unmodifiableList(cars); } } From 80dd03e83c4b273c8f718d7c61bbd1ca6a1e01ae Mon Sep 17 00:00:00 2001 From: HyeonjuLee Date: Fri, 11 Feb 2022 16:44:39 +0900 Subject: [PATCH 09/66] =?UTF-8?q?test(company):=20Car=20=EA=B0=9D=EC=B2=B4?= =?UTF-8?q?=20=EC=B6=94=EA=B0=80=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 --- src/test/java/rentcar/domain/RentCompanyTest.java | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/src/test/java/rentcar/domain/RentCompanyTest.java b/src/test/java/rentcar/domain/RentCompanyTest.java index d4267133..92d1b57d 100644 --- a/src/test/java/rentcar/domain/RentCompanyTest.java +++ b/src/test/java/rentcar/domain/RentCompanyTest.java @@ -12,4 +12,17 @@ public void createRentCarTest() { RentCompany company = RentCompany.create(); assertThat(company).isNotNull(); } + + @DisplayName("RentCompany_Car_추가_테스트") + @Test + public void addCarTest() { + RentCompany company = RentCompany.create(); + company.addCar(new Sonata(150)); + 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)); + assertThat(company.cars().size()).isEqualTo(6); + } } \ No newline at end of file From 8cafc2097bd0a84b95d9888711776eb8fb6f7a3a Mon Sep 17 00:00:00 2001 From: HyeonjuLee Date: Fri, 11 Feb 2022 17:29:28 +0900 Subject: [PATCH 10/66] =?UTF-8?q?feat(car):=20getter=20=EC=A0=95=EC=9D=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/rentcar/domain/Avante.java | 8 ++++---- src/main/java/rentcar/domain/K5.java | 6 +++--- src/main/java/rentcar/domain/Sonata.java | 8 ++++---- 3 files changed, 11 insertions(+), 11 deletions(-) diff --git a/src/main/java/rentcar/domain/Avante.java b/src/main/java/rentcar/domain/Avante.java index cac4e817..9e3b5632 100644 --- a/src/main/java/rentcar/domain/Avante.java +++ b/src/main/java/rentcar/domain/Avante.java @@ -2,7 +2,7 @@ public class Avante extends Car { - private static final String CAR_NAME = "avante"; + private static final String CAR_NAME = "Avante"; private static final double DISTANCE_PER_LITER = 15; private final double distance; @@ -12,16 +12,16 @@ public Avante(final double distance) { @Override double getDistancePerLiter() { - return 0; + return DISTANCE_PER_LITER; } @Override double getTripDistance() { - return 0; + return distance; } @Override String getName() { - return null; + return CAR_NAME; } } diff --git a/src/main/java/rentcar/domain/K5.java b/src/main/java/rentcar/domain/K5.java index 2572e956..f0c45d6c 100644 --- a/src/main/java/rentcar/domain/K5.java +++ b/src/main/java/rentcar/domain/K5.java @@ -12,16 +12,16 @@ public K5(final double distance) { @Override double getDistancePerLiter() { - return 0; + return DISTANCE_PER_LITER; } @Override double getTripDistance() { - return 0; + return distance; } @Override String getName() { - return null; + return CAR_NAME; } } diff --git a/src/main/java/rentcar/domain/Sonata.java b/src/main/java/rentcar/domain/Sonata.java index 0d73e538..ba60e848 100644 --- a/src/main/java/rentcar/domain/Sonata.java +++ b/src/main/java/rentcar/domain/Sonata.java @@ -2,7 +2,7 @@ public class Sonata extends Car { - private static final String CAR_NAME = "sonata"; + private static final String CAR_NAME = "Sonata"; private static final double DISTANCE_PER_LITER = 10; private final double distance; @@ -12,16 +12,16 @@ public Sonata(final double distance) { @Override double getDistancePerLiter() { - return 0; + return DISTANCE_PER_LITER; } @Override double getTripDistance() { - return 0; + return distance; } @Override String getName() { - return null; + return CAR_NAME; } } From 0687344f2618fd1b5cb9248c85107ac38ee39796 Mon Sep 17 00:00:00 2001 From: HyeonjuLee Date: Fri, 11 Feb 2022 17:32:51 +0900 Subject: [PATCH 11/66] =?UTF-8?q?feat(company):=20=EB=A0=88=ED=8F=AC?= =?UTF-8?q?=ED=8A=B8=20=EC=83=9D=EC=84=B1=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/RentCompany.java | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) diff --git a/src/main/java/rentcar/domain/RentCompany.java b/src/main/java/rentcar/domain/RentCompany.java index 043cfb34..6cd37860 100644 --- a/src/main/java/rentcar/domain/RentCompany.java +++ b/src/main/java/rentcar/domain/RentCompany.java @@ -3,9 +3,14 @@ import java.util.ArrayList; import java.util.Collections; import java.util.List; +import java.util.stream.Collectors; public class RentCompany { + private static final String DELIMITER = " : "; + private static final String LITER = "리터"; + private static final String NEW_LINE = "\n"; + private final List cars; private RentCompany() { @@ -20,7 +25,17 @@ public void addCar(Car car) { cars.add(car); } - public List cars() { return Collections.unmodifiableList(cars); } + public String generateReport() { + return cars.stream() + .map(this::getCarInfo) + .collect(Collectors.joining(NEW_LINE)); + } + public String getCarInfo(Car car) { + return car.getName() + DELIMITER + (int) car.getChargeQuantity() + LITER; + } + public List cars() { + return Collections.unmodifiableList(cars); + } } From 19286f8646011a60be8c985df6e88ab209300b09 Mon Sep 17 00:00:00 2001 From: HyeonjuLee Date: Fri, 11 Feb 2022 17:33:08 +0900 Subject: [PATCH 12/66] =?UTF-8?q?test(company):=20=EB=A0=88=ED=8F=AC?= =?UTF-8?q?=ED=8A=B8=20=EC=83=9D=EC=84=B1=20=EA=B8=B0=EB=8A=A5=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 --- .../java/rentcar/domain/RentCompanyTest.java | 21 +++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/src/test/java/rentcar/domain/RentCompanyTest.java b/src/test/java/rentcar/domain/RentCompanyTest.java index 92d1b57d..df7fbd7d 100644 --- a/src/test/java/rentcar/domain/RentCompanyTest.java +++ b/src/test/java/rentcar/domain/RentCompanyTest.java @@ -5,6 +5,7 @@ import org.junit.jupiter.api.Test; class RentCompanyTest { + private static final String NEWLINE = System.getProperty("line.separator"); @DisplayName("RentCompany_객체_생성_테스트") @Test @@ -25,4 +26,24 @@ public void addCarTest() { company.addCar(new K5(390)); assertThat(company.cars().size()).isEqualTo(6); } + + @DisplayName("RentCompany_레포트_생성_테스트") + @Test + public void generateReportTest() { + RentCompany company = RentCompany.create(); // factory method를 사용해 생성 + 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리터" + ); + } } \ No newline at end of file From d8cc419a30a8966dd0bb1f4287f15749f2f8bb01 Mon Sep 17 00:00:00 2001 From: HyeonjuLee Date: Fri, 11 Feb 2022 17:35:39 +0900 Subject: [PATCH 13/66] docs: Update README.md --- README.md | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index af6b1378..8c2d8c47 100644 --- a/README.md +++ b/README.md @@ -3,14 +3,15 @@ ## 기능요구사항 - [ ] 렌터카는 Sonata 2대, Avante 1대, K5 2대로 총 5대의 차량을 보유하고 있다. - - 차량 별 연비 정보를 저장하고 있다. + - [x] 차량 별 연비 정보를 저장하고 있다. - Sonata : 10km/리터 - Avante : 15km/리터 - K5 : 13km/리터) - 차량 별 보유 대수를 저장하고 있다. - [ ] 고객은 여행할 목적지의 대략적인 이동거리를 입력 받는다. -- [ ] 이 이동거리를 활용해 차량 별로 필요한 연료를 주입한다. -- [ ] 차량 별로 주입해야 할 연료량을 확인할 수 있는 보고서를 생성한다. +- [x] 이 이동거리를 활용해 차량 별로 필요한 연료를 주입한다. +- [x] 차량 별로 주입해야 할 연료량을 확인할 수 있는 보고서를 생성한다. +- [ ] 보고서를 출력한다. # java-blackjack From cf06f9ee2eef613d4b60fa57960c24ba8b3b29af Mon Sep 17 00:00:00 2001 From: HyeonjuLee Date: Fri, 11 Feb 2022 17:36:09 +0900 Subject: [PATCH 14/66] =?UTF-8?q?feat(main):=20main=20method=20=EC=A0=95?= =?UTF-8?q?=EC=9D=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/rentcar/Application.java | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/main/java/rentcar/Application.java b/src/main/java/rentcar/Application.java index 68829f67..7fb6c748 100644 --- a/src/main/java/rentcar/Application.java +++ b/src/main/java/rentcar/Application.java @@ -2,4 +2,7 @@ public class Application { + public static void main(String[] args) { + + } } From a06b01fdaa6e7acd560122e2eafdff39227f82d1 Mon Sep 17 00:00:00 2001 From: HyeonjuLee Date: Fri, 11 Feb 2022 17:36:22 +0900 Subject: [PATCH 15/66] =?UTF-8?q?feat:=20empty.txt=20=EC=82=AD=EC=A0=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/test/java/empty.txt | 0 1 file changed, 0 insertions(+), 0 deletions(-) delete mode 100644 src/test/java/empty.txt diff --git a/src/test/java/empty.txt b/src/test/java/empty.txt deleted file mode 100644 index e69de29b..00000000 From ebcaf92d61853fe26f5bda35480734434f6bcb1a Mon Sep 17 00:00:00 2001 From: HyeonjuLee Date: Fri, 11 Feb 2022 17:36:22 +0900 Subject: [PATCH 16/66] =?UTF-8?q?remove:=20empty.txt=20=EC=82=AD=EC=A0=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/test/java/empty.txt | 0 1 file changed, 0 insertions(+), 0 deletions(-) delete mode 100644 src/test/java/empty.txt diff --git a/src/test/java/empty.txt b/src/test/java/empty.txt deleted file mode 100644 index e69de29b..00000000 From f4c30c4207faecd546ba14127cd92308782b95dd Mon Sep 17 00:00:00 2001 From: sk11ingyuhwang Date: Mon, 14 Feb 2022 16:51:08 +0900 Subject: [PATCH 17/66] =?UTF-8?q?feat(view):=20inputView=20=ED=81=B4?= =?UTF-8?q?=EB=9E=98=EC=8A=A4=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/rentcar/view/InputView.java | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) create mode 100644 src/main/java/rentcar/view/InputView.java diff --git a/src/main/java/rentcar/view/InputView.java b/src/main/java/rentcar/view/InputView.java new file mode 100644 index 00000000..18ab356f --- /dev/null +++ b/src/main/java/rentcar/view/InputView.java @@ -0,0 +1,21 @@ +package rentcar.view; + +import java.util.Scanner; + +public class InputView { + + private static final Scanner SCANNER = new Scanner(System.in); + private static final String RENT_CAR_TYPE_MESSAGE = "렌트할 차를 입력해주세요."; + private static final String RENT_CAR_DISTANCE_MESSAGE = "차량별 이동거리를 입력해주세요."; + + + public static String inputRentCar(){ + System.out.println(RENT_CAR_TYPE_MESSAGE); + return SCANNER.nextLine(); + } + + public static String inputDistance(){ + System.out.println(RENT_CAR_DISTANCE_MESSAGE); + return SCANNER.nextLine(); + } +} From bfded449e4f4ee0543b6f1feadc9cf57911fc162 Mon Sep 17 00:00:00 2001 From: sk11ingyuhwang Date: Mon, 14 Feb 2022 16:51:28 +0900 Subject: [PATCH 18/66] =?UTF-8?q?remove:=20=EB=B6=88=ED=95=84=EC=9A=94?= =?UTF-8?q?=ED=95=9C=20=ED=8C=8C=EC=9D=BC=20=EC=82=AD=EC=A0=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/rentcar/controller/empty.txt | 0 src/main/java/rentcar/view/empty.txt | 0 2 files changed, 0 insertions(+), 0 deletions(-) delete mode 100644 src/main/java/rentcar/controller/empty.txt delete mode 100644 src/main/java/rentcar/view/empty.txt diff --git a/src/main/java/rentcar/controller/empty.txt b/src/main/java/rentcar/controller/empty.txt deleted file mode 100644 index e69de29b..00000000 diff --git a/src/main/java/rentcar/view/empty.txt b/src/main/java/rentcar/view/empty.txt deleted file mode 100644 index e69de29b..00000000 From e51828785c3718b247ef6a1df517780f9246efe8 Mon Sep 17 00:00:00 2001 From: sk11ingyuhwang Date: Mon, 14 Feb 2022 21:15:25 +0900 Subject: [PATCH 19/66] =?UTF-8?q?test:=20=ED=85=8C=EC=8A=A4=ED=8A=B8=20?= =?UTF-8?q?=EC=BD=94=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 - CarTest.java - RentCarTest.java --- src/test/java/rentcar/domain/CarTest.java | 23 ++++++++++++++++ src/test/java/rentcar/domain/RentCarTest.java | 27 +++++++++++++++++++ 2 files changed, 50 insertions(+) create mode 100644 src/test/java/rentcar/domain/CarTest.java create mode 100644 src/test/java/rentcar/domain/RentCarTest.java diff --git a/src/test/java/rentcar/domain/CarTest.java b/src/test/java/rentcar/domain/CarTest.java new file mode 100644 index 00000000..c4ef3ffb --- /dev/null +++ b/src/test/java/rentcar/domain/CarTest.java @@ -0,0 +1,23 @@ +package rentcar.domain; + +import static org.assertj.core.api.Assertions.assertThat; +import static org.junit.jupiter.api.Assertions.assertAll; + +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Test; + +class CarTest { + + @DisplayName("자동차_생성_테스트") + @Test + void createRentCarTest() { + Car Sonata = new Sonata(150); + Car K5 = new K5(260); + Car Avante = new Avante(300); + assertAll( + () -> assertThat(Sonata.getChargeQuantity()).isEqualTo(15), + () -> assertThat(K5.getChargeQuantity()).isEqualTo(20), + () -> assertThat(Avante.getChargeQuantity()).isEqualTo(20) + ); + } +} \ No newline at end of file diff --git a/src/test/java/rentcar/domain/RentCarTest.java b/src/test/java/rentcar/domain/RentCarTest.java new file mode 100644 index 00000000..3ba1d4cb --- /dev/null +++ b/src/test/java/rentcar/domain/RentCarTest.java @@ -0,0 +1,27 @@ +package rentcar.domain; + + +import static org.assertj.core.api.Assertions.assertThat; + +import java.util.Arrays; +import java.util.List; +import java.util.stream.IntStream; +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Test; + +class RentCarTest { + + + @DisplayName("자동차_타입_생성_테스트") + @Test + void createRentCarTest() { + List rentCar = Arrays.asList("Sonata", "K5", "Sonata", "Avante", "K5"); + List distance = Arrays.asList(150, 260, 120, 300, 390); + + IntStream.range(0, 5) + .forEach(idx -> + assertThat(RentCar.of(rentCar.get(idx), distance.get(idx)).getName()).isEqualTo( + rentCar.get(idx)) + ); + } +} \ No newline at end of file From 8c65c2fe50488c7fec076cc7569e62bf03cd9df2 Mon Sep 17 00:00:00 2001 From: sk11ingyuhwang Date: Mon, 14 Feb 2022 21:15:53 +0900 Subject: [PATCH 20/66] =?UTF-8?q?feat(view):=20OutputView=20=ED=81=B4?= =?UTF-8?q?=EB=9E=98=EC=8A=A4=20=EC=83=9D=EC=84=B1,=20InputView=20?= =?UTF-8?q?=EB=A1=9C=EC=A7=81=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/rentcar/view/InputView.java | 18 +++++++++++++----- src/main/java/rentcar/view/OutputView.java | 10 ++++++++++ 2 files changed, 23 insertions(+), 5 deletions(-) create mode 100644 src/main/java/rentcar/view/OutputView.java diff --git a/src/main/java/rentcar/view/InputView.java b/src/main/java/rentcar/view/InputView.java index 18ab356f..26a663f2 100644 --- a/src/main/java/rentcar/view/InputView.java +++ b/src/main/java/rentcar/view/InputView.java @@ -1,21 +1,29 @@ package rentcar.view; +import java.util.Arrays; +import java.util.List; import java.util.Scanner; +import java.util.stream.Collectors; public class InputView { private static final Scanner SCANNER = new Scanner(System.in); - private static final String RENT_CAR_TYPE_MESSAGE = "렌트할 차를 입력해주세요."; + private static final String RENT_CAR_TYPE_MESSAGE = "Sonata, K5, Avante 중 렌트할 차 타입을 콤마(,) 기준으로 연속해서 입력해주세요."; private static final String RENT_CAR_DISTANCE_MESSAGE = "차량별 이동거리를 입력해주세요."; - public static String inputRentCar(){ + public static List inputRentCar() { System.out.println(RENT_CAR_TYPE_MESSAGE); - return SCANNER.nextLine(); + return Arrays.stream(SCANNER.nextLine().split(",")) + .map(String::trim) + .collect(Collectors.toList()); } - public static String inputDistance(){ + public static List inputDistance() { System.out.println(RENT_CAR_DISTANCE_MESSAGE); - return SCANNER.nextLine(); + return Arrays.stream(SCANNER.nextLine().split(",")) + .map(String::trim) + .map(Integer::parseInt) + .collect(Collectors.toList()); } } diff --git a/src/main/java/rentcar/view/OutputView.java b/src/main/java/rentcar/view/OutputView.java new file mode 100644 index 00000000..46abdd86 --- /dev/null +++ b/src/main/java/rentcar/view/OutputView.java @@ -0,0 +1,10 @@ +package rentcar.view; + +; + +public class OutputView { + + public static void printReport(String rentCarReport) { + System.out.println(rentCarReport); + } +} From 1fa56ff3f0d37856fdd94720c625b1b93c99a642 Mon Sep 17 00:00:00 2001 From: sk11ingyuhwang Date: Mon, 14 Feb 2022 21:22:08 +0900 Subject: [PATCH 21/66] =?UTF-8?q?feat(rentCar):=20enum=EC=9C=BC=EB=A1=9C?= =?UTF-8?q?=20rentCar=20=ED=83=80=EC=9E=85=20=EA=B2=B0=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/rentcar/domain/RentCar.java | 29 +++++++++++++++++++++++ 1 file changed, 29 insertions(+) create mode 100644 src/main/java/rentcar/domain/RentCar.java diff --git a/src/main/java/rentcar/domain/RentCar.java b/src/main/java/rentcar/domain/RentCar.java new file mode 100644 index 00000000..292e7332 --- /dev/null +++ b/src/main/java/rentcar/domain/RentCar.java @@ -0,0 +1,29 @@ +package rentcar.domain; + +import java.util.Arrays; +import java.util.Objects; +import java.util.function.Function; + +public enum RentCar { + SONATA("Sonata", Sonata::new), + AVANTE("Avante", Avante::new), + K5("K5", K5::new); + + private final String rentCarName; + private final Function function; + + RentCar(String rentCarName, final Function function) { + this.rentCarName = rentCarName; + this.function = function; + } + + public static Car of(final String rentCarName, final double distance) { + return (Car) Objects.requireNonNull(Arrays.stream(values()) + .filter(car -> Objects.equals(car.rentCarName, rentCarName)) + .findAny().orElse(null)).apply(distance); + } + + private Object apply(final double distance) { + return function.apply(distance); + } +} \ No newline at end of file From e43b4832cb3b6bd0922e79ba711b9f422985fbaf Mon Sep 17 00:00:00 2001 From: sk11ingyuhwang Date: Mon, 14 Feb 2022 21:22:32 +0900 Subject: [PATCH 22/66] =?UTF-8?q?feat(Application):=20Application=EC=97=90?= =?UTF-8?q?=EC=84=9C=20Controller=20=ED=98=B8=EC=B6=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/rentcar/Application.java | 4 +++- .../java/rentcar/controller/Controller.java | 22 +++++++++++++++++++ 2 files changed, 25 insertions(+), 1 deletion(-) create mode 100644 src/main/java/rentcar/controller/Controller.java diff --git a/src/main/java/rentcar/Application.java b/src/main/java/rentcar/Application.java index 7fb6c748..f9e63123 100644 --- a/src/main/java/rentcar/Application.java +++ b/src/main/java/rentcar/Application.java @@ -1,8 +1,10 @@ package rentcar; +import rentcar.controller.Controller; + public class Application { public static void main(String[] args) { - + Controller.run(); } } diff --git a/src/main/java/rentcar/controller/Controller.java b/src/main/java/rentcar/controller/Controller.java new file mode 100644 index 00000000..54b6ad2c --- /dev/null +++ b/src/main/java/rentcar/controller/Controller.java @@ -0,0 +1,22 @@ +package rentcar.controller; + +import java.util.List; +import java.util.stream.IntStream; +import rentcar.domain.RentCar; +import rentcar.domain.RentCompany; +import rentcar.view.InputView; +import rentcar.view.OutputView; + +public class Controller { + + public static void run() { + List rentCar = InputView.inputRentCar(); + List distance = InputView.inputDistance(); + + RentCompany company = RentCompany.create(); + IntStream.range(0, rentCar.size()) + .forEach(idx -> company.addCar(RentCar.of(rentCar.get(idx), distance.get(idx)))); + + OutputView.printReport(company.generateReport()); + } +} From aeaab59ba753c3838fbc2fca0491c289748f7bc6 Mon Sep 17 00:00:00 2001 From: sk11ingyuhwang Date: Mon, 14 Feb 2022 21:31:04 +0900 Subject: [PATCH 23/66] =?UTF-8?q?docs:=20=EC=97=B0=EB=A3=8C=20=EC=A3=BC?= =?UTF-8?q?=EC=9E=85=20=EA=B8=B0=EB=8A=A5=20=EA=B5=AC=ED=98=84=20=EC=99=84?= =?UTF-8?q?=EB=A3=8C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index 8c2d8c47..310a8e0e 100644 --- a/README.md +++ b/README.md @@ -2,16 +2,16 @@ ## 기능요구사항 -- [ ] 렌터카는 Sonata 2대, Avante 1대, K5 2대로 총 5대의 차량을 보유하고 있다. +- [x] 렌터카는 Sonata 2대, Avante 1대, K5 2대로 총 5대의 차량을 보유하고 있다. - [x] 차량 별 연비 정보를 저장하고 있다. - Sonata : 10km/리터 - Avante : 15km/리터 - K5 : 13km/리터) - 차량 별 보유 대수를 저장하고 있다. -- [ ] 고객은 여행할 목적지의 대략적인 이동거리를 입력 받는다. +- [x] 고객은 여행할 목적지의 대략적인 이동거리를 입력 받는다. - [x] 이 이동거리를 활용해 차량 별로 필요한 연료를 주입한다. - [x] 차량 별로 주입해야 할 연료량을 확인할 수 있는 보고서를 생성한다. -- [ ] 보고서를 출력한다. +- [x] 보고서를 출력한다. # java-blackjack From bbfecb58aef1891fd1726935acbbc736e4026d26 Mon Sep 17 00:00:00 2001 From: sk11ingyuhwang Date: Mon, 14 Feb 2022 21:46:37 +0900 Subject: [PATCH 24/66] =?UTF-8?q?docs:=20=EB=B8=94=EB=9E=99=EC=9E=AD=20?= =?UTF-8?q?=EA=B8=B0=EB=8A=A5=20=EB=AA=85=EC=84=B8=EC=84=9C=20=EC=9E=91?= =?UTF-8?q?=EC=84=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/README.md b/README.md index 310a8e0e..9ec8e9b7 100644 --- a/README.md +++ b/README.md @@ -15,3 +15,10 @@ # java-blackjack +- [ ] 게임에 참여할 사람의 이름을 입력하세요. +- [ ] 게임이 시작하면 참여한 사람과 딜러는 카드 2개씩을 받는다. +- [ ] 카드 숫자를 기본으로 하며, 예외로 Ace는 1 또는 11로 계산할 수 있으며, King, Queen, Jack은 각각 10으로 계산한다. +- [ ] 게임에 참여한 사람 순서대로 카드를 더 받을지 물어보고 카드를 제공한다. 21점을 넘지 않을 경우 원한다면 얼마든지 카드를 계속 뽑을 수 있다. 단, 여기서 카드의 합은 21점을 넘어가지 않는다. +- [ ] 게임에 딜러도 기존에 받았던 카드들의 합이 16점 이하이면 한장의 카드를 더 받아야 한다. 17점 이상이면 추가로 받을 수 없다. +- [ ] 블랙잭 게임은 딜러와 플레이어 중 카드의 합이 21점 또는 21점에 가장 가까운 숫자를 가지는 쪽이 이기는 게임이다. +- [ ] 블랙잭 게임을 완료한 후 각 플레이어별로 승패를 출력한다. \ No newline at end of file From 9146c029516dcc59afce43672b5ee86b16411cb5 Mon Sep 17 00:00:00 2001 From: HyeonjuLee Date: Tue, 15 Feb 2022 17:18:39 +0900 Subject: [PATCH 25/66] =?UTF-8?q?feat(participant):=20=EB=B6=80=EB=AA=A8?= =?UTF-8?q?=20=ED=81=B4=EB=9E=98=EC=8A=A4(Person)=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/Person.java | 14 ++++++++++++++ 1 file changed, 14 insertions(+) create mode 100644 src/main/java/blackjack/domain/Person.java diff --git a/src/main/java/blackjack/domain/Person.java b/src/main/java/blackjack/domain/Person.java new file mode 100644 index 00000000..1ad5cbd9 --- /dev/null +++ b/src/main/java/blackjack/domain/Person.java @@ -0,0 +1,14 @@ +package blackjack.domain; + +public abstract class Person { + + private final String name; + + public Person(String name) { + this.name = name; + } + + public String getName() { + return name; + } +} From 875efb0642e23d363020630525559c75354f1bc0 Mon Sep 17 00:00:00 2001 From: HyeonjuLee Date: Tue, 15 Feb 2022 17:18:54 +0900 Subject: [PATCH 26/66] =?UTF-8?q?feat(participant):=20Participant=20?= =?UTF-8?q?=ED=81=B4=EB=9E=98=EC=8A=A4=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/Participant.java | 10 ++++++++++ 1 file changed, 10 insertions(+) create mode 100644 src/main/java/blackjack/domain/Participant.java diff --git a/src/main/java/blackjack/domain/Participant.java b/src/main/java/blackjack/domain/Participant.java new file mode 100644 index 00000000..4796a8a8 --- /dev/null +++ b/src/main/java/blackjack/domain/Participant.java @@ -0,0 +1,10 @@ +package blackjack.domain; + +public class Participant extends Person { + + public Participant(final String name) { + super(name); + } + + +} From 165f03cf7e4e3ad90bc7e825785e3226bf21755d Mon Sep 17 00:00:00 2001 From: HyeonjuLee Date: Tue, 15 Feb 2022 17:19:08 +0900 Subject: [PATCH 27/66] =?UTF-8?q?test(participant):=20Participant=20?= =?UTF-8?q?=ED=81=B4=EB=9E=98=EC=8A=A4=20=EC=83=9D=EC=84=B1=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 --- .../blackjack/domain/ParticipantTest.java | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) create mode 100644 src/test/java/blackjack/domain/ParticipantTest.java diff --git a/src/test/java/blackjack/domain/ParticipantTest.java b/src/test/java/blackjack/domain/ParticipantTest.java new file mode 100644 index 00000000..c68ce115 --- /dev/null +++ b/src/test/java/blackjack/domain/ParticipantTest.java @@ -0,0 +1,19 @@ +package blackjack.domain; + +import static org.assertj.core.api.Assertions.assertThat; + +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.params.ParameterizedTest; +import org.junit.jupiter.params.provider.ValueSource; + +class ParticipantTest { + + @DisplayName("참가자_생성_테스트") + @ParameterizedTest + @ValueSource(strings = {"pobi", "json"}) + void createParticipantTest(String name) { + Participant participant = new Participant(name); + assertThat(participant.getName()).isEqualTo(name); + } + +} \ No newline at end of file From f1b626d26464346ffb854b320426e3e6fc5a707c Mon Sep 17 00:00:00 2001 From: HyeonjuLee Date: Tue, 15 Feb 2022 18:28:58 +0900 Subject: [PATCH 28/66] =?UTF-8?q?feat(card):=20cardNumber=20enum=20?= =?UTF-8?q?=ED=81=B4=EB=9E=98=EC=8A=A4=20=EC=83=9D=EC=84=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/blackjack/domain/CardNumber.java | 23 +++++++++++++++++++ 1 file changed, 23 insertions(+) create mode 100644 src/main/java/blackjack/domain/CardNumber.java diff --git a/src/main/java/blackjack/domain/CardNumber.java b/src/main/java/blackjack/domain/CardNumber.java new file mode 100644 index 00000000..c3082de6 --- /dev/null +++ b/src/main/java/blackjack/domain/CardNumber.java @@ -0,0 +1,23 @@ +package blackjack.domain; + +public enum CardNumber { + ACE(1), + TWO(2), + THREE(3), + FOUR(4), + FIVE(5), + SIX(6), + SEVEN(7), + EIGHT(8), + NINE(9), + JACK(10), + QUEEN(10), + KING(10); + + private final int score; + + CardNumber(int score) { + this.score = score; + } + +} From fd92fd7baf3aff2d527d4959fce88b08b6be89d2 Mon Sep 17 00:00:00 2001 From: HyeonjuLee Date: Tue, 15 Feb 2022 18:29:11 +0900 Subject: [PATCH 29/66] =?UTF-8?q?feat(card):=20cardPattern=20enum=20?= =?UTF-8?q?=ED=81=B4=EB=9E=98=EC=8A=A4=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/CardPattern.java | 8 ++++++++ 1 file changed, 8 insertions(+) create mode 100644 src/main/java/blackjack/domain/CardPattern.java diff --git a/src/main/java/blackjack/domain/CardPattern.java b/src/main/java/blackjack/domain/CardPattern.java new file mode 100644 index 00000000..b1a20cd9 --- /dev/null +++ b/src/main/java/blackjack/domain/CardPattern.java @@ -0,0 +1,8 @@ +package blackjack.domain; + +public enum CardPattern { + DIAMOND, + CLOVER, + HEART, + SPADE; +} From 25e555a3ed7314014048ede6479e4aa16b4a4527 Mon Sep 17 00:00:00 2001 From: HyeonjuLee Date: Tue, 15 Feb 2022 18:29:53 +0900 Subject: [PATCH 30/66] =?UTF-8?q?feat(card):=20Card=20=ED=81=B4=EB=9E=98?= =?UTF-8?q?=EC=8A=A4=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 | 12 ++++++++++++ 1 file changed, 12 insertions(+) create mode 100644 src/main/java/blackjack/domain/Card.java diff --git a/src/main/java/blackjack/domain/Card.java b/src/main/java/blackjack/domain/Card.java new file mode 100644 index 00000000..cef00065 --- /dev/null +++ b/src/main/java/blackjack/domain/Card.java @@ -0,0 +1,12 @@ +package blackjack.domain; + +public class Card { + + private final CardNumber cardNumber; + private final CardPattern cardPattern; + + public Card(CardNumber cardNumber, CardPattern cardPattern) { + this.cardNumber = cardNumber; + this.cardPattern = cardPattern; + } +} From d45bbcf0fd73a3c75f32b4c16975ea0c47a3caa6 Mon Sep 17 00:00:00 2001 From: HyeonjuLee Date: Tue, 15 Feb 2022 18:30:25 +0900 Subject: [PATCH 31/66] =?UTF-8?q?feat(card):=20CardDeck=20=ED=81=B4?= =?UTF-8?q?=EB=9E=98=EC=8A=A4=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/CardDeck.java | 27 ++++++++++++++++++++ 1 file changed, 27 insertions(+) create mode 100644 src/main/java/blackjack/domain/CardDeck.java diff --git a/src/main/java/blackjack/domain/CardDeck.java b/src/main/java/blackjack/domain/CardDeck.java new file mode 100644 index 00000000..039e8f0f --- /dev/null +++ b/src/main/java/blackjack/domain/CardDeck.java @@ -0,0 +1,27 @@ +package blackjack.domain; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Collections; +import java.util.List; + +public class CardDeck { + + private static final List cards = new ArrayList<>(); + + static { + Arrays.stream(CardNumber.values()).forEach( + cardNumber -> Arrays.stream(CardPattern.values()).forEach( + cardPattern -> cards.add(new Card(cardNumber, cardPattern)) + ) + ); + Collections.shuffle(cards); + } + + public CardDeck() { + } + + public static List getCards() { + return Collections.unmodifiableList(cards); + } +} From da370f9557e0a573223e6b46e9b1da7d8358f35f Mon Sep 17 00:00:00 2001 From: HyeonjuLee Date: Tue, 15 Feb 2022 18:30:57 +0900 Subject: [PATCH 32/66] =?UTF-8?q?test(card):=20CardDeck=20=ED=81=B4?= =?UTF-8?q?=EB=9E=98=EC=8A=A4=20=EC=83=9D=EC=84=B1=20=ED=85=8C=EC=8A=A4?= =?UTF-8?q?=ED=8A=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/test/java/blackjack/domain/CardDeckTest.java | 15 +++++++++++++++ 1 file changed, 15 insertions(+) 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..c47ee3fa --- /dev/null +++ b/src/test/java/blackjack/domain/CardDeckTest.java @@ -0,0 +1,15 @@ +package blackjack.domain; + +import static org.assertj.core.api.Assertions.assertThat; + +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Test; + +class CardDeckTest { + + @Test + @DisplayName("CardDeck 생성 테스트") + void createCardDeckTest() { + assertThat(CardDeck.getCards().size()).isEqualTo(48); + } +} \ No newline at end of file From 75ab3a5aa49c8d9ee0cf230a312a835dc2def2fa Mon Sep 17 00:00:00 2001 From: HyeonjuLee Date: Tue, 15 Feb 2022 18:31:25 +0900 Subject: [PATCH 33/66] =?UTF-8?q?test(input):=20InputView=20=ED=81=B4?= =?UTF-8?q?=EB=9E=98=EC=8A=A4=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/view/InputView.java | 32 +++++++++++++++++++++ 1 file changed, 32 insertions(+) create mode 100644 src/main/java/blackjack/view/InputView.java diff --git a/src/main/java/blackjack/view/InputView.java b/src/main/java/blackjack/view/InputView.java new file mode 100644 index 00000000..9b918b4c --- /dev/null +++ b/src/main/java/blackjack/view/InputView.java @@ -0,0 +1,32 @@ +package blackjack.view; + +import java.util.Arrays; +import java.util.List; +import java.util.Objects; +import java.util.Scanner; +import java.util.stream.Collectors; + +public class InputView { + + private static final String PARTICIPANTS_MESSAGE = "게임에 참여할 사람의 이름을 입력하세요.(쉼표 기준으로 분리)"; + private static final String YES_OR_NO_MESSAGE = "는 한장의 카드를 더 받겠습니까?(예는 y, 아니오는 n)"; + + private static final Scanner SCANNER = new Scanner(System.in); + + public List inputParticipants() { + String participants = getInputValueWithMessage(PARTICIPANTS_MESSAGE); + return Arrays.stream(participants.split(",")) + .map(String::trim) + .collect(Collectors.toList()); + } + + public Boolean inputYesOrNo(String name) { + String yesOrNo = getInputValueWithMessage(name + YES_OR_NO_MESSAGE); + return Objects.equals(yesOrNo, "y"); + } + + public String getInputValueWithMessage(String message) { + System.out.println(message); + return SCANNER.nextLine().trim(); + } +} From 17c39042cedb7b941e8a030669fd117261b62594 Mon Sep 17 00:00:00 2001 From: HyeonjuLee Date: Tue, 15 Feb 2022 18:32:15 +0900 Subject: [PATCH 34/66] =?UTF-8?q?feat(player):=20Participant=20->=20Player?= =?UTF-8?q?=20=EB=A1=9C=20=ED=81=B4=EB=9E=98=EC=8A=A4=20=EC=9D=B4=EB=A6=84?= =?UTF-8?q?=20=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/blackjack/domain/Participant.java | 10 ---------- src/main/java/blackjack/domain/Player.java | 8 ++++++++ 2 files changed, 8 insertions(+), 10 deletions(-) delete mode 100644 src/main/java/blackjack/domain/Participant.java create mode 100644 src/main/java/blackjack/domain/Player.java diff --git a/src/main/java/blackjack/domain/Participant.java b/src/main/java/blackjack/domain/Participant.java deleted file mode 100644 index 4796a8a8..00000000 --- a/src/main/java/blackjack/domain/Participant.java +++ /dev/null @@ -1,10 +0,0 @@ -package blackjack.domain; - -public class Participant extends Person { - - public Participant(final String name) { - super(name); - } - - -} diff --git a/src/main/java/blackjack/domain/Player.java b/src/main/java/blackjack/domain/Player.java new file mode 100644 index 00000000..4596b7ce --- /dev/null +++ b/src/main/java/blackjack/domain/Player.java @@ -0,0 +1,8 @@ +package blackjack.domain; + +public class Player extends Person { + + public Player(final String name) { + super(name); + } +} From bea5c541fd8cea8dae72f119fbbb92c04b9fc121 Mon Sep 17 00:00:00 2001 From: HyeonjuLee Date: Tue, 15 Feb 2022 18:32:38 +0900 Subject: [PATCH 35/66] =?UTF-8?q?feat(dealer):=20Dealer=20=ED=81=B4?= =?UTF-8?q?=EB=9E=98=EC=8A=A4=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/Dealer.java | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 src/main/java/blackjack/domain/Dealer.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..f5917c81 --- /dev/null +++ b/src/main/java/blackjack/domain/Dealer.java @@ -0,0 +1,5 @@ +package blackjack.domain; + +public class Dealer { + +} From c571bc5af6eb30c6fa9566170662bc6e188101e6 Mon Sep 17 00:00:00 2001 From: HyeonjuLee Date: Tue, 15 Feb 2022 18:33:07 +0900 Subject: [PATCH 36/66] =?UTF-8?q?style(player):=20Participant=20->=20Playe?= =?UTF-8?q?r=20=EB=A1=9C=20=ED=81=B4=EB=9E=98=EC=8A=A4=20=EC=9D=B4?= =?UTF-8?q?=EB=A6=84=20=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../domain/{ParticipantTest.java => PlayerTest.java} | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) rename src/test/java/blackjack/domain/{ParticipantTest.java => PlayerTest.java} (65%) diff --git a/src/test/java/blackjack/domain/ParticipantTest.java b/src/test/java/blackjack/domain/PlayerTest.java similarity index 65% rename from src/test/java/blackjack/domain/ParticipantTest.java rename to src/test/java/blackjack/domain/PlayerTest.java index c68ce115..65624b56 100644 --- a/src/test/java/blackjack/domain/ParticipantTest.java +++ b/src/test/java/blackjack/domain/PlayerTest.java @@ -6,14 +6,13 @@ import org.junit.jupiter.params.ParameterizedTest; import org.junit.jupiter.params.provider.ValueSource; -class ParticipantTest { +class PlayerTest { @DisplayName("참가자_생성_테스트") @ParameterizedTest @ValueSource(strings = {"pobi", "json"}) - void createParticipantTest(String name) { - Participant participant = new Participant(name); - assertThat(participant.getName()).isEqualTo(name); + void createPlayerTest(String name) { + Player player = new Player(name); + assertThat(player.getName()).isEqualTo(name); } - } \ No newline at end of file From e79cfef59f45e44159849ca915282aeedfe92bb6 Mon Sep 17 00:00:00 2001 From: HyeonjuLee Date: Wed, 16 Feb 2022 01:46:46 +0900 Subject: [PATCH 37/66] =?UTF-8?q?feat(card)=20:=20Card=20=EC=83=9D?= =?UTF-8?q?=EC=84=B1,=20=EC=B6=94=EA=B0=80=EB=A5=BC=20=EC=9C=84=ED=95=9C?= =?UTF-8?q?=20=EC=9D=B8=ED=84=B0=ED=8E=98=EC=9D=B4=EC=8A=A4=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 --- .../java/blackjack/domain/CardAddible.java | 12 +++++++++ .../blackjack/domain/CardAddibleSupport.java | 27 +++++++++++++++++++ src/main/java/blackjack/domain/Cards.java | 10 +++++++ src/main/java/blackjack/domain/Player.java | 9 ++++++- 4 files changed, 57 insertions(+), 1 deletion(-) create mode 100644 src/main/java/blackjack/domain/CardAddible.java create mode 100644 src/main/java/blackjack/domain/CardAddibleSupport.java create mode 100644 src/main/java/blackjack/domain/Cards.java diff --git a/src/main/java/blackjack/domain/CardAddible.java b/src/main/java/blackjack/domain/CardAddible.java new file mode 100644 index 00000000..ff921ffd --- /dev/null +++ b/src/main/java/blackjack/domain/CardAddible.java @@ -0,0 +1,12 @@ +package blackjack.domain; + +import java.util.List; + +public interface CardAddible { + + List cards(); + + void addCard(Card card); + + int getTotalScore(); +} \ No newline at end of file diff --git a/src/main/java/blackjack/domain/CardAddibleSupport.java b/src/main/java/blackjack/domain/CardAddibleSupport.java new file mode 100644 index 00000000..41f57b33 --- /dev/null +++ b/src/main/java/blackjack/domain/CardAddibleSupport.java @@ -0,0 +1,27 @@ +package blackjack.domain; + +import java.util.List; + +public abstract class CardAddibleSupport implements CardAddible { + List cards; + + public CardAddibleSupport(List cards) { + this.cards = cards; + } + + @Override + public List cards() { + return cards; + } + + @Override + public void addCard(Card card) { + cards.add(card); + } + + @Override + public int getTotalScore() { + + return cards.stream().mapToInt(card -> card.getCardNumber().getScore()).sum(); + } +} diff --git a/src/main/java/blackjack/domain/Cards.java b/src/main/java/blackjack/domain/Cards.java new file mode 100644 index 00000000..344caa6e --- /dev/null +++ b/src/main/java/blackjack/domain/Cards.java @@ -0,0 +1,10 @@ +package blackjack.domain; + +import java.util.List; + +public class Cards extends CardAddibleSupport { + + public Cards(List cards) { + super(cards); + } +} \ No newline at end of file diff --git a/src/main/java/blackjack/domain/Player.java b/src/main/java/blackjack/domain/Player.java index 4596b7ce..ee853621 100644 --- a/src/main/java/blackjack/domain/Player.java +++ b/src/main/java/blackjack/domain/Player.java @@ -2,7 +2,14 @@ public class Player extends Person { - public Player(final String name) { + private final CardAddible cards; + + public Player(final String name, CardAddible cards) { super(name); + this.cards = cards; + } + + public CardAddible getCards() { + return cards; } } From 00f6f1d33d792e8257511270cf730bba2c69d93d Mon Sep 17 00:00:00 2001 From: HyeonjuLee Date: Wed, 16 Feb 2022 01:47:39 +0900 Subject: [PATCH 38/66] =?UTF-8?q?feat(view)=20:=20InputView,=20OuputView?= =?UTF-8?q?=20=ED=81=B4=EB=9E=98=EC=8A=A4=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 --- src/main/java/blackjack/view/InputView.java | 11 ++++----- src/main/java/blackjack/view/OutputView.java | 25 ++++++++++++++++++++ 2 files changed, 30 insertions(+), 6 deletions(-) create mode 100644 src/main/java/blackjack/view/OutputView.java diff --git a/src/main/java/blackjack/view/InputView.java b/src/main/java/blackjack/view/InputView.java index 9b918b4c..91c997f4 100644 --- a/src/main/java/blackjack/view/InputView.java +++ b/src/main/java/blackjack/view/InputView.java @@ -13,16 +13,15 @@ public class InputView { private static final Scanner SCANNER = new Scanner(System.in); - public List inputParticipants() { - String participants = getInputValueWithMessage(PARTICIPANTS_MESSAGE); - return Arrays.stream(participants.split(",")) + public List inputPlayers() { + String players = getInputValueWithMessage(PARTICIPANTS_MESSAGE); + return Arrays.stream(players.split(",")) .map(String::trim) .collect(Collectors.toList()); } - public Boolean inputYesOrNo(String name) { - String yesOrNo = getInputValueWithMessage(name + YES_OR_NO_MESSAGE); - return Objects.equals(yesOrNo, "y"); + public String inputYesOrNo(String name) { + return getInputValueWithMessage(name + YES_OR_NO_MESSAGE); } public String getInputValueWithMessage(String message) { diff --git a/src/main/java/blackjack/view/OutputView.java b/src/main/java/blackjack/view/OutputView.java new file mode 100644 index 00000000..39aecb6c --- /dev/null +++ b/src/main/java/blackjack/view/OutputView.java @@ -0,0 +1,25 @@ +package blackjack.view; + +import blackjack.domain.Card; +import java.util.List; +import java.util.stream.Collectors; + +public class OutputView { + String START_MESSAGE = "딜러와 %s 에게 2장을 나누었습니다.\n"; + String CURRENT_STATE_MESSAGE = "%s 카드 : %s\n"; + String RESULT_MESSAGE = "%s 카드 : %s - 결과: %s\n"; + + public void printStartMessage(List players) { + System.out.printf(START_MESSAGE, String.join(", ", players)); + } + + public void printCurrentCardsState(String name, List cards) { + System.out.printf(CURRENT_STATE_MESSAGE, name, cards.stream().map(Card::toString) + .collect(Collectors.joining(", "))); + } + + public void printResult(String name, List cards, int score) { + System.out.printf(RESULT_MESSAGE, name, cards.stream().map(Card::toString) + .collect(Collectors.joining(", ")), score); + } +} From dfa02add3d37310d5fab6c7847a79bc0b9b7d44f Mon Sep 17 00:00:00 2001 From: HyeonjuLee Date: Wed, 16 Feb 2022 01:48:37 +0900 Subject: [PATCH 39/66] =?UTF-8?q?feat(card)=20:=20=EA=B2=8C=EC=9E=84=20?= =?UTF-8?q?=EC=A7=84=ED=96=89=20=EC=9C=84=ED=95=9C=20=EC=B9=B4=EB=93=9C=20?= =?UTF-8?q?=EA=B0=9D=EC=B2=B4=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 | 9 +++++ src/main/java/blackjack/domain/CardDeck.java | 12 ++++++- .../java/blackjack/domain/CardNumber.java | 36 ++++++++++++------- .../java/blackjack/domain/CardPattern.java | 18 +++++++--- 4 files changed, 57 insertions(+), 18 deletions(-) diff --git a/src/main/java/blackjack/domain/Card.java b/src/main/java/blackjack/domain/Card.java index cef00065..3d1ea684 100644 --- a/src/main/java/blackjack/domain/Card.java +++ b/src/main/java/blackjack/domain/Card.java @@ -9,4 +9,13 @@ public Card(CardNumber cardNumber, CardPattern cardPattern) { this.cardNumber = cardNumber; this.cardPattern = cardPattern; } + + @Override + public String toString() { + return cardNumber.getName() + cardPattern.getName(); + } + + public CardNumber getCardNumber() { + return cardNumber; + } } diff --git a/src/main/java/blackjack/domain/CardDeck.java b/src/main/java/blackjack/domain/CardDeck.java index 039e8f0f..e722e0f5 100644 --- a/src/main/java/blackjack/domain/CardDeck.java +++ b/src/main/java/blackjack/domain/CardDeck.java @@ -7,7 +7,7 @@ public class CardDeck { - private static final List cards = new ArrayList<>(); + private static List cards = new ArrayList<>(); static { Arrays.stream(CardNumber.values()).forEach( @@ -21,6 +21,16 @@ public class CardDeck { public CardDeck() { } + public static List pop(int count) { + List newCards = new ArrayList<>(cards.subList(0, count)); + cards = cards.subList(count, cards.size()-count); + return newCards; + } + + public static Card pop() { + return cards.remove(0); + } + public static List getCards() { return Collections.unmodifiableList(cards); } diff --git a/src/main/java/blackjack/domain/CardNumber.java b/src/main/java/blackjack/domain/CardNumber.java index c3082de6..70be7cee 100644 --- a/src/main/java/blackjack/domain/CardNumber.java +++ b/src/main/java/blackjack/domain/CardNumber.java @@ -1,23 +1,33 @@ package blackjack.domain; public enum CardNumber { - ACE(1), - TWO(2), - THREE(3), - FOUR(4), - FIVE(5), - SIX(6), - SEVEN(7), - EIGHT(8), - NINE(9), - JACK(10), - QUEEN(10), - KING(10); + ACE("A", 11), + TWO("2", 2), + THREE("3", 3), + FOUR("4", 4), + FIVE("5", 5), + SIX("6", 6), + SEVEN("7", 7), + EIGHT("8", 8), + NINE("9", 9), + JACK("J", 10), + QUEEN("Q", 10), + KING("K", 10); + private final String name; private final int score; - CardNumber(int score) { + CardNumber(String name, int score) { + this.name = name; this.score = score; } + public String getName() { + return name; + } + + public int getScore() { + return score; + } + } diff --git a/src/main/java/blackjack/domain/CardPattern.java b/src/main/java/blackjack/domain/CardPattern.java index b1a20cd9..c1a2d695 100644 --- a/src/main/java/blackjack/domain/CardPattern.java +++ b/src/main/java/blackjack/domain/CardPattern.java @@ -1,8 +1,18 @@ package blackjack.domain; public enum CardPattern { - DIAMOND, - CLOVER, - HEART, - SPADE; + DIAMOND("다이아몬드"), + CLOVER("클로버"), + HEART("하트"), + SPADE("스페이드"); + + private final String name; + + CardPattern(String name) { + this.name = name; + } + + public String getName() { + return name; + } } From 0646780e0207019fdf18a8bed2b5aed09cf6cb31 Mon Sep 17 00:00:00 2001 From: HyeonjuLee Date: Wed, 16 Feb 2022 01:48:56 +0900 Subject: [PATCH 40/66] =?UTF-8?q?feat(dealer)=20:=20Dealer=20=ED=81=B4?= =?UTF-8?q?=EB=9E=98=EC=8A=A4=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/Dealer.java | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/src/main/java/blackjack/domain/Dealer.java b/src/main/java/blackjack/domain/Dealer.java index f5917c81..0457059f 100644 --- a/src/main/java/blackjack/domain/Dealer.java +++ b/src/main/java/blackjack/domain/Dealer.java @@ -1,5 +1,13 @@ package blackjack.domain; public class Dealer { + private final CardAddible cards; + public Dealer(CardAddible cards) { + this.cards = cards; + } + + public CardAddible getCards() { + return cards; + } } From 13cc902b783685f3bedab5797d48cb0726e3b9a2 Mon Sep 17 00:00:00 2001 From: HyeonjuLee Date: Wed, 16 Feb 2022 01:52:53 +0900 Subject: [PATCH 41/66] =?UTF-8?q?feat(main)=20:=20blackjack=20=EA=B8=B0?= =?UTF-8?q?=EB=8A=A5=20=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/blackjack/Application.java | 10 ++ .../java/blackjack/controller/Controller.java | 142 ++++++++++++++++++ 2 files changed, 152 insertions(+) create mode 100644 src/main/java/blackjack/Application.java create mode 100644 src/main/java/blackjack/controller/Controller.java diff --git a/src/main/java/blackjack/Application.java b/src/main/java/blackjack/Application.java new file mode 100644 index 00000000..923a5100 --- /dev/null +++ b/src/main/java/blackjack/Application.java @@ -0,0 +1,10 @@ +package blackjack; + +import blackjack.controller.Controller; + +public class Application { + + public static void main(String[] args) { + Controller.run(); + } +} diff --git a/src/main/java/blackjack/controller/Controller.java b/src/main/java/blackjack/controller/Controller.java new file mode 100644 index 00000000..3b8859b0 --- /dev/null +++ b/src/main/java/blackjack/controller/Controller.java @@ -0,0 +1,142 @@ +package blackjack.controller; + +import blackjack.domain.Card; +import blackjack.domain.CardDeck; +import blackjack.domain.Cards; +import blackjack.domain.Dealer; +import blackjack.domain.Player; +import blackjack.view.InputView; +import blackjack.view.OutputView; +import java.util.ArrayList; +import java.util.List; +import java.util.stream.Collectors; + +public class Controller { + + private static final InputView inputView = new InputView(); + private static final OutputView outputView = new OutputView(); + + public static void run() { + List playerNames = inputView.inputPlayers(); + + List players = playerNames.stream() + .map(name -> new Player(name, new Cards(CardDeck.pop(2)))) + .collect(Collectors.toList()); + + Dealer dealer = new Dealer(new Cards(CardDeck.pop(2))); + + outputView.printStartMessage(playerNames); + System.out.println("딜러 : " + dealer.getCards().cards().get(0)); // 하나만 뽑혀야 함 + + players.forEach(player -> outputView.printCurrentCardsState(player.getName(), + player.getCards().cards())); + + for (Player player : players) { + String yesOrNo = ""; + do { + yesOrNo = inputView.inputYesOrNo(player.getName()); + if (yesOrNo.equals("y")) { + player.getCards().addCard(CardDeck.pop()); + outputView.printCurrentCardsState(player.getName(), player.getCards().cards()); + int totalScore = player.getCards().cards().stream() + .filter(card -> !card.getCardNumber().name().equals("A")) + .mapToInt(card -> card.getCardNumber().getScore()).sum(); + + List ACEList = player.getCards().cards().stream() + .filter(card -> card.getCardNumber().name().equals("A")) + .collect(Collectors.toList()); + + for (Card card : ACEList) { + if (totalScore + 11 > 21) { + totalScore += 1; + } else { + totalScore += card.getCardNumber().getScore(); + } + } + } + } while (!yesOrNo.equals("n")); + } + + int dealerTotalScore = dealer.getCards().cards().stream() + .filter(card -> !card.getCardNumber().name().equals("A")) + .mapToInt(card -> card.getCardNumber().getScore()).sum(); + + List ACEList = dealer.getCards().cards().stream() + .filter(card -> card.getCardNumber().name().equals("A")) + .collect(Collectors.toList()); + + for (Card card : ACEList) { + if (dealerTotalScore + 11 > 21) { + dealerTotalScore += 1; + } else { + dealerTotalScore += card.getCardNumber().getScore(); + } + } + + if (dealerTotalScore <= 16) { + dealer.getCards().addCard(CardDeck.pop()); + System.out.println("딜러는 16이하라 한장의 카드를 더 받았습니다."); + } + + dealerTotalScore = dealer.getCards().cards().stream() + .filter(card -> !card.getCardNumber().name().equals("A")) + .mapToInt(card -> card.getCardNumber().getScore()).sum(); + + ACEList = dealer.getCards().cards().stream() + .filter(card -> card.getCardNumber().name().equals("A")) + .collect(Collectors.toList()); + + for (Card card : ACEList) { + if (dealerTotalScore + 11 > 21) { + dealerTotalScore += 1; + } else { + dealerTotalScore += card.getCardNumber().getScore(); + } + } + outputView.printResult("딜러", dealer.getCards().cards(), dealerTotalScore); + + List playerResults = new ArrayList<>(); + for (Player player : players) { + int playerTotalScore = player.getCards().cards().stream() + .filter(card -> !card.getCardNumber().name().equals("A")) + .mapToInt(card -> card.getCardNumber().getScore()).sum(); + + List PlayerACE = player.getCards().cards().stream() + .filter(card -> card.getCardNumber().name().equals("A")) + .collect(Collectors.toList()); + + for (Card card : PlayerACE) { + if (playerTotalScore + 11 > 21) { + playerTotalScore += 1; + } else { + playerTotalScore += card.getCardNumber().getScore(); + } + } + playerResults.add(playerTotalScore); + outputView.printResult(player.getName(), player.getCards().cards(), playerTotalScore); + } + + int finalDealerTotalScore = dealerTotalScore; + Long dealerWin = playerResults.stream().filter( + playerResult -> (finalDealerTotalScore > playerResult) + ).count(); + Long dealerLose = playerResults.stream().filter( + playerResult -> (finalDealerTotalScore < playerResult) + ).count(); + System.out.printf("딜러 : %d승 %d패%n", dealerWin, dealerLose); + + for (int i = 0; i < players.size(); i++) { + String name = players.get(i).getName(); + int totalScore = playerResults.get(i); + + Long win = playerResults.stream().filter( + playerResult -> (totalScore > playerResult) + ).count(); + + Long lose = playerResults.stream().filter( + playerResult -> (totalScore < playerResult) + ).count(); + System.out.printf("%s : %d승 %d패%n", name, win, lose); + } + } +} From 5403ec2f3dc90d000da1fa5b7d1f91bd2a8b0c86 Mon Sep 17 00:00:00 2001 From: HyeonjuLee Date: Wed, 16 Feb 2022 01:53:13 +0900 Subject: [PATCH 42/66] remove(test) : Remove Test --- src/test/java/blackjack/domain/PlayerTest.java | 18 ------------------ 1 file changed, 18 deletions(-) delete mode 100644 src/test/java/blackjack/domain/PlayerTest.java diff --git a/src/test/java/blackjack/domain/PlayerTest.java b/src/test/java/blackjack/domain/PlayerTest.java deleted file mode 100644 index 65624b56..00000000 --- a/src/test/java/blackjack/domain/PlayerTest.java +++ /dev/null @@ -1,18 +0,0 @@ -package blackjack.domain; - -import static org.assertj.core.api.Assertions.assertThat; - -import org.junit.jupiter.api.DisplayName; -import org.junit.jupiter.params.ParameterizedTest; -import org.junit.jupiter.params.provider.ValueSource; - -class PlayerTest { - - @DisplayName("참가자_생성_테스트") - @ParameterizedTest - @ValueSource(strings = {"pobi", "json"}) - void createPlayerTest(String name) { - Player player = new Player(name); - assertThat(player.getName()).isEqualTo(name); - } -} \ No newline at end of file From 6c4694f8f035e8cc1d12021a5c30007a1812dcd9 Mon Sep 17 00:00:00 2001 From: sk11ingyuhwang Date: Wed, 16 Feb 2022 17:04:54 +0900 Subject: [PATCH 43/66] =?UTF-8?q?refactor(view):=20InputView,=20OutputView?= =?UTF-8?q?=20=EC=A0=95=EC=A0=81=20=ED=8C=A9=ED=86=A0=EB=A6=AC=20=EB=A9=94?= =?UTF-8?q?=EC=86=8C=EB=93=9C=EB=A1=9C=20=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/blackjack/controller/Controller.java | 19 ++++++++----------- src/main/java/blackjack/view/InputView.java | 6 +++--- src/main/java/blackjack/view/OutputView.java | 17 ++++++++++------- 3 files changed, 21 insertions(+), 21 deletions(-) diff --git a/src/main/java/blackjack/controller/Controller.java b/src/main/java/blackjack/controller/Controller.java index 3b8859b0..18794a3f 100644 --- a/src/main/java/blackjack/controller/Controller.java +++ b/src/main/java/blackjack/controller/Controller.java @@ -13,31 +13,28 @@ public class Controller { - private static final InputView inputView = new InputView(); - private static final OutputView outputView = new OutputView(); - public static void run() { - List playerNames = inputView.inputPlayers(); - List players = playerNames.stream() + + List players = InputView.inputPlayers().stream() .map(name -> new Player(name, new Cards(CardDeck.pop(2)))) .collect(Collectors.toList()); Dealer dealer = new Dealer(new Cards(CardDeck.pop(2))); - outputView.printStartMessage(playerNames); + OutputView.printStartMessage(players); System.out.println("딜러 : " + dealer.getCards().cards().get(0)); // 하나만 뽑혀야 함 - players.forEach(player -> outputView.printCurrentCardsState(player.getName(), + players.forEach(player -> OutputView.printCurrentCardsState(player.getName(), player.getCards().cards())); for (Player player : players) { String yesOrNo = ""; do { - yesOrNo = inputView.inputYesOrNo(player.getName()); + yesOrNo = InputView.inputYesOrNo(player.getName()); if (yesOrNo.equals("y")) { player.getCards().addCard(CardDeck.pop()); - outputView.printCurrentCardsState(player.getName(), player.getCards().cards()); + OutputView.printCurrentCardsState(player.getName(), player.getCards().cards()); int totalScore = player.getCards().cards().stream() .filter(card -> !card.getCardNumber().name().equals("A")) .mapToInt(card -> card.getCardNumber().getScore()).sum(); @@ -93,7 +90,7 @@ public static void run() { dealerTotalScore += card.getCardNumber().getScore(); } } - outputView.printResult("딜러", dealer.getCards().cards(), dealerTotalScore); + OutputView.printResult("딜러", dealer.getCards().cards(), dealerTotalScore); List playerResults = new ArrayList<>(); for (Player player : players) { @@ -113,7 +110,7 @@ public static void run() { } } playerResults.add(playerTotalScore); - outputView.printResult(player.getName(), player.getCards().cards(), playerTotalScore); + OutputView.printResult(player.getName(), player.getCards().cards(), playerTotalScore); } int finalDealerTotalScore = dealerTotalScore; diff --git a/src/main/java/blackjack/view/InputView.java b/src/main/java/blackjack/view/InputView.java index 91c997f4..22d3b470 100644 --- a/src/main/java/blackjack/view/InputView.java +++ b/src/main/java/blackjack/view/InputView.java @@ -13,18 +13,18 @@ public class InputView { private static final Scanner SCANNER = new Scanner(System.in); - public List inputPlayers() { + public static List inputPlayers() { String players = getInputValueWithMessage(PARTICIPANTS_MESSAGE); return Arrays.stream(players.split(",")) .map(String::trim) .collect(Collectors.toList()); } - public String inputYesOrNo(String name) { + public static String inputYesOrNo(String name) { return getInputValueWithMessage(name + YES_OR_NO_MESSAGE); } - public String getInputValueWithMessage(String message) { + public static String getInputValueWithMessage(String message) { System.out.println(message); return SCANNER.nextLine().trim(); } diff --git a/src/main/java/blackjack/view/OutputView.java b/src/main/java/blackjack/view/OutputView.java index 39aecb6c..86c513af 100644 --- a/src/main/java/blackjack/view/OutputView.java +++ b/src/main/java/blackjack/view/OutputView.java @@ -1,24 +1,27 @@ package blackjack.view; import blackjack.domain.Card; +import blackjack.domain.Person; +import blackjack.domain.Player; import java.util.List; import java.util.stream.Collectors; public class OutputView { - String START_MESSAGE = "딜러와 %s 에게 2장을 나누었습니다.\n"; - String CURRENT_STATE_MESSAGE = "%s 카드 : %s\n"; - String RESULT_MESSAGE = "%s 카드 : %s - 결과: %s\n"; + private static final String START_MESSAGE = "딜러와 %s 에게 2장을 나누었습니다.\n"; + private static final String CURRENT_STATE_MESSAGE = "%s 카드 : %s\n"; + private static final String RESULT_MESSAGE = "%s 카드 : %s - 결과: %s\n"; - public void printStartMessage(List players) { - System.out.printf(START_MESSAGE, String.join(", ", players)); + public static void printStartMessage(final List players) { + String playerName = players.stream().map(Person::getName).collect(Collectors.joining(", ")); + System.out.printf(START_MESSAGE, playerName); } - public void printCurrentCardsState(String name, List cards) { + public static void printCurrentCardsState(final String name, final List cards) { System.out.printf(CURRENT_STATE_MESSAGE, name, cards.stream().map(Card::toString) .collect(Collectors.joining(", "))); } - public void printResult(String name, List cards, int score) { + public static void printResult(final String name, final List cards, final int score) { System.out.printf(RESULT_MESSAGE, name, cards.stream().map(Card::toString) .collect(Collectors.joining(", ")), score); } From 72bb5f975d82f94d7bbd84079bf44a34e8820bd1 Mon Sep 17 00:00:00 2001 From: sk11ingyuhwang Date: Wed, 16 Feb 2022 17:39:15 +0900 Subject: [PATCH 44/66] =?UTF-8?q?feat(game):=20game=20=ED=81=B4=EB=9E=98?= =?UTF-8?q?=EC=8A=A4=20=EC=83=9D=EC=84=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Player 와 Dealer에게 카드 2장을 배분 프로세스 구현 --- src/main/java/blackjack/domain/Game.java | 38 ++++++++++++++++++++++++ 1 file changed, 38 insertions(+) create mode 100644 src/main/java/blackjack/domain/Game.java diff --git a/src/main/java/blackjack/domain/Game.java b/src/main/java/blackjack/domain/Game.java new file mode 100644 index 00000000..d493cc44 --- /dev/null +++ b/src/main/java/blackjack/domain/Game.java @@ -0,0 +1,38 @@ +package blackjack.domain; + +import java.util.List; +import java.util.stream.Collectors; + +public class Game { + private static final int PASS_CARD_NUMBER = 2; + private final List players; + private final Dealer dealer; + + public Game(Dealer dealer, List players) { + this.players = players; + this.dealer = dealer; + + } + + public Game(List playerNames){ + this(new Dealer(handOutCards()), playerNames.stream() + .map(name -> createPlayer(name)) + .collect(Collectors.toList())); + } + + private static Player createPlayer(String name) { + return new Player(name, handOutCards()); + } + + private static Cards handOutCards(){ + return new Cards(CardDeck.pop(PASS_CARD_NUMBER)); + } + + public List distributeCardsPlayer(){ + return players; + } + + + + +} From db8288295966f8774f17f5082c2a9b65cbc0e157 Mon Sep 17 00:00:00 2001 From: sk11ingyuhwang Date: Wed, 16 Feb 2022 17:55:44 +0900 Subject: [PATCH 45/66] =?UTF-8?q?refactor(view):=20OutputView=20=ED=81=B4?= =?UTF-8?q?=EB=9E=98=EC=8A=A4=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Dealer의 이름은 "딜러"로 고정 - Dealer의 카드를 출력을 OutputView로 묶음 - 매직넘버 & 리터럴 추가 --- src/main/java/blackjack/domain/Dealer.java | 6 +++-- src/main/java/blackjack/domain/Game.java | 21 ++++++++++-------- src/main/java/blackjack/view/OutputView.java | 23 +++++++++++++++----- 3 files changed, 33 insertions(+), 17 deletions(-) diff --git a/src/main/java/blackjack/domain/Dealer.java b/src/main/java/blackjack/domain/Dealer.java index 0457059f..b22055f6 100644 --- a/src/main/java/blackjack/domain/Dealer.java +++ b/src/main/java/blackjack/domain/Dealer.java @@ -1,9 +1,11 @@ package blackjack.domain; -public class Dealer { +public class Dealer extends Person{ + private final CardAddible cards; - public Dealer(CardAddible cards) { + public Dealer(String name, CardAddible cards) { + super(name); this.cards = cards; } diff --git a/src/main/java/blackjack/domain/Game.java b/src/main/java/blackjack/domain/Game.java index d493cc44..38104a7f 100644 --- a/src/main/java/blackjack/domain/Game.java +++ b/src/main/java/blackjack/domain/Game.java @@ -1,22 +1,24 @@ package blackjack.domain; +import java.util.Collections; import java.util.List; import java.util.stream.Collectors; public class Game { + private static final int PASS_CARD_NUMBER = 2; + private static final String DEALER_NAME = "딜러"; private final List players; private final Dealer dealer; public Game(Dealer dealer, List players) { this.players = players; this.dealer = dealer; - } - public Game(List playerNames){ - this(new Dealer(handOutCards()), playerNames.stream() - .map(name -> createPlayer(name)) + public Game(List playerNames) { + this(new Dealer(DEALER_NAME, handOutCards()), playerNames.stream() + .map(Game::createPlayer) .collect(Collectors.toList())); } @@ -24,15 +26,16 @@ private static Player createPlayer(String name) { return new Player(name, handOutCards()); } - private static Cards handOutCards(){ + private static Cards handOutCards() { return new Cards(CardDeck.pop(PASS_CARD_NUMBER)); } - public List distributeCardsPlayer(){ - return players; + public List getPlayers() { + return Collections.unmodifiableList(players); } - - + public Dealer getDealer() { + return dealer; + } } diff --git a/src/main/java/blackjack/view/OutputView.java b/src/main/java/blackjack/view/OutputView.java index 86c513af..69e838bc 100644 --- a/src/main/java/blackjack/view/OutputView.java +++ b/src/main/java/blackjack/view/OutputView.java @@ -1,28 +1,39 @@ package blackjack.view; import blackjack.domain.Card; +import blackjack.domain.Dealer; +import blackjack.domain.Game; import blackjack.domain.Person; -import blackjack.domain.Player; import java.util.List; import java.util.stream.Collectors; public class OutputView { + private static final String START_MESSAGE = "딜러와 %s 에게 2장을 나누었습니다.\n"; private static final String CURRENT_STATE_MESSAGE = "%s 카드 : %s\n"; private static final String RESULT_MESSAGE = "%s 카드 : %s - 결과: %s\n"; + private static final String DELIMITER = " : "; + private static final String JOIN_DELIMITER = ", "; + private static final int DEALER_FIRST_CARD_INDEX = 0; + - public static void printStartMessage(final List players) { - String playerName = players.stream().map(Person::getName).collect(Collectors.joining(", ")); - System.out.printf(START_MESSAGE, playerName); + public static void printStartMessage(final Game game) { + System.out.printf(START_MESSAGE, game.getPlayers().stream() + .map(Person::getName) + .collect(Collectors.joining(JOIN_DELIMITER))); } public static void printCurrentCardsState(final String name, final List cards) { System.out.printf(CURRENT_STATE_MESSAGE, name, cards.stream().map(Card::toString) - .collect(Collectors.joining(", "))); + .collect(Collectors.joining(JOIN_DELIMITER))); } public static void printResult(final String name, final List cards, final int score) { System.out.printf(RESULT_MESSAGE, name, cards.stream().map(Card::toString) - .collect(Collectors.joining(", ")), score); + .collect(Collectors.joining(JOIN_DELIMITER)), score); + } + + public static void printDealerCard(final Dealer dealer){ + System.out.println(dealer.getName()+DELIMITER+ dealer.getCards().cards().get(DEALER_FIRST_CARD_INDEX)); } } From 089ff30c0ee0039f037b0c1f35d1d3b6bc5c827f Mon Sep 17 00:00:00 2001 From: sk11ingyuhwang Date: Wed, 16 Feb 2022 18:08:01 +0900 Subject: [PATCH 46/66] =?UTF-8?q?test(player):=20PlayerTest=20=EC=BD=94?= =?UTF-8?q?=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/PlayerTest.java | 20 +++++++++++++++++++ 1 file changed, 20 insertions(+) create mode 100644 src/test/java/blackjack/domain/PlayerTest.java diff --git a/src/test/java/blackjack/domain/PlayerTest.java b/src/test/java/blackjack/domain/PlayerTest.java new file mode 100644 index 00000000..83ffe0ea --- /dev/null +++ b/src/test/java/blackjack/domain/PlayerTest.java @@ -0,0 +1,20 @@ +package blackjack.domain; + +import static org.assertj.core.api.AssertionsForClassTypes.assertThat; +import static org.junit.jupiter.api.Assertions.*; + +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Test; + +class PlayerTest { + + @DisplayName("플레이어_생성_테스트") + @Test + void createPlayer() { + Player player = new Player("pobi", new Cards(CardDeck.pop(2))); + assertAll( + ()->assertThat(player.getName()).isEqualTo("pobi"), + ()->assertThat(player).isNotNull() + ); + } +} \ No newline at end of file From 181a0e45c6ec9489c319ae5d733f6566b19d83cf Mon Sep 17 00:00:00 2001 From: sk11ingyuhwang Date: Wed, 16 Feb 2022 18:10:46 +0900 Subject: [PATCH 47/66] =?UTF-8?q?test(dealer):=20DealerTest=20=EC=BD=94?= =?UTF-8?q?=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/DealerTest.java | 20 +++++++++++++++++++ 1 file changed, 20 insertions(+) create mode 100644 src/test/java/blackjack/domain/DealerTest.java diff --git a/src/test/java/blackjack/domain/DealerTest.java b/src/test/java/blackjack/domain/DealerTest.java new file mode 100644 index 00000000..66e9093f --- /dev/null +++ b/src/test/java/blackjack/domain/DealerTest.java @@ -0,0 +1,20 @@ +package blackjack.domain; + +import static org.assertj.core.api.AssertionsForClassTypes.assertThat; +import static org.junit.jupiter.api.Assertions.*; + +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Test; + +class DealerTest { + + @DisplayName("딜러_생성_테스트") + @Test + void createDealerTest() { + Dealer dealer = new Dealer("딜러", new Cards(CardDeck.pop(2))); + assertAll( + ()->assertThat(dealer.getName()).isEqualTo("딜러"), + ()->assertThat(dealer).isNotNull() + ); + } +} \ No newline at end of file From d08b32a90e8d34f59e1276be6d59080b150b4075 Mon Sep 17 00:00:00 2001 From: sk11ingyuhwang Date: Wed, 16 Feb 2022 18:15:19 +0900 Subject: [PATCH 48/66] =?UTF-8?q?test(dealer):=20Game=20=ED=85=8C=EC=8A=A4?= =?UTF-8?q?=ED=8A=B8=20=EC=BD=94=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 --- src/test/java/blackjack/domain/GameTest.java | 26 ++++++++++++++++++++ 1 file changed, 26 insertions(+) create mode 100644 src/test/java/blackjack/domain/GameTest.java diff --git a/src/test/java/blackjack/domain/GameTest.java b/src/test/java/blackjack/domain/GameTest.java new file mode 100644 index 00000000..cba1d7fb --- /dev/null +++ b/src/test/java/blackjack/domain/GameTest.java @@ -0,0 +1,26 @@ +package blackjack.domain; + +import static org.assertj.core.api.AssertionsForClassTypes.assertThat; +import static org.junit.jupiter.api.Assertions.*; + +import java.util.Arrays; +import java.util.List; +import java.util.stream.Collectors; +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Test; + +class GameTest { + + @DisplayName("Game_생성_테스트") + @Test + void createGameTest() { + List playerNames = Arrays.stream("pobi, jason".split(",")) + .map(String::trim) + .collect(Collectors.toList()); + Game game = new Game(playerNames); + assertAll( + ()->assertThat(game.getPlayers()).isNotNull(), + ()->assertThat(game.getDealer()).isNotNull() + ); + } +} \ No newline at end of file From f86f7d455bc64001b9b3d920fd02c8ad67cddda9 Mon Sep 17 00:00:00 2001 From: sk11ingyuhwang Date: Thu, 17 Feb 2022 01:06:48 +0900 Subject: [PATCH 49/66] =?UTF-8?q?refactor(main):=20Controller=20new=20?= =?UTF-8?q?=EC=97=B0=EC=82=B0=EC=9E=90=EB=A1=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/Application.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/main/java/blackjack/Application.java b/src/main/java/blackjack/Application.java index 923a5100..845b98cd 100644 --- a/src/main/java/blackjack/Application.java +++ b/src/main/java/blackjack/Application.java @@ -5,6 +5,7 @@ public class Application { public static void main(String[] args) { - Controller.run(); + Controller controller = new Controller(); + controller.run(); } } From ec8a9c64dbfc9f7a179b7432b85ef9abcc6a005f Mon Sep 17 00:00:00 2001 From: sk11ingyuhwang Date: Thu, 17 Feb 2022 16:50:25 +0900 Subject: [PATCH 50/66] =?UTF-8?q?refactor(main):=20=EA=B5=AC=ED=98=84?= =?UTF-8?q?=EB=90=9C=20=EA=B8=B0=EB=8A=A5=20=EB=B6=84=EB=A6=AC=20=EC=9E=91?= =?UTF-8?q?=EC=97=85?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/blackjack/controller/Controller.java | 225 ++++++++---------- src/main/java/blackjack/domain/Card.java | 5 +- .../java/blackjack/domain/CardAddible.java | 8 +- .../blackjack/domain/CardAddibleSupport.java | 14 +- src/main/java/blackjack/domain/CardDeck.java | 4 +- src/main/java/blackjack/domain/Cards.java | 44 +++- src/main/java/blackjack/domain/Continue.java | 7 + src/main/java/blackjack/domain/Dealer.java | 10 + src/main/java/blackjack/domain/Game.java | 7 +- src/main/java/blackjack/domain/GamePlay.java | 13 + src/main/java/blackjack/domain/Over.java | 14 ++ src/main/java/blackjack/domain/Player.java | 2 +- src/main/java/blackjack/domain/State.java | 18 ++ .../java/blackjack/domain/StateSupport.java | 20 ++ src/main/java/blackjack/empty.txt | 0 src/main/java/blackjack/view/OutputView.java | 9 +- .../java/blackjack/domain/DealerTest.java | 2 +- .../java/blackjack/domain/PlayerTest.java | 2 +- 18 files changed, 256 insertions(+), 148 deletions(-) create mode 100644 src/main/java/blackjack/domain/Continue.java create mode 100644 src/main/java/blackjack/domain/GamePlay.java create mode 100644 src/main/java/blackjack/domain/Over.java create mode 100644 src/main/java/blackjack/domain/State.java create mode 100644 src/main/java/blackjack/domain/StateSupport.java create mode 100644 src/main/java/blackjack/empty.txt diff --git a/src/main/java/blackjack/controller/Controller.java b/src/main/java/blackjack/controller/Controller.java index 18794a3f..0c02fed3 100644 --- a/src/main/java/blackjack/controller/Controller.java +++ b/src/main/java/blackjack/controller/Controller.java @@ -1,139 +1,124 @@ package blackjack.controller; import blackjack.domain.Card; +import blackjack.domain.CardAddible; import blackjack.domain.CardDeck; -import blackjack.domain.Cards; -import blackjack.domain.Dealer; +import blackjack.domain.Game; import blackjack.domain.Player; import blackjack.view.InputView; import blackjack.view.OutputView; -import java.util.ArrayList; -import java.util.List; -import java.util.stream.Collectors; -public class Controller { - - public static void run() { - - - List players = InputView.inputPlayers().stream() - .map(name -> new Player(name, new Cards(CardDeck.pop(2)))) - .collect(Collectors.toList()); - - Dealer dealer = new Dealer(new Cards(CardDeck.pop(2))); - - OutputView.printStartMessage(players); - System.out.println("딜러 : " + dealer.getCards().cards().get(0)); // 하나만 뽑혀야 함 - - players.forEach(player -> OutputView.printCurrentCardsState(player.getName(), - player.getCards().cards())); - for (Player player : players) { - String yesOrNo = ""; - do { - yesOrNo = InputView.inputYesOrNo(player.getName()); - if (yesOrNo.equals("y")) { - player.getCards().addCard(CardDeck.pop()); - OutputView.printCurrentCardsState(player.getName(), player.getCards().cards()); - int totalScore = player.getCards().cards().stream() - .filter(card -> !card.getCardNumber().name().equals("A")) - .mapToInt(card -> card.getCardNumber().getScore()).sum(); - - List ACEList = player.getCards().cards().stream() - .filter(card -> card.getCardNumber().name().equals("A")) - .collect(Collectors.toList()); - - for (Card card : ACEList) { - if (totalScore + 11 > 21) { - totalScore += 1; - } else { - totalScore += card.getCardNumber().getScore(); - } - } - } - } while (!yesOrNo.equals("n")); - } - - int dealerTotalScore = dealer.getCards().cards().stream() - .filter(card -> !card.getCardNumber().name().equals("A")) - .mapToInt(card -> card.getCardNumber().getScore()).sum(); +public class Controller { - List ACEList = dealer.getCards().cards().stream() - .filter(card -> card.getCardNumber().name().equals("A")) - .collect(Collectors.toList()); - for (Card card : ACEList) { - if (dealerTotalScore + 11 > 21) { - dealerTotalScore += 1; - } else { - dealerTotalScore += card.getCardNumber().getScore(); + public void receive(Player player){ + CardAddible cardAddible = player.getCards(); + do{ + String yesOrNo = InputView.inputYesOrNo(player.getName()); + if(yesOrNo.equals("y")) { + cardAddible.addCard(CardDeck.pop()); + OutputView.printCurrentCardsState(player.getName(), player.getCards()); + cardAddible = cardAddible.judge(); } - } - - if (dealerTotalScore <= 16) { - dealer.getCards().addCard(CardDeck.pop()); + }while(cardAddible.isEnd()); + } + public void run() { + + Game game = new Game(InputView.inputPlayers()); + initGame(game); + game.getPlayers().forEach(this::receive); + +// int dealerTotalScore = dealer.getCards().cards().stream() +// .filter(card -> !card.getCardNumber().name().equals("A")) +// .mapToInt(card -> card.getCardNumber().getScore()).sum(); +// +// List ACEList = dealer.getCards().cards().stream() +// .filter(card -> card.getCardNumber().name().equals("A")) +// .collect(Collectors.toList()); +// +// for (Card card : ACEList) { +// if (dealerTotalScore + 11 > 21) { +// dealerTotalScore += 1; +// } else { +// dealerTotalScore += card.getCardNumber().getScore(); +// } +// } + int dealerTotalScore = game.getDealer().getCards().cards().sumScore(); + if(dealerTotalScore <= 16){ + CardAddible cardAddible = game.getDealer().getCards(); + cardAddible.addCard(CardDeck.pop()); System.out.println("딜러는 16이하라 한장의 카드를 더 받았습니다."); } - dealerTotalScore = dealer.getCards().cards().stream() - .filter(card -> !card.getCardNumber().name().equals("A")) - .mapToInt(card -> card.getCardNumber().getScore()).sum(); - - ACEList = dealer.getCards().cards().stream() - .filter(card -> card.getCardNumber().name().equals("A")) - .collect(Collectors.toList()); - - for (Card card : ACEList) { - if (dealerTotalScore + 11 > 21) { - dealerTotalScore += 1; - } else { - dealerTotalScore += card.getCardNumber().getScore(); - } - } - OutputView.printResult("딜러", dealer.getCards().cards(), dealerTotalScore); - - List playerResults = new ArrayList<>(); - for (Player player : players) { - int playerTotalScore = player.getCards().cards().stream() - .filter(card -> !card.getCardNumber().name().equals("A")) - .mapToInt(card -> card.getCardNumber().getScore()).sum(); - - List PlayerACE = player.getCards().cards().stream() - .filter(card -> card.getCardNumber().name().equals("A")) - .collect(Collectors.toList()); - - for (Card card : PlayerACE) { - if (playerTotalScore + 11 > 21) { - playerTotalScore += 1; - } else { - playerTotalScore += card.getCardNumber().getScore(); - } - } - playerResults.add(playerTotalScore); - OutputView.printResult(player.getName(), player.getCards().cards(), playerTotalScore); - } - - int finalDealerTotalScore = dealerTotalScore; - Long dealerWin = playerResults.stream().filter( - playerResult -> (finalDealerTotalScore > playerResult) - ).count(); - Long dealerLose = playerResults.stream().filter( - playerResult -> (finalDealerTotalScore < playerResult) - ).count(); - System.out.printf("딜러 : %d승 %d패%n", dealerWin, dealerLose); - - for (int i = 0; i < players.size(); i++) { - String name = players.get(i).getName(); - int totalScore = playerResults.get(i); +// +// dealerTotalScore = dealer.getCards().cards().stream() +// .filter(card -> !card.getCardNumber().name().equals("A")) +// .mapToInt(card -> card.getCardNumber().getScore()).sum(); +// +// ACEList = dealer.getCards().cards().stream() +// .filter(card -> card.getCardNumber().name().equals("A")) +// .collect(Collectors.toList()); +// +// for (Card card : ACEList) { +// if (dealerTotalScore + 11 > 21) { +// dealerTotalScore += 1; +// } else { +// dealerTotalScore += card.getCardNumber().getScore(); +// } +// } + OutputView.printResult("딜러", game.getDealer().getCards().cards().getCards(), dealerTotalScore); + +// +// List playerResults = new ArrayList<>(); +// for (Player player : players) { +// int playerTotalScore = player.getCards().cards().stream() +// .filter(card -> !card.getCardNumber().name().equals("A")) +// .mapToInt(card -> card.getCardNumber().getScore()).sum(); +// +// List PlayerACE = player.getCards().cards().stream() +// .filter(card -> card.getCardNumber().name().equals("A")) +// .collect(Collectors.toList()); +// +// for (Card card : PlayerACE) { +// if (playerTotalScore + 11 > 21) { +// playerTotalScore += 1; +// } else { +// playerTotalScore += card.getCardNumber().getScore(); +// } +// } +// playerResults.add(playerTotalScore); +// OutputView.printResult(player.getName(), player.getCards().cards(), playerTotalScore); +// } +// +// int finalDealerTotalScore = dealerTotalScore; +// Long dealerWin = playerResults.stream().filter( +// playerResult -> (finalDealerTotalScore > playerResult) +// ).count(); +// Long dealerLose = playerResults.stream().filter( +// playerResult -> (finalDealerTotalScore < playerResult) +// ).count(); +// System.out.printf("딜러 : %d승 %d패%n", dealerWin, dealerLose); +// +// for (int i = 0; i < players.size(); i++) { +// String name = players.get(i).getName(); +// int totalScore = playerResults.get(i); +// +// Long win = playerResults.stream().filter( +// playerResult -> (totalScore > playerResult) +// ).count(); +// +// Long lose = playerResults.stream().filter( +// playerResult -> (totalScore < playerResult) +// ).count(); +// System.out.printf("%s : %d승 %d패%n", name, win, lose); +// } + } - Long win = playerResults.stream().filter( - playerResult -> (totalScore > playerResult) - ).count(); - Long lose = playerResults.stream().filter( - playerResult -> (totalScore < playerResult) - ).count(); - System.out.printf("%s : %d승 %d패%n", name, win, lose); - } + private static void initGame(Game game) { + OutputView.printStartMessage(game); + OutputView.printDealerCard(game.getDealer()); + OutputView.printPlayerCard(game.getPlayers()); } } diff --git a/src/main/java/blackjack/domain/Card.java b/src/main/java/blackjack/domain/Card.java index 3d1ea684..d7307cba 100644 --- a/src/main/java/blackjack/domain/Card.java +++ b/src/main/java/blackjack/domain/Card.java @@ -1,5 +1,8 @@ package blackjack.domain; +import java.util.List; +import java.util.stream.Collectors; + public class Card { private final CardNumber cardNumber; @@ -9,7 +12,7 @@ public Card(CardNumber cardNumber, CardPattern cardPattern) { this.cardNumber = cardNumber; this.cardPattern = cardPattern; } - + @Override public String toString() { return cardNumber.getName() + cardPattern.getName(); diff --git a/src/main/java/blackjack/domain/CardAddible.java b/src/main/java/blackjack/domain/CardAddible.java index ff921ffd..a3a2fad7 100644 --- a/src/main/java/blackjack/domain/CardAddible.java +++ b/src/main/java/blackjack/domain/CardAddible.java @@ -1,12 +1,12 @@ package blackjack.domain; -import java.util.List; - public interface CardAddible { - List cards(); + Cards cards(); void addCard(Card card); - int getTotalScore(); + boolean isEnd(); + + CardAddible judge(); } \ No newline at end of file diff --git a/src/main/java/blackjack/domain/CardAddibleSupport.java b/src/main/java/blackjack/domain/CardAddibleSupport.java index 41f57b33..122ca386 100644 --- a/src/main/java/blackjack/domain/CardAddibleSupport.java +++ b/src/main/java/blackjack/domain/CardAddibleSupport.java @@ -1,16 +1,14 @@ package blackjack.domain; -import java.util.List; - public abstract class CardAddibleSupport implements CardAddible { - List cards; + Cards cards; - public CardAddibleSupport(List cards) { + public CardAddibleSupport(Cards cards) { this.cards = cards; } @Override - public List cards() { + public Cards cards() { return cards; } @@ -18,10 +16,4 @@ public List cards() { public void addCard(Card card) { cards.add(card); } - - @Override - public int getTotalScore() { - - return cards.stream().mapToInt(card -> card.getCardNumber().getScore()).sum(); - } } diff --git a/src/main/java/blackjack/domain/CardDeck.java b/src/main/java/blackjack/domain/CardDeck.java index e722e0f5..a33676a5 100644 --- a/src/main/java/blackjack/domain/CardDeck.java +++ b/src/main/java/blackjack/domain/CardDeck.java @@ -21,10 +21,10 @@ public class CardDeck { public CardDeck() { } - public static List pop(int count) { + public static Cards pop(int count) { List newCards = new ArrayList<>(cards.subList(0, count)); cards = cards.subList(count, cards.size()-count); - return newCards; + return new Cards(newCards); } public static Card pop() { diff --git a/src/main/java/blackjack/domain/Cards.java b/src/main/java/blackjack/domain/Cards.java index 344caa6e..00fb78b6 100644 --- a/src/main/java/blackjack/domain/Cards.java +++ b/src/main/java/blackjack/domain/Cards.java @@ -1,10 +1,50 @@ package blackjack.domain; +import java.util.ArrayList; +import java.util.Comparator; import java.util.List; -public class Cards extends CardAddibleSupport { +public class Cards { + + private List cards; public Cards(List cards) { - super(cards); + this.cards = cards; + } + + public void add(Card card) { + cards.add(card); + } + + public List getCards() { + return cards; + } + + public boolean sum(){ + return sumScore()>=21; + } + + public int sumScore() { + Comparator comparator = (a, b) -> b.getCardNumber().getScore() - a.getCardNumber() + .getScore(); + + List newCards = new ArrayList<>(cards); + newCards.sort(comparator); + + return newCards.stream() + .mapToInt(card -> card.getCardNumber().getScore()) + .reduce(0, (a, b) -> a + getScoreToSum(a, b)); + } + + + public static int getScoreToSum(int score1, int score2) { + if ((score2 == CardNumber.ACE.getScore()) && (score1 + CardNumber.ACE.getScore() > 21)) { + return 1; + } + return score2; + } + + public int getTotalScore() { + return cards.stream().mapToInt(card -> card.getCardNumber().getScore()).sum(); } } \ No newline at end of file diff --git a/src/main/java/blackjack/domain/Continue.java b/src/main/java/blackjack/domain/Continue.java new file mode 100644 index 00000000..4d92f66d --- /dev/null +++ b/src/main/java/blackjack/domain/Continue.java @@ -0,0 +1,7 @@ +package blackjack.domain; + +public class Continue extends StateSupport{ + public Continue(Cards cards) { + super(cards); + } +} diff --git a/src/main/java/blackjack/domain/Dealer.java b/src/main/java/blackjack/domain/Dealer.java index b22055f6..e08fe5bf 100644 --- a/src/main/java/blackjack/domain/Dealer.java +++ b/src/main/java/blackjack/domain/Dealer.java @@ -4,12 +4,22 @@ public class Dealer extends Person{ private final CardAddible cards; + public Dealer(String name, CardAddible cards) { super(name); this.cards = cards; } + /** + * + * 17(dealer), 21(player) 이하이면 cards.add(dealer.pop) + * 17(dealer), 21(player) 이상이면 cards.stay() + * 공통으로 Dealer, Player + * @return 황인규 + */ + public CardAddible getCards() { return cards; } + } diff --git a/src/main/java/blackjack/domain/Game.java b/src/main/java/blackjack/domain/Game.java index 38104a7f..93d421c8 100644 --- a/src/main/java/blackjack/domain/Game.java +++ b/src/main/java/blackjack/domain/Game.java @@ -26,8 +26,8 @@ private static Player createPlayer(String name) { return new Player(name, handOutCards()); } - private static Cards handOutCards() { - return new Cards(CardDeck.pop(PASS_CARD_NUMBER)); + private static State handOutCards() { + return new State(CardDeck.pop(PASS_CARD_NUMBER)); } public List getPlayers() { @@ -38,4 +38,7 @@ public Dealer getDealer() { return dealer; } + public void addCard(Player player) { + player.getCards().addCard(CardDeck.pop()); + } } diff --git a/src/main/java/blackjack/domain/GamePlay.java b/src/main/java/blackjack/domain/GamePlay.java new file mode 100644 index 00000000..57450015 --- /dev/null +++ b/src/main/java/blackjack/domain/GamePlay.java @@ -0,0 +1,13 @@ +package blackjack.domain; + +import java.util.List; + +public class GamePlay { + private final List cards; + + public GamePlay(List cards) { + this.cards = cards; + } + +} + diff --git a/src/main/java/blackjack/domain/Over.java b/src/main/java/blackjack/domain/Over.java new file mode 100644 index 00000000..99e3a8c8 --- /dev/null +++ b/src/main/java/blackjack/domain/Over.java @@ -0,0 +1,14 @@ +package blackjack.domain; + +public abstract class Over extends StateSupport { + + public Over(final Cards card){ + super(card); + } + + @Override + public boolean isEnd(){ + return false; + } + +} diff --git a/src/main/java/blackjack/domain/Player.java b/src/main/java/blackjack/domain/Player.java index ee853621..f364ee1a 100644 --- a/src/main/java/blackjack/domain/Player.java +++ b/src/main/java/blackjack/domain/Player.java @@ -10,6 +10,6 @@ public Player(final String name, CardAddible cards) { } public CardAddible getCards() { - return cards; + return cards; //2장 셋팅한 카드 } } diff --git a/src/main/java/blackjack/domain/State.java b/src/main/java/blackjack/domain/State.java new file mode 100644 index 00000000..5da53332 --- /dev/null +++ b/src/main/java/blackjack/domain/State.java @@ -0,0 +1,18 @@ +package blackjack.domain; + +public class State extends Over { + + public State(Cards cards) { + super(cards); + } + + @Override + public CardAddible judge() { + if (cards.sum()) { + return new State(cards); + } + return new Continue(cards); + } +} + + diff --git a/src/main/java/blackjack/domain/StateSupport.java b/src/main/java/blackjack/domain/StateSupport.java new file mode 100644 index 00000000..9b049f9c --- /dev/null +++ b/src/main/java/blackjack/domain/StateSupport.java @@ -0,0 +1,20 @@ +package blackjack.domain; + + +public abstract class StateSupport extends CardAddibleSupport{ + + public StateSupport(final Cards card){ + super(card); + } + + @Override + public boolean isEnd(){ + return true; + } + + @Override + public CardAddible judge() { + return null; + } + +} diff --git a/src/main/java/blackjack/empty.txt b/src/main/java/blackjack/empty.txt new file mode 100644 index 00000000..e69de29b diff --git a/src/main/java/blackjack/view/OutputView.java b/src/main/java/blackjack/view/OutputView.java index 69e838bc..64da03e8 100644 --- a/src/main/java/blackjack/view/OutputView.java +++ b/src/main/java/blackjack/view/OutputView.java @@ -1,6 +1,8 @@ package blackjack.view; import blackjack.domain.Card; +import blackjack.domain.CardAddible; +import blackjack.domain.Cards; import blackjack.domain.Dealer; import blackjack.domain.Game; import blackjack.domain.Person; @@ -23,8 +25,9 @@ public static void printStartMessage(final Game game) { .collect(Collectors.joining(JOIN_DELIMITER))); } - public static void printCurrentCardsState(final String name, final List cards) { - System.out.printf(CURRENT_STATE_MESSAGE, name, cards.stream().map(Card::toString) + + public static void printCurrentCardsState(final String name, final CardAddible cards) { + System.out.printf(CURRENT_STATE_MESSAGE, name, cards.cards().getCards().stream().map(Card::toString) .collect(Collectors.joining(JOIN_DELIMITER))); } @@ -34,6 +37,6 @@ public static void printResult(final String name, final List cards, final } public static void printDealerCard(final Dealer dealer){ - System.out.println(dealer.getName()+DELIMITER+ dealer.getCards().cards().get(DEALER_FIRST_CARD_INDEX)); + System.out.println(dealer.getName()+DELIMITER+ dealer.getCards().cards().getCards().get(DEALER_FIRST_CARD_INDEX)); } } diff --git a/src/test/java/blackjack/domain/DealerTest.java b/src/test/java/blackjack/domain/DealerTest.java index 66e9093f..b0f4c489 100644 --- a/src/test/java/blackjack/domain/DealerTest.java +++ b/src/test/java/blackjack/domain/DealerTest.java @@ -11,7 +11,7 @@ class DealerTest { @DisplayName("딜러_생성_테스트") @Test void createDealerTest() { - Dealer dealer = new Dealer("딜러", new Cards(CardDeck.pop(2))); + Dealer dealer = new Dealer("딜러", new State(CardDeck.pop(2))); assertAll( ()->assertThat(dealer.getName()).isEqualTo("딜러"), ()->assertThat(dealer).isNotNull() diff --git a/src/test/java/blackjack/domain/PlayerTest.java b/src/test/java/blackjack/domain/PlayerTest.java index 83ffe0ea..77c290a6 100644 --- a/src/test/java/blackjack/domain/PlayerTest.java +++ b/src/test/java/blackjack/domain/PlayerTest.java @@ -11,7 +11,7 @@ class PlayerTest { @DisplayName("플레이어_생성_테스트") @Test void createPlayer() { - Player player = new Player("pobi", new Cards(CardDeck.pop(2))); + Player player = new Player("pobi", new State(CardDeck.pop(2))); assertAll( ()->assertThat(player.getName()).isEqualTo("pobi"), ()->assertThat(player).isNotNull() From 2e180aa48e9d97d62a761d624684bcba5d304287 Mon Sep 17 00:00:00 2001 From: HyeonjuLee Date: Thu, 17 Feb 2022 23:22:05 +0900 Subject: [PATCH 51/66] =?UTF-8?q?feat(card)=20:=20Card=20=EA=B0=9D?= =?UTF-8?q?=EC=B2=B4=20=EC=83=9D=EC=84=B1=20&&=20test(card)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/blackjack/domain/{ => card}/Card.java | 7 ++----- src/test/java/blackjack/domain/card/CardTest.java | 15 +++++++++++++++ 2 files changed, 17 insertions(+), 5 deletions(-) rename src/main/java/blackjack/domain/{ => card}/Card.java (71%) create mode 100644 src/test/java/blackjack/domain/card/CardTest.java diff --git a/src/main/java/blackjack/domain/Card.java b/src/main/java/blackjack/domain/card/Card.java similarity index 71% rename from src/main/java/blackjack/domain/Card.java rename to src/main/java/blackjack/domain/card/Card.java index d7307cba..a3dbb682 100644 --- a/src/main/java/blackjack/domain/Card.java +++ b/src/main/java/blackjack/domain/card/Card.java @@ -1,14 +1,11 @@ -package blackjack.domain; - -import java.util.List; -import java.util.stream.Collectors; +package blackjack.domain.card; public class Card { private final CardNumber cardNumber; private final CardPattern cardPattern; - public Card(CardNumber cardNumber, CardPattern cardPattern) { + public Card(final CardNumber cardNumber, final CardPattern cardPattern) { this.cardNumber = cardNumber; this.cardPattern = cardPattern; } diff --git a/src/test/java/blackjack/domain/card/CardTest.java b/src/test/java/blackjack/domain/card/CardTest.java new file mode 100644 index 00000000..140480ca --- /dev/null +++ b/src/test/java/blackjack/domain/card/CardTest.java @@ -0,0 +1,15 @@ +package blackjack.domain.card; + +import static org.assertj.core.api.Assertions.assertThat; + +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Test; + +class CardTest { + @DisplayName("카드 객체 생성 테스트") + @Test + void createCardTest() { + Card card = new Card(CardNumber.ACE, CardPattern.CLOVER); + assertThat(card.toString()).isEqualTo("A클로버"); + } +} \ No newline at end of file From a7bb3158aee32544982d578240880f93d6dd4141 Mon Sep 17 00:00:00 2001 From: HyeonjuLee Date: Thu, 17 Feb 2022 23:32:10 +0900 Subject: [PATCH 52/66] =?UTF-8?q?feat(cards)=20:=20Card=20=EA=B0=9D?= =?UTF-8?q?=EC=B2=B4=20=EC=83=9D=EC=84=B1,=20=EA=B3=84=EC=82=B0=20&&=20tes?= =?UTF-8?q?t(card)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../blackjack/domain/{ => card}/Cards.java | 24 ++++++------- .../java/blackjack/domain/card/CardsTest.java | 36 +++++++++++++++++++ 2 files changed, 46 insertions(+), 14 deletions(-) rename src/main/java/blackjack/domain/{ => card}/Cards.java (68%) create mode 100644 src/test/java/blackjack/domain/card/CardsTest.java diff --git a/src/main/java/blackjack/domain/Cards.java b/src/main/java/blackjack/domain/card/Cards.java similarity index 68% rename from src/main/java/blackjack/domain/Cards.java rename to src/main/java/blackjack/domain/card/Cards.java index 00fb78b6..aab06dc5 100644 --- a/src/main/java/blackjack/domain/Cards.java +++ b/src/main/java/blackjack/domain/card/Cards.java @@ -1,4 +1,4 @@ -package blackjack.domain; +package blackjack.domain.card; import java.util.ArrayList; import java.util.Comparator; @@ -6,22 +6,19 @@ public class Cards { - private List cards; + private final List cards; + private final static int BLACKJACK = 21; - public Cards(List cards) { + public Cards(final List cards) { this.cards = cards; } - public void add(Card card) { + public void add(final Card card) { cards.add(card); } - public List getCards() { - return cards; - } - - public boolean sum(){ - return sumScore()>=21; + public boolean sum() { + return sumScore() >= BLACKJACK; } public int sumScore() { @@ -36,15 +33,14 @@ public int sumScore() { .reduce(0, (a, b) -> a + getScoreToSum(a, b)); } - - public static int getScoreToSum(int score1, int score2) { + private static int getScoreToSum(final int score1, final int score2) { if ((score2 == CardNumber.ACE.getScore()) && (score1 + CardNumber.ACE.getScore() > 21)) { return 1; } return score2; } - public int getTotalScore() { - return cards.stream().mapToInt(card -> card.getCardNumber().getScore()).sum(); + public List getCards() { + return cards; } } \ No newline at end of file diff --git a/src/test/java/blackjack/domain/card/CardsTest.java b/src/test/java/blackjack/domain/card/CardsTest.java new file mode 100644 index 00000000..5e3af9e5 --- /dev/null +++ b/src/test/java/blackjack/domain/card/CardsTest.java @@ -0,0 +1,36 @@ +package blackjack.domain.card; + +import static org.assertj.core.api.Assertions.assertThat; +import static org.junit.jupiter.api.Assertions.assertAll; + +import java.util.Arrays; +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Test; + +class CardsTest { + + @DisplayName("Cards 객체 생성 테스트") + @Test + void createCardsTest() { + Cards cards = new Cards(Arrays.asList( + new Card(CardNumber.ACE, CardPattern.CLOVER), + new Card(CardNumber.KING, CardPattern.HEART), + new Card(CardNumber.NINE, CardPattern.DIAMOND)) + ); + assertAll( + () -> assertThat(cards).isNotNull(), + () -> assertThat(cards.getCards().size()).isEqualTo(3) + ); + } + + @DisplayName("Cards 점수 계산 테스트") + @Test + void sumScoresOfCardsTest() { + Cards cards = new Cards(Arrays.asList( + new Card(CardNumber.TWO, CardPattern.CLOVER), + new Card(CardNumber.KING, CardPattern.HEART), + new Card(CardNumber.NINE, CardPattern.DIAMOND)) + ); + assertThat(cards.sumScore()).isEqualTo(21); + } +} \ No newline at end of file From 57fb0f5afb39481728133cffa4a2ca6ff620c4d1 Mon Sep 17 00:00:00 2001 From: HyeonjuLee Date: Thu, 17 Feb 2022 23:35:22 +0900 Subject: [PATCH 53/66] =?UTF-8?q?refactor(cardDeck)=20:=20=ED=8C=8C?= =?UTF-8?q?=EC=9D=BC=20=EC=9C=84=EC=B9=98=20=EC=9D=B4=EB=8F=99?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/test/java/blackjack/domain/{ => card}/CardDeckTest.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) rename src/test/java/blackjack/domain/{ => card}/CardDeckTest.java (91%) diff --git a/src/test/java/blackjack/domain/CardDeckTest.java b/src/test/java/blackjack/domain/card/CardDeckTest.java similarity index 91% rename from src/test/java/blackjack/domain/CardDeckTest.java rename to src/test/java/blackjack/domain/card/CardDeckTest.java index c47ee3fa..df08f517 100644 --- a/src/test/java/blackjack/domain/CardDeckTest.java +++ b/src/test/java/blackjack/domain/card/CardDeckTest.java @@ -1,4 +1,4 @@ -package blackjack.domain; +package blackjack.domain.card; import static org.assertj.core.api.Assertions.assertThat; From 7f6b55980f3f4975ec7b88c19f58d965b34d34e9 Mon Sep 17 00:00:00 2001 From: HyeonjuLee Date: Thu, 17 Feb 2022 23:36:23 +0900 Subject: [PATCH 54/66] =?UTF-8?q?refactor(cardDeck)=20:=20=EB=A7=A4?= =?UTF-8?q?=EC=A7=81=EB=84=98=EB=B2=84=20=EC=83=9D=EC=84=B1,=20final=20?= =?UTF-8?q?=EC=A0=95=EC=9D=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/blackjack/domain/{ => card}/CardDeck.java | 14 ++++++-------- 1 file changed, 6 insertions(+), 8 deletions(-) rename src/main/java/blackjack/domain/{ => card}/CardDeck.java (67%) diff --git a/src/main/java/blackjack/domain/CardDeck.java b/src/main/java/blackjack/domain/card/CardDeck.java similarity index 67% rename from src/main/java/blackjack/domain/CardDeck.java rename to src/main/java/blackjack/domain/card/CardDeck.java index a33676a5..6327a099 100644 --- a/src/main/java/blackjack/domain/CardDeck.java +++ b/src/main/java/blackjack/domain/card/CardDeck.java @@ -1,4 +1,4 @@ -package blackjack.domain; +package blackjack.domain.card; import java.util.ArrayList; import java.util.Arrays; @@ -8,6 +8,7 @@ public class CardDeck { private static List cards = new ArrayList<>(); + private static final int FIRST_INDEX = 0; static { Arrays.stream(CardNumber.values()).forEach( @@ -18,17 +19,14 @@ public class CardDeck { Collections.shuffle(cards); } - public CardDeck() { - } - - public static Cards pop(int count) { - List newCards = new ArrayList<>(cards.subList(0, count)); - cards = cards.subList(count, cards.size()-count); + public static Cards pop(final int count) { + List newCards = new ArrayList<>(cards.subList(FIRST_INDEX, count)); + cards = cards.subList(count, cards.size() - count); return new Cards(newCards); } public static Card pop() { - return cards.remove(0); + return cards.remove(FIRST_INDEX); } public static List getCards() { From db9372d6f2428e5b18803cb64b84581cdb73baa6 Mon Sep 17 00:00:00 2001 From: HyeonjuLee Date: Thu, 17 Feb 2022 23:37:55 +0900 Subject: [PATCH 55/66] =?UTF-8?q?refactor(number)=20:=20=ED=8C=8C=EC=9D=BC?= =?UTF-8?q?=20=EC=9C=84=EC=B9=98=20=EC=9D=B4=EB=8F=99?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/blackjack/domain/{ => card}/CardNumber.java | 2 +- src/main/java/blackjack/domain/{ => card}/CardPattern.java | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) rename src/main/java/blackjack/domain/{ => card}/CardNumber.java (94%) rename src/main/java/blackjack/domain/{ => card}/CardPattern.java (90%) diff --git a/src/main/java/blackjack/domain/CardNumber.java b/src/main/java/blackjack/domain/card/CardNumber.java similarity index 94% rename from src/main/java/blackjack/domain/CardNumber.java rename to src/main/java/blackjack/domain/card/CardNumber.java index 70be7cee..c84cb5c3 100644 --- a/src/main/java/blackjack/domain/CardNumber.java +++ b/src/main/java/blackjack/domain/card/CardNumber.java @@ -1,4 +1,4 @@ -package blackjack.domain; +package blackjack.domain.card; public enum CardNumber { ACE("A", 11), diff --git a/src/main/java/blackjack/domain/CardPattern.java b/src/main/java/blackjack/domain/card/CardPattern.java similarity index 90% rename from src/main/java/blackjack/domain/CardPattern.java rename to src/main/java/blackjack/domain/card/CardPattern.java index c1a2d695..322b2f40 100644 --- a/src/main/java/blackjack/domain/CardPattern.java +++ b/src/main/java/blackjack/domain/card/CardPattern.java @@ -1,4 +1,4 @@ -package blackjack.domain; +package blackjack.domain.card; public enum CardPattern { DIAMOND("다이아몬드"), From 4f8dbcd88afe6f40917c6614e970591a99479c99 Mon Sep 17 00:00:00 2001 From: HyeonjuLee Date: Thu, 17 Feb 2022 23:38:14 +0900 Subject: [PATCH 56/66] =?UTF-8?q?refactor(number)=20:=20final=20=EC=A0=95?= =?UTF-8?q?=EC=9D=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/blackjack/domain/card/CardNumber.java | 2 +- src/main/java/blackjack/domain/card/CardPattern.java | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/java/blackjack/domain/card/CardNumber.java b/src/main/java/blackjack/domain/card/CardNumber.java index c84cb5c3..78d7fb3c 100644 --- a/src/main/java/blackjack/domain/card/CardNumber.java +++ b/src/main/java/blackjack/domain/card/CardNumber.java @@ -17,7 +17,7 @@ public enum CardNumber { private final String name; private final int score; - CardNumber(String name, int score) { + CardNumber(final String name, final int score) { this.name = name; this.score = score; } diff --git a/src/main/java/blackjack/domain/card/CardPattern.java b/src/main/java/blackjack/domain/card/CardPattern.java index 322b2f40..1d612dd9 100644 --- a/src/main/java/blackjack/domain/card/CardPattern.java +++ b/src/main/java/blackjack/domain/card/CardPattern.java @@ -8,7 +8,7 @@ public enum CardPattern { private final String name; - CardPattern(String name) { + CardPattern(final String name) { this.name = name; } From aa60018455ef59720c54b1688eb8c2d27408570a Mon Sep 17 00:00:00 2001 From: HyeonjuLee Date: Thu, 17 Feb 2022 23:42:14 +0900 Subject: [PATCH 57/66] =?UTF-8?q?refactor(person):=20=ED=8C=8C=EC=9D=BC=20?= =?UTF-8?q?=EC=9D=B4=EB=8F=99,=20final=20=EC=A0=95=EC=9D=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/blackjack/domain/Dealer.java | 25 ------------------- src/main/java/blackjack/domain/Player.java | 15 ----------- .../java/blackjack/domain/player/Dealer.java | 17 +++++++++++++ .../blackjack/domain/{ => player}/Person.java | 4 +-- .../java/blackjack/domain/player/Player.java | 17 +++++++++++++ .../java/blackjack/domain/DealerTest.java | 11 +++++--- .../java/blackjack/domain/PlayerTest.java | 5 +++- 7 files changed, 47 insertions(+), 47 deletions(-) delete mode 100644 src/main/java/blackjack/domain/Dealer.java delete mode 100644 src/main/java/blackjack/domain/Player.java create mode 100644 src/main/java/blackjack/domain/player/Dealer.java rename src/main/java/blackjack/domain/{ => player}/Person.java (68%) create mode 100644 src/main/java/blackjack/domain/player/Player.java diff --git a/src/main/java/blackjack/domain/Dealer.java b/src/main/java/blackjack/domain/Dealer.java deleted file mode 100644 index e08fe5bf..00000000 --- a/src/main/java/blackjack/domain/Dealer.java +++ /dev/null @@ -1,25 +0,0 @@ -package blackjack.domain; - -public class Dealer extends Person{ - - private final CardAddible cards; - - - public Dealer(String name, CardAddible cards) { - super(name); - this.cards = cards; - } - - /** - * - * 17(dealer), 21(player) 이하이면 cards.add(dealer.pop) - * 17(dealer), 21(player) 이상이면 cards.stay() - * 공통으로 Dealer, Player - * @return 황인규 - */ - - public CardAddible getCards() { - return cards; - } - -} diff --git a/src/main/java/blackjack/domain/Player.java b/src/main/java/blackjack/domain/Player.java deleted file mode 100644 index f364ee1a..00000000 --- a/src/main/java/blackjack/domain/Player.java +++ /dev/null @@ -1,15 +0,0 @@ -package blackjack.domain; - -public class Player extends Person { - - private final CardAddible cards; - - public Player(final String name, CardAddible cards) { - super(name); - this.cards = cards; - } - - public CardAddible getCards() { - return cards; //2장 셋팅한 카드 - } -} diff --git a/src/main/java/blackjack/domain/player/Dealer.java b/src/main/java/blackjack/domain/player/Dealer.java new file mode 100644 index 00000000..25efa019 --- /dev/null +++ b/src/main/java/blackjack/domain/player/Dealer.java @@ -0,0 +1,17 @@ +package blackjack.domain.player; + +import blackjack.domain.state.Gameable; + +public class Dealer extends Person { + + private final Gameable cards; + + public Dealer(String name, Gameable cards) { + super(name); + this.cards = cards; + } + + public Gameable getCards() { + return cards; + } +} diff --git a/src/main/java/blackjack/domain/Person.java b/src/main/java/blackjack/domain/player/Person.java similarity index 68% rename from src/main/java/blackjack/domain/Person.java rename to src/main/java/blackjack/domain/player/Person.java index 1ad5cbd9..d2358cb9 100644 --- a/src/main/java/blackjack/domain/Person.java +++ b/src/main/java/blackjack/domain/player/Person.java @@ -1,10 +1,10 @@ -package blackjack.domain; +package blackjack.domain.player; public abstract class Person { private final String name; - public Person(String name) { + public Person(final String name) { this.name = name; } diff --git a/src/main/java/blackjack/domain/player/Player.java b/src/main/java/blackjack/domain/player/Player.java new file mode 100644 index 00000000..5c4d63c6 --- /dev/null +++ b/src/main/java/blackjack/domain/player/Player.java @@ -0,0 +1,17 @@ +package blackjack.domain.player; + +import blackjack.domain.state.Gameable; + +public class Player extends Person { + + private final Gameable cards; + + public Player(final String name, final Gameable cards) { + super(name); + this.cards = cards; + } + + public Gameable getCards() { + return cards; + } +} diff --git a/src/test/java/blackjack/domain/DealerTest.java b/src/test/java/blackjack/domain/DealerTest.java index b0f4c489..d0801b33 100644 --- a/src/test/java/blackjack/domain/DealerTest.java +++ b/src/test/java/blackjack/domain/DealerTest.java @@ -1,8 +1,11 @@ package blackjack.domain; import static org.assertj.core.api.AssertionsForClassTypes.assertThat; -import static org.junit.jupiter.api.Assertions.*; +import static org.junit.jupiter.api.Assertions.assertAll; +import blackjack.domain.card.CardDeck; +import blackjack.domain.player.Dealer; +import blackjack.domain.state.State; import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Test; @@ -11,10 +14,10 @@ class DealerTest { @DisplayName("딜러_생성_테스트") @Test void createDealerTest() { - Dealer dealer = new Dealer("딜러", new State(CardDeck.pop(2))); + Dealer dealer = new Dealer("딜러", new State(CardDeck.pop(2), true)); assertAll( - ()->assertThat(dealer.getName()).isEqualTo("딜러"), - ()->assertThat(dealer).isNotNull() + () -> assertThat(dealer.getName()).isEqualTo("딜러"), + () -> assertThat(dealer).isNotNull() ); } } \ No newline at end of file diff --git a/src/test/java/blackjack/domain/PlayerTest.java b/src/test/java/blackjack/domain/PlayerTest.java index 77c290a6..f8c225fc 100644 --- a/src/test/java/blackjack/domain/PlayerTest.java +++ b/src/test/java/blackjack/domain/PlayerTest.java @@ -3,6 +3,9 @@ import static org.assertj.core.api.AssertionsForClassTypes.assertThat; import static org.junit.jupiter.api.Assertions.*; +import blackjack.domain.card.CardDeck; +import blackjack.domain.player.Player; +import blackjack.domain.state.State; import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Test; @@ -11,7 +14,7 @@ class PlayerTest { @DisplayName("플레이어_생성_테스트") @Test void createPlayer() { - Player player = new Player("pobi", new State(CardDeck.pop(2))); + Player player = new Player("pobi", new State(CardDeck.pop(2), true)); assertAll( ()->assertThat(player.getName()).isEqualTo("pobi"), ()->assertThat(player).isNotNull() From 1b5e63cf4f9fde052bdf8065c83442263f75d569 Mon Sep 17 00:00:00 2001 From: HyeonjuLee Date: Thu, 17 Feb 2022 23:43:32 +0900 Subject: [PATCH 58/66] =?UTF-8?q?refactor(state):=20=EA=B3=B5=ED=86=B5=20?= =?UTF-8?q?=EA=B8=B0=EB=8A=A5=20=EB=B6=84=EB=A6=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/blackjack/domain/CardAddible.java | 12 ----------- src/main/java/blackjack/domain/State.java | 18 ----------------- .../java/blackjack/domain/StateSupport.java | 20 ------------------- .../{ => state}/CardAddibleSupport.java | 8 ++++++-- .../java/blackjack/domain/state/Gameable.java | 15 ++++++++++++++ .../java/blackjack/domain/state/State.java | 20 +++++++++++++++++++ .../blackjack/domain/state/StateSupport.java | 18 +++++++++++++++++ 7 files changed, 59 insertions(+), 52 deletions(-) delete mode 100644 src/main/java/blackjack/domain/CardAddible.java delete mode 100644 src/main/java/blackjack/domain/State.java delete mode 100644 src/main/java/blackjack/domain/StateSupport.java rename src/main/java/blackjack/domain/{ => state}/CardAddibleSupport.java (55%) create mode 100644 src/main/java/blackjack/domain/state/Gameable.java create mode 100644 src/main/java/blackjack/domain/state/State.java create mode 100644 src/main/java/blackjack/domain/state/StateSupport.java diff --git a/src/main/java/blackjack/domain/CardAddible.java b/src/main/java/blackjack/domain/CardAddible.java deleted file mode 100644 index a3a2fad7..00000000 --- a/src/main/java/blackjack/domain/CardAddible.java +++ /dev/null @@ -1,12 +0,0 @@ -package blackjack.domain; - -public interface CardAddible { - - Cards cards(); - - void addCard(Card card); - - boolean isEnd(); - - CardAddible judge(); -} \ No newline at end of file diff --git a/src/main/java/blackjack/domain/State.java b/src/main/java/blackjack/domain/State.java deleted file mode 100644 index 5da53332..00000000 --- a/src/main/java/blackjack/domain/State.java +++ /dev/null @@ -1,18 +0,0 @@ -package blackjack.domain; - -public class State extends Over { - - public State(Cards cards) { - super(cards); - } - - @Override - public CardAddible judge() { - if (cards.sum()) { - return new State(cards); - } - return new Continue(cards); - } -} - - diff --git a/src/main/java/blackjack/domain/StateSupport.java b/src/main/java/blackjack/domain/StateSupport.java deleted file mode 100644 index 9b049f9c..00000000 --- a/src/main/java/blackjack/domain/StateSupport.java +++ /dev/null @@ -1,20 +0,0 @@ -package blackjack.domain; - - -public abstract class StateSupport extends CardAddibleSupport{ - - public StateSupport(final Cards card){ - super(card); - } - - @Override - public boolean isEnd(){ - return true; - } - - @Override - public CardAddible judge() { - return null; - } - -} diff --git a/src/main/java/blackjack/domain/CardAddibleSupport.java b/src/main/java/blackjack/domain/state/CardAddibleSupport.java similarity index 55% rename from src/main/java/blackjack/domain/CardAddibleSupport.java rename to src/main/java/blackjack/domain/state/CardAddibleSupport.java index 122ca386..399f11e3 100644 --- a/src/main/java/blackjack/domain/CardAddibleSupport.java +++ b/src/main/java/blackjack/domain/state/CardAddibleSupport.java @@ -1,6 +1,10 @@ -package blackjack.domain; +package blackjack.domain.state; -public abstract class CardAddibleSupport implements CardAddible { +import blackjack.domain.card.Card; +import blackjack.domain.card.Cards; +import blackjack.domain.state.Gameable; + +public abstract class CardAddibleSupport implements Gameable { Cards cards; public CardAddibleSupport(Cards cards) { diff --git a/src/main/java/blackjack/domain/state/Gameable.java b/src/main/java/blackjack/domain/state/Gameable.java new file mode 100644 index 00000000..139dd062 --- /dev/null +++ b/src/main/java/blackjack/domain/state/Gameable.java @@ -0,0 +1,15 @@ +package blackjack.domain.state; + +import blackjack.domain.card.Card; +import blackjack.domain.card.Cards; + +public interface Gameable { + + Cards cards(); + + void addCard(Card card); + + boolean isEnd(); + + Gameable judge(); +} \ No newline at end of file diff --git a/src/main/java/blackjack/domain/state/State.java b/src/main/java/blackjack/domain/state/State.java new file mode 100644 index 00000000..a1001037 --- /dev/null +++ b/src/main/java/blackjack/domain/state/State.java @@ -0,0 +1,20 @@ +package blackjack.domain.state; + +import blackjack.domain.card.Cards; + +public class State extends StateSupport { + + public State(Cards cards, boolean end) { + super(cards, end); + } + + @Override + public Gameable judge() { + if (cards.sum()) { + return new State(cards, false); + } + return new State(cards, true); + } +} + + diff --git a/src/main/java/blackjack/domain/state/StateSupport.java b/src/main/java/blackjack/domain/state/StateSupport.java new file mode 100644 index 00000000..2e1d5eff --- /dev/null +++ b/src/main/java/blackjack/domain/state/StateSupport.java @@ -0,0 +1,18 @@ +package blackjack.domain.state; + +import blackjack.domain.card.Cards; + +public abstract class StateSupport extends CardAddibleSupport { + + boolean end; + + public StateSupport(final Cards card, boolean end) { + super(card); + this.end = end; + } + + @Override + public boolean isEnd() { + return end; + } +} From bf9ab2c7f3a2aeed0294aa3182cb9484a486673b Mon Sep 17 00:00:00 2001 From: HyeonjuLee Date: Thu, 17 Feb 2022 23:43:59 +0900 Subject: [PATCH 59/66] delete & remove --- src/main/java/blackjack/domain/Continue.java | 7 ------- src/main/java/blackjack/domain/GamePlay.java | 13 ------------- src/main/java/blackjack/domain/Over.java | 14 -------------- src/main/java/blackjack/empty.txt | 0 4 files changed, 34 deletions(-) delete mode 100644 src/main/java/blackjack/domain/Continue.java delete mode 100644 src/main/java/blackjack/domain/GamePlay.java delete mode 100644 src/main/java/blackjack/domain/Over.java delete mode 100644 src/main/java/blackjack/empty.txt diff --git a/src/main/java/blackjack/domain/Continue.java b/src/main/java/blackjack/domain/Continue.java deleted file mode 100644 index 4d92f66d..00000000 --- a/src/main/java/blackjack/domain/Continue.java +++ /dev/null @@ -1,7 +0,0 @@ -package blackjack.domain; - -public class Continue extends StateSupport{ - public Continue(Cards cards) { - super(cards); - } -} diff --git a/src/main/java/blackjack/domain/GamePlay.java b/src/main/java/blackjack/domain/GamePlay.java deleted file mode 100644 index 57450015..00000000 --- a/src/main/java/blackjack/domain/GamePlay.java +++ /dev/null @@ -1,13 +0,0 @@ -package blackjack.domain; - -import java.util.List; - -public class GamePlay { - private final List cards; - - public GamePlay(List cards) { - this.cards = cards; - } - -} - diff --git a/src/main/java/blackjack/domain/Over.java b/src/main/java/blackjack/domain/Over.java deleted file mode 100644 index 99e3a8c8..00000000 --- a/src/main/java/blackjack/domain/Over.java +++ /dev/null @@ -1,14 +0,0 @@ -package blackjack.domain; - -public abstract class Over extends StateSupport { - - public Over(final Cards card){ - super(card); - } - - @Override - public boolean isEnd(){ - return false; - } - -} diff --git a/src/main/java/blackjack/empty.txt b/src/main/java/blackjack/empty.txt deleted file mode 100644 index e69de29b..00000000 From dccbe4617dc35143f72e8f8862c5997623297877 Mon Sep 17 00:00:00 2001 From: HyeonjuLee Date: Thu, 17 Feb 2022 23:44:18 +0900 Subject: [PATCH 60/66] =?UTF-8?q?feat(view):=20=EA=B2=B0=EA=B3=BC=20?= =?UTF-8?q?=EC=B6=9C=EB=A0=A5=20=EB=A9=94=EC=86=8C=EB=93=9C=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/blackjack/view/OutputView.java | 49 +++++++++++++++----- 1 file changed, 37 insertions(+), 12 deletions(-) diff --git a/src/main/java/blackjack/view/OutputView.java b/src/main/java/blackjack/view/OutputView.java index 64da03e8..1d98585e 100644 --- a/src/main/java/blackjack/view/OutputView.java +++ b/src/main/java/blackjack/view/OutputView.java @@ -1,11 +1,11 @@ package blackjack.view; -import blackjack.domain.Card; -import blackjack.domain.CardAddible; -import blackjack.domain.Cards; -import blackjack.domain.Dealer; +import blackjack.domain.card.Card; +import blackjack.domain.player.Dealer; import blackjack.domain.Game; -import blackjack.domain.Person; +import blackjack.domain.state.Gameable; +import blackjack.domain.player.Person; +import blackjack.domain.player.Player; import java.util.List; import java.util.stream.Collectors; @@ -14,21 +14,21 @@ public class OutputView { private static final String START_MESSAGE = "딜러와 %s 에게 2장을 나누었습니다.\n"; private static final String CURRENT_STATE_MESSAGE = "%s 카드 : %s\n"; private static final String RESULT_MESSAGE = "%s 카드 : %s - 결과: %s\n"; + private static final String GIVE_CARD_TO_DEALER_MESSAGE = "\n딜러는 16 이하라 한장의 카드를 더 받았습니다\n"; private static final String DELIMITER = " : "; private static final String JOIN_DELIMITER = ", "; private static final int DEALER_FIRST_CARD_INDEX = 0; - public static void printStartMessage(final Game game) { System.out.printf(START_MESSAGE, game.getPlayers().stream() .map(Person::getName) .collect(Collectors.joining(JOIN_DELIMITER))); } - - public static void printCurrentCardsState(final String name, final CardAddible cards) { - System.out.printf(CURRENT_STATE_MESSAGE, name, cards.cards().getCards().stream().map(Card::toString) - .collect(Collectors.joining(JOIN_DELIMITER))); + public static void printCurrentCardsState(final String name, final Gameable cards) { + System.out.printf(CURRENT_STATE_MESSAGE, name, + cards.cards().getCards().stream().map(Card::toString) + .collect(Collectors.joining(JOIN_DELIMITER))); } public static void printResult(final String name, final List cards, final int score) { @@ -36,7 +36,32 @@ public static void printResult(final String name, final List cards, final .collect(Collectors.joining(JOIN_DELIMITER)), score); } - public static void printDealerCard(final Dealer dealer){ - System.out.println(dealer.getName()+DELIMITER+ dealer.getCards().cards().getCards().get(DEALER_FIRST_CARD_INDEX)); + public static void printGameResults(Dealer dealer, List players) { + printResult(dealer.getName(), dealer.getCards().cards().getCards(), + dealer.getCards().cards().sumScore() + ); + + players.forEach(player -> printResult(player.getName(), + player.getCards().cards().getCards(), + player.getCards().cards().sumScore()) + ); + } + + public static void printDealerCard(final Dealer dealer) { + System.out.println(dealer.getName() + DELIMITER + dealer.getCards().cards().getCards() + .get(DEALER_FIRST_CARD_INDEX)); + } + + public static void printPlayerCard(final List players) { + players.forEach( + player -> OutputView.printCurrentCardsState(player.getName(), player.getCards())); + } + + public static void printMessageToGiveCardToDealer() { + System.out.println(GIVE_CARD_TO_DEALER_MESSAGE); + } + + public static void printGameWinOrLose(Person person, List gameResult) { + System.out.printf("%s : %d승 %d패%n", person.getName(), gameResult.get(0), gameResult.get(1)); } } From ce019baefa5b08e79835289ecf61e7cf6b10d0b4 Mon Sep 17 00:00:00 2001 From: HyeonjuLee Date: Thu, 17 Feb 2022 23:58:40 +0900 Subject: [PATCH 61/66] =?UTF-8?q?feat(winner):=20=EA=B2=8C=EC=9E=84=20?= =?UTF-8?q?=EA=B2=B0=EA=B3=BC=20=EB=A9=94=EC=86=8C=EB=93=9C=20=EA=B5=AC?= =?UTF-8?q?=ED=98=84=20&&=20test(winner)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/blackjack/domain/Winner.java | 57 ++++++++++++++ .../java/blackjack/domain/WinnerTest.java | 74 +++++++++++++++++++ 2 files changed, 131 insertions(+) create mode 100644 src/main/java/blackjack/domain/Winner.java create mode 100644 src/test/java/blackjack/domain/WinnerTest.java diff --git a/src/main/java/blackjack/domain/Winner.java b/src/main/java/blackjack/domain/Winner.java new file mode 100644 index 00000000..683021cf --- /dev/null +++ b/src/main/java/blackjack/domain/Winner.java @@ -0,0 +1,57 @@ +package blackjack.domain; + +import blackjack.domain.player.Player; +import java.util.Arrays; +import java.util.List; +import java.util.stream.Collectors; + +public class Winner { + + private final int BLACKJACK = 21; + private final Game game; + + public Winner(final Game game) { + this.game = game; + } + + public List calculateDealerGameResult() { + int dealerScore = game.getDealer().getCards().cards().sumScore(); + return calculateGameResult(dealerScore); + } + + public List calculatePlayerGameResult(final Player player) { + int playerScore = player.getCards().cards().sumScore(); + return calculateGameResult(playerScore); + } + + private List calculateGameResult(final int sourceScore) { + List targetScores = game.getScoresOfPlayers().stream() + .map(this::convertZeroScore) + .collect(Collectors.toList()); + return Arrays.asList(countWin(sourceScore, targetScores), + countLose(sourceScore, targetScores)); + } + + private int convertZeroScore(final int score) { + if (score > BLACKJACK) { + return 0; + } + return score; + } + + private int countWin(final int sourceScore, final List targetScores) { + if (sourceScore > BLACKJACK) { + return 0; + } + return Long.valueOf(targetScores.stream() + .filter(targetScore -> sourceScore > targetScore).count()).intValue(); + } + + private int countLose(final int sourceScore, final List targetScores) { + if (sourceScore > BLACKJACK) { + return targetScores.size(); + } + return Long.valueOf(targetScores.stream() + .filter(targetScore -> sourceScore < targetScore).count()).intValue(); + } +} \ No newline at end of file diff --git a/src/test/java/blackjack/domain/WinnerTest.java b/src/test/java/blackjack/domain/WinnerTest.java new file mode 100644 index 00000000..1e1b2140 --- /dev/null +++ b/src/test/java/blackjack/domain/WinnerTest.java @@ -0,0 +1,74 @@ +package blackjack.domain; + +import static org.assertj.core.api.Assertions.assertThat; +import static org.junit.jupiter.api.Assertions.assertAll; + +import blackjack.domain.card.Card; +import blackjack.domain.card.CardNumber; +import blackjack.domain.card.CardPattern; +import blackjack.domain.card.Cards; +import blackjack.domain.player.Dealer; +import blackjack.domain.player.Player; +import blackjack.domain.state.State; +import java.util.Arrays; +import java.util.List; +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Test; + +class WinnerTest { + @DisplayName("딜러 게임 승패 여부 테스트") + @Test + void calculateDealerGameResultTest() { + Dealer dealer = new Dealer("딜러", + new State(new Cards(Arrays.asList( + new Card(CardNumber.ACE, CardPattern.CLOVER), + new Card(CardNumber.NINE, CardPattern.CLOVER)) + ), true)); + List players = Arrays.asList( + new Player("pobi", new State(new Cards(Arrays.asList( + new Card(CardNumber.TWO, CardPattern.HEART), + new Card(CardNumber.THREE, CardPattern.DIAMOND)) + ), true)), + new Player("jason", new State(new Cards(Arrays.asList( + new Card(CardNumber.ACE, CardPattern.DIAMOND), + new Card(CardNumber.TWO, CardPattern.CLOVER)) + ), true)) + ); + + Game game = new Game(dealer, players); + Winner winner = new Winner(game); + List result = winner.calculateDealerGameResult(); + assertAll( + () -> assertThat(result.get(0)).isEqualTo(2), + () -> assertThat(result.get(1)).isEqualTo(0) + ); + } + + @DisplayName("플레이어 게임 승패 여부 테스트") + @Test + void calculatePlayerGameResultTest() { + Dealer dealer = new Dealer("딜러", + new State(new Cards(Arrays.asList( + new Card(CardNumber.ACE, CardPattern.CLOVER), + new Card(CardNumber.NINE, CardPattern.CLOVER)) + ), true)); + List players = Arrays.asList( + new Player("pobi", new State(new Cards(Arrays.asList( + new Card(CardNumber.TWO, CardPattern.HEART), + new Card(CardNumber.THREE, CardPattern.DIAMOND)) + ), true)), + new Player("jason", new State(new Cards(Arrays.asList( + new Card(CardNumber.ACE, CardPattern.DIAMOND), + new Card(CardNumber.TWO, CardPattern.CLOVER)) + ), true)) + ); + + Game game = new Game(dealer, players); + Winner winner = new Winner(game); + List result = winner.calculatePlayerGameResult(players.get(0)); + assertAll( + () -> assertThat(result.get(0)).isEqualTo(0), + () -> assertThat(result.get(1)).isEqualTo(1) + ); + } +} \ No newline at end of file From 5558990b18239b675be6beee491990edde7fa628 Mon Sep 17 00:00:00 2001 From: HyeonjuLee Date: Fri, 18 Feb 2022 00:05:07 +0900 Subject: [PATCH 62/66] =?UTF-8?q?feat(control):=20Controller=20=EA=B8=B0?= =?UTF-8?q?=EB=8A=A5=20=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/blackjack/controller/Controller.java | 152 ++++++------------ 1 file changed, 47 insertions(+), 105 deletions(-) diff --git a/src/main/java/blackjack/controller/Controller.java b/src/main/java/blackjack/controller/Controller.java index 0c02fed3..37756a1c 100644 --- a/src/main/java/blackjack/controller/Controller.java +++ b/src/main/java/blackjack/controller/Controller.java @@ -1,124 +1,66 @@ package blackjack.controller; -import blackjack.domain.Card; -import blackjack.domain.CardAddible; -import blackjack.domain.CardDeck; +import blackjack.domain.card.CardDeck; import blackjack.domain.Game; -import blackjack.domain.Player; +import blackjack.domain.state.Gameable; +import blackjack.domain.player.Player; +import blackjack.domain.state.State; +import blackjack.domain.Winner; import blackjack.view.InputView; import blackjack.view.OutputView; - public class Controller { - - public void receive(Player player){ - CardAddible cardAddible = player.getCards(); - do{ - String yesOrNo = InputView.inputYesOrNo(player.getName()); - if(yesOrNo.equals("y")) { - cardAddible.addCard(CardDeck.pop()); - OutputView.printCurrentCardsState(player.getName(), player.getCards()); - cardAddible = cardAddible.judge(); - } - }while(cardAddible.isEnd()); - } public void run() { - Game game = new Game(InputView.inputPlayers()); - initGame(game); - game.getPlayers().forEach(this::receive); - -// int dealerTotalScore = dealer.getCards().cards().stream() -// .filter(card -> !card.getCardNumber().name().equals("A")) -// .mapToInt(card -> card.getCardNumber().getScore()).sum(); -// -// List ACEList = dealer.getCards().cards().stream() -// .filter(card -> card.getCardNumber().name().equals("A")) -// .collect(Collectors.toList()); -// -// for (Card card : ACEList) { -// if (dealerTotalScore + 11 > 21) { -// dealerTotalScore += 1; -// } else { -// dealerTotalScore += card.getCardNumber().getScore(); -// } -// } - int dealerTotalScore = game.getDealer().getCards().cards().sumScore(); - if(dealerTotalScore <= 16){ - CardAddible cardAddible = game.getDealer().getCards(); - cardAddible.addCard(CardDeck.pop()); - System.out.println("딜러는 16이하라 한장의 카드를 더 받았습니다."); - } - -// -// dealerTotalScore = dealer.getCards().cards().stream() -// .filter(card -> !card.getCardNumber().name().equals("A")) -// .mapToInt(card -> card.getCardNumber().getScore()).sum(); -// -// ACEList = dealer.getCards().cards().stream() -// .filter(card -> card.getCardNumber().name().equals("A")) -// .collect(Collectors.toList()); -// -// for (Card card : ACEList) { -// if (dealerTotalScore + 11 > 21) { -// dealerTotalScore += 1; -// } else { -// dealerTotalScore += card.getCardNumber().getScore(); -// } -// } - OutputView.printResult("딜러", game.getDealer().getCards().cards().getCards(), dealerTotalScore); -// -// List playerResults = new ArrayList<>(); -// for (Player player : players) { -// int playerTotalScore = player.getCards().cards().stream() -// .filter(card -> !card.getCardNumber().name().equals("A")) -// .mapToInt(card -> card.getCardNumber().getScore()).sum(); -// -// List PlayerACE = player.getCards().cards().stream() -// .filter(card -> card.getCardNumber().name().equals("A")) -// .collect(Collectors.toList()); -// -// for (Card card : PlayerACE) { -// if (playerTotalScore + 11 > 21) { -// playerTotalScore += 1; -// } else { -// playerTotalScore += card.getCardNumber().getScore(); -// } -// } -// playerResults.add(playerTotalScore); -// OutputView.printResult(player.getName(), player.getCards().cards(), playerTotalScore); -// } -// -// int finalDealerTotalScore = dealerTotalScore; -// Long dealerWin = playerResults.stream().filter( -// playerResult -> (finalDealerTotalScore > playerResult) -// ).count(); -// Long dealerLose = playerResults.stream().filter( -// playerResult -> (finalDealerTotalScore < playerResult) -// ).count(); -// System.out.printf("딜러 : %d승 %d패%n", dealerWin, dealerLose); -// -// for (int i = 0; i < players.size(); i++) { -// String name = players.get(i).getName(); -// int totalScore = playerResults.get(i); -// -// Long win = playerResults.stream().filter( -// playerResult -> (totalScore > playerResult) -// ).count(); -// -// Long lose = playerResults.stream().filter( -// playerResult -> (totalScore < playerResult) -// ).count(); -// System.out.printf("%s : %d승 %d패%n", name, win, lose); -// } + initGame(game); + playGame(game); + finishGame(game); } - private static void initGame(Game game) { OutputView.printStartMessage(game); OutputView.printDealerCard(game.getDealer()); OutputView.printPlayerCard(game.getPlayers()); } + + private void playGame(Game game) { + game.getPlayers().forEach(this::receive); + if (game.giveCardToDealer()) { + OutputView.printMessageToGiveCardToDealer(); + } + } + + private void finishGame(Game game) { + Winner winner = new Winner(game); + + OutputView.printGameResults(game.getDealer(), game.getPlayers()); + + OutputView.printGameWinOrLose(game.getDealer(), winner.calculateDealerGameResult()); + game.getPlayers().forEach( + player -> OutputView.printGameWinOrLose( + player, winner.calculatePlayerGameResult(player) + ) + ); + } + + public void receive(Player player) { + Gameable gameable = player.getCards(); + String yesOrNo = ""; + do { + yesOrNo = InputView.inputYesOrNo(player.getName()); + if (yesOrNo.equals("y")) { + gameable.addCard(CardDeck.pop()); + OutputView.printCurrentCardsState(player.getName(), player.getCards()); + System.out.println(player.getCards().cards().sumScore()); + gameable = gameable.judge(); + } + if (yesOrNo.equals("n")) { + gameable = new State(gameable.cards(), false); + } + } while (gameable.isEnd()); + } + + } From ffb0e10a6e4a7f74396ca5bd8bd1579fcc9f40cb Mon Sep 17 00:00:00 2001 From: HyeonjuLee Date: Fri, 18 Feb 2022 00:25:16 +0900 Subject: [PATCH 63/66] =?UTF-8?q?refactor(game):=20game=20=EA=B8=B0?= =?UTF-8?q?=EB=8A=A5=20=EA=B5=AC=ED=98=84=20&&=20test(game)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/blackjack/domain/Game.java | 30 ++++++++++++++++---- src/test/java/blackjack/domain/GameTest.java | 16 +++++++++-- 2 files changed, 38 insertions(+), 8 deletions(-) diff --git a/src/main/java/blackjack/domain/Game.java b/src/main/java/blackjack/domain/Game.java index 93d421c8..d3ea1cde 100644 --- a/src/main/java/blackjack/domain/Game.java +++ b/src/main/java/blackjack/domain/Game.java @@ -1,5 +1,9 @@ package blackjack.domain; +import blackjack.domain.card.CardDeck; +import blackjack.domain.player.Dealer; +import blackjack.domain.player.Player; +import blackjack.domain.state.State; import java.util.Collections; import java.util.List; import java.util.stream.Collectors; @@ -8,6 +12,8 @@ public class Game { private static final int PASS_CARD_NUMBER = 2; private static final String DEALER_NAME = "딜러"; + private final static int DEALER_THRESHOLD = 16; + private final List players; private final Dealer dealer; @@ -27,7 +33,25 @@ private static Player createPlayer(String name) { } private static State handOutCards() { - return new State(CardDeck.pop(PASS_CARD_NUMBER)); + return new State(CardDeck.pop(PASS_CARD_NUMBER), true); + } + + public boolean giveCardToDealer() { + if (dealer.getCards().cards().sumScore() <= DEALER_THRESHOLD) { + dealer.getCards().addCard(CardDeck.pop()); + return true; + } + return false; + } + + public int getTotalScoreOfPlayer(Player player) { + return player.getCards().cards().sumScore(); + } + + public List getScoresOfPlayers() { + return players.stream() + .mapToInt(this::getTotalScoreOfPlayer) + .boxed().collect(Collectors.toList()); } public List getPlayers() { @@ -37,8 +61,4 @@ public List getPlayers() { public Dealer getDealer() { return dealer; } - - public void addCard(Player player) { - player.getCards().addCard(CardDeck.pop()); - } } diff --git a/src/test/java/blackjack/domain/GameTest.java b/src/test/java/blackjack/domain/GameTest.java index cba1d7fb..1f6f3a0c 100644 --- a/src/test/java/blackjack/domain/GameTest.java +++ b/src/test/java/blackjack/domain/GameTest.java @@ -1,7 +1,7 @@ package blackjack.domain; import static org.assertj.core.api.AssertionsForClassTypes.assertThat; -import static org.junit.jupiter.api.Assertions.*; +import static org.junit.jupiter.api.Assertions.assertAll; import java.util.Arrays; import java.util.List; @@ -19,8 +19,18 @@ void createGameTest() { .collect(Collectors.toList()); Game game = new Game(playerNames); assertAll( - ()->assertThat(game.getPlayers()).isNotNull(), - ()->assertThat(game.getDealer()).isNotNull() + () -> assertThat(game.getPlayers()).isNotNull(), + () -> assertThat(game.getDealer()).isNotNull() ); } + + @DisplayName("가진 카드가 16 이하일 때 딜러에게 카드 전달 테스트") + @Test + void giveCardToDealerTest() { + List playerNames = Arrays.stream("pobi, jason".split(",")) + .map(String::trim) + .collect(Collectors.toList()); + Game game = new Game(playerNames); + assertThat(game.giveCardToDealer()).isNotNull(); // Fix + } } \ No newline at end of file From d04be380ad3229a76c0ac7288e1fdd3911e25697 Mon Sep 17 00:00:00 2001 From: HyeonjuLee Date: Fri, 18 Feb 2022 00:26:24 +0900 Subject: [PATCH 64/66] refactor: reformat Codes --- .../java/blackjack/controller/Controller.java | 18 +++++++++--------- src/main/java/blackjack/domain/card/Card.java | 2 +- .../java/blackjack/domain/card/CardDeck.java | 2 +- src/main/java/blackjack/domain/card/Cards.java | 16 ++++++++-------- .../domain/state/CardAddibleSupport.java | 2 +- src/main/java/blackjack/view/InputView.java | 5 ++--- src/main/java/blackjack/view/OutputView.java | 4 ++-- src/main/java/rentcar/domain/Car.java | 1 + src/test/java/blackjack/domain/PlayerTest.java | 6 +++--- src/test/java/blackjack/domain/WinnerTest.java | 1 + .../java/blackjack/domain/card/CardTest.java | 1 + .../java/rentcar/domain/RentCompanyTest.java | 10 ++++++---- 12 files changed, 36 insertions(+), 32 deletions(-) diff --git a/src/main/java/blackjack/controller/Controller.java b/src/main/java/blackjack/controller/Controller.java index 37756a1c..afa7f360 100644 --- a/src/main/java/blackjack/controller/Controller.java +++ b/src/main/java/blackjack/controller/Controller.java @@ -1,16 +1,22 @@ package blackjack.controller; -import blackjack.domain.card.CardDeck; import blackjack.domain.Game; -import blackjack.domain.state.Gameable; +import blackjack.domain.Winner; +import blackjack.domain.card.CardDeck; import blackjack.domain.player.Player; +import blackjack.domain.state.Gameable; import blackjack.domain.state.State; -import blackjack.domain.Winner; import blackjack.view.InputView; import blackjack.view.OutputView; public class Controller { + private static void initGame(Game game) { + OutputView.printStartMessage(game); + OutputView.printDealerCard(game.getDealer()); + OutputView.printPlayerCard(game.getPlayers()); + } + public void run() { Game game = new Game(InputView.inputPlayers()); @@ -19,12 +25,6 @@ public void run() { finishGame(game); } - private static void initGame(Game game) { - OutputView.printStartMessage(game); - OutputView.printDealerCard(game.getDealer()); - OutputView.printPlayerCard(game.getPlayers()); - } - private void playGame(Game game) { game.getPlayers().forEach(this::receive); if (game.giveCardToDealer()) { diff --git a/src/main/java/blackjack/domain/card/Card.java b/src/main/java/blackjack/domain/card/Card.java index a3dbb682..323323e3 100644 --- a/src/main/java/blackjack/domain/card/Card.java +++ b/src/main/java/blackjack/domain/card/Card.java @@ -9,7 +9,7 @@ public Card(final CardNumber cardNumber, final CardPattern cardPattern) { this.cardNumber = cardNumber; this.cardPattern = cardPattern; } - + @Override public String toString() { return cardNumber.getName() + cardPattern.getName(); diff --git a/src/main/java/blackjack/domain/card/CardDeck.java b/src/main/java/blackjack/domain/card/CardDeck.java index 6327a099..c09d8733 100644 --- a/src/main/java/blackjack/domain/card/CardDeck.java +++ b/src/main/java/blackjack/domain/card/CardDeck.java @@ -7,8 +7,8 @@ public class CardDeck { - private static List cards = new ArrayList<>(); private static final int FIRST_INDEX = 0; + private static List cards = new ArrayList<>(); static { Arrays.stream(CardNumber.values()).forEach( diff --git a/src/main/java/blackjack/domain/card/Cards.java b/src/main/java/blackjack/domain/card/Cards.java index aab06dc5..8e5ffed7 100644 --- a/src/main/java/blackjack/domain/card/Cards.java +++ b/src/main/java/blackjack/domain/card/Cards.java @@ -6,13 +6,20 @@ public class Cards { - private final List cards; private final static int BLACKJACK = 21; + private final List cards; public Cards(final List cards) { this.cards = cards; } + private static int getScoreToSum(final int score1, final int score2) { + if ((score2 == CardNumber.ACE.getScore()) && (score1 + CardNumber.ACE.getScore() > 21)) { + return 1; + } + return score2; + } + public void add(final Card card) { cards.add(card); } @@ -33,13 +40,6 @@ public int sumScore() { .reduce(0, (a, b) -> a + getScoreToSum(a, b)); } - private static int getScoreToSum(final int score1, final int score2) { - if ((score2 == CardNumber.ACE.getScore()) && (score1 + CardNumber.ACE.getScore() > 21)) { - return 1; - } - return score2; - } - public List getCards() { return cards; } diff --git a/src/main/java/blackjack/domain/state/CardAddibleSupport.java b/src/main/java/blackjack/domain/state/CardAddibleSupport.java index 399f11e3..95d1a069 100644 --- a/src/main/java/blackjack/domain/state/CardAddibleSupport.java +++ b/src/main/java/blackjack/domain/state/CardAddibleSupport.java @@ -2,9 +2,9 @@ import blackjack.domain.card.Card; import blackjack.domain.card.Cards; -import blackjack.domain.state.Gameable; public abstract class CardAddibleSupport implements Gameable { + Cards cards; public CardAddibleSupport(Cards cards) { diff --git a/src/main/java/blackjack/view/InputView.java b/src/main/java/blackjack/view/InputView.java index 22d3b470..1601e19c 100644 --- a/src/main/java/blackjack/view/InputView.java +++ b/src/main/java/blackjack/view/InputView.java @@ -2,7 +2,6 @@ import java.util.Arrays; import java.util.List; -import java.util.Objects; import java.util.Scanner; import java.util.stream.Collectors; @@ -10,12 +9,12 @@ public class InputView { private static final String PARTICIPANTS_MESSAGE = "게임에 참여할 사람의 이름을 입력하세요.(쉼표 기준으로 분리)"; private static final String YES_OR_NO_MESSAGE = "는 한장의 카드를 더 받겠습니까?(예는 y, 아니오는 n)"; - + private static final String SPLIT_DELIMITER = ","; private static final Scanner SCANNER = new Scanner(System.in); public static List inputPlayers() { String players = getInputValueWithMessage(PARTICIPANTS_MESSAGE); - return Arrays.stream(players.split(",")) + return Arrays.stream(players.split(SPLIT_DELIMITER)) .map(String::trim) .collect(Collectors.toList()); } diff --git a/src/main/java/blackjack/view/OutputView.java b/src/main/java/blackjack/view/OutputView.java index 1d98585e..383dd03f 100644 --- a/src/main/java/blackjack/view/OutputView.java +++ b/src/main/java/blackjack/view/OutputView.java @@ -1,11 +1,11 @@ package blackjack.view; +import blackjack.domain.Game; import blackjack.domain.card.Card; import blackjack.domain.player.Dealer; -import blackjack.domain.Game; -import blackjack.domain.state.Gameable; import blackjack.domain.player.Person; import blackjack.domain.player.Player; +import blackjack.domain.state.Gameable; import java.util.List; import java.util.stream.Collectors; diff --git a/src/main/java/rentcar/domain/Car.java b/src/main/java/rentcar/domain/Car.java index 9ecdb822..3cf7d03f 100644 --- a/src/main/java/rentcar/domain/Car.java +++ b/src/main/java/rentcar/domain/Car.java @@ -1,6 +1,7 @@ package rentcar.domain; public abstract class Car { + /** * 리터당 이동 거리. 즉, 연비 */ diff --git a/src/test/java/blackjack/domain/PlayerTest.java b/src/test/java/blackjack/domain/PlayerTest.java index f8c225fc..e878922b 100644 --- a/src/test/java/blackjack/domain/PlayerTest.java +++ b/src/test/java/blackjack/domain/PlayerTest.java @@ -1,7 +1,7 @@ package blackjack.domain; import static org.assertj.core.api.AssertionsForClassTypes.assertThat; -import static org.junit.jupiter.api.Assertions.*; +import static org.junit.jupiter.api.Assertions.assertAll; import blackjack.domain.card.CardDeck; import blackjack.domain.player.Player; @@ -16,8 +16,8 @@ class PlayerTest { void createPlayer() { Player player = new Player("pobi", new State(CardDeck.pop(2), true)); assertAll( - ()->assertThat(player.getName()).isEqualTo("pobi"), - ()->assertThat(player).isNotNull() + () -> assertThat(player.getName()).isEqualTo("pobi"), + () -> assertThat(player).isNotNull() ); } } \ No newline at end of file diff --git a/src/test/java/blackjack/domain/WinnerTest.java b/src/test/java/blackjack/domain/WinnerTest.java index 1e1b2140..3c48e2b5 100644 --- a/src/test/java/blackjack/domain/WinnerTest.java +++ b/src/test/java/blackjack/domain/WinnerTest.java @@ -16,6 +16,7 @@ import org.junit.jupiter.api.Test; class WinnerTest { + @DisplayName("딜러 게임 승패 여부 테스트") @Test void calculateDealerGameResultTest() { diff --git a/src/test/java/blackjack/domain/card/CardTest.java b/src/test/java/blackjack/domain/card/CardTest.java index 140480ca..eadd493c 100644 --- a/src/test/java/blackjack/domain/card/CardTest.java +++ b/src/test/java/blackjack/domain/card/CardTest.java @@ -6,6 +6,7 @@ import org.junit.jupiter.api.Test; class CardTest { + @DisplayName("카드 객체 생성 테스트") @Test void createCardTest() { diff --git a/src/test/java/rentcar/domain/RentCompanyTest.java b/src/test/java/rentcar/domain/RentCompanyTest.java index df7fbd7d..e2d789e3 100644 --- a/src/test/java/rentcar/domain/RentCompanyTest.java +++ b/src/test/java/rentcar/domain/RentCompanyTest.java @@ -1,10 +1,12 @@ package rentcar.domain; import static org.assertj.core.api.Assertions.assertThat; + import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Test; class RentCompanyTest { + private static final String NEWLINE = System.getProperty("line.separator"); @DisplayName("RentCompany_객체_생성_테스트") @@ -40,10 +42,10 @@ public void generateReportTest() { String report = company.generateReport(); assertThat(report).isEqualTo( "Sonata : 15리터" + NEWLINE + - "K5 : 20리터" + NEWLINE + - "Sonata : 12리터" + NEWLINE + - "Avante : 20리터" + NEWLINE + - "K5 : 30리터" + "K5 : 20리터" + NEWLINE + + "Sonata : 12리터" + NEWLINE + + "Avante : 20리터" + NEWLINE + + "K5 : 30리터" ); } } \ No newline at end of file From aca0ca120b1a42859ed8739c485b48aab9492c02 Mon Sep 17 00:00:00 2001 From: Hyeonju Lee Date: Fri, 18 Feb 2022 00:27:31 +0900 Subject: [PATCH 65/66] Update README.md --- README.md | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/README.md b/README.md index 9ec8e9b7..140c404f 100644 --- a/README.md +++ b/README.md @@ -15,10 +15,10 @@ # java-blackjack -- [ ] 게임에 참여할 사람의 이름을 입력하세요. -- [ ] 게임이 시작하면 참여한 사람과 딜러는 카드 2개씩을 받는다. -- [ ] 카드 숫자를 기본으로 하며, 예외로 Ace는 1 또는 11로 계산할 수 있으며, King, Queen, Jack은 각각 10으로 계산한다. -- [ ] 게임에 참여한 사람 순서대로 카드를 더 받을지 물어보고 카드를 제공한다. 21점을 넘지 않을 경우 원한다면 얼마든지 카드를 계속 뽑을 수 있다. 단, 여기서 카드의 합은 21점을 넘어가지 않는다. -- [ ] 게임에 딜러도 기존에 받았던 카드들의 합이 16점 이하이면 한장의 카드를 더 받아야 한다. 17점 이상이면 추가로 받을 수 없다. -- [ ] 블랙잭 게임은 딜러와 플레이어 중 카드의 합이 21점 또는 21점에 가장 가까운 숫자를 가지는 쪽이 이기는 게임이다. -- [ ] 블랙잭 게임을 완료한 후 각 플레이어별로 승패를 출력한다. \ No newline at end of file +- [x] 게임에 참여할 사람의 이름을 입력하세요. +- [x] 게임이 시작하면 참여한 사람과 딜러는 카드 2개씩을 받는다. +- [x] 카드 숫자를 기본으로 하며, 예외로 Ace는 1 또는 11로 계산할 수 있으며, King, Queen, Jack은 각각 10으로 계산한다. +- [x] 게임에 참여한 사람 순서대로 카드를 더 받을지 물어보고 카드를 제공한다. 21점을 넘지 않을 경우 원한다면 얼마든지 카드를 계속 뽑을 수 있다. 단, 여기서 카드의 합은 21점을 넘어가지 않는다. +- [x] 게임에 딜러도 기존에 받았던 카드들의 합이 16점 이하이면 한장의 카드를 더 받아야 한다. 17점 이상이면 추가로 받을 수 없다. +- [x] 블랙잭 게임은 딜러와 플레이어 중 카드의 합이 21점 또는 21점에 가장 가까운 숫자를 가지는 쪽이 이기는 게임이다. +- [x] 블랙잭 게임을 완료한 후 각 플레이어별로 승패를 출력한다. From b83a6934a80819d3f6925bd2c26a20a49c65175d Mon Sep 17 00:00:00 2001 From: HyeonjuLee Date: Fri, 18 Feb 2022 16:53:08 +0900 Subject: [PATCH 66/66] =?UTF-8?q?refactor:=20=EB=94=94=EB=B2=84=EA=B9=85?= =?UTF-8?q?=EC=9A=A9=20print=20=EC=82=AD=EC=A0=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/blackjack/controller/Controller.java | 1 - 1 file changed, 1 deletion(-) diff --git a/src/main/java/blackjack/controller/Controller.java b/src/main/java/blackjack/controller/Controller.java index afa7f360..56aae841 100644 --- a/src/main/java/blackjack/controller/Controller.java +++ b/src/main/java/blackjack/controller/Controller.java @@ -53,7 +53,6 @@ public void receive(Player player) { if (yesOrNo.equals("y")) { gameable.addCard(CardDeck.pop()); OutputView.printCurrentCardsState(player.getName(), player.getCards()); - System.out.println(player.getCards().cards().sumScore()); gameable = gameable.judge(); } if (yesOrNo.equals("n")) {