From 6e7164a8b3cd156a0121973ca09f97ac86851dfc Mon Sep 17 00:00:00 2001 From: eohaerim Date: Fri, 11 Feb 2022 23:09:13 +0900 Subject: [PATCH 01/57] remove: delete empty.txt --- src/main/java/empty.txt | 0 src/test/java/empty.txt | 0 2 files changed, 0 insertions(+), 0 deletions(-) delete mode 100644 src/main/java/empty.txt delete mode 100644 src/test/java/empty.txt diff --git a/src/main/java/empty.txt b/src/main/java/empty.txt deleted file mode 100644 index e69de29b..00000000 diff --git a/src/test/java/empty.txt b/src/test/java/empty.txt deleted file mode 100644 index e69de29b..00000000 From dc3370cf4e8d0be56e87b540a16526440d985db2 Mon Sep 17 00:00:00 2001 From: eohaerim Date: Fri, 11 Feb 2022 23:09:34 +0900 Subject: [PATCH 02/57] =?UTF-8?q?docs:=20=EC=97=B0=EB=A3=8C=EC=A3=BC?= =?UTF-8?q?=EC=9E=85=20=EB=AC=B8=EC=A0=9C=20=EA=B8=B0=EB=8A=A5=20=EC=84=A4?= =?UTF-8?q?=EA=B3=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 22 +++++++++++++++++++++- 1 file changed, 21 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 03ba7ed3..e48569d6 100644 --- a/README.md +++ b/README.md @@ -1 +1,21 @@ -# java-blackjack \ No newline at end of file +# java-blackjack + +## 연료 주입 기능 목록 +MotorVehicle (Interface) +- 리터당 이동 거리를 반환 getDistancePerLiter +- 여행할 거리를 반환 getTripDistance +- 차종 이름을 반환 getName + +Car (abstract class) (implements MotorVehicle) +- 거리에 따른 연료량을 계산 후 반환 getChargeQuantity +- 멤버변수 distance + +Sonata, Avante, K5 (extends Car) +- 생성자로 distance 받기 +- private static final 로 연비를 가짐. (10km/리터, 15, 13) + +RentCompany +- 차 List를 가짐. +- private 생성자 +- static create()을 통해 객체 생성 +- addCar(Car) 를 통해 차 List에 저장 From 02f2075c417219e12a5c9a5bace6eefb3b433204 Mon Sep 17 00:00:00 2001 From: eohaerim Date: Fri, 11 Feb 2022 23:11:19 +0900 Subject: [PATCH 03/57] feat: create interface MotorVehicle --- src/main/java/rentcar/MotorVehicle.java | 10 ++++++++++ 1 file changed, 10 insertions(+) create mode 100644 src/main/java/rentcar/MotorVehicle.java diff --git a/src/main/java/rentcar/MotorVehicle.java b/src/main/java/rentcar/MotorVehicle.java new file mode 100644 index 00000000..abbcec56 --- /dev/null +++ b/src/main/java/rentcar/MotorVehicle.java @@ -0,0 +1,10 @@ +package rentcar; + +public interface MotorVehicle { + + double getDistancePerLiter(); + + double getTripDistance(); + + String getName(); +} From d0b0ed456e5f28fb37c5c154e871fb7ec4760da7 Mon Sep 17 00:00:00 2001 From: eohaerim Date: Fri, 11 Feb 2022 23:11:32 +0900 Subject: [PATCH 04/57] feat: create abstract class Car --- src/main/java/rentcar/Car.java | 7 +++++++ 1 file changed, 7 insertions(+) create mode 100644 src/main/java/rentcar/Car.java diff --git a/src/main/java/rentcar/Car.java b/src/main/java/rentcar/Car.java new file mode 100644 index 00000000..e37bfb7c --- /dev/null +++ b/src/main/java/rentcar/Car.java @@ -0,0 +1,7 @@ +package rentcar; + +public abstract class Car implements MotorVehicle { + double getChargeQuantity() { + return getTripDistance() / getDistancePerLiter(); + } +} From fe0aeafa644f466da9e4d6724691c8fb95b54c2d Mon Sep 17 00:00:00 2001 From: eohaerim Date: Fri, 11 Feb 2022 23:17:21 +0900 Subject: [PATCH 05/57] feat: add constructor to Car --- src/main/java/rentcar/Car.java | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/src/main/java/rentcar/Car.java b/src/main/java/rentcar/Car.java index e37bfb7c..63c18c94 100644 --- a/src/main/java/rentcar/Car.java +++ b/src/main/java/rentcar/Car.java @@ -1,6 +1,12 @@ package rentcar; public abstract class Car implements MotorVehicle { + private final int distance; + + public Car (int distance) { + this.distance = distance; + } + double getChargeQuantity() { return getTripDistance() / getDistancePerLiter(); } From 58d95c4c334ae548d0826883137cb3c5fa39c02e Mon Sep 17 00:00:00 2001 From: eohaerim Date: Fri, 11 Feb 2022 23:54:06 +0900 Subject: [PATCH 06/57] =?UTF-8?q?feat:=20=EB=A9=A4=EB=B2=84=EB=B3=80?= =?UTF-8?q?=EC=88=98,=20=EC=83=9D=EC=84=B1=EC=9E=90=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/Car.java | 7 +++++-- src/main/java/rentcar/Sonata.java | 25 +++++++++++++++++++++++++ 2 files changed, 30 insertions(+), 2 deletions(-) create mode 100644 src/main/java/rentcar/Sonata.java diff --git a/src/main/java/rentcar/Car.java b/src/main/java/rentcar/Car.java index 63c18c94..d8cd8a04 100644 --- a/src/main/java/rentcar/Car.java +++ b/src/main/java/rentcar/Car.java @@ -1,10 +1,13 @@ package rentcar; public abstract class Car implements MotorVehicle { - private final int distance; - public Car (int distance) { + public final double distance; + public final String name; + + public Car(double distance, String name) { this.distance = distance; + this.name = name; } double getChargeQuantity() { diff --git a/src/main/java/rentcar/Sonata.java b/src/main/java/rentcar/Sonata.java new file mode 100644 index 00000000..b5a1ec1a --- /dev/null +++ b/src/main/java/rentcar/Sonata.java @@ -0,0 +1,25 @@ +package rentcar; + +public class Sonata extends Car { + + private static final int DISTANCE_PER_LITER = 10; + + public Sonata(double distance) { + super(distance, "Sonata"); + } + + @Override + public double getDistancePerLiter() { + return DISTANCE_PER_LITER; + } + + @Override + public double getTripDistance() { + return distance; + } + + @Override + public String getName() { + return name; + } +} From 737b38bc8520e2dd04bb36c374f599c0480e076d Mon Sep 17 00:00:00 2001 From: eohaerim Date: Fri, 11 Feb 2022 23:54:58 +0900 Subject: [PATCH 07/57] =?UTF-8?q?style=20:=20=EC=A0=95=EB=A0=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/README.md b/README.md index e48569d6..2122406d 100644 --- a/README.md +++ b/README.md @@ -1,21 +1,27 @@ # java-blackjack ## 연료 주입 기능 목록 + MotorVehicle (Interface) + - 리터당 이동 거리를 반환 getDistancePerLiter - 여행할 거리를 반환 getTripDistance - 차종 이름을 반환 getName Car (abstract class) (implements MotorVehicle) + - 거리에 따른 연료량을 계산 후 반환 getChargeQuantity - 멤버변수 distance Sonata, Avante, K5 (extends Car) + - 생성자로 distance 받기 - private static final 로 연비를 가짐. (10km/리터, 15, 13) RentCompany + - 차 List를 가짐. - private 생성자 - static create()을 통해 객체 생성 - addCar(Car) 를 통해 차 List에 저장 +- generateReport 를 통해 report String 반환 From 0072001c92d1488f20cee56375eb58fe0140ccc7 Mon Sep 17 00:00:00 2001 From: eohaerim Date: Fri, 11 Feb 2022 23:56:59 +0900 Subject: [PATCH 08/57] feat : create Avante, K5 --- src/main/java/rentcar/Avante.java | 25 +++++++++++++++++++++++++ src/main/java/rentcar/K5.java | 25 +++++++++++++++++++++++++ 2 files changed, 50 insertions(+) create mode 100644 src/main/java/rentcar/Avante.java create mode 100644 src/main/java/rentcar/K5.java diff --git a/src/main/java/rentcar/Avante.java b/src/main/java/rentcar/Avante.java new file mode 100644 index 00000000..8aae1658 --- /dev/null +++ b/src/main/java/rentcar/Avante.java @@ -0,0 +1,25 @@ +package rentcar; + +public class Avante extends Car { + + private static final int DISTANCE_PER_LITER = 15; + + public Avante(double distance) { + super(distance, "Avante"); + } + + @Override + public double getDistancePerLiter() { + return DISTANCE_PER_LITER; + } + + @Override + public double getTripDistance() { + return distance; + } + + @Override + public String getName() { + return name; + } +} diff --git a/src/main/java/rentcar/K5.java b/src/main/java/rentcar/K5.java new file mode 100644 index 00000000..220cfaba --- /dev/null +++ b/src/main/java/rentcar/K5.java @@ -0,0 +1,25 @@ +package rentcar; + +public class K5 extends Car { + + private static final int DISTANCE_PER_LITER = 13; + + public K5(double distance) { + super(distance, "K5"); + } + + @Override + public double getDistancePerLiter() { + return DISTANCE_PER_LITER; + } + + @Override + public double getTripDistance() { + return distance; + } + + @Override + public String getName() { + return name; + } +} From d254e79fa27da1799e69004d7ecfefe54bba6e0e Mon Sep 17 00:00:00 2001 From: eohaerim Date: Fri, 11 Feb 2022 23:57:10 +0900 Subject: [PATCH 09/57] feat : create RentCompany --- src/main/java/rentcar/RentCompany.java | 30 ++++++++++++++++++++++++++ 1 file changed, 30 insertions(+) create mode 100644 src/main/java/rentcar/RentCompany.java diff --git a/src/main/java/rentcar/RentCompany.java b/src/main/java/rentcar/RentCompany.java new file mode 100644 index 00000000..f3a65ddb --- /dev/null +++ b/src/main/java/rentcar/RentCompany.java @@ -0,0 +1,30 @@ +package rentcar; + +import java.util.ArrayList; +import java.util.List; + +public class RentCompany { + + private static final List cars = new ArrayList<>(); + private static final String NEWLINE = System.getProperty("line.separator"); + private static final String COLON = " : "; + + private RentCompany() { + } + + public static RentCompany create() { + return new RentCompany(); + } + + public void addCar(Car car) { + cars.add(car); + } + + public String generateReport() { + final StringBuilder builder = new StringBuilder(); + cars.forEach( + car -> builder.append(car.getName()).append(COLON).append((int) car.getChargeQuantity()) + .append("리터").append(NEWLINE)); + return builder.toString(); + } +} From 57ab33ef8be51801bd2600ef1b9140e29c67da00 Mon Sep 17 00:00:00 2001 From: eohaerim Date: Fri, 11 Feb 2022 23:57:27 +0900 Subject: [PATCH 10/57] test: create RentCompanyTest --- src/test/java/rentcar/RentCompanyTest.java | 29 ++++++++++++++++++++++ 1 file changed, 29 insertions(+) create mode 100644 src/test/java/rentcar/RentCompanyTest.java diff --git a/src/test/java/rentcar/RentCompanyTest.java b/src/test/java/rentcar/RentCompanyTest.java new file mode 100644 index 00000000..03ab4c7e --- /dev/null +++ b/src/test/java/rentcar/RentCompanyTest.java @@ -0,0 +1,29 @@ +package rentcar; + +import static org.assertj.core.api.AssertionsForClassTypes.assertThat; +import static org.junit.jupiter.api.Assertions.*; + +import org.junit.jupiter.api.Test; + +class RentCompanyTest { + private static final String NEWLINE = System.getProperty("line.separator"); + + @Test + public void report() throws Exception { + 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리터" + NEWLINE + ); + } +} From 13f2df3fa009222cf5894f72899d3510b2b9365b Mon Sep 17 00:00:00 2001 From: eohaerim Date: Mon, 14 Feb 2022 17:28:21 +0900 Subject: [PATCH 11/57] =?UTF-8?q?refactor:=20=EC=B6=94=EC=83=81=ED=81=B4?= =?UTF-8?q?=EB=9E=98=EC=8A=A4=EC=99=80=20=EC=9D=B8=ED=84=B0=ED=8E=98?= =?UTF-8?q?=EC=9D=B4=EC=8A=A4=20=EC=84=A0=EC=96=B8=20=ED=95=A8=EC=88=98=20?= =?UTF-8?q?=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/rentcar/Avante.java | 10 ---------- src/main/java/rentcar/Car.java | 15 ++++++++++++--- src/main/java/rentcar/K5.java | 10 ---------- src/main/java/rentcar/MotorVehicle.java | 13 +++++++++---- src/main/java/rentcar/Sonata.java | 10 ---------- src/test/java/rentcar/RentCompanyTest.java | 3 ++- 6 files changed, 23 insertions(+), 38 deletions(-) diff --git a/src/main/java/rentcar/Avante.java b/src/main/java/rentcar/Avante.java index 8aae1658..69302c6a 100644 --- a/src/main/java/rentcar/Avante.java +++ b/src/main/java/rentcar/Avante.java @@ -12,14 +12,4 @@ public Avante(double distance) { public double getDistancePerLiter() { return DISTANCE_PER_LITER; } - - @Override - public double getTripDistance() { - return distance; - } - - @Override - public String getName() { - return name; - } } diff --git a/src/main/java/rentcar/Car.java b/src/main/java/rentcar/Car.java index d8cd8a04..ba2e93ce 100644 --- a/src/main/java/rentcar/Car.java +++ b/src/main/java/rentcar/Car.java @@ -2,15 +2,24 @@ public abstract class Car implements MotorVehicle { - public final double distance; - public final String name; + protected final double distance; + protected final String name; public Car(double distance, String name) { this.distance = distance; this.name = name; } - double getChargeQuantity() { + @Override + public double getChargeQuantity() { return getTripDistance() / getDistancePerLiter(); } + + public double getTripDistance() { + return distance; + } + + public String getName() { + return name; + } } diff --git a/src/main/java/rentcar/K5.java b/src/main/java/rentcar/K5.java index 220cfaba..5581ad20 100644 --- a/src/main/java/rentcar/K5.java +++ b/src/main/java/rentcar/K5.java @@ -12,14 +12,4 @@ public K5(double distance) { public double getDistancePerLiter() { return DISTANCE_PER_LITER; } - - @Override - public double getTripDistance() { - return distance; - } - - @Override - public String getName() { - return name; - } } diff --git a/src/main/java/rentcar/MotorVehicle.java b/src/main/java/rentcar/MotorVehicle.java index abbcec56..ea65f9c8 100644 --- a/src/main/java/rentcar/MotorVehicle.java +++ b/src/main/java/rentcar/MotorVehicle.java @@ -1,10 +1,15 @@ package rentcar; public interface MotorVehicle { - + /** + * 리터당 이동 거리 반환 + * @return double + */ double getDistancePerLiter(); - double getTripDistance(); - - String getName(); + /** + * 주입해야 할 연료량 반환 + * @return double + */ + double getChargeQuantity(); } diff --git a/src/main/java/rentcar/Sonata.java b/src/main/java/rentcar/Sonata.java index b5a1ec1a..e9f6f0c6 100644 --- a/src/main/java/rentcar/Sonata.java +++ b/src/main/java/rentcar/Sonata.java @@ -12,14 +12,4 @@ public Sonata(double distance) { public double getDistancePerLiter() { return DISTANCE_PER_LITER; } - - @Override - public double getTripDistance() { - return distance; - } - - @Override - public String getName() { - return name; - } } diff --git a/src/test/java/rentcar/RentCompanyTest.java b/src/test/java/rentcar/RentCompanyTest.java index 03ab4c7e..2e3845c3 100644 --- a/src/test/java/rentcar/RentCompanyTest.java +++ b/src/test/java/rentcar/RentCompanyTest.java @@ -9,7 +9,8 @@ class RentCompanyTest { private static final String NEWLINE = System.getProperty("line.separator"); @Test - public void report() throws Exception { + public void report() { + RentCompany company = RentCompany.create(); // factory method를 사용해 생성 company.addCar(new Sonata(150)); company.addCar(new K5(260)); From 723a6953f3ba6461220b9fc41296c7abd0fa2d7c Mon Sep 17 00:00:00 2001 From: eohaerim Date: Mon, 14 Feb 2022 21:30:19 +0900 Subject: [PATCH 12/57] =?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=A9=EB=A1=9D=20=EC=84=A4=EA=B3=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 40 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 40 insertions(+) diff --git a/README.md b/README.md index 2122406d..e6d549e2 100644 --- a/README.md +++ b/README.md @@ -25,3 +25,43 @@ RentCompany - static create()을 통해 객체 생성 - addCar(Car) 를 통해 차 List에 저장 - generateReport 를 통해 report String 반환 + +## 블랙잭 + +[InputView] +-[ ] 플레이어 이름을 입력받는다. +-[ ] 입력받은 플레이어의 이름을 쉼표로 분리한다. +-[ ] 플레이어에게 카드를 추가로 받을 것인지 입력받는다. + -[ ] y, n으로 입력 받는다. + +[OutputView] +-[ ] 딜러와 플레이어의 현재 카드 목록을 출력한다. + -[ ] 처음 시작때 딜러는 1번째 카드를 비공개하고, 나머지 카드만 출력한다. +-[ ] 딜러와 플레이어의 최종 승패를 출력한다. + + +-[ ] enum으로 1~10,J,Q,K를 구현한다. +- value +-[ ] enum으로 하트,스페이드,다이아몬드,클로버를 구현한다. +- shape +-[ ] value와 shape를 합쳐 한 장의 카드를 생성한다. + +[Cards] +-[ ] 카드 목록을 일급컬렉션화 +-[ ] 전체 숫자 합이 특정 값을 초과하는지 안하는지 판단 + [cardDeck] +-[ ] 카드를 shuffle한다. +-[ ] 딜러와 플레이어에게 카드 두장씩 나눠준다. + [PlayerCards] + 플레이어이름, Cards cards +-[ ] 현재 보유하고 있는 카드의 합을 구한다. +-[ ] 카드의 합이 21 이하이면 카드를 추가로 뽑을 것인지 질문한다. + [DealerCards] +-[ ] 플레이어들의 카드 추가 여부가 모두 정해진 뒤 카드를 추가로 받는다. +-[ ] 카드의 합계가 16이하이면 반드시 받는다. + [GameFinish] +-[ ] 플레이어의 카드 합이 21을 초과하면 (딜러의 결과에 관계없이)패배한다. +-[ ] 딜러의 카드 합이 21을 초과하면 딜러가 패배한다. +-[ ] 카드의 합이 21을 초과하지 않은 모든 플레이어는 승리 + [GameResult] +-[ ] From 0c6149ea13974edd66ec5dc74aac1845fceeea97 Mon Sep 17 00:00:00 2001 From: eohaerim Date: Tue, 15 Feb 2022 17:01:59 +0900 Subject: [PATCH 13/57] =?UTF-8?q?feat:=20=EC=B9=B4=EB=93=9C=20=EB=AA=A8?= =?UTF-8?q?=EC=96=91,=20=EC=88=AB=EC=9E=90=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 | 16 +++++++++++ .../java/blackjack/domain/Denomination.java | 28 +++++++++++++++++++ src/main/java/blackjack/domain/Shape.java | 15 ++++++++++ 3 files changed, 59 insertions(+) create mode 100644 src/main/java/blackjack/domain/Card.java create mode 100644 src/main/java/blackjack/domain/Denomination.java create mode 100644 src/main/java/blackjack/domain/Shape.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..842a1ca7 --- /dev/null +++ b/src/main/java/blackjack/domain/Card.java @@ -0,0 +1,16 @@ +package blackjack.domain; + +public class Card { + + private final Shape shape; + private final Denomination denomination; + + public Card(Shape shape, Denomination denomination) { + this.shape = shape; + this.denomination = denomination; + } + + public Denomination getDenomination() { + return denomination; + } +} diff --git a/src/main/java/blackjack/domain/Denomination.java b/src/main/java/blackjack/domain/Denomination.java new file mode 100644 index 00000000..60c3997b --- /dev/null +++ b/src/main/java/blackjack/domain/Denomination.java @@ -0,0 +1,28 @@ +package blackjack.domain; + +public enum Denomination { + + ACE(1), + TWO(2), + THREE(3), + FOUR(4), + FIVE(5), + SIX(6), + SEVEN(7), + EIGHT(8), + NINE(9), + TEN(10), + JACK(10), + QUEEN(10), + KING(10); + + private final int value; + + Denomination(int value) { + this.value = value; + } + + public int getValue() { + return value; + } +} diff --git a/src/main/java/blackjack/domain/Shape.java b/src/main/java/blackjack/domain/Shape.java new file mode 100644 index 00000000..ef650ad9 --- /dev/null +++ b/src/main/java/blackjack/domain/Shape.java @@ -0,0 +1,15 @@ +package blackjack.domain; + +public enum Shape { + + HEART("하트"), + DIAMOND("다이아몬드"), + SPADE("스페이드"), + CLUB("클로버"); + + private final String name; + + Shape(String name) { + this.name = name; + } +} From 43e75362011b1ed2bd1d98ee8c9409baec5160ad Mon Sep 17 00:00:00 2001 From: eohaerim Date: Tue, 15 Feb 2022 17:03:41 +0900 Subject: [PATCH 14/57] =?UTF-8?q?feat:=20=EC=B9=B4=EB=93=9C=EC=88=AB?= =?UTF-8?q?=EC=9E=90=EC=9D=98=20=ED=95=A9=EC=9D=B4=20=ED=8A=B9=EC=A0=95=20?= =?UTF-8?q?=EA=B0=92=EB=B3=B4=EB=8B=A4=20=EC=9E=91=EA=B1=B0=EB=82=98=20?= =?UTF-8?q?=EA=B0=99=EC=9D=80=EC=A7=80=20=ED=99=95=EC=9D=B8=ED=95=98?= =?UTF-8?q?=EB=8A=94=20=EA=B8=B0=EB=8A=A5=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/blackjack/domain/CardsUtils.java | 21 +++++++++ .../java/blackjack/domain/CardsUtilsTest.java | 46 +++++++++++++++++++ 2 files changed, 67 insertions(+) create mode 100644 src/main/java/blackjack/domain/CardsUtils.java create mode 100644 src/test/java/blackjack/domain/CardsUtilsTest.java diff --git a/src/main/java/blackjack/domain/CardsUtils.java b/src/main/java/blackjack/domain/CardsUtils.java new file mode 100644 index 00000000..10a61e11 --- /dev/null +++ b/src/main/java/blackjack/domain/CardsUtils.java @@ -0,0 +1,21 @@ +package blackjack.domain; + +import java.util.List; + +public class CardsUtils { + + public static boolean isSumOfCardValueSmallerThanOrEquals(List cards, Integer target) { + Integer sumOfValue = getSumOfValue(cards); + return isSmallerThanOrEquals(sumOfValue, target); + } + + private static Integer getSumOfValue(List cards) { + return cards.stream() + .mapToInt(card -> card.getDenomination().getValue()) + .sum(); + } + + private static boolean isSmallerThanOrEquals(Integer number, Integer target) { + return number <= target; + } +} diff --git a/src/test/java/blackjack/domain/CardsUtilsTest.java b/src/test/java/blackjack/domain/CardsUtilsTest.java new file mode 100644 index 00000000..35adfa0d --- /dev/null +++ b/src/test/java/blackjack/domain/CardsUtilsTest.java @@ -0,0 +1,46 @@ +package blackjack.domain; + +import static org.junit.jupiter.api.Assertions.assertFalse; +import static org.junit.jupiter.api.Assertions.assertTrue; + +import java.util.ArrayList; +import java.util.List; +import org.junit.jupiter.params.ParameterizedTest; +import org.junit.jupiter.params.provider.EnumSource; + +class CardsUtilsTest { + + @ParameterizedTest + @EnumSource(value = Denomination.class, names = {"THREE", "SIX"}) + void 카드들의_숫자합을_구한_것이_특정값보다_작거나_같으면_참이_나와야_한다(Denomination value) { + + //given + List cards = new ArrayList<>(); + cards.add(new Card(Shape.HEART, Denomination.KING)); + cards.add(new Card(Shape.HEART, Denomination.FIVE)); + cards.add(new Card(Shape.HEART, value)); + + //when + boolean result = CardsUtils.isSumOfCardValueSmallerThanOrEquals(cards, 21); + + //then + assertTrue(result); + } + + @ParameterizedTest + @EnumSource(value = Denomination.class, names = {"EIGHT", "NINE"}) + void 카드들의_숫자합을_구한_것이_특정값보다_크면_짓짓이_나와야_한다(Denomination value) { + + //given + List cards = new ArrayList<>(); + cards.add(new Card(Shape.HEART, Denomination.KING)); + cards.add(new Card(Shape.HEART, Denomination.FIVE)); + cards.add(new Card(Shape.HEART, value)); + + //when + boolean result = CardsUtils.isSumOfCardValueSmallerThanOrEquals(cards, 21); + + //then + assertFalse(result); + } +} From 99375ef0d34d0ac755f8a511ad108f5705677d1a Mon Sep 17 00:00:00 2001 From: eohaerim Date: Tue, 15 Feb 2022 17:07:06 +0900 Subject: [PATCH 15/57] =?UTF-8?q?docs:=20README.md=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 16 +++++++--------- 1 file changed, 7 insertions(+), 9 deletions(-) diff --git a/README.md b/README.md index e6d549e2..16434180 100644 --- a/README.md +++ b/README.md @@ -39,16 +39,14 @@ RentCompany -[ ] 처음 시작때 딜러는 1번째 카드를 비공개하고, 나머지 카드만 출력한다. -[ ] 딜러와 플레이어의 최종 승패를 출력한다. +[Card : Denomination, Shape] +- [x] enum으로 1~10,J,Q,K를 구현한다. +- [x] enum으로 하트,스페이드,다이아몬드,클로버를 구현한다. +- [x] value와 shape를 합쳐 한 장의 카드를 생성한다. --[ ] enum으로 1~10,J,Q,K를 구현한다. -- value --[ ] enum으로 하트,스페이드,다이아몬드,클로버를 구현한다. -- shape --[ ] value와 shape를 합쳐 한 장의 카드를 생성한다. - -[Cards] --[ ] 카드 목록을 일급컬렉션화 --[ ] 전체 숫자 합이 특정 값을 초과하는지 안하는지 판단 +[CardsUtils] +-[x] 카드 목록을 받아서 숫자 합을 구한다. +-[x] 전체 숫자 합이 특정 값을 초과하는지 안하는지 판단한다. [cardDeck] -[ ] 카드를 shuffle한다. -[ ] 딜러와 플레이어에게 카드 두장씩 나눠준다. From 24d421fb559b80761cbb555d346388881c38856b Mon Sep 17 00:00:00 2001 From: eohaerim Date: Tue, 15 Feb 2022 18:03:25 +0900 Subject: [PATCH 16/57] =?UTF-8?q?docs:=20Person,Player=20=EA=B8=B0?= =?UTF-8?q?=EB=8A=A5=20=EC=84=A4=EA=B3=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 45 +++++++++++++++++++++++++++------------------ 1 file changed, 27 insertions(+), 18 deletions(-) diff --git a/README.md b/README.md index 16434180..4512948e 100644 --- a/README.md +++ b/README.md @@ -45,21 +45,30 @@ RentCompany - [x] value와 shape를 합쳐 한 장의 카드를 생성한다. [CardsUtils] --[x] 카드 목록을 받아서 숫자 합을 구한다. --[x] 전체 숫자 합이 특정 값을 초과하는지 안하는지 판단한다. - [cardDeck] --[ ] 카드를 shuffle한다. --[ ] 딜러와 플레이어에게 카드 두장씩 나눠준다. - [PlayerCards] - 플레이어이름, Cards cards --[ ] 현재 보유하고 있는 카드의 합을 구한다. --[ ] 카드의 합이 21 이하이면 카드를 추가로 뽑을 것인지 질문한다. - [DealerCards] --[ ] 플레이어들의 카드 추가 여부가 모두 정해진 뒤 카드를 추가로 받는다. --[ ] 카드의 합계가 16이하이면 반드시 받는다. - [GameFinish] --[ ] 플레이어의 카드 합이 21을 초과하면 (딜러의 결과에 관계없이)패배한다. --[ ] 딜러의 카드 합이 21을 초과하면 딜러가 패배한다. --[ ] 카드의 합이 21을 초과하지 않은 모든 플레이어는 승리 - [GameResult] --[ ] +- [x] 카드 목록을 받아서 숫자 합을 구한다. +- [x] 전체 숫자 합이 특정 값을 초과하는지 안하는지 판단한다. +[cardDeck] +- [ ] 카드를 shuffle한다. +- [ ] 딜러와 플레이어에게 카드 두장씩 나눠준다. + +[Person] +- [ ] 모든 사람들은 카드 목록을 갖고 있다. +- [ ] 카드 2장을 전달 인자로 받아 카드 목록을 초기화한 뒤 카드를 추가한다. +- [ ] 카드 1장을 전달 인자로 받아 카드 목록에 추가한다. +[Player extends Person] +- [ ] 플레이어는 추가적으로 이름을 갖고 있다. +- [ ] 생성 시에 플레이어 이름과 2장의 카드가 필요하고, 전달 받은 2장의 카드를 목록에 추가해야 한다. +- [ ] 인자로 전달 받은 카드를 자신의 카드 목록에 추가한다. (Person 기능) +[Dealer extends Person] +- [ ] 플레이어들의 카드 추가 여부가 모두 정해진 뒤 카드를 추가로 받는다. +- [ ] 카드의 합계가 16이하이면 반드시 받는다. + + +[GameController] +- [ ] 카드의 합이 21 이하인지 카드를 추가로 뽑을 것인지 질문한다. +[GameFinish] +- [ ] 플레이어의 카드 합이 21을 초과하면 (딜러의 결과에 관계없이)패배한다. +- [ ] 딜러의 카드 합이 21을 초과하면 딜러가 패배한다. +- [ ] 카드의 합이 21을 초과하지 않은 모든 플레이어는 승리 +[GameResult] +- [ ] From 4863c105d7620031a63b1f10fdaef7a5231a4fa0 Mon Sep 17 00:00:00 2001 From: eohaerim Date: Tue, 15 Feb 2022 18:04:44 +0900 Subject: [PATCH 17/57] docs: create Player, Person --- README.md | 12 +++--- src/main/java/blackjack/domain/Person.java | 23 +++++++++++ src/main/java/blackjack/domain/Player.java | 11 ++++++ .../java/blackjack/domain/PlayerTest.java | 38 +++++++++++++++++++ 4 files changed, 78 insertions(+), 6 deletions(-) create mode 100644 src/main/java/blackjack/domain/Person.java create mode 100644 src/main/java/blackjack/domain/Player.java create mode 100644 src/test/java/blackjack/domain/PlayerTest.java diff --git a/README.md b/README.md index 4512948e..ba1f48c8 100644 --- a/README.md +++ b/README.md @@ -52,13 +52,13 @@ RentCompany - [ ] 딜러와 플레이어에게 카드 두장씩 나눠준다. [Person] -- [ ] 모든 사람들은 카드 목록을 갖고 있다. -- [ ] 카드 2장을 전달 인자로 받아 카드 목록을 초기화한 뒤 카드를 추가한다. -- [ ] 카드 1장을 전달 인자로 받아 카드 목록에 추가한다. +- [x] 모든 사람들은 카드 목록을 갖고 있다. +- [x] 카드 2장을 전달 인자로 받아 카드 목록을 초기화한 뒤 카드를 추가한다. +- [x] 카드 1장을 전달 인자로 받아 카드 목록에 추가한다. [Player extends Person] -- [ ] 플레이어는 추가적으로 이름을 갖고 있다. -- [ ] 생성 시에 플레이어 이름과 2장의 카드가 필요하고, 전달 받은 2장의 카드를 목록에 추가해야 한다. -- [ ] 인자로 전달 받은 카드를 자신의 카드 목록에 추가한다. (Person 기능) +- [x] 플레이어는 추가적으로 이름을 갖고 있다. +- [x] 생성 시에 플레이어 이름과 2장의 카드가 필요하고, 전달 받은 2장의 카드를 목록에 추가해야 한다. (Person 기능) +- [x] 인자로 전달 받은 카드를 자신의 카드 목록에 추가한다. (Person 기능) [Dealer extends Person] - [ ] 플레이어들의 카드 추가 여부가 모두 정해진 뒤 카드를 추가로 받는다. - [ ] 카드의 합계가 16이하이면 반드시 받는다. diff --git a/src/main/java/blackjack/domain/Person.java b/src/main/java/blackjack/domain/Person.java new file mode 100644 index 00000000..e666f2b3 --- /dev/null +++ b/src/main/java/blackjack/domain/Person.java @@ -0,0 +1,23 @@ +package blackjack.domain; + +import java.util.ArrayList; +import java.util.List; + +public abstract class Person { + + protected List cards; + + protected void initTwoCards(Card card1, Card card2) { + cards = new ArrayList<>(); + cards.add(card1); + cards.add(card2); + } + + protected void addCard(Card card) { + cards.add(card); + } + + public List getCards() { + return cards; + } +} diff --git a/src/main/java/blackjack/domain/Player.java b/src/main/java/blackjack/domain/Player.java new file mode 100644 index 00000000..00b07820 --- /dev/null +++ b/src/main/java/blackjack/domain/Player.java @@ -0,0 +1,11 @@ +package blackjack.domain; + +public class Player extends Person { + + private final String name; + + public Player(String name, Card card1, Card card2) { + this.name = name; + initTwoCards(card1, card2); + } +} diff --git a/src/test/java/blackjack/domain/PlayerTest.java b/src/test/java/blackjack/domain/PlayerTest.java new file mode 100644 index 00000000..4b3560ef --- /dev/null +++ b/src/test/java/blackjack/domain/PlayerTest.java @@ -0,0 +1,38 @@ +package blackjack.domain; + +import static org.assertj.core.api.AssertionsForClassTypes.assertThat; + +import org.junit.jupiter.api.Test; + +class PlayerTest { + @Test + void 플레이어를_생성하면_카드목록의_사이즈가_2여야_한다() { + //given + Player player = new Player("kim", + new Card(Shape.HEART, Denomination.EIGHT), + new Card(Shape.HEART, Denomination.FIVE) + ); + + //when + int cardSize = player.getCards().size(); + + //then + assertThat(cardSize).isEqualTo(2); + } + + @Test + void 플레이어는_받은_카드_1장을_목록에_추가해야_한다() { + //given + Player player = new Player("kim", + new Card(Shape.HEART, Denomination.EIGHT), + new Card(Shape.HEART, Denomination.FIVE) + ); + player.addCard(new Card(Shape.HEART, Denomination.NINE)); + + //when + int cardSize = player.getCards().size(); + + //then + assertThat(cardSize).isEqualTo(3); + } +} From f3a00b42b8bfb9bffce4738baf8f17eb6e730c5c Mon Sep 17 00:00:00 2001 From: eohaerim Date: Tue, 15 Feb 2022 18:11:34 +0900 Subject: [PATCH 18/57] =?UTF-8?q?refactor=20:=20package=20=EC=9D=B4?= =?UTF-8?q?=EB=8F=99?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/blackjack/domain/{ => card}/Card.java | 2 +- src/main/java/blackjack/domain/{ => card}/CardsUtils.java | 2 +- src/main/java/blackjack/domain/{ => card}/Denomination.java | 2 +- src/main/java/blackjack/domain/{ => card}/Shape.java | 2 +- src/main/java/blackjack/domain/{ => person}/Person.java | 3 ++- src/main/java/blackjack/domain/{ => person}/Player.java | 4 +++- .../java/blackjack/domain/{ => card}/CardsUtilsTest.java | 2 +- src/test/java/blackjack/domain/{ => person}/PlayerTest.java | 6 +++++- 8 files changed, 15 insertions(+), 8 deletions(-) rename src/main/java/blackjack/domain/{ => card}/Card.java (91%) rename src/main/java/blackjack/domain/{ => card}/CardsUtils.java (94%) rename src/main/java/blackjack/domain/{ => card}/Denomination.java (91%) rename src/main/java/blackjack/domain/{ => card}/Shape.java (87%) rename src/main/java/blackjack/domain/{ => person}/Person.java (85%) rename src/main/java/blackjack/domain/{ => person}/Player.java (74%) rename src/test/java/blackjack/domain/{ => card}/CardsUtilsTest.java (97%) rename src/test/java/blackjack/domain/{ => person}/PlayerTest.java (87%) diff --git a/src/main/java/blackjack/domain/Card.java b/src/main/java/blackjack/domain/card/Card.java similarity index 91% rename from src/main/java/blackjack/domain/Card.java rename to src/main/java/blackjack/domain/card/Card.java index 842a1ca7..260cf257 100644 --- a/src/main/java/blackjack/domain/Card.java +++ b/src/main/java/blackjack/domain/card/Card.java @@ -1,4 +1,4 @@ -package blackjack.domain; +package blackjack.domain.card; public class Card { diff --git a/src/main/java/blackjack/domain/CardsUtils.java b/src/main/java/blackjack/domain/card/CardsUtils.java similarity index 94% rename from src/main/java/blackjack/domain/CardsUtils.java rename to src/main/java/blackjack/domain/card/CardsUtils.java index 10a61e11..391b76f0 100644 --- a/src/main/java/blackjack/domain/CardsUtils.java +++ b/src/main/java/blackjack/domain/card/CardsUtils.java @@ -1,4 +1,4 @@ -package blackjack.domain; +package blackjack.domain.card; import java.util.List; diff --git a/src/main/java/blackjack/domain/Denomination.java b/src/main/java/blackjack/domain/card/Denomination.java similarity index 91% rename from src/main/java/blackjack/domain/Denomination.java rename to src/main/java/blackjack/domain/card/Denomination.java index 60c3997b..8b07d8f2 100644 --- a/src/main/java/blackjack/domain/Denomination.java +++ b/src/main/java/blackjack/domain/card/Denomination.java @@ -1,4 +1,4 @@ -package blackjack.domain; +package blackjack.domain.card; public enum Denomination { diff --git a/src/main/java/blackjack/domain/Shape.java b/src/main/java/blackjack/domain/card/Shape.java similarity index 87% rename from src/main/java/blackjack/domain/Shape.java rename to src/main/java/blackjack/domain/card/Shape.java index ef650ad9..518e10cd 100644 --- a/src/main/java/blackjack/domain/Shape.java +++ b/src/main/java/blackjack/domain/card/Shape.java @@ -1,4 +1,4 @@ -package blackjack.domain; +package blackjack.domain.card; public enum Shape { diff --git a/src/main/java/blackjack/domain/Person.java b/src/main/java/blackjack/domain/person/Person.java similarity index 85% rename from src/main/java/blackjack/domain/Person.java rename to src/main/java/blackjack/domain/person/Person.java index e666f2b3..4d5e824e 100644 --- a/src/main/java/blackjack/domain/Person.java +++ b/src/main/java/blackjack/domain/person/Person.java @@ -1,5 +1,6 @@ -package blackjack.domain; +package blackjack.domain.person; +import blackjack.domain.card.Card; import java.util.ArrayList; import java.util.List; diff --git a/src/main/java/blackjack/domain/Player.java b/src/main/java/blackjack/domain/person/Player.java similarity index 74% rename from src/main/java/blackjack/domain/Player.java rename to src/main/java/blackjack/domain/person/Player.java index 00b07820..c0672ca3 100644 --- a/src/main/java/blackjack/domain/Player.java +++ b/src/main/java/blackjack/domain/person/Player.java @@ -1,4 +1,6 @@ -package blackjack.domain; +package blackjack.domain.person; + +import blackjack.domain.card.Card; public class Player extends Person { diff --git a/src/test/java/blackjack/domain/CardsUtilsTest.java b/src/test/java/blackjack/domain/card/CardsUtilsTest.java similarity index 97% rename from src/test/java/blackjack/domain/CardsUtilsTest.java rename to src/test/java/blackjack/domain/card/CardsUtilsTest.java index 35adfa0d..b7a48bbb 100644 --- a/src/test/java/blackjack/domain/CardsUtilsTest.java +++ b/src/test/java/blackjack/domain/card/CardsUtilsTest.java @@ -1,4 +1,4 @@ -package blackjack.domain; +package blackjack.domain.card; import static org.junit.jupiter.api.Assertions.assertFalse; import static org.junit.jupiter.api.Assertions.assertTrue; diff --git a/src/test/java/blackjack/domain/PlayerTest.java b/src/test/java/blackjack/domain/person/PlayerTest.java similarity index 87% rename from src/test/java/blackjack/domain/PlayerTest.java rename to src/test/java/blackjack/domain/person/PlayerTest.java index 4b3560ef..594b5979 100644 --- a/src/test/java/blackjack/domain/PlayerTest.java +++ b/src/test/java/blackjack/domain/person/PlayerTest.java @@ -1,10 +1,14 @@ -package blackjack.domain; +package blackjack.domain.person; import static org.assertj.core.api.AssertionsForClassTypes.assertThat; +import blackjack.domain.card.Card; +import blackjack.domain.card.Denomination; +import blackjack.domain.card.Shape; import org.junit.jupiter.api.Test; class PlayerTest { + @Test void 플레이어를_생성하면_카드목록의_사이즈가_2여야_한다() { //given From ca9bc9b107263ae745213084bb9af95cd9ef2901 Mon Sep 17 00:00:00 2001 From: eohaerim Date: Tue, 15 Feb 2022 18:17:44 +0900 Subject: [PATCH 19/57] feat: create Dealer --- .../java/blackjack/domain/person/Dealer.java | 10 +++++ .../blackjack/domain/person/DealerTest.java | 41 +++++++++++++++++++ 2 files changed, 51 insertions(+) create mode 100644 src/main/java/blackjack/domain/person/Dealer.java create mode 100644 src/test/java/blackjack/domain/person/DealerTest.java diff --git a/src/main/java/blackjack/domain/person/Dealer.java b/src/main/java/blackjack/domain/person/Dealer.java new file mode 100644 index 00000000..62955487 --- /dev/null +++ b/src/main/java/blackjack/domain/person/Dealer.java @@ -0,0 +1,10 @@ +package blackjack.domain.person; + +import blackjack.domain.card.Card; + +public class Dealer extends Person { + + public Dealer(Card card1, Card card2) { + initTwoCards(card1, card2); + } +} diff --git a/src/test/java/blackjack/domain/person/DealerTest.java b/src/test/java/blackjack/domain/person/DealerTest.java new file mode 100644 index 00000000..de4284ad --- /dev/null +++ b/src/test/java/blackjack/domain/person/DealerTest.java @@ -0,0 +1,41 @@ +package blackjack.domain.person; + +import static org.assertj.core.api.AssertionsForClassTypes.assertThat; + +import blackjack.domain.card.Card; +import blackjack.domain.card.Denomination; +import blackjack.domain.card.Shape; +import org.junit.jupiter.api.Test; + +class DealerTest { + @Test + void 딜러를_생성하면_카드목록의_사이즈가_2여야_한다() { + //given + Dealer dealer = new Dealer( + new Card(Shape.HEART, Denomination.EIGHT), + new Card(Shape.HEART, Denomination.FIVE) + ); + + //when + int cardSize = dealer.getCards().size(); + + //then + assertThat(cardSize).isEqualTo(2); + } + + @Test + void 플레이어는_받은_카드_1장을_목록에_추가해야_한다() { + //given + Dealer dealer = new Dealer( + new Card(Shape.HEART, Denomination.EIGHT), + new Card(Shape.HEART, Denomination.FIVE) + ); + dealer.addCard(new Card(Shape.HEART, Denomination.NINE)); + + //when + int cardSize = dealer.getCards().size(); + + //then + assertThat(cardSize).isEqualTo(3); + } +} From a8475742ee221752bb3fbb895cfa4b98f1fa5a54 Mon Sep 17 00:00:00 2001 From: eohaerim Date: Tue, 15 Feb 2022 21:02:58 +0900 Subject: [PATCH 20/57] =?UTF-8?q?refactor:=20Person=EC=9D=84=20=EC=9D=BC?= =?UTF-8?q?=EB=B0=98=ED=81=B4=EB=9E=98=EC=8A=A4=EB=A1=9C=20=EB=B3=80?= =?UTF-8?q?=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/blackjack/domain/person/Person.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/blackjack/domain/person/Person.java b/src/main/java/blackjack/domain/person/Person.java index 4d5e824e..f7985c5d 100644 --- a/src/main/java/blackjack/domain/person/Person.java +++ b/src/main/java/blackjack/domain/person/Person.java @@ -4,7 +4,7 @@ import java.util.ArrayList; import java.util.List; -public abstract class Person { +public class Person { protected List cards; From cdc3af1f3eca13694a6ee9fd8b2a29712d314b0d Mon Sep 17 00:00:00 2001 From: eohaerim Date: Tue, 15 Feb 2022 21:24:06 +0900 Subject: [PATCH 21/57] =?UTF-8?q?docs:=20Dealer,=20CardDeck=20=EA=B8=B0?= =?UTF-8?q?=EB=8A=A5=EC=84=A4=EA=B3=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 18 +++++++++++------- 1 file changed, 11 insertions(+), 7 deletions(-) diff --git a/README.md b/README.md index ba1f48c8..3cb09f7b 100644 --- a/README.md +++ b/README.md @@ -47,9 +47,6 @@ RentCompany [CardsUtils] - [x] 카드 목록을 받아서 숫자 합을 구한다. - [x] 전체 숫자 합이 특정 값을 초과하는지 안하는지 판단한다. -[cardDeck] -- [ ] 카드를 shuffle한다. -- [ ] 딜러와 플레이어에게 카드 두장씩 나눠준다. [Person] - [x] 모든 사람들은 카드 목록을 갖고 있다. @@ -58,11 +55,18 @@ RentCompany [Player extends Person] - [x] 플레이어는 추가적으로 이름을 갖고 있다. - [x] 생성 시에 플레이어 이름과 2장의 카드가 필요하고, 전달 받은 2장의 카드를 목록에 추가해야 한다. (Person 기능) -- [x] 인자로 전달 받은 카드를 자신의 카드 목록에 추가한다. (Person 기능) +- [x] 인자로 전달 받은 1장의 카드를 자신의 카드 목록에 추가한다. (Person 기능) +- [Dealer extends Person] -- [ ] 플레이어들의 카드 추가 여부가 모두 정해진 뒤 카드를 추가로 받는다. -- [ ] 카드의 합계가 16이하이면 반드시 받는다. +- [x] 생성 시에 CardDeck을 초기화한다. +- [x] 게임 초반에 2장의 카드를 전달 받아서 카드 목록에 추가해야 한다. (Person 기능) +- [x] 인자로 전달 받은 1장의 카드를 자신의 카드 목록에 추가한다. (Person 기능) +- [ ] 2장 또는 1장의 카드를 cardDeck으로부터 받아서 반환한다. +[CardDeck] +- [ ] 전체 카드를 만들어서 리스트로 반환한다. (static) +- [ ] 인스턴스 생성 시, 만들어진 52장의 카드로 멤버변수를 초기화한다. +- [ ] 전체 카드를 shuffle한 뒤 2장 또는 1장의 카드를 반환한다. -> 반환한 카드를 목록에서 제거한다. [GameController] - [ ] 카드의 합이 21 이하인지 카드를 추가로 뽑을 것인지 질문한다. @@ -71,4 +75,4 @@ RentCompany - [ ] 딜러의 카드 합이 21을 초과하면 딜러가 패배한다. - [ ] 카드의 합이 21을 초과하지 않은 모든 플레이어는 승리 [GameResult] -- [ ] +-[ ] From a1079a032d7a43ae2b249230eb40feb50e2f3de3 Mon Sep 17 00:00:00 2001 From: eohaerim Date: Tue, 15 Feb 2022 23:12:32 +0900 Subject: [PATCH 22/57] =?UTF-8?q?feat:=20Denomination=EC=97=90=20sign=20?= =?UTF-8?q?=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../blackjack/domain/card/Denomination.java | 34 +++++++++++-------- 1 file changed, 20 insertions(+), 14 deletions(-) diff --git a/src/main/java/blackjack/domain/card/Denomination.java b/src/main/java/blackjack/domain/card/Denomination.java index 8b07d8f2..d9917d44 100644 --- a/src/main/java/blackjack/domain/card/Denomination.java +++ b/src/main/java/blackjack/domain/card/Denomination.java @@ -2,26 +2,32 @@ public enum Denomination { - ACE(1), - TWO(2), - THREE(3), - FOUR(4), - FIVE(5), - SIX(6), - SEVEN(7), - EIGHT(8), - NINE(9), - TEN(10), - JACK(10), - QUEEN(10), - KING(10); + ACE("A", 1), + TWO("2", 2), + THREE("3",3), + FOUR("4",4), + FIVE("5", 5), + SIX("6",6), + SEVEN("7",7), + EIGHT("8",8), + NINE("9",9), + TEN("10",10), + JACK("J", 10), + QUEEN("Q", 10), + KING("K",10); + private final String sign; private final int value; - Denomination(int value) { + Denomination(String sign, int value) { + this.sign = sign; this.value = value; } + public String getSign() { + return sign; + } + public int getValue() { return value; } From 61e80849e4660c3107fd4f4e180945b146367df5 Mon Sep 17 00:00:00 2001 From: eohaerim Date: Tue, 15 Feb 2022 23:12:50 +0900 Subject: [PATCH 23/57] =?UTF-8?q?feat:=20getter=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/blackjack/domain/card/Shape.java | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/main/java/blackjack/domain/card/Shape.java b/src/main/java/blackjack/domain/card/Shape.java index 518e10cd..5c9da8eb 100644 --- a/src/main/java/blackjack/domain/card/Shape.java +++ b/src/main/java/blackjack/domain/card/Shape.java @@ -9,6 +9,10 @@ public enum Shape { private final String name; + public String getName() { + return name; + } + Shape(String name) { this.name = name; } From 9427d2586041cf02c2895e8208eb5638a11aec97 Mon Sep 17 00:00:00 2001 From: eohaerim Date: Tue, 15 Feb 2022 23:15:13 +0900 Subject: [PATCH 24/57] =?UTF-8?q?fix:=20player=20=EC=83=9D=EC=84=B1?= =?UTF-8?q?=EC=9E=90=20=EC=88=98=EC=A0=95,=20initCards=EB=A1=9C=20?= =?UTF-8?q?=EB=A9=94=EC=86=8C=EB=93=9C=EB=AA=85=20=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/blackjack/domain/person/Person.java | 2 +- .../java/blackjack/domain/person/Player.java | 7 ++-- .../blackjack/domain/person/PlayerTest.java | 35 ++++++++++++------- 3 files changed, 29 insertions(+), 15 deletions(-) diff --git a/src/main/java/blackjack/domain/person/Person.java b/src/main/java/blackjack/domain/person/Person.java index f7985c5d..7fbb43e4 100644 --- a/src/main/java/blackjack/domain/person/Person.java +++ b/src/main/java/blackjack/domain/person/Person.java @@ -8,7 +8,7 @@ public class Person { protected List cards; - protected void initTwoCards(Card card1, Card card2) { + protected void initCards(Card card1, Card card2) { cards = new ArrayList<>(); cards.add(card1); cards.add(card2); diff --git a/src/main/java/blackjack/domain/person/Player.java b/src/main/java/blackjack/domain/person/Player.java index c0672ca3..1bf1c93b 100644 --- a/src/main/java/blackjack/domain/person/Player.java +++ b/src/main/java/blackjack/domain/person/Player.java @@ -6,8 +6,11 @@ public class Player extends Person { private final String name; - public Player(String name, Card card1, Card card2) { + public Player(String name) { this.name = name; - initTwoCards(card1, card2); + } + + public String getName() { + return name; } } diff --git a/src/test/java/blackjack/domain/person/PlayerTest.java b/src/test/java/blackjack/domain/person/PlayerTest.java index 594b5979..14fc99dc 100644 --- a/src/test/java/blackjack/domain/person/PlayerTest.java +++ b/src/test/java/blackjack/domain/person/PlayerTest.java @@ -5,36 +5,47 @@ import blackjack.domain.card.Card; import blackjack.domain.card.Denomination; import blackjack.domain.card.Shape; +import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; class PlayerTest { @Test - void 플레이어를_생성하면_카드목록의_사이즈가_2여야_한다() { + void 플레이어를_생성하면_이름을_가져야_한다() { + //given, when + Player player = new Player("kim"); + + //then + assertThat(player.getName()).isEqualTo("kim"); + } + + @Test + void 카드를_init하면_두_장의_카드를_가져야_한다() { //given - Player player = new Player("kim", - new Card(Shape.HEART, Denomination.EIGHT), - new Card(Shape.HEART, Denomination.FIVE) - ); + Player player = new Player("eo"); //when - int cardSize = player.getCards().size(); + player.initCards( + new Card(Shape.HEART, Denomination.EIGHT), + new Card(Shape.HEART, Denomination.KING) + ); //then - assertThat(cardSize).isEqualTo(2); + assertThat(player.getCards().size()).isEqualTo(2); } @Test void 플레이어는_받은_카드_1장을_목록에_추가해야_한다() { //given - Player player = new Player("kim", - new Card(Shape.HEART, Denomination.EIGHT), - new Card(Shape.HEART, Denomination.FIVE) + Player player = new Player("eo"); + player.initCards( + new Card(Shape.HEART, Denomination.NINE), + new Card(Shape.HEART, Denomination.NINE) ); - player.addCard(new Card(Shape.HEART, Denomination.NINE)); + player.addCard(new Card(Shape.HEART, Denomination.KING)); //when - int cardSize = player.getCards().size(); + int cardSize = player.getCards().size(); //then assertThat(cardSize).isEqualTo(3); From 08557de6ba6f43673fb39d7e04f1646397db11af Mon Sep 17 00:00:00 2001 From: eohaerim Date: Tue, 15 Feb 2022 23:15:43 +0900 Subject: [PATCH 25/57] =?UTF-8?q?fix:=20=EC=83=9D=EC=84=B1=EC=9E=90?= =?UTF-8?q?=EB=8A=94=20cardDeck=EB=A7=8C=20=EC=B4=88=EA=B8=B0=ED=99=94?= =?UTF-8?q?=ED=95=98=EB=8F=84=EB=A1=9D=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/blackjack/domain/person/Dealer.java | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/src/main/java/blackjack/domain/person/Dealer.java b/src/main/java/blackjack/domain/person/Dealer.java index 62955487..99bbcd64 100644 --- a/src/main/java/blackjack/domain/person/Dealer.java +++ b/src/main/java/blackjack/domain/person/Dealer.java @@ -1,10 +1,13 @@ package blackjack.domain.person; import blackjack.domain.card.Card; +import blackjack.domain.card.CardDeck; public class Dealer extends Person { - public Dealer(Card card1, Card card2) { - initTwoCards(card1, card2); + CardDeck cardDeck; + + public Dealer() { + cardDeck = new CardDeck(); } } From 856da6c7025dc227affb3cd2411249708f0656f1 Mon Sep 17 00:00:00 2001 From: eohaerim Date: Tue, 15 Feb 2022 23:16:49 +0900 Subject: [PATCH 26/57] =?UTF-8?q?test:=20initCards,=20addCard,=20construct?= =?UTF-8?q?or=20=ED=83=9C=EC=8A=A4=ED=8A=B8=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../blackjack/domain/person/DealerTest.java | 25 +++++++++---------- 1 file changed, 12 insertions(+), 13 deletions(-) diff --git a/src/test/java/blackjack/domain/person/DealerTest.java b/src/test/java/blackjack/domain/person/DealerTest.java index de4284ad..4cd56d52 100644 --- a/src/test/java/blackjack/domain/person/DealerTest.java +++ b/src/test/java/blackjack/domain/person/DealerTest.java @@ -8,29 +8,28 @@ import org.junit.jupiter.api.Test; class DealerTest { + @Test - void 딜러를_생성하면_카드목록의_사이즈가_2여야_한다() { - //given - Dealer dealer = new Dealer( - new Card(Shape.HEART, Denomination.EIGHT), - new Card(Shape.HEART, Denomination.FIVE) - ); + void 카드를_init하면_2장의_카드를_가져야_한다() { + Dealer dealer = new Dealer(); + dealer.initCards( + new Card(Shape.CLUB, Denomination.FOUR), + new Card(Shape.SPADE, Denomination.KING)); - //when int cardSize = dealer.getCards().size(); - //then assertThat(cardSize).isEqualTo(2); } @Test - void 플레이어는_받은_카드_1장을_목록에_추가해야_한다() { + void 딜러는_받은_카드_1장을_목록에_추가해야_한다() { //given - Dealer dealer = new Dealer( - new Card(Shape.HEART, Denomination.EIGHT), - new Card(Shape.HEART, Denomination.FIVE) + Dealer dealer = new Dealer(); + dealer.initCards( + new Card(Shape.HEART, Denomination.NINE), + new Card(Shape.HEART, Denomination.NINE) ); - dealer.addCard(new Card(Shape.HEART, Denomination.NINE)); + dealer.addCard(new Card(Shape.HEART, Denomination.NINE)); //when int cardSize = dealer.getCards().size(); From 60bae55abbb94bb1e4c00ef33d4e198a22520c26 Mon Sep 17 00:00:00 2001 From: eohaerim Date: Tue, 15 Feb 2022 23:17:42 +0900 Subject: [PATCH 27/57] =?UTF-8?q?feat:=20=EC=B9=B4=EB=93=9C=20=EB=AA=A9?= =?UTF-8?q?=EB=A1=9D=EC=9D=84=20=EC=83=9D=EC=84=B1=ED=95=98=EB=8A=94=20?= =?UTF-8?q?=EA=B8=B0=EB=8A=A5=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/blackjack/domain/card/CardDeck.java | 29 +++++++++++++++++++ .../blackjack/domain/card/CardDeckTest.java | 22 ++++++++++++++ 2 files changed, 51 insertions(+) create mode 100644 src/main/java/blackjack/domain/card/CardDeck.java create mode 100644 src/test/java/blackjack/domain/card/CardDeckTest.java diff --git a/src/main/java/blackjack/domain/card/CardDeck.java b/src/main/java/blackjack/domain/card/CardDeck.java new file mode 100644 index 00000000..a934e960 --- /dev/null +++ b/src/main/java/blackjack/domain/card/CardDeck.java @@ -0,0 +1,29 @@ +package blackjack.domain.card; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; + +public class CardDeck { + + List cards; + + public CardDeck() { + cards = createCardDeck(); + } + + public static List createCardDeck() { + List cards = new ArrayList<>(); + + for (Shape shape : Shape.values()) { + Arrays.stream(Denomination.values()) + .map(denomination -> new Card(shape, denomination)) + .forEach(cards::add); + } + return cards; + } + + public List getCards() { + return cards; + } +} diff --git a/src/test/java/blackjack/domain/card/CardDeckTest.java b/src/test/java/blackjack/domain/card/CardDeckTest.java new file mode 100644 index 00000000..e1695c75 --- /dev/null +++ b/src/test/java/blackjack/domain/card/CardDeckTest.java @@ -0,0 +1,22 @@ +package blackjack.domain.card; + +import static org.assertj.core.api.AssertionsForClassTypes.assertThat; + +import java.util.List; +import org.junit.jupiter.api.Test; + +class CardDeckTest { + + @Test + void 카드덱은_52가지_카드를_생성해야_한다() { + List cards = CardDeck.createCardDeck(); + assertThat(cards.size()).isEqualTo(52); + } + + @Test + void 인스턴스를_생성하면_52가지_카드를_가진다() { + CardDeck cardDeck = new CardDeck(); + assertThat(cardDeck.getCards().size()).isEqualTo(52); + } + +} From b9d844c58416ced4f440ec02b08785f24656ee04 Mon Sep 17 00:00:00 2001 From: eohaerim Date: Tue, 15 Feb 2022 23:18:25 +0900 Subject: [PATCH 28/57] =?UTF-8?q?docs:=20=EA=B5=AC=ED=98=84=ED=95=9C=20?= =?UTF-8?q?=EA=B8=B0=EB=8A=A5=20=EC=B2=B4=ED=81=AC,=20=EA=B8=B0=EB=8A=A5?= =?UTF-8?q?=20=EC=84=A4=EA=B3=84=20=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 24 +++++++++++++++--------- 1 file changed, 15 insertions(+), 9 deletions(-) diff --git a/README.md b/README.md index 3cb09f7b..85d7db0e 100644 --- a/README.md +++ b/README.md @@ -50,26 +50,32 @@ RentCompany [Person] - [x] 모든 사람들은 카드 목록을 갖고 있다. -- [x] 카드 2장을 전달 인자로 받아 카드 목록을 초기화한 뒤 카드를 추가한다. -- [x] 카드 1장을 전달 인자로 받아 카드 목록에 추가한다. +- [x] 카드 목록을 초기화한다. +- [x] 카드 1장을 인자로 전달 받아 카드 목록에 추가한다. [Player extends Person] - [x] 플레이어는 추가적으로 이름을 갖고 있다. -- [x] 생성 시에 플레이어 이름과 2장의 카드가 필요하고, 전달 받은 2장의 카드를 목록에 추가해야 한다. (Person 기능) -- [x] 인자로 전달 받은 1장의 카드를 자신의 카드 목록에 추가한다. (Person 기능) +- [x] 생성 시에 플레이어 이름만 인자로 전달 받아서 자기의 이름을 초기화한다. +- [x] 카드목록을 초기화한다. (Person 기능) + - 카드 리스트를 초기화하고, 2장의 카드를 전달 받아서 카드 목록에 추가해야 한다. +- [x] 전달 받은 1장의 카드를 자신의 카드 목록에 추가한다. (Person 기능) - [Dealer extends Person] +딜러가 카드를 섞어서 뽑는 역할. CardDeck으로 분리. - [x] 생성 시에 CardDeck을 초기화한다. -- [x] 게임 초반에 2장의 카드를 전달 받아서 카드 목록에 추가해야 한다. (Person 기능) +- [x] 카드목록을 초기화한다. (Person 기능) + - 카드 리스트를 초기화하고, 2장의 카드를 전달 받아서 카드 목록에 추가해야 한다. - [x] 인자로 전달 받은 1장의 카드를 자신의 카드 목록에 추가한다. (Person 기능) -- [ ] 2장 또는 1장의 카드를 cardDeck으로부터 받아서 반환한다. +- [ ] 전달 인자로 받은 장수만큼 카드를 반환한다. [CardDeck] -- [ ] 전체 카드를 만들어서 리스트로 반환한다. (static) -- [ ] 인스턴스 생성 시, 만들어진 52장의 카드로 멤버변수를 초기화한다. -- [ ] 전체 카드를 shuffle한 뒤 2장 또는 1장의 카드를 반환한다. -> 반환한 카드를 목록에서 제거한다. +- [x] 전체 카드를 만들어서 리스트로 반환한다. (static) +- [x] 인스턴스 생성 시, 만들어진 52장의 카드로 멤버변수를 초기화한다. +- [ ] shuffle한 뒤 전달인자로 받은 수만큼 카드를 반환하고 제거한다. [GameController] - [ ] 카드의 합이 21 이하인지 카드를 추가로 뽑을 것인지 질문한다. +- [ ] 딜러에게 필요한 장수만큼 카드를 요구한다. +- [ ] 반환 받은 카드를 통해 딜러와 플레이어들을 초기화한다. [GameFinish] - [ ] 플레이어의 카드 합이 21을 초과하면 (딜러의 결과에 관계없이)패배한다. - [ ] 딜러의 카드 합이 21을 초과하면 딜러가 패배한다. From f37cbca75f00a65f3fef0ebfade116efef57dc4d Mon Sep 17 00:00:00 2001 From: eohaerim Date: Wed, 16 Feb 2022 00:00:52 +0900 Subject: [PATCH 29/57] =?UTF-8?q?refactor:=20List=EB=A5=BC=20=EB=B0=A9?= =?UTF-8?q?=EC=96=B4=EC=A0=81=20=EB=B3=B5=EC=82=AC=ED=95=B4=EC=84=9C=20?= =?UTF-8?q?=EB=B0=98=ED=99=98=ED=95=98=EB=8F=84=EB=A1=9D=20=EB=B3=80?= =?UTF-8?q?=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/blackjack/domain/person/Person.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/blackjack/domain/person/Person.java b/src/main/java/blackjack/domain/person/Person.java index 7fbb43e4..98012c5c 100644 --- a/src/main/java/blackjack/domain/person/Person.java +++ b/src/main/java/blackjack/domain/person/Person.java @@ -19,6 +19,6 @@ protected void addCard(Card card) { } public List getCards() { - return cards; + return new ArrayList<>(cards); } } From 063732b18f18db57890b413da191e73456a81aa7 Mon Sep 17 00:00:00 2001 From: eohaerim Date: Wed, 16 Feb 2022 00:01:34 +0900 Subject: [PATCH 30/57] =?UTF-8?q?feat:=20=EA=B0=9C=EC=88=98=EB=A7=8C?= =?UTF-8?q?=ED=81=BC=20=EC=B9=B4=EB=93=9C=20=EB=BD=91=EC=95=84=EC=84=9C=20?= =?UTF-8?q?=EB=B0=98=ED=99=98=ED=95=98=EB=8A=94=20=EA=B8=B0=EB=8A=A5=20?= =?UTF-8?q?=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/blackjack/domain/card/CardDeck.java | 18 ++++++++++++++++-- .../blackjack/domain/card/CardDeckTest.java | 12 ++++++++++++ 2 files changed, 28 insertions(+), 2 deletions(-) diff --git a/src/main/java/blackjack/domain/card/CardDeck.java b/src/main/java/blackjack/domain/card/CardDeck.java index a934e960..8008d2b6 100644 --- a/src/main/java/blackjack/domain/card/CardDeck.java +++ b/src/main/java/blackjack/domain/card/CardDeck.java @@ -2,11 +2,14 @@ import java.util.ArrayList; import java.util.Arrays; +import java.util.Collections; import java.util.List; public class CardDeck { - List cards; + public static final int FIRST_INDEX = 0; + + private List cards; public CardDeck() { cards = createCardDeck(); @@ -23,7 +26,18 @@ public static List createCardDeck() { return cards; } + public List pickCards(int numberOfCard) { + Collections.shuffle(cards); + List pickedCards = new ArrayList<>(); + + for (int i = 0; i < numberOfCard; i++) { + pickedCards.add(cards.get(FIRST_INDEX)); + cards.remove(FIRST_INDEX); + } + return pickedCards; + } + public List getCards() { - return cards; + return new ArrayList<>(cards); } } diff --git a/src/test/java/blackjack/domain/card/CardDeckTest.java b/src/test/java/blackjack/domain/card/CardDeckTest.java index e1695c75..cf42290a 100644 --- a/src/test/java/blackjack/domain/card/CardDeckTest.java +++ b/src/test/java/blackjack/domain/card/CardDeckTest.java @@ -1,6 +1,7 @@ package blackjack.domain.card; import static org.assertj.core.api.AssertionsForClassTypes.assertThat; +import static org.junit.jupiter.api.Assertions.assertAll; import java.util.List; import org.junit.jupiter.api.Test; @@ -19,4 +20,15 @@ class CardDeckTest { assertThat(cardDeck.getCards().size()).isEqualTo(52); } + @Test + void 전달받은_개수만큼_카드를_뽑아서_반환한다() { + CardDeck cardDeck = new CardDeck(); + int initialSize = cardDeck.getCards().size(); + List pickedCards = cardDeck.pickCards(5); + + assertAll( + () -> assertThat(pickedCards.size()).isEqualTo(5), + () -> assertThat(cardDeck.getCards().size()).isEqualTo(initialSize - 5) + ); + } } From 5e6fad3c18ad44e2b8eaa3e68e78bd6e17a9ea74 Mon Sep 17 00:00:00 2001 From: eohaerim Date: Wed, 16 Feb 2022 00:02:19 +0900 Subject: [PATCH 31/57] =?UTF-8?q?docs:=20CardDeck=EC=9D=98=20=EC=B9=B4?= =?UTF-8?q?=EB=93=9C=EB=B0=98=ED=99=98=20=EA=B8=B0=EB=8A=A5=20=EA=B5=AC?= =?UTF-8?q?=ED=98=84=20=EC=B2=B4=ED=81=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 85d7db0e..249e9782 100644 --- a/README.md +++ b/README.md @@ -70,7 +70,7 @@ RentCompany [CardDeck] - [x] 전체 카드를 만들어서 리스트로 반환한다. (static) - [x] 인스턴스 생성 시, 만들어진 52장의 카드로 멤버변수를 초기화한다. -- [ ] shuffle한 뒤 전달인자로 받은 수만큼 카드를 반환하고 제거한다. +- [x] shuffle한 뒤 전달인자로 받은 수만큼 카드를 뽑아서 반환한다. (제거하면서 반환한다.) [GameController] - [ ] 카드의 합이 21 이하인지 카드를 추가로 뽑을 것인지 질문한다. From 380dc86a27c542f9c2c02e5791f56dfd1578965d Mon Sep 17 00:00:00 2001 From: eohaerim Date: Wed, 16 Feb 2022 17:06:48 +0900 Subject: [PATCH 32/57] =?UTF-8?q?refactor:=20numberOfCards=EB=A1=9C=20?= =?UTF-8?q?=EB=B3=80=EC=88=98=EB=AA=85=EB=B3=80=EA=B2=BD,=20static=20?= =?UTF-8?q?=EB=A9=94=EC=86=8C=EB=93=9C=20import=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/card/CardDeck.java | 4 ++-- .../java/blackjack/domain/card/CardDeckTest.java | 12 ++++++------ 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/src/main/java/blackjack/domain/card/CardDeck.java b/src/main/java/blackjack/domain/card/CardDeck.java index 8008d2b6..1b0252e7 100644 --- a/src/main/java/blackjack/domain/card/CardDeck.java +++ b/src/main/java/blackjack/domain/card/CardDeck.java @@ -26,11 +26,11 @@ public static List createCardDeck() { return cards; } - public List pickCards(int numberOfCard) { + public List pickCards(int numberOfCards) { Collections.shuffle(cards); List pickedCards = new ArrayList<>(); - for (int i = 0; i < numberOfCard; i++) { + for (int i = 0; i < numberOfCards; i++) { pickedCards.add(cards.get(FIRST_INDEX)); cards.remove(FIRST_INDEX); } diff --git a/src/test/java/blackjack/domain/card/CardDeckTest.java b/src/test/java/blackjack/domain/card/CardDeckTest.java index cf42290a..4c96c535 100644 --- a/src/test/java/blackjack/domain/card/CardDeckTest.java +++ b/src/test/java/blackjack/domain/card/CardDeckTest.java @@ -1,6 +1,6 @@ package blackjack.domain.card; -import static org.assertj.core.api.AssertionsForClassTypes.assertThat; +import static org.assertj.core.api.Assertions.assertThat; import static org.junit.jupiter.api.Assertions.assertAll; import java.util.List; @@ -11,24 +11,24 @@ class CardDeckTest { @Test void 카드덱은_52가지_카드를_생성해야_한다() { List cards = CardDeck.createCardDeck(); - assertThat(cards.size()).isEqualTo(52); + assertThat(cards).hasSize(52); } @Test void 인스턴스를_생성하면_52가지_카드를_가진다() { CardDeck cardDeck = new CardDeck(); - assertThat(cardDeck.getCards().size()).isEqualTo(52); + assertThat(cardDeck.getCards()).hasSize(52); } @Test void 전달받은_개수만큼_카드를_뽑아서_반환한다() { CardDeck cardDeck = new CardDeck(); - int initialSize = cardDeck.getCards().size(); + List initialCards = cardDeck.getCards(); List pickedCards = cardDeck.pickCards(5); assertAll( - () -> assertThat(pickedCards.size()).isEqualTo(5), - () -> assertThat(cardDeck.getCards().size()).isEqualTo(initialSize - 5) + () -> assertThat(pickedCards).hasSize(5), + () -> assertThat(cardDeck.getCards()).hasSize(initialCards.size() - 5) ); } } From 9abddc6fb7226c0ce1155c1c4fd09cd6dd779e7f Mon Sep 17 00:00:00 2001 From: eohaerim Date: Wed, 16 Feb 2022 17:14:31 +0900 Subject: [PATCH 33/57] =?UTF-8?q?feat:=20=EC=88=98=EB=A7=8C=ED=81=BC=20?= =?UTF-8?q?=EC=B9=B4=EB=93=9C=EB=A5=BC=20=EC=B9=B4=EB=93=9C=EB=8D=B1?= =?UTF-8?q?=EC=97=90=EC=84=9C=20=EB=BD=91=EC=95=84=20=EB=B0=98=ED=99=98?= =?UTF-8?q?=ED=95=98=EB=8A=94=20=EA=B8=B0=EB=8A=A5=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/blackjack/domain/person/Dealer.java | 5 +++++ .../java/blackjack/domain/person/DealerTest.java | 15 ++++++++++++++- 2 files changed, 19 insertions(+), 1 deletion(-) diff --git a/src/main/java/blackjack/domain/person/Dealer.java b/src/main/java/blackjack/domain/person/Dealer.java index 99bbcd64..4baa2c84 100644 --- a/src/main/java/blackjack/domain/person/Dealer.java +++ b/src/main/java/blackjack/domain/person/Dealer.java @@ -2,6 +2,7 @@ import blackjack.domain.card.Card; import blackjack.domain.card.CardDeck; +import java.util.List; public class Dealer extends Person { @@ -10,4 +11,8 @@ public class Dealer extends Person { public Dealer() { cardDeck = new CardDeck(); } + + public List getPickedCard(int numberOfCards) { + return cardDeck.pickCards(numberOfCards); + } } diff --git a/src/test/java/blackjack/domain/person/DealerTest.java b/src/test/java/blackjack/domain/person/DealerTest.java index 4cd56d52..6b30a5a2 100644 --- a/src/test/java/blackjack/domain/person/DealerTest.java +++ b/src/test/java/blackjack/domain/person/DealerTest.java @@ -5,6 +5,7 @@ import blackjack.domain.card.Card; import blackjack.domain.card.Denomination; import blackjack.domain.card.Shape; +import java.util.List; import org.junit.jupiter.api.Test; class DealerTest { @@ -34,7 +35,19 @@ class DealerTest { //when int cardSize = dealer.getCards().size(); + //when then + assertThat(dealer.getCards()).hasSize(3); + } + + @Test + void 딜러는_전달_받은_수만큼_카드덱에서_카드를_뽑아_반환한다() { + //given + Dealer dealer = new Dealer(); + + //when + List pickedCard = dealer.getPickedCard(4); + //then - assertThat(cardSize).isEqualTo(3); + assertThat(pickedCard).hasSize(4); } } From 9c52e6afe514396b47d7affe6a6a8ae121e41dea Mon Sep 17 00:00:00 2001 From: eohaerim Date: Wed, 16 Feb 2022 17:14:56 +0900 Subject: [PATCH 34/57] =?UTF-8?q?refactor:=20=EB=A6=AC=EC=8A=A4=ED=8A=B8?= =?UTF-8?q?=20=EC=82=AC=EC=9D=B4=EC=A6=88=20=ED=99=95=EC=9D=B8=EC=9D=84=20?= =?UTF-8?q?hasSize=EB=A1=9C=20=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/test/java/blackjack/domain/person/DealerTest.java | 10 ++-------- 1 file changed, 2 insertions(+), 8 deletions(-) diff --git a/src/test/java/blackjack/domain/person/DealerTest.java b/src/test/java/blackjack/domain/person/DealerTest.java index 6b30a5a2..ddcd9add 100644 --- a/src/test/java/blackjack/domain/person/DealerTest.java +++ b/src/test/java/blackjack/domain/person/DealerTest.java @@ -1,7 +1,6 @@ package blackjack.domain.person; -import static org.assertj.core.api.AssertionsForClassTypes.assertThat; - +import static org.assertj.core.api.Assertions.assertThat; import blackjack.domain.card.Card; import blackjack.domain.card.Denomination; import blackjack.domain.card.Shape; @@ -17,9 +16,7 @@ class DealerTest { new Card(Shape.CLUB, Denomination.FOUR), new Card(Shape.SPADE, Denomination.KING)); - int cardSize = dealer.getCards().size(); - - assertThat(cardSize).isEqualTo(2); + assertThat(dealer.getCards()).hasSize(2); } @Test @@ -32,9 +29,6 @@ class DealerTest { ); dealer.addCard(new Card(Shape.HEART, Denomination.NINE)); - //when - int cardSize = dealer.getCards().size(); - //when then assertThat(dealer.getCards()).hasSize(3); } From f45209cfbc7ab9188a9b7eae698cb243869e6d75 Mon Sep 17 00:00:00 2001 From: eohaerim Date: Wed, 16 Feb 2022 17:15:08 +0900 Subject: [PATCH 35/57] =?UTF-8?q?test:=20initCards,=20addCard,=20construct?= =?UTF-8?q?or=20=ED=83=9C=EC=8A=A4=ED=8A=B8=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/test/java/blackjack/domain/person/PlayerTest.java | 11 ++++------- 1 file changed, 4 insertions(+), 7 deletions(-) diff --git a/src/test/java/blackjack/domain/person/PlayerTest.java b/src/test/java/blackjack/domain/person/PlayerTest.java index 14fc99dc..e09ffa4c 100644 --- a/src/test/java/blackjack/domain/person/PlayerTest.java +++ b/src/test/java/blackjack/domain/person/PlayerTest.java @@ -1,6 +1,6 @@ package blackjack.domain.person; -import static org.assertj.core.api.AssertionsForClassTypes.assertThat; +import static org.assertj.core.api.Assertions.assertThat; import blackjack.domain.card.Card; import blackjack.domain.card.Denomination; @@ -31,7 +31,7 @@ class PlayerTest { ); //then - assertThat(player.getCards().size()).isEqualTo(2); + assertThat(player.getCards()).hasSize(2); } @Test @@ -44,10 +44,7 @@ class PlayerTest { ); player.addCard(new Card(Shape.HEART, Denomination.KING)); - //when - int cardSize = player.getCards().size(); - - //then - assertThat(cardSize).isEqualTo(3); + //when then + assertThat(player.getCards()).hasSize(3); } } From f5c4c7d2af1cfcb0eadf0a90c9ee0cf4581f98d8 Mon Sep 17 00:00:00 2001 From: eohaerim Date: Wed, 16 Feb 2022 17:39:44 +0900 Subject: [PATCH 36/57] docs: modified features, add domains --- README.md | 33 +++++++++++++++++++++------------ 1 file changed, 21 insertions(+), 12 deletions(-) diff --git a/README.md b/README.md index 249e9782..49702b10 100644 --- a/README.md +++ b/README.md @@ -28,17 +28,6 @@ RentCompany ## 블랙잭 -[InputView] --[ ] 플레이어 이름을 입력받는다. --[ ] 입력받은 플레이어의 이름을 쉼표로 분리한다. --[ ] 플레이어에게 카드를 추가로 받을 것인지 입력받는다. - -[ ] y, n으로 입력 받는다. - -[OutputView] --[ ] 딜러와 플레이어의 현재 카드 목록을 출력한다. - -[ ] 처음 시작때 딜러는 1번째 카드를 비공개하고, 나머지 카드만 출력한다. --[ ] 딜러와 플레이어의 최종 승패를 출력한다. - [Card : Denomination, Shape] - [x] enum으로 1~10,J,Q,K를 구현한다. - [x] enum으로 하트,스페이드,다이아몬드,클로버를 구현한다. @@ -72,13 +61,33 @@ RentCompany - [x] 인스턴스 생성 시, 만들어진 52장의 카드로 멤버변수를 초기화한다. - [x] shuffle한 뒤 전달인자로 받은 수만큼 카드를 뽑아서 반환한다. (제거하면서 반환한다.) +[GameSetup] +- [ ] 플레이어 이름 List<>를 받아서 플레이어를 생성하고 카드 두장 나눠준 뒤 플레이어를 반환한다. (createPlayers) +- [ ] 딜러를 생성하고 카드 두 장을 나눠준 뒤 반환한다. (createDealer) + [GameController] +- [ ] Input에서 플레이어 이름 List를 받아 GameSetUp을 호출하여 카드 두장을 가진 List를 저장한다. +- [ ] 카드 두 장을 가진 딜러를 저장한다. +- [ ] 생성된 플레이어와 딜러를 ResultView에게 넘긴다. + + - [ ] 카드의 합이 21 이하인지 카드를 추가로 뽑을 것인지 질문한다. - [ ] 딜러에게 필요한 장수만큼 카드를 요구한다. - [ ] 반환 받은 카드를 통해 딜러와 플레이어들을 초기화한다. + +[InputView] +-[ ] 플레이어 이름을 입력받아서 쉼표 기준으로 분리한 List을 반환한다. +-[ ] 플레이어에게 카드를 추가로 받을 것인지 입력받는다. + -[ ] y, n으로 입력 받는다. + +[OutputView] +-[ ] 딜러와 플레이어 List<>를 전달 받아 이름과 카드 목록을 출력한다. + -[ ] 처음 시작때 딜러는 1번째 카드를 비공개하고, 나머지 카드만 출력한다. +-[ ] 딜러와 플레이어의 최종 승패를 출력한다. + [GameFinish] - [ ] 플레이어의 카드 합이 21을 초과하면 (딜러의 결과에 관계없이)패배한다. - [ ] 딜러의 카드 합이 21을 초과하면 딜러가 패배한다. - [ ] 카드의 합이 21을 초과하지 않은 모든 플레이어는 승리 [GameResult] --[ ] +- [ ] From edecc812c1918087ce18d33ceb8802fb1990c3fe Mon Sep 17 00:00:00 2001 From: eohaerim Date: Wed, 16 Feb 2022 17:52:28 +0900 Subject: [PATCH 37/57] =?UTF-8?q?refactor:=20Dealer,=20Player=EC=97=90?= =?UTF-8?q?=EC=84=9C=20=EC=B9=B4=EB=93=9C=20=EC=B4=88=EA=B8=B0=ED=99=94=20?= =?UTF-8?q?=EC=97=AD=ED=95=A0=20=EC=A0=9C=EA=B1=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/blackjack/domain/person/Person.java | 10 ++------- .../blackjack/domain/person/DealerTest.java | 15 +------------ .../blackjack/domain/person/PlayerTest.java | 22 +------------------ 3 files changed, 4 insertions(+), 43 deletions(-) diff --git a/src/main/java/blackjack/domain/person/Person.java b/src/main/java/blackjack/domain/person/Person.java index 98012c5c..76d15030 100644 --- a/src/main/java/blackjack/domain/person/Person.java +++ b/src/main/java/blackjack/domain/person/Person.java @@ -6,15 +6,9 @@ public class Person { - protected List cards; + protected List cards = new ArrayList<>(); - protected void initCards(Card card1, Card card2) { - cards = new ArrayList<>(); - cards.add(card1); - cards.add(card2); - } - - protected void addCard(Card card) { + public void addCard(Card card) { cards.add(card); } diff --git a/src/test/java/blackjack/domain/person/DealerTest.java b/src/test/java/blackjack/domain/person/DealerTest.java index ddcd9add..4e8b307a 100644 --- a/src/test/java/blackjack/domain/person/DealerTest.java +++ b/src/test/java/blackjack/domain/person/DealerTest.java @@ -1,6 +1,7 @@ package blackjack.domain.person; import static org.assertj.core.api.Assertions.assertThat; + import blackjack.domain.card.Card; import blackjack.domain.card.Denomination; import blackjack.domain.card.Shape; @@ -9,24 +10,10 @@ class DealerTest { - @Test - void 카드를_init하면_2장의_카드를_가져야_한다() { - Dealer dealer = new Dealer(); - dealer.initCards( - new Card(Shape.CLUB, Denomination.FOUR), - new Card(Shape.SPADE, Denomination.KING)); - - assertThat(dealer.getCards()).hasSize(2); - } - @Test void 딜러는_받은_카드_1장을_목록에_추가해야_한다() { //given Dealer dealer = new Dealer(); - dealer.initCards( - new Card(Shape.HEART, Denomination.NINE), - new Card(Shape.HEART, Denomination.NINE) - ); dealer.addCard(new Card(Shape.HEART, Denomination.NINE)); //when then diff --git a/src/test/java/blackjack/domain/person/PlayerTest.java b/src/test/java/blackjack/domain/person/PlayerTest.java index e09ffa4c..804fff17 100644 --- a/src/test/java/blackjack/domain/person/PlayerTest.java +++ b/src/test/java/blackjack/domain/person/PlayerTest.java @@ -5,7 +5,6 @@ import blackjack.domain.card.Card; import blackjack.domain.card.Denomination; import blackjack.domain.card.Shape; -import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; class PlayerTest { @@ -19,32 +18,13 @@ class PlayerTest { assertThat(player.getName()).isEqualTo("kim"); } - @Test - void 카드를_init하면_두_장의_카드를_가져야_한다() { - //given - Player player = new Player("eo"); - - //when - player.initCards( - new Card(Shape.HEART, Denomination.EIGHT), - new Card(Shape.HEART, Denomination.KING) - ); - - //then - assertThat(player.getCards()).hasSize(2); - } - @Test void 플레이어는_받은_카드_1장을_목록에_추가해야_한다() { //given Player player = new Player("eo"); - player.initCards( - new Card(Shape.HEART, Denomination.NINE), - new Card(Shape.HEART, Denomination.NINE) - ); player.addCard(new Card(Shape.HEART, Denomination.KING)); //when then - assertThat(player.getCards()).hasSize(3); + assertThat(player.getCards()).hasSize(1); } } From 610f916336b62af19671d5203bc2f211a5bab250 Mon Sep 17 00:00:00 2001 From: eohaerim Date: Wed, 16 Feb 2022 17:52:50 +0900 Subject: [PATCH 38/57] =?UTF-8?q?docs:=20README.md=20=EC=A0=95=EB=A0=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 29 ++++++++++++++++++----------- 1 file changed, 18 insertions(+), 11 deletions(-) diff --git a/README.md b/README.md index 49702b10..6cd8b86e 100644 --- a/README.md +++ b/README.md @@ -29,65 +29,72 @@ RentCompany ## 블랙잭 [Card : Denomination, Shape] + - [x] enum으로 1~10,J,Q,K를 구현한다. - [x] enum으로 하트,스페이드,다이아몬드,클로버를 구현한다. - [x] value와 shape를 합쳐 한 장의 카드를 생성한다. [CardsUtils] + - [x] 카드 목록을 받아서 숫자 합을 구한다. - [x] 전체 숫자 합이 특정 값을 초과하는지 안하는지 판단한다. [Person] + - [x] 모든 사람들은 카드 목록을 갖고 있다. -- [x] 카드 목록을 초기화한다. - [x] 카드 1장을 인자로 전달 받아 카드 목록에 추가한다. + [Player extends Person] + - [x] 플레이어는 추가적으로 이름을 갖고 있다. - [x] 생성 시에 플레이어 이름만 인자로 전달 받아서 자기의 이름을 초기화한다. -- [x] 카드목록을 초기화한다. (Person 기능) - - 카드 리스트를 초기화하고, 2장의 카드를 전달 받아서 카드 목록에 추가해야 한다. - [x] 전달 받은 1장의 카드를 자신의 카드 목록에 추가한다. (Person 기능) -- + [Dealer extends Person] 딜러가 카드를 섞어서 뽑는 역할. CardDeck으로 분리. + - [x] 생성 시에 CardDeck을 초기화한다. -- [x] 카드목록을 초기화한다. (Person 기능) - - 카드 리스트를 초기화하고, 2장의 카드를 전달 받아서 카드 목록에 추가해야 한다. - [x] 인자로 전달 받은 1장의 카드를 자신의 카드 목록에 추가한다. (Person 기능) - [ ] 전달 인자로 받은 장수만큼 카드를 반환한다. [CardDeck] + - [x] 전체 카드를 만들어서 리스트로 반환한다. (static) - [x] 인스턴스 생성 시, 만들어진 52장의 카드로 멤버변수를 초기화한다. - [x] shuffle한 뒤 전달인자로 받은 수만큼 카드를 뽑아서 반환한다. (제거하면서 반환한다.) [GameSetup] -- [ ] 플레이어 이름 List<>를 받아서 플레이어를 생성하고 카드 두장 나눠준 뒤 플레이어를 반환한다. (createPlayers) + - [ ] 딜러를 생성하고 카드 두 장을 나눠준 뒤 반환한다. (createDealer) +- [ ] 플레이어 이름 List<>를 받아서 플레이어를 생성하고 카드 두장 나눠준 뒤 플레이어를 반환한다. (createPlayers) [GameController] + - [ ] Input에서 플레이어 이름 List를 받아 GameSetUp을 호출하여 카드 두장을 가진 List를 저장한다. - [ ] 카드 두 장을 가진 딜러를 저장한다. - [ ] 생성된 플레이어와 딜러를 ResultView에게 넘긴다. -- [ ] 카드의 합이 21 이하인지 카드를 추가로 뽑을 것인지 질문한다. +- [ ] 카드의 합이 21 이하인지 카드를 추가로 뽑을 것인지 질문한다. - [ ] 딜러에게 필요한 장수만큼 카드를 요구한다. - [ ] 반환 받은 카드를 통해 딜러와 플레이어들을 초기화한다. [InputView] + -[ ] 플레이어 이름을 입력받아서 쉼표 기준으로 분리한 List을 반환한다. -[ ] 플레이어에게 카드를 추가로 받을 것인지 입력받는다. - -[ ] y, n으로 입력 받는다. + -[ ] y, n으로 입력 받는다. [OutputView] + -[ ] 딜러와 플레이어 List<>를 전달 받아 이름과 카드 목록을 출력한다. - -[ ] 처음 시작때 딜러는 1번째 카드를 비공개하고, 나머지 카드만 출력한다. + -[ ] 처음 시작때 딜러는 1번째 카드를 비공개하고, 나머지 카드만 출력한다. -[ ] 딜러와 플레이어의 최종 승패를 출력한다. [GameFinish] + - [ ] 플레이어의 카드 합이 21을 초과하면 (딜러의 결과에 관계없이)패배한다. - [ ] 딜러의 카드 합이 21을 초과하면 딜러가 패배한다. - [ ] 카드의 합이 21을 초과하지 않은 모든 플레이어는 승리 -[GameResult] + [GameResult] - [ ] From 45d6ee99448af0915fa5c4c373bc53e84e547d90 Mon Sep 17 00:00:00 2001 From: eohaerim Date: Wed, 16 Feb 2022 17:53:27 +0900 Subject: [PATCH 39/57] =?UTF-8?q?fix:=20dealer=20=EC=B9=B4=EB=93=9C=20?= =?UTF-8?q?=EC=B6=94=EA=B0=80=20=ED=85=8C=EC=8A=A4=ED=8A=B8=20=EC=88=98?= =?UTF-8?q?=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/test/java/blackjack/domain/person/DealerTest.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/test/java/blackjack/domain/person/DealerTest.java b/src/test/java/blackjack/domain/person/DealerTest.java index 4e8b307a..c0a45c98 100644 --- a/src/test/java/blackjack/domain/person/DealerTest.java +++ b/src/test/java/blackjack/domain/person/DealerTest.java @@ -17,7 +17,7 @@ class DealerTest { dealer.addCard(new Card(Shape.HEART, Denomination.NINE)); //when then - assertThat(dealer.getCards()).hasSize(3); + assertThat(dealer.getCards()).hasSize(1); } @Test From 97461b023261de2e46902084179924a263ca1a80 Mon Sep 17 00:00:00 2001 From: eohaerim Date: Wed, 16 Feb 2022 18:24:26 +0900 Subject: [PATCH 40/57] =?UTF-8?q?refactor:=20createCardDeck=EC=9D=84=20?= =?UTF-8?q?=EC=9D=BC=EB=B0=98=EB=A9=94=EC=86=8C=EB=93=9C=ED=99=94?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/blackjack/domain/card/CardDeck.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/blackjack/domain/card/CardDeck.java b/src/main/java/blackjack/domain/card/CardDeck.java index 1b0252e7..1b4914cd 100644 --- a/src/main/java/blackjack/domain/card/CardDeck.java +++ b/src/main/java/blackjack/domain/card/CardDeck.java @@ -15,7 +15,7 @@ public CardDeck() { cards = createCardDeck(); } - public static List createCardDeck() { + private List createCardDeck() { List cards = new ArrayList<>(); for (Shape shape : Shape.values()) { From 17816e4ea7923012d840dbe7240334803643be89 Mon Sep 17 00:00:00 2001 From: eohaerim Date: Wed, 16 Feb 2022 18:25:32 +0900 Subject: [PATCH 41/57] =?UTF-8?q?refactor:=20=EC=A4=91=EB=B3=B5=20?= =?UTF-8?q?=ED=85=8C=EC=8A=A4=ED=8A=B8=20=EC=A0=9C=EA=B1=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/test/java/blackjack/domain/card/CardDeckTest.java | 6 ------ 1 file changed, 6 deletions(-) diff --git a/src/test/java/blackjack/domain/card/CardDeckTest.java b/src/test/java/blackjack/domain/card/CardDeckTest.java index 4c96c535..3d0bc346 100644 --- a/src/test/java/blackjack/domain/card/CardDeckTest.java +++ b/src/test/java/blackjack/domain/card/CardDeckTest.java @@ -8,12 +8,6 @@ class CardDeckTest { - @Test - void 카드덱은_52가지_카드를_생성해야_한다() { - List cards = CardDeck.createCardDeck(); - assertThat(cards).hasSize(52); - } - @Test void 인스턴스를_생성하면_52가지_카드를_가진다() { CardDeck cardDeck = new CardDeck(); From b7359f22643d097109ade648f04bdb4c4f1bacb7 Mon Sep 17 00:00:00 2001 From: eohaerim Date: Wed, 16 Feb 2022 18:26:21 +0900 Subject: [PATCH 42/57] =?UTF-8?q?refactor:=20=EC=B9=B4=EB=93=9C=20?= =?UTF-8?q?=EC=B4=88=EA=B8=B0=ED=99=94=EB=A5=BC=20=EC=83=9D=EC=84=B1?= =?UTF-8?q?=EC=9E=90=EC=97=90=EC=84=9C=20=ED=95=98=EB=8F=84=EB=A1=9D=20?= =?UTF-8?q?=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/blackjack/domain/person/Dealer.java | 4 ++-- src/test/java/blackjack/domain/person/DealerTest.java | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/main/java/blackjack/domain/person/Dealer.java b/src/main/java/blackjack/domain/person/Dealer.java index 4baa2c84..65bee546 100644 --- a/src/main/java/blackjack/domain/person/Dealer.java +++ b/src/main/java/blackjack/domain/person/Dealer.java @@ -6,10 +6,10 @@ public class Dealer extends Person { - CardDeck cardDeck; + private final CardDeck cardDeck = new CardDeck(); public Dealer() { - cardDeck = new CardDeck(); + this.cards.addAll(getPickedCard(2)); } public List getPickedCard(int numberOfCards) { diff --git a/src/test/java/blackjack/domain/person/DealerTest.java b/src/test/java/blackjack/domain/person/DealerTest.java index c0a45c98..4e8b307a 100644 --- a/src/test/java/blackjack/domain/person/DealerTest.java +++ b/src/test/java/blackjack/domain/person/DealerTest.java @@ -17,7 +17,7 @@ class DealerTest { dealer.addCard(new Card(Shape.HEART, Denomination.NINE)); //when then - assertThat(dealer.getCards()).hasSize(1); + assertThat(dealer.getCards()).hasSize(3); } @Test From 4d55fdbbe7e2acdc9e595c652d8b4654b509fec6 Mon Sep 17 00:00:00 2001 From: eohaerim Date: Thu, 17 Feb 2022 01:12:16 +0900 Subject: [PATCH 43/57] =?UTF-8?q?refactor:=20=EC=83=9D=EC=84=B1=20?= =?UTF-8?q?=EC=8B=9C=EC=A0=90=EC=97=90=20=EC=B9=B4=EB=93=9C=EB=A5=BC=20?= =?UTF-8?q?=EC=A0=84=EB=8B=AC=20=EB=B0=9B=EB=8F=84=EB=A1=9D=20=EB=B3=80?= =?UTF-8?q?=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/blackjack/domain/person/Player.java | 4 +++- .../blackjack/domain/person/PlayerTest.java | 17 ++++++++++++----- 2 files changed, 15 insertions(+), 6 deletions(-) diff --git a/src/main/java/blackjack/domain/person/Player.java b/src/main/java/blackjack/domain/person/Player.java index 1bf1c93b..43303ea6 100644 --- a/src/main/java/blackjack/domain/person/Player.java +++ b/src/main/java/blackjack/domain/person/Player.java @@ -1,13 +1,15 @@ package blackjack.domain.person; import blackjack.domain.card.Card; +import java.util.List; public class Player extends Person { private final String name; - public Player(String name) { + public Player(String name, List cards) { this.name = name; + this.cards.addAll(cards); } public String getName() { diff --git a/src/test/java/blackjack/domain/person/PlayerTest.java b/src/test/java/blackjack/domain/person/PlayerTest.java index 804fff17..6f58815c 100644 --- a/src/test/java/blackjack/domain/person/PlayerTest.java +++ b/src/test/java/blackjack/domain/person/PlayerTest.java @@ -5,26 +5,33 @@ import blackjack.domain.card.Card; import blackjack.domain.card.Denomination; import blackjack.domain.card.Shape; +import java.util.Arrays; import org.junit.jupiter.api.Test; class PlayerTest { @Test - void 플레이어를_생성하면_이름을_가져야_한다() { + void 플레이어를_생성하면_카드를_두장_가져야_한다() { //given, when - Player player = new Player("kim"); + Player player = new Player("kim", Arrays.asList( + new Card(Shape.SPADE, Denomination.KING), + new Card(Shape.SPADE, Denomination.KING) + )); //then - assertThat(player.getName()).isEqualTo("kim"); + assertThat(player.getCards()).hasSize(2); } @Test void 플레이어는_받은_카드_1장을_목록에_추가해야_한다() { //given - Player player = new Player("eo"); + Player player = new Player("kim", Arrays.asList( + new Card(Shape.SPADE, Denomination.KING), + new Card(Shape.SPADE, Denomination.KING) + )); player.addCard(new Card(Shape.HEART, Denomination.KING)); //when then - assertThat(player.getCards()).hasSize(1); + assertThat(player.getCards()).hasSize(3); } } From e504b4daa78c5209935b222ea1f560baca49dd18 Mon Sep 17 00:00:00 2001 From: eohaerim Date: Thu, 17 Feb 2022 01:12:51 +0900 Subject: [PATCH 44/57] =?UTF-8?q?fix:=20dealer=20=EC=83=9D=EC=84=B1=20?= =?UTF-8?q?=EC=8B=9C=EC=A0=90=20=EC=B9=B4=EB=93=9C=20=EC=83=9D=EC=84=B1=20?= =?UTF-8?q?=ED=85=8C=EC=8A=A4=ED=8A=B8=20=EC=B6=94=EA=B0=80,=20=EC=BD=94?= =?UTF-8?q?=EB=93=9C=20=EC=A0=95=EB=A0=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/test/java/blackjack/domain/person/DealerTest.java | 11 +++++++++++ src/test/java/blackjack/domain/person/PlayerTest.java | 1 + 2 files changed, 12 insertions(+) diff --git a/src/test/java/blackjack/domain/person/DealerTest.java b/src/test/java/blackjack/domain/person/DealerTest.java index 4e8b307a..34488a6b 100644 --- a/src/test/java/blackjack/domain/person/DealerTest.java +++ b/src/test/java/blackjack/domain/person/DealerTest.java @@ -10,6 +10,15 @@ class DealerTest { + @Test + void 딜러가_생성되면_카드를_두장_가지고_있어야_한다() { + //given + Dealer dealer = new Dealer(); + + //when then + assertThat(dealer.getCards()).hasSize(2); + } + @Test void 딜러는_받은_카드_1장을_목록에_추가해야_한다() { //given @@ -31,4 +40,6 @@ class DealerTest { //then assertThat(pickedCard).hasSize(4); } + + } diff --git a/src/test/java/blackjack/domain/person/PlayerTest.java b/src/test/java/blackjack/domain/person/PlayerTest.java index 6f58815c..acd60c89 100644 --- a/src/test/java/blackjack/domain/person/PlayerTest.java +++ b/src/test/java/blackjack/domain/person/PlayerTest.java @@ -34,4 +34,5 @@ class PlayerTest { //when then assertThat(player.getCards()).hasSize(3); } + } From 8738a73865aed396ae85fc5b03765dba786c905f Mon Sep 17 00:00:00 2001 From: eohaerim Date: Thu, 17 Feb 2022 01:32:28 +0900 Subject: [PATCH 45/57] =?UTF-8?q?feat:=20gameSetup=20=EA=B8=B0=EB=8A=A5=20?= =?UTF-8?q?=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 6 ++-- src/main/java/blackjack/game/GameSetup.java | 32 +++++++++++++++++++ .../java/blackjack/game/GameSetupTest.java | 21 ++++++++++++ 3 files changed, 56 insertions(+), 3 deletions(-) create mode 100644 src/main/java/blackjack/game/GameSetup.java create mode 100644 src/test/java/blackjack/game/GameSetupTest.java diff --git a/README.md b/README.md index 6cd8b86e..4cae384f 100644 --- a/README.md +++ b/README.md @@ -55,7 +55,7 @@ RentCompany - [x] 생성 시에 CardDeck을 초기화한다. - [x] 인자로 전달 받은 1장의 카드를 자신의 카드 목록에 추가한다. (Person 기능) -- [ ] 전달 인자로 받은 장수만큼 카드를 반환한다. +- [x] 전달 인자로 받은 장수만큼 카드를 반환한다. [CardDeck] @@ -65,8 +65,8 @@ RentCompany [GameSetup] -- [ ] 딜러를 생성하고 카드 두 장을 나눠준 뒤 반환한다. (createDealer) -- [ ] 플레이어 이름 List<>를 받아서 플레이어를 생성하고 카드 두장 나눠준 뒤 플레이어를 반환한다. (createPlayers) +- [x] 생성 시 딜러와 플레이어를 생성하고 저장한다. +- [x] 플레이어 이름 List<>를 받아서 플레이어를 생성하고 플레이어를 반환한다. (createPlayers) [GameController] diff --git a/src/main/java/blackjack/game/GameSetup.java b/src/main/java/blackjack/game/GameSetup.java new file mode 100644 index 00000000..8830c5d4 --- /dev/null +++ b/src/main/java/blackjack/game/GameSetup.java @@ -0,0 +1,32 @@ +package blackjack.game; + +import blackjack.domain.person.Dealer; +import blackjack.domain.person.Player; +import java.util.ArrayList; +import java.util.List; +import java.util.stream.Collectors; + +public class GameSetup { + + private final Dealer dealer; + private final List players; + + public GameSetup(List playerNames) { + dealer = new Dealer(); + players = createPlayers(playerNames); + } + + private List createPlayers(List playerNames) { + return playerNames.stream() + .map(name -> new Player(name, dealer.getPickedCard(2))) + .collect(Collectors.toList()); + } + + public Dealer getDealer() { + return dealer; + } + + public List getPlayers() { + return new ArrayList<>(players); + } +} diff --git a/src/test/java/blackjack/game/GameSetupTest.java b/src/test/java/blackjack/game/GameSetupTest.java new file mode 100644 index 00000000..915e235d --- /dev/null +++ b/src/test/java/blackjack/game/GameSetupTest.java @@ -0,0 +1,21 @@ +package blackjack.game; + +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.Test; + +class GameSetupTest { + + @Test + void 딜러와_플레이어를_만들면_카드덱과_이름과_카드_두_장을_가진다() { + GameSetup gameSetup = new GameSetup(Arrays.asList("a", "b", "c")); + + assertAll( + () -> assertThat(gameSetup.getDealer().getCards()).hasSize(2), + () -> assertThat(gameSetup.getPlayers()).hasSize(3), + () -> assertThat(gameSetup.getPlayers().stream().allMatch(player -> player.getCards().size() == 2)).isTrue() + ); + } +} From afe6bad42774fc4ceca90062907624b3f57d5b4d Mon Sep 17 00:00:00 2001 From: eohaerim Date: Thu, 17 Feb 2022 01:47:22 +0900 Subject: [PATCH 46/57] =?UTF-8?q?style:=20=EC=BD=94=EB=93=9C=20=EC=A0=95?= =?UTF-8?q?=EB=A0=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/blackjack/domain/card/Denomination.java | 16 ++++++++-------- src/main/java/blackjack/domain/card/Shape.java | 8 ++++---- src/main/java/rentcar/MotorVehicle.java | 3 +++ 3 files changed, 15 insertions(+), 12 deletions(-) diff --git a/src/main/java/blackjack/domain/card/Denomination.java b/src/main/java/blackjack/domain/card/Denomination.java index d9917d44..8a8d7ed8 100644 --- a/src/main/java/blackjack/domain/card/Denomination.java +++ b/src/main/java/blackjack/domain/card/Denomination.java @@ -4,17 +4,17 @@ public enum Denomination { ACE("A", 1), TWO("2", 2), - THREE("3",3), - FOUR("4",4), + THREE("3", 3), + FOUR("4", 4), FIVE("5", 5), - SIX("6",6), - SEVEN("7",7), - EIGHT("8",8), - NINE("9",9), - TEN("10",10), + SIX("6", 6), + SEVEN("7", 7), + EIGHT("8", 8), + NINE("9", 9), + TEN("10", 10), JACK("J", 10), QUEEN("Q", 10), - KING("K",10); + KING("K", 10); private final String sign; private final int value; diff --git a/src/main/java/blackjack/domain/card/Shape.java b/src/main/java/blackjack/domain/card/Shape.java index 5c9da8eb..fab3c9da 100644 --- a/src/main/java/blackjack/domain/card/Shape.java +++ b/src/main/java/blackjack/domain/card/Shape.java @@ -9,11 +9,11 @@ public enum Shape { private final String name; - public String getName() { - return name; - } - Shape(String name) { this.name = name; } + + public String getName() { + return name; + } } diff --git a/src/main/java/rentcar/MotorVehicle.java b/src/main/java/rentcar/MotorVehicle.java index ea65f9c8..6936b83d 100644 --- a/src/main/java/rentcar/MotorVehicle.java +++ b/src/main/java/rentcar/MotorVehicle.java @@ -1,14 +1,17 @@ package rentcar; public interface MotorVehicle { + /** * 리터당 이동 거리 반환 + * * @return double */ double getDistancePerLiter(); /** * 주입해야 할 연료량 반환 + * * @return double */ double getChargeQuantity(); From 6f850823d6fc9a17db8f3f71a06dbc7844405e25 Mon Sep 17 00:00:00 2001 From: eohaerim Date: Thu, 17 Feb 2022 16:36:23 +0900 Subject: [PATCH 47/57] =?UTF-8?q?feat:=20=EA=B2=8C=EC=9E=84=20=EC=B0=B8?= =?UTF-8?q?=EC=97=AC=EC=9E=90=20=EC=9D=B4=EB=A6=84=EC=9D=84=20=EB=B0=9B?= =?UTF-8?q?=EB=8A=94=20=EA=B8=B0=EB=8A=A5=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/blackjack/view/InputView.java | 17 +++++++++++++++++ 1 file changed, 17 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..105d1be7 --- /dev/null +++ b/src/main/java/blackjack/view/InputView.java @@ -0,0 +1,17 @@ +package blackjack.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 sc = new Scanner(System.in); + + public static List getPlayerNames() { + System.out.println("게임에 참여할 사람의 이름을 입력하세요. (쉼표 기준으로 분리)"); + String[] playerNames = sc.nextLine().split(","); + return Arrays.stream(playerNames).collect(Collectors.toList()); + } +} From 381a22ac1b933f51f3f1a324157d2fe717d5d85f Mon Sep 17 00:00:00 2001 From: eohaerim Date: Thu, 17 Feb 2022 17:16:19 +0900 Subject: [PATCH 48/57] =?UTF-8?q?feat:=20=EA=B2=8C=EC=9E=84=20=EC=B0=B8?= =?UTF-8?q?=EC=97=AC=EC=9E=90=20=EC=B9=B4=EB=93=9C=20=EC=B4=88=EA=B8=B0?= =?UTF-8?q?=ED=99=94=20=EA=B2=B0=EA=B3=BC=20=EC=B6=9C=EB=A0=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 15 +++++------- .../java/blackjack/BlackjackApplication.java | 16 +++++++++++++ src/main/java/blackjack/domain/card/Card.java | 5 +++- .../java/blackjack/domain/person/Dealer.java | 5 ++++ src/main/java/blackjack/view/ResultView.java | 24 +++++++++++++++++++ 5 files changed, 55 insertions(+), 10 deletions(-) create mode 100644 src/main/java/blackjack/BlackjackApplication.java create mode 100644 src/main/java/blackjack/view/ResultView.java diff --git a/README.md b/README.md index 4cae384f..c251daf2 100644 --- a/README.md +++ b/README.md @@ -68,12 +68,9 @@ RentCompany - [x] 생성 시 딜러와 플레이어를 생성하고 저장한다. - [x] 플레이어 이름 List<>를 받아서 플레이어를 생성하고 플레이어를 반환한다. (createPlayers) -[GameController] - -- [ ] Input에서 플레이어 이름 List를 받아 GameSetUp을 호출하여 카드 두장을 가진 List를 저장한다. -- [ ] 카드 두 장을 가진 딜러를 저장한다. -- [ ] 생성된 플레이어와 딜러를 ResultView에게 넘긴다. +[GameApplication] +- [x] GameSetup의 Dealer와 List를 입력받고, 생성된 setup 내용을 ResultView에게 넘긴다. - [ ] 카드의 합이 21 이하인지 카드를 추가로 뽑을 것인지 질문한다. - [ ] 딜러에게 필요한 장수만큼 카드를 요구한다. @@ -81,14 +78,14 @@ RentCompany [InputView] --[ ] 플레이어 이름을 입력받아서 쉼표 기준으로 분리한 List을 반환한다. +-[x] 플레이어 이름을 입력받아서 쉼표 기준으로 분리한 List을 반환한다. -[ ] 플레이어에게 카드를 추가로 받을 것인지 입력받는다. -[ ] y, n으로 입력 받는다. -[OutputView] +[ResultView] --[ ] 딜러와 플레이어 List<>를 전달 받아 이름과 카드 목록을 출력한다. - -[ ] 처음 시작때 딜러는 1번째 카드를 비공개하고, 나머지 카드만 출력한다. +-[x] 딜러와 플레이어 List<>를 전달 받아 이름과 카드 목록을 출력한다. + -[x] 처음 시작 때 딜러는 1장의 카드만 출력한다. -[ ] 딜러와 플레이어의 최종 승패를 출력한다. [GameFinish] diff --git a/src/main/java/blackjack/BlackjackApplication.java b/src/main/java/blackjack/BlackjackApplication.java new file mode 100644 index 00000000..eb341649 --- /dev/null +++ b/src/main/java/blackjack/BlackjackApplication.java @@ -0,0 +1,16 @@ +package blackjack; + +import blackjack.game.GameSetup; +import blackjack.view.InputView; +import blackjack.view.ResultView; +import java.util.List; + +public class BlackjackApplication { + + public static void main(String[] args) { + List playerNames = InputView.getPlayerNames(); + GameSetup gameSetup = new GameSetup(playerNames); + ResultView.printSetUpResult(gameSetup.getDealer().getOpenedCard(), gameSetup.getPlayers()); + + } +} diff --git a/src/main/java/blackjack/domain/card/Card.java b/src/main/java/blackjack/domain/card/Card.java index 260cf257..1c530844 100644 --- a/src/main/java/blackjack/domain/card/Card.java +++ b/src/main/java/blackjack/domain/card/Card.java @@ -4,12 +4,15 @@ public class Card { private final Shape shape; private final Denomination denomination; - public Card(Shape shape, Denomination denomination) { this.shape = shape; this.denomination = denomination; } + public Shape getShape() { + return shape; + } + public Denomination getDenomination() { return denomination; } diff --git a/src/main/java/blackjack/domain/person/Dealer.java b/src/main/java/blackjack/domain/person/Dealer.java index 65bee546..55b66334 100644 --- a/src/main/java/blackjack/domain/person/Dealer.java +++ b/src/main/java/blackjack/domain/person/Dealer.java @@ -6,6 +6,7 @@ public class Dealer extends Person { + private static final int FIRST_INDEX = 0; private final CardDeck cardDeck = new CardDeck(); public Dealer() { @@ -15,4 +16,8 @@ public Dealer() { public List getPickedCard(int numberOfCards) { return cardDeck.pickCards(numberOfCards); } + + public Card getOpenedCard() { + return cards.get(FIRST_INDEX); + } } diff --git a/src/main/java/blackjack/view/ResultView.java b/src/main/java/blackjack/view/ResultView.java new file mode 100644 index 00000000..28d5d0b1 --- /dev/null +++ b/src/main/java/blackjack/view/ResultView.java @@ -0,0 +1,24 @@ +package blackjack.view; + +import blackjack.domain.card.Card; +import blackjack.domain.person.Player; +import java.util.List; +import java.util.stream.Collectors; + +public class ResultView { + + public static void printSetUpResult(Card openedCard, List players) { + List playerNames = players.stream().map(Player::getName).collect(Collectors.toList()); + System.out.println("딜러와 " + String.join(", ", playerNames) + "에게 2장씩 나눠줬습니다."); + System.out.println("딜러: " + openedCard.getDenomination().getValue() + openedCard.getShape().getName()); + players.forEach(ResultView::printCardOf); + } + + private static void printCardOf(Player player) { + System.out.print(player.getName() + "카드: "); + List cardNames = player.getCards().stream() + .map(card -> card.getDenomination().getValue() + card.getShape().getName()) + .collect(Collectors.toList()); + System.out.println(String.join(", ", cardNames)); + } +} From d6aa26a69ab0c35bbfd598fdd5d402be884bee43 Mon Sep 17 00:00:00 2001 From: eohaerim Date: Thu, 17 Feb 2022 17:16:36 +0900 Subject: [PATCH 49/57] =?UTF-8?q?refactor:=20setUp=20=ED=99=9C=EC=9A=A9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../blackjack/domain/person/DealerTest.java | 17 ++++++++--------- 1 file changed, 8 insertions(+), 9 deletions(-) diff --git a/src/test/java/blackjack/domain/person/DealerTest.java b/src/test/java/blackjack/domain/person/DealerTest.java index 34488a6b..13e843fa 100644 --- a/src/test/java/blackjack/domain/person/DealerTest.java +++ b/src/test/java/blackjack/domain/person/DealerTest.java @@ -6,15 +6,20 @@ import blackjack.domain.card.Denomination; import blackjack.domain.card.Shape; import java.util.List; +import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; class DealerTest { + private Dealer dealer; + + @BeforeEach + void setUp() { + dealer = new Dealer(); + } + @Test void 딜러가_생성되면_카드를_두장_가지고_있어야_한다() { - //given - Dealer dealer = new Dealer(); - //when then assertThat(dealer.getCards()).hasSize(2); } @@ -22,7 +27,6 @@ class DealerTest { @Test void 딜러는_받은_카드_1장을_목록에_추가해야_한다() { //given - Dealer dealer = new Dealer(); dealer.addCard(new Card(Shape.HEART, Denomination.NINE)); //when then @@ -31,15 +35,10 @@ class DealerTest { @Test void 딜러는_전달_받은_수만큼_카드덱에서_카드를_뽑아_반환한다() { - //given - Dealer dealer = new Dealer(); - //when List pickedCard = dealer.getPickedCard(4); //then assertThat(pickedCard).hasSize(4); } - - } From 3e1ba5926b15bb9964a8373ea32fafa0ba98b6dd Mon Sep 17 00:00:00 2001 From: eohaerim Date: Thu, 17 Feb 2022 17:58:44 +0900 Subject: [PATCH 50/57] =?UTF-8?q?refactor:=20GameSetup=20=EC=82=AD?= =?UTF-8?q?=EC=A0=9C,=20=EC=BD=94=EB=93=9C=20=EC=A0=95=EB=A0=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 5 --- src/main/java/blackjack/domain/card/Card.java | 1 + src/main/java/blackjack/game/GameSetup.java | 32 ------------------- .../java/blackjack/game/GameSetupTest.java | 21 ------------ 4 files changed, 1 insertion(+), 58 deletions(-) delete mode 100644 src/main/java/blackjack/game/GameSetup.java delete mode 100644 src/test/java/blackjack/game/GameSetupTest.java diff --git a/README.md b/README.md index c251daf2..d5845866 100644 --- a/README.md +++ b/README.md @@ -63,11 +63,6 @@ RentCompany - [x] 인스턴스 생성 시, 만들어진 52장의 카드로 멤버변수를 초기화한다. - [x] shuffle한 뒤 전달인자로 받은 수만큼 카드를 뽑아서 반환한다. (제거하면서 반환한다.) -[GameSetup] - -- [x] 생성 시 딜러와 플레이어를 생성하고 저장한다. -- [x] 플레이어 이름 List<>를 받아서 플레이어를 생성하고 플레이어를 반환한다. (createPlayers) - [GameApplication] - [x] GameSetup의 Dealer와 List를 입력받고, 생성된 setup 내용을 ResultView에게 넘긴다. diff --git a/src/main/java/blackjack/domain/card/Card.java b/src/main/java/blackjack/domain/card/Card.java index 1c530844..1fc18c00 100644 --- a/src/main/java/blackjack/domain/card/Card.java +++ b/src/main/java/blackjack/domain/card/Card.java @@ -4,6 +4,7 @@ public class Card { private final Shape shape; private final Denomination denomination; + public Card(Shape shape, Denomination denomination) { this.shape = shape; this.denomination = denomination; diff --git a/src/main/java/blackjack/game/GameSetup.java b/src/main/java/blackjack/game/GameSetup.java deleted file mode 100644 index 8830c5d4..00000000 --- a/src/main/java/blackjack/game/GameSetup.java +++ /dev/null @@ -1,32 +0,0 @@ -package blackjack.game; - -import blackjack.domain.person.Dealer; -import blackjack.domain.person.Player; -import java.util.ArrayList; -import java.util.List; -import java.util.stream.Collectors; - -public class GameSetup { - - private final Dealer dealer; - private final List players; - - public GameSetup(List playerNames) { - dealer = new Dealer(); - players = createPlayers(playerNames); - } - - private List createPlayers(List playerNames) { - return playerNames.stream() - .map(name -> new Player(name, dealer.getPickedCard(2))) - .collect(Collectors.toList()); - } - - public Dealer getDealer() { - return dealer; - } - - public List getPlayers() { - return new ArrayList<>(players); - } -} diff --git a/src/test/java/blackjack/game/GameSetupTest.java b/src/test/java/blackjack/game/GameSetupTest.java deleted file mode 100644 index 915e235d..00000000 --- a/src/test/java/blackjack/game/GameSetupTest.java +++ /dev/null @@ -1,21 +0,0 @@ -package blackjack.game; - -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.Test; - -class GameSetupTest { - - @Test - void 딜러와_플레이어를_만들면_카드덱과_이름과_카드_두_장을_가진다() { - GameSetup gameSetup = new GameSetup(Arrays.asList("a", "b", "c")); - - assertAll( - () -> assertThat(gameSetup.getDealer().getCards()).hasSize(2), - () -> assertThat(gameSetup.getPlayers()).hasSize(3), - () -> assertThat(gameSetup.getPlayers().stream().allMatch(player -> player.getCards().size() == 2)).isTrue() - ); - } -} From 59e0c1f1bef5dcb7a81b7c755b0f5c8f7ca4a36a Mon Sep 17 00:00:00 2001 From: eohaerim Date: Thu, 17 Feb 2022 17:59:32 +0900 Subject: [PATCH 51/57] =?UTF-8?q?refactor:=20delear=EC=9D=98=20getPickedCa?= =?UTF-8?q?rds=EB=A5=BC=20inital=EA=B3=BC=20one=20card=20=EB=B0=98?= =?UTF-8?q?=ED=99=98=EC=9C=BC=EB=A1=9C=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/card/CardDeck.java | 12 ++++-------- .../java/blackjack/domain/person/Dealer.java | 17 ++++++++++++++--- .../java/blackjack/domain/person/Player.java | 7 +++++++ .../blackjack/domain/card/CardDeckTest.java | 2 -- .../blackjack/domain/person/DealerTest.java | 10 ---------- 5 files changed, 25 insertions(+), 23 deletions(-) diff --git a/src/main/java/blackjack/domain/card/CardDeck.java b/src/main/java/blackjack/domain/card/CardDeck.java index 1b4914cd..c0fe80f0 100644 --- a/src/main/java/blackjack/domain/card/CardDeck.java +++ b/src/main/java/blackjack/domain/card/CardDeck.java @@ -26,15 +26,11 @@ private List createCardDeck() { return cards; } - public List pickCards(int numberOfCards) { + public Card pickOneCard() { Collections.shuffle(cards); - List pickedCards = new ArrayList<>(); - - for (int i = 0; i < numberOfCards; i++) { - pickedCards.add(cards.get(FIRST_INDEX)); - cards.remove(FIRST_INDEX); - } - return pickedCards; + Card pickedCard = cards.get(FIRST_INDEX); + cards.remove(FIRST_INDEX); + return pickedCard; } public List getCards() { diff --git a/src/main/java/blackjack/domain/person/Dealer.java b/src/main/java/blackjack/domain/person/Dealer.java index 55b66334..65ea8e80 100644 --- a/src/main/java/blackjack/domain/person/Dealer.java +++ b/src/main/java/blackjack/domain/person/Dealer.java @@ -2,19 +2,30 @@ import blackjack.domain.card.Card; import blackjack.domain.card.CardDeck; +import java.util.ArrayList; import java.util.List; public class Dealer extends Person { private static final int FIRST_INDEX = 0; + private static final int INITIAL_PICK_NUMBER = 1; + private final CardDeck cardDeck = new CardDeck(); public Dealer() { - this.cards.addAll(getPickedCard(2)); + this.cards.addAll(getInitialPickedCards()); + } + + public List getInitialPickedCards() { + List cards = new ArrayList<>(); + for (int i = 0; i < INITIAL_PICK_NUMBER; i++) { + cards.add(cardDeck.pickOneCard()); + } + return cards; } - public List getPickedCard(int numberOfCards) { - return cardDeck.pickCards(numberOfCards); + public Card getPickedCard() { + return cardDeck.pickOneCard(); } public Card getOpenedCard() { diff --git a/src/main/java/blackjack/domain/person/Player.java b/src/main/java/blackjack/domain/person/Player.java index 43303ea6..b25922d5 100644 --- a/src/main/java/blackjack/domain/person/Player.java +++ b/src/main/java/blackjack/domain/person/Player.java @@ -2,6 +2,7 @@ import blackjack.domain.card.Card; import java.util.List; +import java.util.stream.Collectors; public class Player extends Person { @@ -12,6 +13,12 @@ public Player(String name, List cards) { this.cards.addAll(cards); } + public static List createPlayers(List playerNames, Dealer dealer) { + return playerNames.stream() + .map(name -> new Player(name, dealer.getInitialPickedCards())) + .collect(Collectors.toList()); + } + public String getName() { return name; } diff --git a/src/test/java/blackjack/domain/card/CardDeckTest.java b/src/test/java/blackjack/domain/card/CardDeckTest.java index 3d0bc346..25307008 100644 --- a/src/test/java/blackjack/domain/card/CardDeckTest.java +++ b/src/test/java/blackjack/domain/card/CardDeckTest.java @@ -1,9 +1,7 @@ package blackjack.domain.card; import static org.assertj.core.api.Assertions.assertThat; -import static org.junit.jupiter.api.Assertions.assertAll; -import java.util.List; import org.junit.jupiter.api.Test; class CardDeckTest { diff --git a/src/test/java/blackjack/domain/person/DealerTest.java b/src/test/java/blackjack/domain/person/DealerTest.java index 13e843fa..e66a2384 100644 --- a/src/test/java/blackjack/domain/person/DealerTest.java +++ b/src/test/java/blackjack/domain/person/DealerTest.java @@ -5,7 +5,6 @@ import blackjack.domain.card.Card; import blackjack.domain.card.Denomination; import blackjack.domain.card.Shape; -import java.util.List; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; @@ -32,13 +31,4 @@ void setUp() { //when then assertThat(dealer.getCards()).hasSize(3); } - - @Test - void 딜러는_전달_받은_수만큼_카드덱에서_카드를_뽑아_반환한다() { - //when - List pickedCard = dealer.getPickedCard(4); - - //then - assertThat(pickedCard).hasSize(4); - } } From 5da91804ebc5b5e81efd4ccb9f783a643dd8cd37 Mon Sep 17 00:00:00 2001 From: eohaerim Date: Thu, 17 Feb 2022 18:00:03 +0900 Subject: [PATCH 52/57] test: pickOneCard test --- .../java/blackjack/domain/card/CardDeckTest.java | 15 +++++++-------- 1 file changed, 7 insertions(+), 8 deletions(-) diff --git a/src/test/java/blackjack/domain/card/CardDeckTest.java b/src/test/java/blackjack/domain/card/CardDeckTest.java index 25307008..7bfb9df4 100644 --- a/src/test/java/blackjack/domain/card/CardDeckTest.java +++ b/src/test/java/blackjack/domain/card/CardDeckTest.java @@ -13,14 +13,13 @@ class CardDeckTest { } @Test - void 전달받은_개수만큼_카드를_뽑아서_반환한다() { + void 카드를_뽑으면_카드_목록에서_제거된다() { + //given CardDeck cardDeck = new CardDeck(); - List initialCards = cardDeck.getCards(); - List pickedCards = cardDeck.pickCards(5); - - assertAll( - () -> assertThat(pickedCards).hasSize(5), - () -> assertThat(cardDeck.getCards()).hasSize(initialCards.size() - 5) - ); + //when + Card pickedCard = cardDeck.pickOneCard(); + //then + assertThat(cardDeck.getCards().contains(pickedCard)).isFalse(); } + } From e5e664ed408422b9aea95996b8fd0409a95ad066 Mon Sep 17 00:00:00 2001 From: eohaerim Date: Thu, 17 Feb 2022 18:00:25 +0900 Subject: [PATCH 53/57] =?UTF-8?q?refactor:=20printCardOf=EB=A5=BC=20printC?= =?UTF-8?q?ardsOf=EC=9C=BC=EB=A1=9C=20=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/blackjack/view/ResultView.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/java/blackjack/view/ResultView.java b/src/main/java/blackjack/view/ResultView.java index 28d5d0b1..43d36f57 100644 --- a/src/main/java/blackjack/view/ResultView.java +++ b/src/main/java/blackjack/view/ResultView.java @@ -11,10 +11,10 @@ public static void printSetUpResult(Card openedCard, List players) { List playerNames = players.stream().map(Player::getName).collect(Collectors.toList()); System.out.println("딜러와 " + String.join(", ", playerNames) + "에게 2장씩 나눠줬습니다."); System.out.println("딜러: " + openedCard.getDenomination().getValue() + openedCard.getShape().getName()); - players.forEach(ResultView::printCardOf); + players.forEach(ResultView::printCardsOf); } - private static void printCardOf(Player player) { + public static void printCardsOf(Player player) { System.out.print(player.getName() + "카드: "); List cardNames = player.getCards().stream() .map(card -> card.getDenomination().getValue() + card.getShape().getName()) From 322d46cf6c6add7d76c7c53a6872c7031f55d749 Mon Sep 17 00:00:00 2001 From: eohaerim Date: Fri, 18 Feb 2022 04:17:16 +0900 Subject: [PATCH 54/57] =?UTF-8?q?docs:=20=EC=84=A4=EA=B3=84=20=EC=88=98?= =?UTF-8?q?=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 16 +--------------- 1 file changed, 1 insertion(+), 15 deletions(-) diff --git a/README.md b/README.md index d5845866..773c8bbd 100644 --- a/README.md +++ b/README.md @@ -34,11 +34,6 @@ RentCompany - [x] enum으로 하트,스페이드,다이아몬드,클로버를 구현한다. - [x] value와 shape를 합쳐 한 장의 카드를 생성한다. -[CardsUtils] - -- [x] 카드 목록을 받아서 숫자 합을 구한다. -- [x] 전체 숫자 합이 특정 값을 초과하는지 안하는지 판단한다. - [Person] - [x] 모든 사람들은 카드 목록을 갖고 있다. @@ -74,19 +69,10 @@ RentCompany [InputView] -[x] 플레이어 이름을 입력받아서 쉼표 기준으로 분리한 List을 반환한다. --[ ] 플레이어에게 카드를 추가로 받을 것인지 입력받는다. - -[ ] y, n으로 입력 받는다. +-[x] 플레이어에게 카드를 추가로 받을 것인지 입력받는다. [ResultView] -[x] 딜러와 플레이어 List<>를 전달 받아 이름과 카드 목록을 출력한다. -[x] 처음 시작 때 딜러는 1장의 카드만 출력한다. -[ ] 딜러와 플레이어의 최종 승패를 출력한다. - -[GameFinish] - -- [ ] 플레이어의 카드 합이 21을 초과하면 (딜러의 결과에 관계없이)패배한다. -- [ ] 딜러의 카드 합이 21을 초과하면 딜러가 패배한다. -- [ ] 카드의 합이 21을 초과하지 않은 모든 플레이어는 승리 - [GameResult] -- [ ] From c46df95fe4eff3e3fd3f2046eb79f59e5af148c5 Mon Sep 17 00:00:00 2001 From: eohaerim Date: Fri, 18 Feb 2022 04:18:04 +0900 Subject: [PATCH 55/57] =?UTF-8?q?feat:=20sum,=20add=EB=A1=9C=EC=A7=81=20?= =?UTF-8?q?=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/blackjack/domain/person/Dealer.java | 4 +++- .../java/blackjack/domain/person/Person.java | 7 +++---- .../java/blackjack/domain/person/Player.java | 21 +++++++++++++++++++ 3 files changed, 27 insertions(+), 5 deletions(-) diff --git a/src/main/java/blackjack/domain/person/Dealer.java b/src/main/java/blackjack/domain/person/Dealer.java index 65ea8e80..4dabc3c7 100644 --- a/src/main/java/blackjack/domain/person/Dealer.java +++ b/src/main/java/blackjack/domain/person/Dealer.java @@ -2,13 +2,15 @@ import blackjack.domain.card.Card; import blackjack.domain.card.CardDeck; +import blackjack.domain.card.Denomination; import java.util.ArrayList; import java.util.List; public class Dealer extends Person { private static final int FIRST_INDEX = 0; - private static final int INITIAL_PICK_NUMBER = 1; + private static final int INITIAL_PICK_NUMBER = 2; + private static final int DEALER_MAXIMUM_SUM = 16; private final CardDeck cardDeck = new CardDeck(); diff --git a/src/main/java/blackjack/domain/person/Person.java b/src/main/java/blackjack/domain/person/Person.java index 76d15030..261bf64a 100644 --- a/src/main/java/blackjack/domain/person/Person.java +++ b/src/main/java/blackjack/domain/person/Person.java @@ -4,13 +4,12 @@ import java.util.ArrayList; import java.util.List; -public class Person { +public abstract class Person { protected List cards = new ArrayList<>(); + protected int sum; - public void addCard(Card card) { - cards.add(card); - } + public abstract void addCard(Card card); public List getCards() { return new ArrayList<>(cards); diff --git a/src/main/java/blackjack/domain/person/Player.java b/src/main/java/blackjack/domain/person/Player.java index b25922d5..1b2f603b 100644 --- a/src/main/java/blackjack/domain/person/Player.java +++ b/src/main/java/blackjack/domain/person/Player.java @@ -1,16 +1,19 @@ package blackjack.domain.person; import blackjack.domain.card.Card; +import blackjack.domain.card.Denomination; import java.util.List; import java.util.stream.Collectors; public class Player extends Person { + private static final int PLAYER_MAXIMUM_SUM = 21; private final String name; public Player(String name, List cards) { this.name = name; this.cards.addAll(cards); + this.sum = getSumOfCards(); //TODO } public static List createPlayers(List playerNames, Dealer dealer) { @@ -22,4 +25,22 @@ public static List createPlayers(List playerNames, Dealer dealer public String getName() { return name; } + + public boolean canHit() { + return sum <= PLAYER_MAXIMUM_SUM; + } + + public int getSumOfCards() { + return cards.stream().mapToInt(card -> card.getDenomination().getValue()).sum(); + } + + @Override + public void addCard(Card card) { + cards.add(card); + if (card.getDenomination().equals(Denomination.ACE) && sum < 10) { + sum += 11; + return; + } + sum += card.getDenomination().getValue(); + } } From 416d4dab224498513f2e573589a82f052ce63efe Mon Sep 17 00:00:00 2001 From: eohaerim Date: Fri, 18 Feb 2022 04:21:59 +0900 Subject: [PATCH 56/57] =?UTF-8?q?feat:=20addCard,=20sum=20=EA=B8=B0?= =?UTF-8?q?=EB=8A=A5=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/blackjack/domain/person/Dealer.java | 20 +++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/src/main/java/blackjack/domain/person/Dealer.java b/src/main/java/blackjack/domain/person/Dealer.java index 4dabc3c7..e986aca0 100644 --- a/src/main/java/blackjack/domain/person/Dealer.java +++ b/src/main/java/blackjack/domain/person/Dealer.java @@ -33,4 +33,24 @@ public Card getPickedCard() { public Card getOpenedCard() { return cards.get(FIRST_INDEX); } + + public int getSumOfCards() { + return cards.stream() + .mapToInt(card -> card.getDenomination().getValue()) + .sum(); + } + + @Override + public void addCard(Card card) { + cards.add(card); + if (card.getDenomination().equals(Denomination.ACE) && sum < 10) { + sum += 11; + return; + } + sum += card.getDenomination().getValue(); + } + + public boolean canGetCard() { + return sum <= DEALER_MAXIMUM_SUM; + } } From 277d667b0de39e8623398ff7ada200ebfd30a61b Mon Sep 17 00:00:00 2001 From: eohaerim Date: Fri, 18 Feb 2022 04:23:48 +0900 Subject: [PATCH 57/57] =?UTF-8?q?feat:=20=EA=B2=8C=EC=9E=84=20controller?= =?UTF-8?q?=20=EC=82=AC=EC=9A=A9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/blackjack/BlackjackApplication.java | 11 +-- .../blackjack/controller/BlackJackGame.java | 69 +++++++++++++++++++ .../blackjack/domain/game/GameResult.java | 28 ++++++++ src/main/java/blackjack/view/InputView.java | 6 ++ src/main/java/blackjack/view/ResultView.java | 40 +++++++++++ 5 files changed, 146 insertions(+), 8 deletions(-) create mode 100644 src/main/java/blackjack/controller/BlackJackGame.java create mode 100644 src/main/java/blackjack/domain/game/GameResult.java diff --git a/src/main/java/blackjack/BlackjackApplication.java b/src/main/java/blackjack/BlackjackApplication.java index eb341649..8c1936cd 100644 --- a/src/main/java/blackjack/BlackjackApplication.java +++ b/src/main/java/blackjack/BlackjackApplication.java @@ -1,16 +1,11 @@ package blackjack; -import blackjack.game.GameSetup; -import blackjack.view.InputView; -import blackjack.view.ResultView; -import java.util.List; +import blackjack.controller.BlackJackGame; public class BlackjackApplication { public static void main(String[] args) { - List playerNames = InputView.getPlayerNames(); - GameSetup gameSetup = new GameSetup(playerNames); - ResultView.printSetUpResult(gameSetup.getDealer().getOpenedCard(), gameSetup.getPlayers()); - + BlackJackGame blackJackGame = new BlackJackGame(); + blackJackGame.play(); } } diff --git a/src/main/java/blackjack/controller/BlackJackGame.java b/src/main/java/blackjack/controller/BlackJackGame.java new file mode 100644 index 00000000..d038656c --- /dev/null +++ b/src/main/java/blackjack/controller/BlackJackGame.java @@ -0,0 +1,69 @@ +package blackjack.controller; + +import blackjack.domain.game.GameResult; +import blackjack.domain.person.Dealer; +import blackjack.domain.person.Player; +import blackjack.view.InputView; +import blackjack.view.ResultView; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +public class BlackJackGame { + + private final Dealer dealer; + private final List players; + + public BlackJackGame() { + dealer = new Dealer(); + players = Player.createPlayers(InputView.getPlayerNames(), dealer); + ResultView.printSetUpResult(dealer.getOpenedCard(), players); + } + + public void play() { + askPlayers(); + giveDealerCard(); + printGameResult(); + } + + private void giveDealerCard() { + if (dealer.canGetCard()) { + dealer.addCard(dealer.getPickedCard()); + ResultView.printDealerReceiveCard(); + } + } + + private void askPlayers() { + for (Player player : players) { + askPlayer(player); + } + } + + private void askPlayer(Player player) { + while (player.canHit() && InputView.isHit(player)) { + player.addCard(dealer.getPickedCard()); + } + } + + private void printGameResult() { + ResultView.printDealerAndPlayerCardResult(dealer, players); + ResultView.printGameResult(getGameResult()); + } + + private GameResult getGameResult() { + Map playerResult = new HashMap<>(); + int dealerWin = 0; + int dealerSum = dealer.getSumOfCards(); + + for (Player player : players) { + if (player.getSumOfCards() < dealerSum) { + dealerWin++; + playerResult.put(player.getName(), "패"); + continue; + } + playerResult.put(player.getName(), "승"); + } + + return new GameResult(playerResult, dealerWin, players.size() - dealerWin); + } +} diff --git a/src/main/java/blackjack/domain/game/GameResult.java b/src/main/java/blackjack/domain/game/GameResult.java new file mode 100644 index 00000000..0826db64 --- /dev/null +++ b/src/main/java/blackjack/domain/game/GameResult.java @@ -0,0 +1,28 @@ +package blackjack.domain.game; + +import java.util.Map; + +public class GameResult { + + private final Map playerResult; + private final int dealerWin; + private final int dealerLose; + + public GameResult(Map playerResult, int dealerWin, int dealerLose) { + this.playerResult = playerResult; + this.dealerWin = dealerWin; + this.dealerLose = dealerLose; + } + + public Map getPlayerResult() { + return playerResult; + } + + public int getDealerWin() { + return dealerWin; + } + + public int getDealerLose() { + return dealerLose; + } +} diff --git a/src/main/java/blackjack/view/InputView.java b/src/main/java/blackjack/view/InputView.java index 105d1be7..6ff82ebf 100644 --- a/src/main/java/blackjack/view/InputView.java +++ b/src/main/java/blackjack/view/InputView.java @@ -1,5 +1,6 @@ package blackjack.view; +import blackjack.domain.person.Player; import java.util.Arrays; import java.util.List; import java.util.Scanner; @@ -14,4 +15,9 @@ public static List getPlayerNames() { String[] playerNames = sc.nextLine().split(","); return Arrays.stream(playerNames).collect(Collectors.toList()); } + + public static boolean isHit(Player player) { + System.out.println(player.getName() + "는 한 장의 카드를 더 받겠습니까? (예는 y, 아니오는 n)"); + return sc.nextLine().equals("y"); + } } diff --git a/src/main/java/blackjack/view/ResultView.java b/src/main/java/blackjack/view/ResultView.java index 43d36f57..e2d665fd 100644 --- a/src/main/java/blackjack/view/ResultView.java +++ b/src/main/java/blackjack/view/ResultView.java @@ -1,6 +1,8 @@ package blackjack.view; import blackjack.domain.card.Card; +import blackjack.domain.game.GameResult; +import blackjack.domain.person.Dealer; import blackjack.domain.person.Player; import java.util.List; import java.util.stream.Collectors; @@ -21,4 +23,42 @@ public static void printCardsOf(Player player) { .collect(Collectors.toList()); System.out.println(String.join(", ", cardNames)); } + + public static void printDealerCardsOf(Dealer dealer) { + System.out.print("딜러 카드: "); + List cardNames = dealer.getCards().stream() + .map(card -> card.getDenomination().getValue() + card.getShape().getName()) + .collect(Collectors.toList()); + System.out.println(String.join(", ", cardNames)); + } + + public static void printDealerReceiveCard() { + System.out.println("딜러는 16 이하라 한 장의 카드를 더 받았습니다."); + } + + + public static void printDealerAndPlayerCardResult(Dealer dealer, List players) { + System.out.print("딜러 카드: "); + List dealerCardNames = dealer.getCards().stream() + .map(card -> card.getDenomination().getValue() + card.getShape().getName()) + .collect(Collectors.toList()); + System.out.println(String.join(", ", dealerCardNames) + " - 결과 : " + dealer.getSumOfCards()); + + for (Player player : players) { + System.out.print(player.getName() + "카드: "); + List playerCardNames = player.getCards().stream() + .map(card -> card.getDenomination().getValue() + card.getShape().getName()) + .collect(Collectors.toList()); + System.out.println(String.join(", ", playerCardNames) + "- 결과 : " + player.getSumOfCards()); + } + } + + public static void printGameResult(GameResult gameResult) { + System.out.println("## 최종승패"); + System.out.println("딜러: " + gameResult.getDealerWin() + "승 " + gameResult.getDealerLose() + "패"); + gameResult.getPlayerResult().keySet() + .forEach(playerName -> { + System.out.println(playerName + ": " + gameResult.getPlayerResult().get(playerName)); + }); + } }