From cb0237604c685a27e082b2fd39bf6af2d961026d Mon Sep 17 00:00:00 2001 From: Dami Kim Date: Fri, 11 Feb 2022 16:39:09 +0900 Subject: [PATCH 001/182] =?UTF-8?q?docs:=20=EB=B6=88=ED=95=84=EC=9A=94?= =?UTF-8?q?=ED=95=9C=20empty=20=ED=8C=8C=EC=9D=BC=20=EC=82=AD=EC=A0=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/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 b97ac625e4c58ffd7e7b7f4b6cc52ddcf53930c5 Mon Sep 17 00:00:00 2001 From: Dami Kim Date: Fri, 11 Feb 2022 16:39:25 +0900 Subject: [PATCH 002/182] =?UTF-8?q?docs:=20=EA=B8=B0=EB=8A=A5=20README=20?= =?UTF-8?q?=EC=9E=91=EC=84=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 21 ++++++++++++++++++++- 1 file changed, 20 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 03ba7ed3..6aaa9b52 100644 --- a/README.md +++ b/README.md @@ -1 +1,20 @@ -# java-blackjack \ No newline at end of file +# java-blackjack + +## 기능 + +### Car +- [ ] 이동거리로 주입해야할 연료량을 계산한다. +- [ ] 차종을 리턴한다. +- [ ] 연료량을 리턴한다. + +### RentCompany +- [ ] InputView를 생성한다. +- [ ] InputView로 부터 받은 이동거리로 Car를 생성한다. +- [ ] ReportView를 생성한다. +- [ ] Car로부터 받은 연료량으로 ReportView를 생성한다. + +### InputView +- [ ] 이동거리 입력 받는다. + +### ReportView +- [ ] 차량별 주입해야할 연료량을 출력한다. From d31357491de158fcaceebd4ea878c700aa30ec2b Mon Sep 17 00:00:00 2001 From: kimsunghyun Date: Fri, 11 Feb 2022 17:30:35 +0900 Subject: [PATCH 003/182] =?UTF-8?q?feat:=20CarTest=20=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 이동거리로 주입해야할 연료량을 계산하는 로직 구현 --- src/test/java/domain/CarTest.java | 36 +++++++++++++++++++++++++++++++ 1 file changed, 36 insertions(+) create mode 100644 src/test/java/domain/CarTest.java diff --git a/src/test/java/domain/CarTest.java b/src/test/java/domain/CarTest.java new file mode 100644 index 00000000..f917302e --- /dev/null +++ b/src/test/java/domain/CarTest.java @@ -0,0 +1,36 @@ +package domain; + +import static org.assertj.core.api.Assertions.assertThat; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Test; + +class CarTest { + + @DisplayName("이동거리로 주입해야할 연료량을 계산한다.") + @Test + public void getChargeQuantity() { + //given + final List FUELS = Arrays.asList(20.00, 15.00, 20.00); + final List DISTANCES = Arrays.asList(260, 150, 300); + + final List cars = new ArrayList<>(); + + cars.add(new K5(DISTANCES.get(0))); + cars.add(new Sonata(DISTANCES.get(1))); + cars.add(new Avante(DISTANCES.get(2))); + + //when + final List results = new ArrayList<>(); + + for (Car car : cars) { + results.add(car.getChargeQuantity()); + } + + //then + assertThat(results).isEqualTo(FUELS); + } +} \ No newline at end of file From 4da1ef3869cb28b88bdebf27f69cdf7bae7866b5 Mon Sep 17 00:00:00 2001 From: kimsunghyun Date: Fri, 11 Feb 2022 17:31:01 +0900 Subject: [PATCH 004/182] =?UTF-8?q?feat:=20Car=20=EC=B6=94=EC=83=81=20?= =?UTF-8?q?=ED=81=B4=EB=9E=98=EC=8A=A4=20=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/domain/Car.java | 12 ++++++++++++ 1 file changed, 12 insertions(+) create mode 100644 src/main/java/domain/Car.java diff --git a/src/main/java/domain/Car.java b/src/main/java/domain/Car.java new file mode 100644 index 00000000..593fa41b --- /dev/null +++ b/src/main/java/domain/Car.java @@ -0,0 +1,12 @@ +package domain; + +public abstract class Car { + + abstract double getTripDistance(); + + abstract double getDistancePerLiter(); + + double getChargeQuantity() { + return getTripDistance() / getDistancePerLiter(); + } +} From 4cedf613ea48e746fcee919e35e9855887fc60ed Mon Sep 17 00:00:00 2001 From: kimsunghyun Date: Fri, 11 Feb 2022 18:06:22 +0900 Subject: [PATCH 005/182] =?UTF-8?q?feat:=20Controller=20=ED=81=B4=EB=9E=98?= =?UTF-8?q?=EC=8A=A4=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/controller/RentController.java | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 src/main/java/controller/RentController.java diff --git a/src/main/java/controller/RentController.java b/src/main/java/controller/RentController.java new file mode 100644 index 00000000..6e334d58 --- /dev/null +++ b/src/main/java/controller/RentController.java @@ -0,0 +1,5 @@ +package controller; + +public class RentController { + +} From ccde597f5ef0a6bc298dd0675e61847b82ce54c9 Mon Sep 17 00:00:00 2001 From: kimsunghyun Date: Fri, 11 Feb 2022 18:06:43 +0900 Subject: [PATCH 006/182] =?UTF-8?q?Application=20=ED=81=B4=EB=9E=98?= =?UTF-8?q?=EC=8A=A4=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/Application.java | 6 ++++++ 1 file changed, 6 insertions(+) create mode 100644 src/main/java/Application.java diff --git a/src/main/java/Application.java b/src/main/java/Application.java new file mode 100644 index 00000000..9c15f0e8 --- /dev/null +++ b/src/main/java/Application.java @@ -0,0 +1,6 @@ +public class Application { + + public static void main(String[] args) { + + } +} From fce513d3f1cc7dcdf0884f5e1524a02e15d408eb Mon Sep 17 00:00:00 2001 From: kimsunghyun Date: Fri, 11 Feb 2022 18:07:26 +0900 Subject: [PATCH 007/182] =?UTF-8?q?feat:=20Car=20=EC=B6=94=EC=83=81=20?= =?UTF-8?q?=ED=81=B4=EB=9E=98=EC=8A=A4=EC=9D=98=20=EA=B5=AC=ED=98=84?= =?UTF-8?q?=EC=B2=B4=20=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/domain/Avante.java | 22 ++++++++++++++++++++++ src/main/java/domain/K5.java | 22 ++++++++++++++++++++++ src/main/java/domain/Sonata.java | 22 ++++++++++++++++++++++ 3 files changed, 66 insertions(+) create mode 100644 src/main/java/domain/Avante.java create mode 100644 src/main/java/domain/K5.java create mode 100644 src/main/java/domain/Sonata.java diff --git a/src/main/java/domain/Avante.java b/src/main/java/domain/Avante.java new file mode 100644 index 00000000..299246d9 --- /dev/null +++ b/src/main/java/domain/Avante.java @@ -0,0 +1,22 @@ +package domain; + +public class Avante extends Car { + + private static final int DISTANCE_PER_LITER = 15; + + private final int distance; + + public Avante(final int distance) { + this.distance = distance; + } + + @Override + double getTripDistance() { + return this.distance; + } + + @Override + double getDistancePerLiter() { + return this.DISTANCE_PER_LITER; + } +} diff --git a/src/main/java/domain/K5.java b/src/main/java/domain/K5.java new file mode 100644 index 00000000..cd6a834f --- /dev/null +++ b/src/main/java/domain/K5.java @@ -0,0 +1,22 @@ +package domain; + +public class K5 extends Car { + + private static final int DISTANCE_PER_LITER = 13; + + private final int distance; + + public K5(final int distance) { + this.distance = distance; + } + + @Override + double getTripDistance() { + return this.distance; + } + + @Override + double getDistancePerLiter() { + return this.DISTANCE_PER_LITER; + } +} diff --git a/src/main/java/domain/Sonata.java b/src/main/java/domain/Sonata.java new file mode 100644 index 00000000..70076664 --- /dev/null +++ b/src/main/java/domain/Sonata.java @@ -0,0 +1,22 @@ +package domain; + +public class Sonata extends Car { + + private static final int DISTANCE_PER_LITER = 10; + + private final int distance; + + public Sonata(final int distance) { + this.distance = distance; + } + + @Override + double getTripDistance() { + return this.distance; + } + + @Override + double getDistancePerLiter() { + return this.DISTANCE_PER_LITER; + } +} From 0a9a9ec98b8f52f459ab5c34c4fdad0ab1f5e950 Mon Sep 17 00:00:00 2001 From: kimsunghyun Date: Fri, 11 Feb 2022 18:07:42 +0900 Subject: [PATCH 008/182] =?UTF-8?q?feat:=20View=20=ED=81=B4=EB=9E=98?= =?UTF-8?q?=EC=8A=A4=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/view/InputView.java | 5 +++++ src/main/java/view/ReportView.java | 5 +++++ 2 files changed, 10 insertions(+) create mode 100644 src/main/java/view/InputView.java create mode 100644 src/main/java/view/ReportView.java diff --git a/src/main/java/view/InputView.java b/src/main/java/view/InputView.java new file mode 100644 index 00000000..32dc0af2 --- /dev/null +++ b/src/main/java/view/InputView.java @@ -0,0 +1,5 @@ +package view; + +public class InputView { + +} diff --git a/src/main/java/view/ReportView.java b/src/main/java/view/ReportView.java new file mode 100644 index 00000000..fb0bb526 --- /dev/null +++ b/src/main/java/view/ReportView.java @@ -0,0 +1,5 @@ +package view; + +public class ReportView { + +} From 0e531c0f2a25e661d8489ce314c85120ac0105b8 Mon Sep 17 00:00:00 2001 From: Dami Kim Date: Mon, 14 Feb 2022 16:43:47 +0900 Subject: [PATCH 009/182] =?UTF-8?q?refactor:=20Car=20=EC=B6=94=EC=83=81=20?= =?UTF-8?q?=ED=81=B4=EB=9E=98=EC=8A=A4=EC=97=90=20constructor=20=EC=83=9D?= =?UTF-8?q?=EC=84=B1=ED=95=98=EC=97=AC=20=EC=A4=91=EB=B3=B5=20=EC=A0=9C?= =?UTF-8?q?=EA=B1=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/domain/Car.java | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/src/main/java/domain/Car.java b/src/main/java/domain/Car.java index 593fa41b..5b9c2306 100644 --- a/src/main/java/domain/Car.java +++ b/src/main/java/domain/Car.java @@ -2,6 +2,12 @@ public abstract class Car { + protected final int distance; + + public Car(int distance) { + this.distance = distance; + } + abstract double getTripDistance(); abstract double getDistancePerLiter(); From 788ca212dbc30ceaec6fc8289b91dd1f899a7c65 Mon Sep 17 00:00:00 2001 From: Dami Kim Date: Mon, 14 Feb 2022 16:45:09 +0900 Subject: [PATCH 010/182] =?UTF-8?q?refactor:=20Car=20=EC=B6=94=EC=83=81=20?= =?UTF-8?q?=ED=81=B4=EB=9E=98=EC=8A=A4=EB=A5=BC=20=EC=82=AC=EC=9A=A9?= =?UTF-8?q?=ED=95=B4=20Avante,=20K5,=20Sonata=20=EA=B5=AC=ED=98=84?= =?UTF-8?q?=EC=B2=B4=20=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/domain/Avante.java | 4 +--- src/main/java/domain/K5.java | 4 +--- src/main/java/domain/Sonata.java | 4 +--- 3 files changed, 3 insertions(+), 9 deletions(-) diff --git a/src/main/java/domain/Avante.java b/src/main/java/domain/Avante.java index 299246d9..75b89ce0 100644 --- a/src/main/java/domain/Avante.java +++ b/src/main/java/domain/Avante.java @@ -4,10 +4,8 @@ public class Avante extends Car { private static final int DISTANCE_PER_LITER = 15; - private final int distance; - public Avante(final int distance) { - this.distance = distance; + super(distance); } @Override diff --git a/src/main/java/domain/K5.java b/src/main/java/domain/K5.java index cd6a834f..fca9f31e 100644 --- a/src/main/java/domain/K5.java +++ b/src/main/java/domain/K5.java @@ -4,10 +4,8 @@ public class K5 extends Car { private static final int DISTANCE_PER_LITER = 13; - private final int distance; - public K5(final int distance) { - this.distance = distance; + super(distance); } @Override diff --git a/src/main/java/domain/Sonata.java b/src/main/java/domain/Sonata.java index 70076664..8be7efae 100644 --- a/src/main/java/domain/Sonata.java +++ b/src/main/java/domain/Sonata.java @@ -4,10 +4,8 @@ public class Sonata extends Car { private static final int DISTANCE_PER_LITER = 10; - private final int distance; - public Sonata(final int distance) { - this.distance = distance; + super(distance); } @Override From cbcc6a07c7bb4244cf7132d8293c2b221f4167f1 Mon Sep 17 00:00:00 2001 From: kimsunghyun Date: Mon, 14 Feb 2022 16:57:33 +0900 Subject: [PATCH 011/182] =?UTF-8?q?feat:=20=EC=97=AC=ED=96=89=20=EA=B1=B0?= =?UTF-8?q?=EB=A6=AC=EB=A5=BC=20=EC=9E=85=EB=A0=A5=EB=B0=9B=EC=9D=84=20?= =?UTF-8?q?=EC=88=98=20=EC=9E=88=EB=8A=94=20InputView=20=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/view/InputView.java | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) diff --git a/src/main/java/view/InputView.java b/src/main/java/view/InputView.java index 32dc0af2..1349d373 100644 --- a/src/main/java/view/InputView.java +++ b/src/main/java/view/InputView.java @@ -1,5 +1,28 @@ package view; +import java.util.Scanner; + public class InputView { + private final static Scanner scanner = new Scanner(System.in); + private final static String TRIP_MANAGER = "여행 거리를 입력해 주세요."; + private final static String ERROR_LOG = "[ERROR] 0이나 빈 값이 들어올 수 없습니다"; + + public static String getTripDistance() { + try { + System.out.println(TRIP_MANAGER); + String input = scanner.nextLine(); + validateEmptyOrZero(input); + return input; + } catch (IllegalArgumentException e) { + e.printStackTrace(); + return getTripDistance(); + } + } + + private static void validateEmptyOrZero(String input) { + if (input.trim().isEmpty() || input.equals("0")) { + throw new IllegalArgumentException(ERROR_LOG); + } + } } From 2425fc706e0d6394e953b1cf81a0988ad97464cc Mon Sep 17 00:00:00 2001 From: kimsunghyun Date: Mon, 14 Feb 2022 16:58:09 +0900 Subject: [PATCH 012/182] =?UTF-8?q?feat:=20main=EC=97=90=EC=84=9C=20Contro?= =?UTF-8?q?ller=EB=A5=BC=20=EC=8B=A4=ED=96=89=ED=95=98=EB=8F=84=EB=A1=9D?= =?UTF-8?q?=20=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/Application.java | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/main/java/Application.java b/src/main/java/Application.java index 9c15f0e8..c3d253f4 100644 --- a/src/main/java/Application.java +++ b/src/main/java/Application.java @@ -1,6 +1,9 @@ +import controller.RentController; + public class Application { public static void main(String[] args) { - + RentController rentController = new RentController(); + rentController.start(); } } From e2eddd1c18fe94e738207cc8b4919de502df089d Mon Sep 17 00:00:00 2001 From: kimsunghyun Date: Mon, 14 Feb 2022 17:00:11 +0900 Subject: [PATCH 013/182] =?UTF-8?q?feat:=20rent=20Application=EC=9D=98=20s?= =?UTF-8?q?tart()=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/controller/RentController.java | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/main/java/controller/RentController.java b/src/main/java/controller/RentController.java index 6e334d58..bf68bb8a 100644 --- a/src/main/java/controller/RentController.java +++ b/src/main/java/controller/RentController.java @@ -1,5 +1,10 @@ package controller; +import view.InputView; + public class RentController { + public void start() { + System.out.println("userInput >>> " + InputView.getTripDistance()); + } } From 482793e8963a192d3571c74232970dbbd2ec3afa Mon Sep 17 00:00:00 2001 From: Dami Kim Date: Mon, 14 Feb 2022 17:31:36 +0900 Subject: [PATCH 014/182] =?UTF-8?q?feat:=20RentCompany=20=ED=81=B4?= =?UTF-8?q?=EB=9E=98=EC=8A=A4=20factory=20method=20(create())=20=EC=B6=94?= =?UTF-8?q?=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/domain/RentCompany.java | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) create mode 100644 src/main/java/domain/RentCompany.java diff --git a/src/main/java/domain/RentCompany.java b/src/main/java/domain/RentCompany.java new file mode 100644 index 00000000..54530fe9 --- /dev/null +++ b/src/main/java/domain/RentCompany.java @@ -0,0 +1,21 @@ +package domain; + +import java.util.ArrayList; +import java.util.List; + +public class RentCompany { + + private final List cars; + + public RentCompany(List cars) { + this.cars = cars; + } + + public static RentCompany create(int distance) { + List cars = new ArrayList<>(); + cars.add(new Avante(distance)); + cars.add(new K5(distance)); + cars.add(new Sonata(distance)); + return new RentCompany(cars); + } +} From 0573a5cf4e6f2b6c341b551765b43f356a267dc5 Mon Sep 17 00:00:00 2001 From: kimsunghyun Date: Mon, 14 Feb 2022 17:37:13 +0900 Subject: [PATCH 015/182] =?UTF-8?q?feat:=20Car=20Class=EC=97=90=20?= =?UTF-8?q?=EC=9D=B4=EB=A6=84=EC=9D=84=20=EB=B0=98=ED=99=98=ED=95=98?= =?UTF-8?q?=EB=8A=94=20=EC=B6=94=EC=83=81=20=EB=A9=94=EC=84=9C=EB=93=9C=20?= =?UTF-8?q?=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/domain/Avante.java | 6 ++++++ src/main/java/domain/Car.java | 2 ++ src/main/java/domain/K5.java | 6 ++++++ src/main/java/domain/Sonata.java | 8 ++++++++ 4 files changed, 22 insertions(+) diff --git a/src/main/java/domain/Avante.java b/src/main/java/domain/Avante.java index 75b89ce0..25a553b6 100644 --- a/src/main/java/domain/Avante.java +++ b/src/main/java/domain/Avante.java @@ -2,6 +2,7 @@ public class Avante extends Car { + private static final String NAME = "Avante"; private static final int DISTANCE_PER_LITER = 15; public Avante(final int distance) { @@ -17,4 +18,9 @@ public Avante(final int distance) { double getDistancePerLiter() { return this.DISTANCE_PER_LITER; } + + @Override + String getCarName() { + return NAME; + } } diff --git a/src/main/java/domain/Car.java b/src/main/java/domain/Car.java index 5b9c2306..d488a80b 100644 --- a/src/main/java/domain/Car.java +++ b/src/main/java/domain/Car.java @@ -12,6 +12,8 @@ public Car(int distance) { abstract double getDistancePerLiter(); + abstract String getCarName(); + double getChargeQuantity() { return getTripDistance() / getDistancePerLiter(); } diff --git a/src/main/java/domain/K5.java b/src/main/java/domain/K5.java index fca9f31e..c2175eac 100644 --- a/src/main/java/domain/K5.java +++ b/src/main/java/domain/K5.java @@ -2,6 +2,7 @@ public class K5 extends Car { + private static final String NAME = "K5"; private static final int DISTANCE_PER_LITER = 13; public K5(final int distance) { @@ -17,4 +18,9 @@ public K5(final int distance) { double getDistancePerLiter() { return this.DISTANCE_PER_LITER; } + + @Override + String getCarName() { + return NAME; + } } diff --git a/src/main/java/domain/Sonata.java b/src/main/java/domain/Sonata.java index 8be7efae..cbe919c7 100644 --- a/src/main/java/domain/Sonata.java +++ b/src/main/java/domain/Sonata.java @@ -1,7 +1,10 @@ package domain; +import javax.print.attribute.standard.MediaSize.NA; + public class Sonata extends Car { + private static final String NAME = "Sonata"; private static final int DISTANCE_PER_LITER = 10; public Sonata(final int distance) { @@ -17,4 +20,9 @@ public Sonata(final int distance) { double getDistancePerLiter() { return this.DISTANCE_PER_LITER; } + + @Override + String getCarName() { + return NAME; + } } From e43744ab2846141af71cddb6797167a2e432a242 Mon Sep 17 00:00:00 2001 From: kimsunghyun Date: Mon, 14 Feb 2022 17:59:27 +0900 Subject: [PATCH 016/182] =?UTF-8?q?feat:=20=EC=9D=B4=EB=A6=84=EA=B3=BC=20?= =?UTF-8?q?=EC=97=B0=EB=A3=8C=EB=9F=89=EC=9D=84=20Map=EC=9C=BC=EB=A1=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?=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - generateChargeQuantityByName() --- src/main/java/domain/RentCompany.java | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/src/main/java/domain/RentCompany.java b/src/main/java/domain/RentCompany.java index 54530fe9..28e8d955 100644 --- a/src/main/java/domain/RentCompany.java +++ b/src/main/java/domain/RentCompany.java @@ -1,7 +1,9 @@ package domain; import java.util.ArrayList; +import java.util.HashMap; import java.util.List; +import java.util.Map; public class RentCompany { @@ -18,4 +20,16 @@ public static RentCompany create(int distance) { cars.add(new Sonata(distance)); return new RentCompany(cars); } + + public Map generateChargeQuantityByName() { + Map map = new HashMap<>(); + + for (Car car : cars) { + String name = car.getCarName(); + double chargeQuantity = car.getChargeQuantity(); + + map.put(name, chargeQuantity); + } + return map; + } } From 1deb60ba64f4a17dee2404e0545225da5fe72ee0 Mon Sep 17 00:00:00 2001 From: kimsunghyun Date: Mon, 14 Feb 2022 18:01:06 +0900 Subject: [PATCH 017/182] =?UTF-8?q?fix:=20View=EC=97=90=EC=84=9C=20?= =?UTF-8?q?=EC=9D=B4=EB=8F=99=EA=B1=B0=EB=A6=AC=20=EB=B0=98=ED=99=98=20?= =?UTF-8?q?=ED=83=80=EC=9E=85=EC=9D=84=20=EB=AC=B8=EC=9E=90=EC=97=B4?= =?UTF-8?q?=EC=97=90=EC=84=9C=20=EC=A0=95=EC=88=98=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/view/InputView.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/java/view/InputView.java b/src/main/java/view/InputView.java index 1349d373..c1b568b0 100644 --- a/src/main/java/view/InputView.java +++ b/src/main/java/view/InputView.java @@ -8,12 +8,12 @@ public class InputView { private final static String TRIP_MANAGER = "여행 거리를 입력해 주세요."; private final static String ERROR_LOG = "[ERROR] 0이나 빈 값이 들어올 수 없습니다"; - public static String getTripDistance() { + public static int getTripDistance() { try { System.out.println(TRIP_MANAGER); String input = scanner.nextLine(); validateEmptyOrZero(input); - return input; + return Integer.parseInt(input); } catch (IllegalArgumentException e) { e.printStackTrace(); return getTripDistance(); From d8a753e367c4dfe1f1eb9e4992453efaad35bdde Mon Sep 17 00:00:00 2001 From: kimsunghyun Date: Mon, 14 Feb 2022 18:01:49 +0900 Subject: [PATCH 018/182] =?UTF-8?q?feat:=20RentCompany=EA=B0=80=20?= =?UTF-8?q?=EB=A7=8C=EB=93=A0=20report=EB=A5=BC=20=EC=B6=9C=EB=A0=A5?= =?UTF-8?q?=ED=95=98=EB=8A=94=20=EA=B8=B0=EB=8A=A5=20=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/view/ReportView.java | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/src/main/java/view/ReportView.java b/src/main/java/view/ReportView.java index fb0bb526..11ce626f 100644 --- a/src/main/java/view/ReportView.java +++ b/src/main/java/view/ReportView.java @@ -1,5 +1,14 @@ package view; +import java.util.Map; + public class ReportView { + private static final String MESASGE = "%s : %.2f 리터"; + + public static void generateReport(Map report) { + for (String carName : report.keySet()) { + System.out.println(String.format(MESASGE, carName, report.get(carName))); + } + } } From 6609962cefcef2fdc99fa4ad73915f3fa3b4a4c3 Mon Sep 17 00:00:00 2001 From: kimsunghyun Date: Mon, 14 Feb 2022 18:02:21 +0900 Subject: [PATCH 019/182] =?UTF-8?q?feat:=20=EC=82=AC=EC=9A=A9=EC=9E=90?= =?UTF-8?q?=EC=9D=98=20=EC=97=AC=ED=96=89=EA=B1=B0=EB=A6=AC=20=EC=9E=85?= =?UTF-8?q?=EB=A0=A5=EC=9D=84=20=EB=B0=9B=EC=95=84=20Report=EB=A5=BC=20?= =?UTF-8?q?=EC=B6=9C=EB=A0=A5=ED=95=98=EB=8A=94=20=EA=B8=B0=EB=8A=A5=20?= =?UTF-8?q?=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/controller/RentController.java | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/main/java/controller/RentController.java b/src/main/java/controller/RentController.java index bf68bb8a..782ba753 100644 --- a/src/main/java/controller/RentController.java +++ b/src/main/java/controller/RentController.java @@ -1,10 +1,14 @@ package controller; +import domain.RentCompany; import view.InputView; +import view.ReportView; public class RentController { public void start() { - System.out.println("userInput >>> " + InputView.getTripDistance()); + RentCompany rentCompany = RentCompany.create(InputView.getTripDistance()); + + ReportView.generateReport(rentCompany.generateChargeQuantityByName()); } } From bc9021d82963b5e51e701d675026c9e5ed33fa6a Mon Sep 17 00:00:00 2001 From: Dami Kim Date: Mon, 14 Feb 2022 18:19:36 +0900 Subject: [PATCH 020/182] =?UTF-8?q?refactor:=20TRIP=5FMANAGER=20=EB=AC=B8?= =?UTF-8?q?=EA=B5=AC=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/view/InputView.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/view/InputView.java b/src/main/java/view/InputView.java index c1b568b0..c4034f21 100644 --- a/src/main/java/view/InputView.java +++ b/src/main/java/view/InputView.java @@ -5,7 +5,7 @@ public class InputView { private final static Scanner scanner = new Scanner(System.in); - private final static String TRIP_MANAGER = "여행 거리를 입력해 주세요."; + private final static String TRIP_MANAGER = "주행 거리(km)를 입력해 주세요."; private final static String ERROR_LOG = "[ERROR] 0이나 빈 값이 들어올 수 없습니다"; public static int getTripDistance() { From 769fba319458c84058e6fb64f04a7726368b4e75 Mon Sep 17 00:00:00 2001 From: Dami Kim Date: Mon, 14 Feb 2022 18:19:56 +0900 Subject: [PATCH 021/182] =?UTF-8?q?refactor:=20=EB=B6=88=ED=95=84=EC=9A=94?= =?UTF-8?q?=ED=95=9C=20String.format=20=EC=A0=9C=EA=B1=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/view/ReportView.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/java/view/ReportView.java b/src/main/java/view/ReportView.java index 11ce626f..7a363067 100644 --- a/src/main/java/view/ReportView.java +++ b/src/main/java/view/ReportView.java @@ -4,11 +4,11 @@ public class ReportView { - private static final String MESASGE = "%s : %.2f 리터"; + private static final String MESSAGE = "%s : %.2f 리터"; public static void generateReport(Map report) { for (String carName : report.keySet()) { - System.out.println(String.format(MESASGE, carName, report.get(carName))); + System.out.printf((MESSAGE) + "%n", carName, report.get(carName)); } } } From 04e2258b0a3f1772d39de867c8585d05a2df5ff4 Mon Sep 17 00:00:00 2001 From: Dami Kim Date: Mon, 14 Feb 2022 18:20:24 +0900 Subject: [PATCH 022/182] =?UTF-8?q?style:=20=EB=B6=88=ED=95=84=EC=9A=94?= =?UTF-8?q?=ED=95=9C=20import=20=EB=AC=B8=20=EC=A0=9C=EA=B1=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/domain/Sonata.java | 2 -- 1 file changed, 2 deletions(-) diff --git a/src/main/java/domain/Sonata.java b/src/main/java/domain/Sonata.java index cbe919c7..54b5f514 100644 --- a/src/main/java/domain/Sonata.java +++ b/src/main/java/domain/Sonata.java @@ -1,7 +1,5 @@ package domain; -import javax.print.attribute.standard.MediaSize.NA; - public class Sonata extends Car { private static final String NAME = "Sonata"; From 9d57098df380fa9c3f26b4fc83857b7b7eda89a9 Mon Sep 17 00:00:00 2001 From: Dami Kim Date: Mon, 14 Feb 2022 18:20:44 +0900 Subject: [PATCH 023/182] =?UTF-8?q?feat:=20RentCompany=20Test=20=EC=B6=94?= =?UTF-8?q?=EA=B0=80=20-=20=EC=9E=90=EB=8F=99=EC=B0=A8=5F=EC=9D=B4?= =?UTF-8?q?=EB=A6=84=EA=B3=BC=5F=EC=97=B0=EB=A3=8C=EB=9F=89=EC=9D=84=5F?= =?UTF-8?q?=EB=B0=9B=EC=95=84=5Fmap=EC=9D=84=5F=EB=B0=98=ED=99=98=ED=95=9C?= =?UTF-8?q?=EB=8B=A4()?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/test/java/domain/RentCompanyTest.java | 27 +++++++++++++++++++++++ 1 file changed, 27 insertions(+) create mode 100644 src/test/java/domain/RentCompanyTest.java diff --git a/src/test/java/domain/RentCompanyTest.java b/src/test/java/domain/RentCompanyTest.java new file mode 100644 index 00000000..d4fdfc70 --- /dev/null +++ b/src/test/java/domain/RentCompanyTest.java @@ -0,0 +1,27 @@ +package domain; + +import java.util.ArrayList; +import java.util.List; +import java.util.Map; +import org.assertj.core.api.Assertions; +import org.junit.jupiter.api.Test; + +class RentCompanyTest { + + @Test + void 자동차_이름과_연료량을_받아_map을_반환한다() { + List cars = new ArrayList<>(); + + cars.add(new Avante(300)); + cars.add(new K5(260)); + cars.add(new Sonata(150)); + + RentCompany rentCompany = new RentCompany(cars); + + Map chargeQuantityByName = rentCompany.generateChargeQuantityByName(); + + Assertions.assertThat(chargeQuantityByName.get("Avante")).isEqualTo(20); + Assertions.assertThat(chargeQuantityByName.get("K5")).isEqualTo(20); + Assertions.assertThat(chargeQuantityByName.get("Sonata")).isEqualTo(15); + } +} \ No newline at end of file From 5285a06b667a6a00b5d8988ff798ecad22847b64 Mon Sep 17 00:00:00 2001 From: Dami Kim Date: Mon, 14 Feb 2022 18:21:36 +0900 Subject: [PATCH 024/182] =?UTF-8?q?docs:=20README=20=EC=97=85=EB=8D=B0?= =?UTF-8?q?=EC=9D=B4=ED=8A=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/README.md b/README.md index 6aaa9b52..95944f0f 100644 --- a/README.md +++ b/README.md @@ -3,18 +3,18 @@ ## 기능 ### Car -- [ ] 이동거리로 주입해야할 연료량을 계산한다. -- [ ] 차종을 리턴한다. -- [ ] 연료량을 리턴한다. +- [X] 이동거리로 주입해야할 연료량을 계산한다. +- [X] 차종을 리턴한다. +- [X] 연료량을 리턴한다. ### RentCompany -- [ ] InputView를 생성한다. -- [ ] InputView로 부터 받은 이동거리로 Car를 생성한다. -- [ ] ReportView를 생성한다. -- [ ] Car로부터 받은 연료량으로 ReportView를 생성한다. +- [X] InputView를 생성한다. +- [X] InputView로 부터 받은 이동거리로 Car를 생성한다. +- [X] ReportView를 생성한다. +- [X] Car로부터 받은 연료량으로 ReportView를 생성한다. ### InputView -- [ ] 이동거리 입력 받는다. +- [X] 이동거리 입력 받는다. ### ReportView -- [ ] 차량별 주입해야할 연료량을 출력한다. +- [X] 차량별 주입해야할 연료량을 출력한다. From 71f7796166df68e50387bdf7901585ed7a1453c2 Mon Sep 17 00:00:00 2001 From: kimsunghyun Date: Mon, 14 Feb 2022 21:36:47 +0900 Subject: [PATCH 025/182] =?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=EC=9A=94=EA=B5=AC=EC=82=AC=ED=95=AD=20?= =?UTF-8?q?=EC=9E=91=EC=84=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) diff --git a/README.md b/README.md index 95944f0f..3f23ddcd 100644 --- a/README.md +++ b/README.md @@ -18,3 +18,26 @@ ### ReportView - [X] 차량별 주입해야할 연료량을 출력한다. + + +## 블랙잭 기능 요구사항 + +### 입력 +- [ ] 게임에 참여할 사람의 이름을 입력한다. + - [ ] 쉼표 기준으로 분리한다 + +### 출력 +- [ ] + +### 카드 +- [ ] Ace는 1 또는 11로 계산한다. +- [ ] King, Queen, Jack은 10으로 계산한다. +- [ ] 나머지 카드는 카드숫자를 기본으로 계산한다. + +### 게임 +- [ ] 게임시작 시 2장의 카드를 지급 받는다. +- [ ] 21을 초과하지 않으면 카드를 계속 받을 수 있다. +- [ ] 21을 초과하면 패배로 처리한다. +- [ ] 21을 초과하지 않으면서 21에 가까운 사람이 이긴다. +#### 딜러 +- [ ] 처음에 받은 2장의 합계가 16이하면 1장을 추가로 지급받는다. From 38b9202a4bfc89c483d4f73b6368d714db61ab4b Mon Sep 17 00:00:00 2001 From: kimsunghyun Date: Mon, 14 Feb 2022 21:38:24 +0900 Subject: [PATCH 026/182] =?UTF-8?q?chore:=20rentcar=20=ED=8C=A8=ED=82=A4?= =?UTF-8?q?=EC=A7=80=20=EB=B6=84=EB=A6=AC=20=EB=B0=8F=20=EA=B8=B0=EC=A1=B4?= =?UTF-8?q?=20=EC=BD=94=EB=93=9C=20=EC=9D=B4=EB=8F=99?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/{ => rentcar}/Application.java | 4 +++- .../java/{ => rentcar}/controller/RentController.java | 8 ++++---- src/main/java/{ => rentcar}/domain/Avante.java | 2 +- src/main/java/{ => rentcar}/domain/Car.java | 2 +- src/main/java/{ => rentcar}/domain/K5.java | 2 +- src/main/java/{ => rentcar}/domain/RentCompany.java | 2 +- src/main/java/{ => rentcar}/domain/Sonata.java | 2 +- src/main/java/{ => rentcar}/view/InputView.java | 2 +- src/main/java/{ => rentcar}/view/ReportView.java | 2 +- src/test/java/{ => rentcar}/domain/CarTest.java | 2 +- src/test/java/{ => rentcar}/domain/RentCompanyTest.java | 2 +- 11 files changed, 16 insertions(+), 14 deletions(-) rename src/main/java/{ => rentcar}/Application.java (74%) rename src/main/java/{ => rentcar}/controller/RentController.java (64%) rename src/main/java/{ => rentcar}/domain/Avante.java (95%) rename src/main/java/{ => rentcar}/domain/Car.java (93%) rename src/main/java/{ => rentcar}/domain/K5.java (94%) rename src/main/java/{ => rentcar}/domain/RentCompany.java (97%) rename src/main/java/{ => rentcar}/domain/Sonata.java (95%) rename src/main/java/{ => rentcar}/view/InputView.java (97%) rename src/main/java/{ => rentcar}/view/ReportView.java (93%) rename src/test/java/{ => rentcar}/domain/CarTest.java (97%) rename src/test/java/{ => rentcar}/domain/RentCompanyTest.java (97%) diff --git a/src/main/java/Application.java b/src/main/java/rentcar/Application.java similarity index 74% rename from src/main/java/Application.java rename to src/main/java/rentcar/Application.java index c3d253f4..a13b70d3 100644 --- a/src/main/java/Application.java +++ b/src/main/java/rentcar/Application.java @@ -1,4 +1,6 @@ -import controller.RentController; +package rentcar; + +import rentcar.controller.RentController; public class Application { diff --git a/src/main/java/controller/RentController.java b/src/main/java/rentcar/controller/RentController.java similarity index 64% rename from src/main/java/controller/RentController.java rename to src/main/java/rentcar/controller/RentController.java index 782ba753..cd4fa333 100644 --- a/src/main/java/controller/RentController.java +++ b/src/main/java/rentcar/controller/RentController.java @@ -1,8 +1,8 @@ -package controller; +package rentcar.controller; -import domain.RentCompany; -import view.InputView; -import view.ReportView; +import rentcar.domain.RentCompany; +import rentcar.view.InputView; +import rentcar.view.ReportView; public class RentController { diff --git a/src/main/java/domain/Avante.java b/src/main/java/rentcar/domain/Avante.java similarity index 95% rename from src/main/java/domain/Avante.java rename to src/main/java/rentcar/domain/Avante.java index 25a553b6..f447b7ab 100644 --- a/src/main/java/domain/Avante.java +++ b/src/main/java/rentcar/domain/Avante.java @@ -1,4 +1,4 @@ -package domain; +package rentcar.domain; public class Avante extends Car { diff --git a/src/main/java/domain/Car.java b/src/main/java/rentcar/domain/Car.java similarity index 93% rename from src/main/java/domain/Car.java rename to src/main/java/rentcar/domain/Car.java index d488a80b..816c210f 100644 --- a/src/main/java/domain/Car.java +++ b/src/main/java/rentcar/domain/Car.java @@ -1,4 +1,4 @@ -package domain; +package rentcar.domain; public abstract class Car { diff --git a/src/main/java/domain/K5.java b/src/main/java/rentcar/domain/K5.java similarity index 94% rename from src/main/java/domain/K5.java rename to src/main/java/rentcar/domain/K5.java index c2175eac..84b7306e 100644 --- a/src/main/java/domain/K5.java +++ b/src/main/java/rentcar/domain/K5.java @@ -1,4 +1,4 @@ -package domain; +package rentcar.domain; public class K5 extends Car { diff --git a/src/main/java/domain/RentCompany.java b/src/main/java/rentcar/domain/RentCompany.java similarity index 97% rename from src/main/java/domain/RentCompany.java rename to src/main/java/rentcar/domain/RentCompany.java index 28e8d955..d11489db 100644 --- a/src/main/java/domain/RentCompany.java +++ b/src/main/java/rentcar/domain/RentCompany.java @@ -1,4 +1,4 @@ -package domain; +package rentcar.domain; import java.util.ArrayList; import java.util.HashMap; diff --git a/src/main/java/domain/Sonata.java b/src/main/java/rentcar/domain/Sonata.java similarity index 95% rename from src/main/java/domain/Sonata.java rename to src/main/java/rentcar/domain/Sonata.java index 54b5f514..07676f86 100644 --- a/src/main/java/domain/Sonata.java +++ b/src/main/java/rentcar/domain/Sonata.java @@ -1,4 +1,4 @@ -package domain; +package rentcar.domain; public class Sonata extends Car { diff --git a/src/main/java/view/InputView.java b/src/main/java/rentcar/view/InputView.java similarity index 97% rename from src/main/java/view/InputView.java rename to src/main/java/rentcar/view/InputView.java index c4034f21..ba871821 100644 --- a/src/main/java/view/InputView.java +++ b/src/main/java/rentcar/view/InputView.java @@ -1,4 +1,4 @@ -package view; +package rentcar.view; import java.util.Scanner; diff --git a/src/main/java/view/ReportView.java b/src/main/java/rentcar/view/ReportView.java similarity index 93% rename from src/main/java/view/ReportView.java rename to src/main/java/rentcar/view/ReportView.java index 7a363067..fb093990 100644 --- a/src/main/java/view/ReportView.java +++ b/src/main/java/rentcar/view/ReportView.java @@ -1,4 +1,4 @@ -package view; +package rentcar.view; import java.util.Map; diff --git a/src/test/java/domain/CarTest.java b/src/test/java/rentcar/domain/CarTest.java similarity index 97% rename from src/test/java/domain/CarTest.java rename to src/test/java/rentcar/domain/CarTest.java index f917302e..4200f35a 100644 --- a/src/test/java/domain/CarTest.java +++ b/src/test/java/rentcar/domain/CarTest.java @@ -1,4 +1,4 @@ -package domain; +package rentcar.domain; import static org.assertj.core.api.Assertions.assertThat; diff --git a/src/test/java/domain/RentCompanyTest.java b/src/test/java/rentcar/domain/RentCompanyTest.java similarity index 97% rename from src/test/java/domain/RentCompanyTest.java rename to src/test/java/rentcar/domain/RentCompanyTest.java index d4fdfc70..2e8628a9 100644 --- a/src/test/java/domain/RentCompanyTest.java +++ b/src/test/java/rentcar/domain/RentCompanyTest.java @@ -1,4 +1,4 @@ -package domain; +package rentcar.domain; import java.util.ArrayList; import java.util.List; From 8d567307cf8255dc11796c5ad46d9ad40782b4a9 Mon Sep 17 00:00:00 2001 From: kimsunghyun Date: Mon, 14 Feb 2022 21:41:32 +0900 Subject: [PATCH 027/182] =?UTF-8?q?chore:=20=EB=B8=94=EB=9E=99=EC=9E=AD=20?= =?UTF-8?q?=ED=8C=A8=ED=82=A4=EC=A7=80=20=EB=B6=84=EB=A6=AC=20=EB=B0=8F=20?= =?UTF-8?q?=EC=8A=A4=EC=BC=88=EB=A0=88=ED=86=A4=20=EA=B5=AC=EC=84=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/blackjack/Application.java | 5 +++++ src/main/java/blackjack/controller/Controller.java | 5 +++++ src/main/java/blackjack/domain/domain.java | 5 +++++ src/main/java/blackjack/view/InputView.java | 5 +++++ src/main/java/blackjack/view/OutputView.java | 5 +++++ 5 files changed, 25 insertions(+) create mode 100644 src/main/java/blackjack/Application.java create mode 100644 src/main/java/blackjack/controller/Controller.java create mode 100644 src/main/java/blackjack/domain/domain.java create mode 100644 src/main/java/blackjack/view/InputView.java create mode 100644 src/main/java/blackjack/view/OutputView.java diff --git a/src/main/java/blackjack/Application.java b/src/main/java/blackjack/Application.java new file mode 100644 index 00000000..8a2785f3 --- /dev/null +++ b/src/main/java/blackjack/Application.java @@ -0,0 +1,5 @@ +package blackjack; + +public class Application { + +} diff --git a/src/main/java/blackjack/controller/Controller.java b/src/main/java/blackjack/controller/Controller.java new file mode 100644 index 00000000..cef5d257 --- /dev/null +++ b/src/main/java/blackjack/controller/Controller.java @@ -0,0 +1,5 @@ +package blackjack.controller; + +public class Controller { + +} diff --git a/src/main/java/blackjack/domain/domain.java b/src/main/java/blackjack/domain/domain.java new file mode 100644 index 00000000..5aaada42 --- /dev/null +++ b/src/main/java/blackjack/domain/domain.java @@ -0,0 +1,5 @@ +package blackjack.domain; + +public class domain { + +} diff --git a/src/main/java/blackjack/view/InputView.java b/src/main/java/blackjack/view/InputView.java new file mode 100644 index 00000000..ff86c007 --- /dev/null +++ b/src/main/java/blackjack/view/InputView.java @@ -0,0 +1,5 @@ +package blackjack.view; + +public class InputView { + +} diff --git a/src/main/java/blackjack/view/OutputView.java b/src/main/java/blackjack/view/OutputView.java new file mode 100644 index 00000000..911eecf5 --- /dev/null +++ b/src/main/java/blackjack/view/OutputView.java @@ -0,0 +1,5 @@ +package blackjack.view; + +public class OutputView { + +} From 5fc6a94fe1f205598cbe5341e19aea03407c97ef Mon Sep 17 00:00:00 2001 From: kimsunghyun Date: Mon, 14 Feb 2022 22:00:10 +0900 Subject: [PATCH 028/182] =?UTF-8?q?feat:=20=EA=B2=8C=EC=9E=84=EC=97=90=20?= =?UTF-8?q?=EC=B0=B8=EC=97=AC=ED=95=A0=20=EC=82=AC=EB=9E=8C=EC=9D=98=20?= =?UTF-8?q?=EC=9D=B4=EB=A6=84=EC=9D=84=20=EC=9E=85=EB=A0=A5=EB=B0=9B?= =?UTF-8?q?=EB=8A=94=20=EA=B8=B0=EB=8A=A5=20=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - List으로 반환 --- .../{Controller.java => GameController.java} | 0 src/main/java/blackjack/view/InputView.java | 32 +++++++++++++++++++ 2 files changed, 32 insertions(+) rename src/main/java/blackjack/controller/{Controller.java => GameController.java} (100%) diff --git a/src/main/java/blackjack/controller/Controller.java b/src/main/java/blackjack/controller/GameController.java similarity index 100% rename from src/main/java/blackjack/controller/Controller.java rename to src/main/java/blackjack/controller/GameController.java diff --git a/src/main/java/blackjack/view/InputView.java b/src/main/java/blackjack/view/InputView.java index ff86c007..e131df6e 100644 --- a/src/main/java/blackjack/view/InputView.java +++ b/src/main/java/blackjack/view/InputView.java @@ -1,5 +1,37 @@ 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 scanner = new Scanner(System.in); + private static final String GET_PLAYER_MESSAGE = "게임에 참여할 사람의 이름을 입력하세요."; + private static final String DELIMITER = ","; + + public static List getPlayerName() { + System.out.println(GET_PLAYER_MESSAGE); + String input = scanner.nextLine(); + validateEmpty(input); + + List players = splitPlayerName(input); + + return players; + } + + private static void validateEmpty(String input) { + if (input.isEmpty()) { + throw new IllegalArgumentException(); + } + } + + private static List splitPlayerName(String input) { + String[] split = input.split(DELIMITER); + return Arrays.stream(split) + .map(name -> name.trim()) + .filter(name -> !name.isEmpty()) + .collect(Collectors.toList()); + } } From b96f688757ee5cf659e183ef3b78d71c24ccc6b9 Mon Sep 17 00:00:00 2001 From: kimsunghyun Date: Mon, 14 Feb 2022 22:00:50 +0900 Subject: [PATCH 029/182] =?UTF-8?q?feat:=20Application=20class=EC=97=90?= =?UTF-8?q?=EC=84=9C=20main=EB=AC=B8=20=EC=8B=A4=ED=96=89=ED=95=98?= =?UTF-8?q?=EB=8F=84=EB=A1=9D=20=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/blackjack/Application.java | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/src/main/java/blackjack/Application.java b/src/main/java/blackjack/Application.java index 8a2785f3..97abce7f 100644 --- a/src/main/java/blackjack/Application.java +++ b/src/main/java/blackjack/Application.java @@ -1,5 +1,11 @@ package blackjack; +import blackjack.controller.GameController; + public class Application { + public static void main(String[] args) { + GameController gameController = new GameController(); + gameController.start(); + } } From 3ab57d364177b8330bb41646317c5b73ff8f4492 Mon Sep 17 00:00:00 2001 From: kimsunghyun Date: Mon, 14 Feb 2022 22:01:08 +0900 Subject: [PATCH 030/182] =?UTF-8?q?feat:=20GameController=20=EC=83=9D?= =?UTF-8?q?=EC=84=B1=20=EB=B0=8F=20start()=20=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/blackjack/controller/GameController.java | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/src/main/java/blackjack/controller/GameController.java b/src/main/java/blackjack/controller/GameController.java index cef5d257..2c921aaf 100644 --- a/src/main/java/blackjack/controller/GameController.java +++ b/src/main/java/blackjack/controller/GameController.java @@ -1,5 +1,10 @@ package blackjack.controller; -public class Controller { +import blackjack.view.InputView; +public class GameController { + + public void start() { + InputView.getPlayerName(); + } } From dd5f3197c2f58204d2f4ffc46c1638e42242ba61 Mon Sep 17 00:00:00 2001 From: Dami Kim Date: Mon, 14 Feb 2022 23:12:04 +0900 Subject: [PATCH 031/182] =?UTF-8?q?refactor:=20splitPlayerName=20=EB=B0=94?= =?UTF-8?q?=EB=A1=9C=20Return=ED=95=98=EB=8F=84=EB=A1=9D=20=EB=A6=AC?= =?UTF-8?q?=ED=8C=A9=ED=84=B0=EB=A7=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/blackjack/view/InputView.java | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/src/main/java/blackjack/view/InputView.java b/src/main/java/blackjack/view/InputView.java index e131df6e..dcff9886 100644 --- a/src/main/java/blackjack/view/InputView.java +++ b/src/main/java/blackjack/view/InputView.java @@ -16,9 +16,7 @@ public static List getPlayerName() { String input = scanner.nextLine(); validateEmpty(input); - List players = splitPlayerName(input); - - return players; + return splitPlayerName(input); } private static void validateEmpty(String input) { From f062dac64759b880fdf3c7b45ebb67c2946a0c13 Mon Sep 17 00:00:00 2001 From: Dami Kim Date: Mon, 14 Feb 2022 23:12:20 +0900 Subject: [PATCH 032/182] =?UTF-8?q?feat:=20Card=20Class=20=EA=B5=AC?= =?UTF-8?q?=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/blackjack/domain/Card.java | 12 ++++++++++++ 1 file changed, 12 insertions(+) create mode 100644 src/main/java/blackjack/domain/Card.java diff --git a/src/main/java/blackjack/domain/Card.java b/src/main/java/blackjack/domain/Card.java new file mode 100644 index 00000000..1dda34d6 --- /dev/null +++ b/src/main/java/blackjack/domain/Card.java @@ -0,0 +1,12 @@ +package blackjack.domain; + +public class Card { + + private final String name; + private final int point; + + public Card(String name, int point) { + this.name = name; + this.point = point; + } +} From c30d1e85cc83e5658c9b283cfa07c9a21c91b1b8 Mon Sep 17 00:00:00 2001 From: Dami Kim Date: Mon, 14 Feb 2022 23:12:30 +0900 Subject: [PATCH 033/182] =?UTF-8?q?feat:=20Player=20Class=20=EA=B5=AC?= =?UTF-8?q?=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/blackjack/domain/Player.java | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) create mode 100644 src/main/java/blackjack/domain/Player.java diff --git a/src/main/java/blackjack/domain/Player.java b/src/main/java/blackjack/domain/Player.java new file mode 100644 index 00000000..7d4d0159 --- /dev/null +++ b/src/main/java/blackjack/domain/Player.java @@ -0,0 +1,16 @@ +package blackjack.domain; + +import java.util.ArrayList; + +public class Player { + + private final String name; + private int score; + private List cards; + + public Player(String name) { + this.name = name; + this.score = 0; + this.cards = new ArrayList<>(); + } +} From 0062d44533d8077c07f56f157aed937718da6ef8 Mon Sep 17 00:00:00 2001 From: Dami Kim Date: Mon, 14 Feb 2022 23:13:03 +0900 Subject: [PATCH 034/182] =?UTF-8?q?feat:=20playerNames=EB=A5=BC=20?= =?UTF-8?q?=EA=B8=B0=EC=A4=80=EC=9C=BC=EB=A1=9C=20Player=20=ED=81=B4?= =?UTF-8?q?=EB=9E=98=EC=8A=A4=20list=EB=A5=BC=20=EC=83=9D=EC=84=B1?= =?UTF-8?q?=ED=95=98=EB=8A=94=20=EB=A1=9C=EC=A7=81=20=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/blackjack/controller/GameController.java | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/src/main/java/blackjack/controller/GameController.java b/src/main/java/blackjack/controller/GameController.java index 2c921aaf..7cb90ba7 100644 --- a/src/main/java/blackjack/controller/GameController.java +++ b/src/main/java/blackjack/controller/GameController.java @@ -1,10 +1,16 @@ package blackjack.controller; +import blackjack.domain.Player; import blackjack.view.InputView; +import java.util.List; +import java.util.stream.Collectors; public class GameController { public void start() { - InputView.getPlayerName(); + List playerNames = InputView.getPlayerName(); + List players = playerNames.stream() + .map(Player::new) + .collect(Collectors.toList()); } } From 00e32f9020a359de99cd2fc09fcb98fe317c604f Mon Sep 17 00:00:00 2001 From: kimsunghyun Date: Mon, 14 Feb 2022 23:14:10 +0900 Subject: [PATCH 035/182] =?UTF-8?q?styles:=20=EB=B9=A0=EC=A7=84=20import?= =?UTF-8?q?=EB=AC=B8=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/blackjack/domain/Player.java | 1 + 1 file changed, 1 insertion(+) diff --git a/src/main/java/blackjack/domain/Player.java b/src/main/java/blackjack/domain/Player.java index 7d4d0159..5aaaf929 100644 --- a/src/main/java/blackjack/domain/Player.java +++ b/src/main/java/blackjack/domain/Player.java @@ -1,6 +1,7 @@ package blackjack.domain; import java.util.ArrayList; +import java.util.List; public class Player { From c06cbc27df3d33c8eff6609218d34bf118a42d02 Mon Sep 17 00:00:00 2001 From: kimsunghyun Date: Tue, 15 Feb 2022 00:20:31 +0900 Subject: [PATCH 036/182] =?UTF-8?q?feat:=20Random=20=ED=81=B4=EB=9E=98?= =?UTF-8?q?=EC=8A=A4=EB=A1=9C=20bound=20=EC=9D=B4=ED=95=98=EC=9D=98=20?= =?UTF-8?q?=EB=9E=9C=EB=8D=A4=EA=B0=92=EC=9D=84=20=EC=B6=94=EC=B6=9C?= =?UTF-8?q?=ED=95=98=EB=8A=94=20=EC=9C=A0=ED=8B=B8=20=ED=81=B4=EB=9E=98?= =?UTF-8?q?=EC=8A=A4=20=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/blackjack/domain/domain.java | 5 ----- src/main/java/blackjack/util/CardShuffler.java | 12 ++++++++++++ 2 files changed, 12 insertions(+), 5 deletions(-) delete mode 100644 src/main/java/blackjack/domain/domain.java create mode 100644 src/main/java/blackjack/util/CardShuffler.java diff --git a/src/main/java/blackjack/domain/domain.java b/src/main/java/blackjack/domain/domain.java deleted file mode 100644 index 5aaada42..00000000 --- a/src/main/java/blackjack/domain/domain.java +++ /dev/null @@ -1,5 +0,0 @@ -package blackjack.domain; - -public class domain { - -} diff --git a/src/main/java/blackjack/util/CardShuffler.java b/src/main/java/blackjack/util/CardShuffler.java new file mode 100644 index 00000000..e0e8273e --- /dev/null +++ b/src/main/java/blackjack/util/CardShuffler.java @@ -0,0 +1,12 @@ +package blackjack.util; + +import java.util.Random; + +public class CardShuffler { + + private static final Random random = new Random(); + + public static int pickIndexIn(int bound) { + return random.nextInt(bound); + } +} From 0f4111bcc3c7f0947d2eaa066957ade74afdc50c Mon Sep 17 00:00:00 2001 From: kimsunghyun Date: Tue, 15 Feb 2022 00:21:18 +0900 Subject: [PATCH 037/182] =?UTF-8?q?feat:=20=EC=B9=B4=EB=93=9C=20=EA=B0=9C?= =?UTF-8?q?=EB=B3=84=EC=9D=98=20=EC=9D=B4=EB=A6=84=EA=B3=BC=20=EC=A0=90?= =?UTF-8?q?=EC=88=98=EB=A5=BC=20=EA=B0=80=EC=A7=80=EA=B3=A0=20=EC=9E=88?= =?UTF-8?q?=EB=8A=94=20enum=20Class=20=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/blackjack/domain/CardType.java | 32 ++++++++++++++++++++ 1 file changed, 32 insertions(+) create mode 100644 src/main/java/blackjack/domain/CardType.java diff --git a/src/main/java/blackjack/domain/CardType.java b/src/main/java/blackjack/domain/CardType.java new file mode 100644 index 00000000..47a46fca --- /dev/null +++ b/src/main/java/blackjack/domain/CardType.java @@ -0,0 +1,32 @@ +package blackjack.domain; + +public enum CardType { + TWO("2", 2), + THREE("3", 3), + FOUR("4", 4), + FIVE("5", 5), + SIX("6", 6), + SEVEN("7", 7), + EIGHT("8", 8), + NINE("9", 9), + ACE("11", 11), + QUEEN("10", 10), + KING("10", 10), + JACK("10", 10); + + private final String name; + private final int point; + + CardType(String name, int value) { + this.name = name; + this.point = value; + } + + public String getName() { + return this.name; + } + + public int getPoint() { + return this.point; + } +} From 1fd696b3ec1179935300a3a219021238a8b26fad Mon Sep 17 00:00:00 2001 From: kimsunghyun Date: Tue, 15 Feb 2022 00:23:08 +0900 Subject: [PATCH 038/182] =?UTF-8?q?feat:=20=EC=A0=84=EC=B2=B4=20=EC=B9=B4?= =?UTF-8?q?=EB=93=9C=EC=9D=98=20=EC=83=81=ED=83=9C=EB=A5=BC=20=EB=93=A4?= =?UTF-8?q?=EA=B3=A0=20=EC=9E=88=EB=8A=94=20=ED=81=B4=EB=9E=98=EC=8A=A4=20?= =?UTF-8?q?=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 생성자: 정적팩토리메서드 - removeCard() : 인자로 들어온 플레이어에게 카드를 하나 추가 --- src/main/java/blackjack/domain/CardPack.java | 54 ++++++++++++++++++++ 1 file changed, 54 insertions(+) create mode 100644 src/main/java/blackjack/domain/CardPack.java diff --git a/src/main/java/blackjack/domain/CardPack.java b/src/main/java/blackjack/domain/CardPack.java new file mode 100644 index 00000000..3441ceb0 --- /dev/null +++ b/src/main/java/blackjack/domain/CardPack.java @@ -0,0 +1,54 @@ +package blackjack.domain; + +import blackjack.util.CardShuffler; +import java.util.Arrays; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; + +public class CardPack { + + private static final List symbols = Arrays.asList("스페이드", "다이아몬드", "클로버", "하트"); + + private final Map> map; + + public CardPack(Map> map) { + this.map = map; + } + + public static CardPack create() { + Map> map = new HashMap<>(); + for (String symbol : symbols) { + List cards = Arrays.stream(CardType.values()) + .map(x -> new Card(symbol, x.getName(), x.getPoint())) + .collect(Collectors.toList()); + + map.put(symbol, cards); + } + + return new CardPack(map); + } + + public void removeCard(List players) { + for (Player player : players) { + for (int i = 0; i < 2; i++) { + int symbolIndex = CardShuffler.pickIndexIn(4); + List cards = map.get(symbols.get(symbolIndex)); + int cardIndex = CardShuffler.pickIndexIn(cards.size()); + player.addCard(cards.remove(cardIndex)); + } + } + } + + public void removeCard(Dealer dealer) { + for (int i = 0; i < 2; i++) { + int symbolIndex = CardShuffler.pickIndexIn(4); + List cards = map.get(symbols.get(symbolIndex)); + int cardIndex = CardShuffler.pickIndexIn(cards.size()); + + dealer.addCard(cards.remove(cardIndex)); + } + } + +} From df6f0bf69b708a3074786b71c6f72efe340a1842 Mon Sep 17 00:00:00 2001 From: kimsunghyun Date: Tue, 15 Feb 2022 00:24:24 +0900 Subject: [PATCH 039/182] =?UTF-8?q?feat:=20=EB=94=9C=EB=9F=AC=20=ED=81=B4?= =?UTF-8?q?=EB=9E=98=EC=8A=A4=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - addCard() : 딜러가 가진 카드리스트에 인자로 들어온 카드를 추가 --- src/main/java/blackjack/domain/Dealer.java | 31 ++++++++++++++++++++++ 1 file changed, 31 insertions(+) create mode 100644 src/main/java/blackjack/domain/Dealer.java diff --git a/src/main/java/blackjack/domain/Dealer.java b/src/main/java/blackjack/domain/Dealer.java new file mode 100644 index 00000000..a16e95cc --- /dev/null +++ b/src/main/java/blackjack/domain/Dealer.java @@ -0,0 +1,31 @@ +package blackjack.domain; + +import java.util.List; + +public class Dealer { + + private static final String DEALER = "딜러"; + + private final String name; + private int score; + private List cards; + + public Dealer(int score, List cards) { + this.name = DEALER; + this.score = score; + this.cards = cards; + } + + public void addCard(final Card card) { + score += card.getPoint(); + this.cards.add(card); + } + + public String getName() { + return this.name; + } + + public int getScore() { + return this.score; + } +} From d97b2c647f5ad18b86cb0081af79a10722a8d0fd Mon Sep 17 00:00:00 2001 From: kimsunghyun Date: Tue, 15 Feb 2022 00:25:20 +0900 Subject: [PATCH 040/182] =?UTF-8?q?feat:=20Card=20=ED=81=B4=EB=9E=98?= =?UTF-8?q?=EC=8A=A4=20getter()=20=EC=B6=94=EA=B0=80,=20=EC=83=9D=EC=84=B1?= =?UTF-8?q?=EC=9E=90=20=EC=9D=B8=EC=9E=90=EB=A1=9C=20symbol=20=EC=B6=94?= =?UTF-8?q?=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/blackjack/domain/Card.java | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/src/main/java/blackjack/domain/Card.java b/src/main/java/blackjack/domain/Card.java index 1dda34d6..7caa8a08 100644 --- a/src/main/java/blackjack/domain/Card.java +++ b/src/main/java/blackjack/domain/Card.java @@ -2,11 +2,21 @@ public class Card { + private final String symbol; private final String name; private final int point; - public Card(String name, int point) { + public Card(String symbol, String name, int point) { + this.symbol = symbol; this.name = name; this.point = point; } + + public String getName() { + return this.name; + } + + public int getPoint() { + return this.point; + } } From 68d9c1de4ae66506960398719bca5f02cbfbc27a Mon Sep 17 00:00:00 2001 From: kimsunghyun Date: Tue, 15 Feb 2022 00:26:50 +0900 Subject: [PATCH 041/182] =?UTF-8?q?feat:=20Player=20=ED=81=B4=EB=9E=98?= =?UTF-8?q?=EC=8A=A4=20getter()=20=EC=B6=94=EA=B0=80,=20addCard()=20?= =?UTF-8?q?=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/blackjack/domain/Player.java | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/src/main/java/blackjack/domain/Player.java b/src/main/java/blackjack/domain/Player.java index 5aaaf929..e37c8ec0 100644 --- a/src/main/java/blackjack/domain/Player.java +++ b/src/main/java/blackjack/domain/Player.java @@ -14,4 +14,17 @@ public Player(String name) { this.score = 0; this.cards = new ArrayList<>(); } + + public void addCard(final Card card) { + score += card.getPoint(); + this.cards.add(card); + } + + public String getName() { + return this.name; + } + + public int getScore() { + return this.score; + } } From a2c4f92ebffd0dc9aaec455bc9579e1cd6fc95a8 Mon Sep 17 00:00:00 2001 From: kimsunghyun Date: Tue, 15 Feb 2022 00:27:17 +0900 Subject: [PATCH 042/182] =?UTF-8?q?feat:=20Controller=EC=97=90=EC=84=9C=20?= =?UTF-8?q?=EB=94=9C=EB=9F=AC=EB=A5=BC=20=EC=83=9D=EC=84=B1=ED=95=98?= =?UTF-8?q?=EA=B3=A0=20=EB=AA=A8=EB=91=90=EC=97=90=EA=B2=8C=202=EC=9E=A5?= =?UTF-8?q?=EC=94=A9=20=EB=82=98=EB=88=A0=EC=A3=BC=EB=8A=94=20=EA=B8=B0?= =?UTF-8?q?=EB=8A=A5=20=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/blackjack/controller/GameController.java | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/src/main/java/blackjack/controller/GameController.java b/src/main/java/blackjack/controller/GameController.java index 7cb90ba7..885ea64d 100644 --- a/src/main/java/blackjack/controller/GameController.java +++ b/src/main/java/blackjack/controller/GameController.java @@ -1,7 +1,10 @@ package blackjack.controller; +import blackjack.domain.CardPack; +import blackjack.domain.Dealer; import blackjack.domain.Player; import blackjack.view.InputView; +import java.util.ArrayList; import java.util.List; import java.util.stream.Collectors; @@ -12,5 +15,11 @@ public void start() { List players = playerNames.stream() .map(Player::new) .collect(Collectors.toList()); + + Dealer dealer = new Dealer(0, new ArrayList<>()); + + CardPack cardPack = CardPack.create(); + cardPack.removeCard(players); + cardPack.removeCard(dealer); } } From 810d8a43fec7e4e28e5b0ac1dd3d12cbcb12440d Mon Sep 17 00:00:00 2001 From: kimsunghyun Date: Tue, 15 Feb 2022 00:55:39 +0900 Subject: [PATCH 043/182] =?UTF-8?q?feat:=20getter()=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/blackjack/domain/Card.java | 4 ++++ src/main/java/blackjack/domain/Player.java | 5 +++++ 2 files changed, 9 insertions(+) diff --git a/src/main/java/blackjack/domain/Card.java b/src/main/java/blackjack/domain/Card.java index 7caa8a08..b0cc9409 100644 --- a/src/main/java/blackjack/domain/Card.java +++ b/src/main/java/blackjack/domain/Card.java @@ -12,6 +12,10 @@ public Card(String symbol, String name, int point) { this.point = point; } + public String getSymbol() { + return this.symbol; + } + public String getName() { return this.name; } diff --git a/src/main/java/blackjack/domain/Player.java b/src/main/java/blackjack/domain/Player.java index e37c8ec0..908277b6 100644 --- a/src/main/java/blackjack/domain/Player.java +++ b/src/main/java/blackjack/domain/Player.java @@ -1,6 +1,7 @@ package blackjack.domain; import java.util.ArrayList; +import java.util.Collections; import java.util.List; public class Player { @@ -27,4 +28,8 @@ public String getName() { public int getScore() { return this.score; } + + public List getCards() { + return Collections.unmodifiableList(cards); + } } From 33e4137e8960cd74887e78cf8a32a382b8f061fa Mon Sep 17 00:00:00 2001 From: kimsunghyun Date: Tue, 15 Feb 2022 00:56:13 +0900 Subject: [PATCH 044/182] =?UTF-8?q?fix:=20=EB=A7=B5=EC=97=90=EC=84=9C=20?= =?UTF-8?q?=EC=84=A0=ED=83=9D=EB=90=9C=20=EC=B9=B4=EB=93=9C=EA=B0=80=20?= =?UTF-8?q?=EC=A0=9C=EA=B1=B0=EB=90=98=EC=A7=80=20=EC=95=8A=EC=9D=80=20?= =?UTF-8?q?=EB=AC=B8=EC=A0=9C=20=ED=95=B4=EA=B2=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/blackjack/domain/CardPack.java | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/src/main/java/blackjack/domain/CardPack.java b/src/main/java/blackjack/domain/CardPack.java index 3441ceb0..65c85239 100644 --- a/src/main/java/blackjack/domain/CardPack.java +++ b/src/main/java/blackjack/domain/CardPack.java @@ -34,9 +34,12 @@ public void removeCard(List players) { for (Player player : players) { for (int i = 0; i < 2; i++) { int symbolIndex = CardShuffler.pickIndexIn(4); - List cards = map.get(symbols.get(symbolIndex)); + String symbol = symbols.get(symbolIndex); + List cards = map.get(symbol); + int cardIndex = CardShuffler.pickIndexIn(cards.size()); - player.addCard(cards.remove(cardIndex)); + Card pickedCard = map.get(symbol).remove(cardIndex); + player.addCard(pickedCard); } } } @@ -50,5 +53,4 @@ public void removeCard(Dealer dealer) { dealer.addCard(cards.remove(cardIndex)); } } - } From 349996d1484b2b89d17cd58a244ab57f04a15613 Mon Sep 17 00:00:00 2001 From: kimsunghyun Date: Tue, 15 Feb 2022 00:57:55 +0900 Subject: [PATCH 045/182] =?UTF-8?q?feat:=20=EC=B4=88=EA=B8=B0=20=EB=B0=B0?= =?UTF-8?q?=EB=B6=84=ED=95=9C=20=EC=B9=B4=EB=93=9C=EC=99=80=20=EC=B9=B4?= =?UTF-8?q?=EB=93=9C=EC=83=81=ED=83=9C=EB=A5=BC=20=EC=B6=9C=EB=A0=A5?= =?UTF-8?q?=ED=95=98=EB=8A=94=20=EB=A9=94=EC=84=9C=EB=93=9C=20=EA=B5=AC?= =?UTF-8?q?=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/blackjack/view/OutputView.java | 28 ++++++++++++++++++++ 1 file changed, 28 insertions(+) diff --git a/src/main/java/blackjack/view/OutputView.java b/src/main/java/blackjack/view/OutputView.java index 911eecf5..c0897d3b 100644 --- a/src/main/java/blackjack/view/OutputView.java +++ b/src/main/java/blackjack/view/OutputView.java @@ -1,5 +1,33 @@ package blackjack.view; +import blackjack.domain.Card; +import blackjack.domain.Player; +import java.util.List; +import java.util.stream.Collectors; + public class OutputView { + private static final String GAME_INITIAL_MANAGER = "딜러와 %s에게 2장의 카드를 나누었습니다."; + private static final String COMMA = ", "; + private static final String CARDS_LOG = "%s: %s"; + + public static void printInitialMessage(List players) { + String playerNames = players.stream() + .map(Player::getName) + .collect(Collectors.joining(COMMA)); + + System.out.println(String.format(GAME_INITIAL_MANAGER, playerNames)); + } + + public static void printCardStatus(Player player) { + StringBuilder stringBuilder = new StringBuilder(); + + List cards = player.getCards(); + for (Card card : cards) { + stringBuilder.append(card.getPoint()) + .append(card.getSymbol()) + .append(COMMA); + } + System.out.println(String.format(CARDS_LOG, player.getName(), stringBuilder.toString())); + } } From 492ab6138b6cc190be96418484d2dec0b41abc70 Mon Sep 17 00:00:00 2001 From: kimsunghyun Date: Tue, 15 Feb 2022 00:58:27 +0900 Subject: [PATCH 046/182] =?UTF-8?q?feat:=20=EC=B9=B4=EB=93=9C=EB=A5=BC=20?= =?UTF-8?q?=EB=B0=B0=EB=B6=84=ED=95=98=EA=B3=A0=20=EB=82=9C=20=EB=92=A4=20?= =?UTF-8?q?=EB=A9=94=EC=8B=9C=EC=A7=80=EB=A5=BC=20=EC=B6=9C=EB=A0=A5?= =?UTF-8?q?=ED=95=98=EB=8A=94=20=EC=BB=A8=ED=8A=B8=EB=A1=A4=EB=9F=AC=20?= =?UTF-8?q?=EB=A1=9C=EC=A7=81=20=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/blackjack/controller/GameController.java | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/src/main/java/blackjack/controller/GameController.java b/src/main/java/blackjack/controller/GameController.java index 885ea64d..6eaea434 100644 --- a/src/main/java/blackjack/controller/GameController.java +++ b/src/main/java/blackjack/controller/GameController.java @@ -4,6 +4,7 @@ import blackjack.domain.Dealer; import blackjack.domain.Player; import blackjack.view.InputView; +import blackjack.view.OutputView; import java.util.ArrayList; import java.util.List; import java.util.stream.Collectors; @@ -21,5 +22,11 @@ public void start() { CardPack cardPack = CardPack.create(); cardPack.removeCard(players); cardPack.removeCard(dealer); + + OutputView.printInitialMessage(players); + + for (Player player : players) { + OutputView.printCardStatus(player); + } } } From 900c114204d79af6ceed8a70de97e682ccfe76fe Mon Sep 17 00:00:00 2001 From: kimsunghyun Date: Tue, 15 Feb 2022 00:59:32 +0900 Subject: [PATCH 047/182] docs: Update README.md --- README.md | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/README.md b/README.md index 3f23ddcd..c9e65d09 100644 --- a/README.md +++ b/README.md @@ -23,19 +23,19 @@ ## 블랙잭 기능 요구사항 ### 입력 -- [ ] 게임에 참여할 사람의 이름을 입력한다. - - [ ] 쉼표 기준으로 분리한다 +- [x] 게임에 참여할 사람의 이름을 입력한다. + - [x] 쉼표 기준으로 분리한다 ### 출력 - [ ] ### 카드 - [ ] Ace는 1 또는 11로 계산한다. -- [ ] King, Queen, Jack은 10으로 계산한다. -- [ ] 나머지 카드는 카드숫자를 기본으로 계산한다. +- [x] King, Queen, Jack은 10으로 계산한다. +- [x] 나머지 카드는 카드숫자를 기본으로 계산한다. ### 게임 -- [ ] 게임시작 시 2장의 카드를 지급 받는다. +- [x] 게임시작 시 2장의 카드를 지급 받는다. - [ ] 21을 초과하지 않으면 카드를 계속 받을 수 있다. - [ ] 21을 초과하면 패배로 처리한다. - [ ] 21을 초과하지 않으면서 21에 가까운 사람이 이긴다. From dafc7cc382b18d6842a8edc4381ebf84248516e4 Mon Sep 17 00:00:00 2001 From: Dami Kim Date: Tue, 15 Feb 2022 17:18:44 +0900 Subject: [PATCH 048/182] =?UTF-8?q?feat:=20card=EA=B0=80=20=EB=8B=B4?= =?UTF-8?q?=EA=B2=A8=EC=9E=88=EB=8A=94=20map=20getter=20=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/blackjack/domain/CardPack.java | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/main/java/blackjack/domain/CardPack.java b/src/main/java/blackjack/domain/CardPack.java index 65c85239..a9b04370 100644 --- a/src/main/java/blackjack/domain/CardPack.java +++ b/src/main/java/blackjack/domain/CardPack.java @@ -53,4 +53,8 @@ public void removeCard(Dealer dealer) { dealer.addCard(cards.remove(cardIndex)); } } + + public Map> getMap() { + return map; + } } From 8d30a6d3649bb5bb90656b4f64f795d9f9dfa3f8 Mon Sep 17 00:00:00 2001 From: Dami Kim Date: Tue, 15 Feb 2022 17:19:26 +0900 Subject: [PATCH 049/182] =?UTF-8?q?feat:=20cardPack=20symbol=20test=20?= =?UTF-8?q?=EC=B6=94=EA=B0=80=20-=20=EC=B9=B4=EB=93=9C=ED=8C=A9=EC=97=90?= =?UTF-8?q?=EB=8A=94=5F=EB=AA=A8=EB=93=A0=5F=EC=8B=AC=EB=B3=BC=EC=9D=98=5F?= =?UTF-8?q?=EC=B9=B4=EB=93=9C=5F=ED=83=80=EC=9E=85=EC=9D=B4=5F=EC=9E=88?= =?UTF-8?q?=EC=96=B4=EC=95=BC=5F=ED=95=9C=EB=8B=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/blackjack/domain/CardPackTest.java | 27 +++++++++++++++++++ 1 file changed, 27 insertions(+) create mode 100644 src/test/java/blackjack/domain/CardPackTest.java diff --git a/src/test/java/blackjack/domain/CardPackTest.java b/src/test/java/blackjack/domain/CardPackTest.java new file mode 100644 index 00000000..6afa80e8 --- /dev/null +++ b/src/test/java/blackjack/domain/CardPackTest.java @@ -0,0 +1,27 @@ +package blackjack.domain; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; +import java.util.Map; +import org.assertj.core.api.Assertions; +import org.junit.jupiter.api.Test; + +class CardPackTest { + + private static final List symbols = Arrays.asList("스페이드", "다이아몬드", "클로버", "하트"); + + + @Test + public void 카드팩에는_모든_심볼의_카드_타입이_있어야_한다() { + //given + CardPack cardPack = CardPack.create(); + + //when + Map> cardMap = cardPack.getMap(); + List cardMapKeys = new ArrayList<>(cardMap.keySet()); + + //then + Assertions.assertThat(cardMapKeys).contains(symbols.toArray(new String[0])); + } +} \ No newline at end of file From 4dafdc9d81862790590b87fb0ecc93ef85ec0959 Mon Sep 17 00:00:00 2001 From: Dami Kim Date: Tue, 15 Feb 2022 17:28:10 +0900 Subject: [PATCH 050/182] =?UTF-8?q?feat:=20=EC=8B=AC=EB=B3=BC=EB=B3=84=20?= =?UTF-8?q?=EC=B9=B4=EB=93=9C=20=EC=88=98=EB=9F=89=EC=9D=84=20=EC=B2=B4?= =?UTF-8?q?=ED=81=AC=ED=95=98=EB=8A=94=20CardPack=20test=20=EC=BD=94?= =?UTF-8?q?=EB=93=9C=20=EA=B5=AC=ED=98=84=20-=20=EA=B0=81=5F=EC=8B=AC?= =?UTF-8?q?=EB=B3=BC=EB=B3=84=5F=EC=B9=B4=EB=93=9C=EC=97=90=EB=8A=94=5F12?= =?UTF-8?q?=EA=B0=9C=EC=9D=98=5F=EC=B9=B4=EB=93=9C=EA=B0=80=5F=EC=A1=B4?= =?UTF-8?q?=EC=9E=AC=ED=95=9C=EB=8B=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/blackjack/domain/CardPackTest.java | 24 ++++++++++++++----- 1 file changed, 18 insertions(+), 6 deletions(-) diff --git a/src/test/java/blackjack/domain/CardPackTest.java b/src/test/java/blackjack/domain/CardPackTest.java index 6afa80e8..78b970c6 100644 --- a/src/test/java/blackjack/domain/CardPackTest.java +++ b/src/test/java/blackjack/domain/CardPackTest.java @@ -1,27 +1,39 @@ package blackjack.domain; +import static org.assertj.core.api.Assertions.*; + import java.util.ArrayList; import java.util.Arrays; import java.util.List; import java.util.Map; -import org.assertj.core.api.Assertions; import org.junit.jupiter.api.Test; class CardPackTest { private static final List symbols = Arrays.asList("스페이드", "다이아몬드", "클로버", "하트"); - + CardPack cardPack = CardPack.create(); + Map> cardMap = cardPack.getMap(); @Test public void 카드팩에는_모든_심볼의_카드_타입이_있어야_한다() { //given - CardPack cardPack = CardPack.create(); - //when - Map> cardMap = cardPack.getMap(); List cardMapKeys = new ArrayList<>(cardMap.keySet()); //then - Assertions.assertThat(cardMapKeys).contains(symbols.toArray(new String[0])); + assertThat(cardMapKeys).contains(symbols.toArray(new String[0])); + } + + @Test + public void 각_심볼별_카드에는_12개의_카드가_존재한다() { + //given + List cardMapKeys = new ArrayList<>(cardMap.keySet()); + + //when + //then + for (String symbol : cardMapKeys) { + final int cardQuantity = cardMap.get(symbol).size(); + assertThat(cardQuantity).isEqualTo(12); + } } } \ No newline at end of file From 97745908d1d9a943a82f3da1bd62c7afe8cdebba Mon Sep 17 00:00:00 2001 From: Dami Kim Date: Tue, 15 Feb 2022 17:44:17 +0900 Subject: [PATCH 051/182] =?UTF-8?q?feat:=20=EC=8B=AC=EB=B3=BC=EB=B3=84=20?= =?UTF-8?q?=EC=B9=B4=EB=93=9C=20=EC=A2=85=EB=A5=98=EA=B0=80=20Enum=20CardT?= =?UTF-8?q?ype=EB=A5=BC=20=EB=AA=A8=EB=91=90=20=ED=8F=AC=ED=95=A8=ED=95=98?= =?UTF-8?q?=EB=8A=94=EC=A7=80=20=ED=99=95=EC=9D=B8=ED=95=98=EB=8A=94=20?= =?UTF-8?q?=ED=85=8C=EC=8A=A4=ED=8A=B8=20=EC=BD=94=EB=93=9C=20=EA=B5=AC?= =?UTF-8?q?=ED=98=84=20-=20=EA=B0=81=5F=EC=8B=AC=EB=B3=BC=EB=B3=84=5F?= =?UTF-8?q?=EC=B9=B4=EB=93=9C=EC=9D=98=5F=EC=A2=85=EB=A5=98=EB=8A=94=5FEnu?= =?UTF-8?q?m=5FCardType=EC=9D=84=5F=EB=AA=A8=EB=91=90=5F=ED=8F=AC=ED=95=A8?= =?UTF-8?q?=ED=95=9C=EB=8B=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/blackjack/domain/CardPackTest.java | 24 +++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/src/test/java/blackjack/domain/CardPackTest.java b/src/test/java/blackjack/domain/CardPackTest.java index 78b970c6..77bb6e6c 100644 --- a/src/test/java/blackjack/domain/CardPackTest.java +++ b/src/test/java/blackjack/domain/CardPackTest.java @@ -6,6 +6,7 @@ import java.util.Arrays; import java.util.List; import java.util.Map; +import java.util.stream.Collectors; import org.junit.jupiter.api.Test; class CardPackTest { @@ -36,4 +37,27 @@ class CardPackTest { assertThat(cardQuantity).isEqualTo(12); } } + + @Test + public void 각_심볼별_카드의_종류는_Enum_CardType을_모두_포함한다() { + //given + List cardMapKeys = new ArrayList<>(cardMap.keySet()); + + //when + //then + for (String symbol : cardMapKeys) { + final List cards = cardMap.get(symbol); + + List cardNames = cards.stream() + .map(Card::getName) + .collect(Collectors.toList()); + + List expectedCards = Arrays.stream(CardType.values()) + .map(x -> new Card(symbol, x.getName(), x.getPoint())) + .map(Card::getName) + .collect(Collectors.toList()); + + assertThat(cardNames).contains(expectedCards.toArray(new String[0])); + } + } } \ No newline at end of file From 0e5e9418ffb2105d1c2bb944a0fb8f7b40708362 Mon Sep 17 00:00:00 2001 From: Dami Kim Date: Tue, 15 Feb 2022 17:53:34 +0900 Subject: [PATCH 052/182] =?UTF-8?q?style:=20CardPack=20removeCard=20?= =?UTF-8?q?=EA=B4=80=EB=A0=A8=20TODO=20=EC=A3=BC=EC=84=9D=20=EC=B6=94?= =?UTF-8?q?=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/blackjack/domain/CardPack.java | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/main/java/blackjack/domain/CardPack.java b/src/main/java/blackjack/domain/CardPack.java index a9b04370..002ebce3 100644 --- a/src/main/java/blackjack/domain/CardPack.java +++ b/src/main/java/blackjack/domain/CardPack.java @@ -30,6 +30,8 @@ public static CardPack create() { return new CardPack(map); } + //TODO: removeCard 로직분리, 네이명 수정, 테스트코드 작성 + public void removeCard(List players) { for (Player player : players) { for (int i = 0; i < 2; i++) { From ef0c4625b3d7f01f4ed8b52cee994db9408a4509 Mon Sep 17 00:00:00 2001 From: kimsunghyun Date: Tue, 15 Feb 2022 18:06:55 +0900 Subject: [PATCH 053/182] =?UTF-8?q?feat:=20=EB=94=9C=EB=9F=AC=EB=A5=BC=20?= =?UTF-8?q?=ED=94=8C=EB=A0=88=EC=9D=B4=EC=96=B4=20=EB=A6=AC=EC=8A=A4?= =?UTF-8?q?=ED=8A=B8=EC=97=90=20=EC=B6=94=EA=B0=80=ED=95=98=EC=97=AC=20?= =?UTF-8?q?=EA=B2=8C=EC=9E=84=20=EC=A7=84=ED=96=89=ED=95=98=EB=8F=84?= =?UTF-8?q?=EB=A1=9D=20=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/blackjack/domain/CardPack.java | 10 ---------- 1 file changed, 10 deletions(-) diff --git a/src/main/java/blackjack/domain/CardPack.java b/src/main/java/blackjack/domain/CardPack.java index 002ebce3..9929173e 100644 --- a/src/main/java/blackjack/domain/CardPack.java +++ b/src/main/java/blackjack/domain/CardPack.java @@ -46,16 +46,6 @@ public void removeCard(List players) { } } - public void removeCard(Dealer dealer) { - for (int i = 0; i < 2; i++) { - int symbolIndex = CardShuffler.pickIndexIn(4); - List cards = map.get(symbols.get(symbolIndex)); - int cardIndex = CardShuffler.pickIndexIn(cards.size()); - - dealer.addCard(cards.remove(cardIndex)); - } - } - public Map> getMap() { return map; } From 94576160d686e379a8dcf8e6a49b6d18cd6a9096 Mon Sep 17 00:00:00 2001 From: kimsunghyun Date: Tue, 15 Feb 2022 18:07:57 +0900 Subject: [PATCH 054/182] =?UTF-8?q?feat:=20Player=20class=EC=97=90?= =?UTF-8?q?=EC=84=9C=20=EB=94=9C=EB=9F=AC=EC=9D=B8=EC=A7=80=20=ED=8C=90?= =?UTF-8?q?=EB=B3=84=ED=95=98=EB=8A=94=20=EC=83=81=ED=83=9C=20=EC=B6=94?= =?UTF-8?q?=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/blackjack/domain/Player.java | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/main/java/blackjack/domain/Player.java b/src/main/java/blackjack/domain/Player.java index 908277b6..97cf9f23 100644 --- a/src/main/java/blackjack/domain/Player.java +++ b/src/main/java/blackjack/domain/Player.java @@ -9,11 +9,13 @@ public class Player { private final String name; private int score; private List cards; + private boolean isDealer; - public Player(String name) { + public Player(String name, boolean isDealer) { this.name = name; this.score = 0; this.cards = new ArrayList<>(); + this.isDealer = isDealer; } public void addCard(final Card card) { From 70e688c392c134b18044136e65d4b15d41d7156c Mon Sep 17 00:00:00 2001 From: kimsunghyun Date: Tue, 15 Feb 2022 18:08:25 +0900 Subject: [PATCH 055/182] =?UTF-8?q?feat:=20=EC=BB=A8=ED=8A=B8=EB=A1=A4?= =?UTF-8?q?=EB=9F=AC=EC=97=90=EC=84=9C=20=EB=94=9C=EB=9F=AC=EC=99=80=20?= =?UTF-8?q?=EC=9D=BC=EB=B0=98=ED=94=8C=EB=A0=88=EC=9D=B4=EC=96=B4=EB=A5=BC?= =?UTF-8?q?=20=EA=B0=99=EC=9D=80=20=EB=A6=AC=EC=8A=A4=ED=8A=B8=EC=97=90=20?= =?UTF-8?q?=EB=8B=B4=EC=95=84=20=EA=B2=8C=EC=9E=84=20=EC=A7=84=ED=96=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../blackjack/controller/GameController.java | 18 ++++++++++++------ 1 file changed, 12 insertions(+), 6 deletions(-) diff --git a/src/main/java/blackjack/controller/GameController.java b/src/main/java/blackjack/controller/GameController.java index 6eaea434..f7caef93 100644 --- a/src/main/java/blackjack/controller/GameController.java +++ b/src/main/java/blackjack/controller/GameController.java @@ -1,27 +1,33 @@ package blackjack.controller; import blackjack.domain.CardPack; -import blackjack.domain.Dealer; import blackjack.domain.Player; import blackjack.view.InputView; import blackjack.view.OutputView; -import java.util.ArrayList; +import java.util.Arrays; import java.util.List; import java.util.stream.Collectors; +import java.util.stream.Stream; public class GameController { public void start() { List playerNames = InputView.getPlayerName(); - List players = playerNames.stream() - .map(Player::new) + + Player dealerPlayer = new Player("딜러", true); + + List dealerPlayers = Arrays.asList(dealerPlayer); + + List commonPlayers = playerNames.stream() + .map(player -> new Player(player, false)) .collect(Collectors.toList()); - Dealer dealer = new Dealer(0, new ArrayList<>()); + List players = Stream.of(dealerPlayers, commonPlayers) + .flatMap(lotto -> lotto.stream()) + .collect(Collectors.toList()); CardPack cardPack = CardPack.create(); cardPack.removeCard(players); - cardPack.removeCard(dealer); OutputView.printInitialMessage(players); From 212ff4fc6c9725ec08ebf09efccafdb1f1c8bd79 Mon Sep 17 00:00:00 2001 From: kimsunghyun Date: Tue, 15 Feb 2022 20:56:50 +0900 Subject: [PATCH 056/182] =?UTF-8?q?feat:=20isDelear=20getter()=20=EC=B6=94?= =?UTF-8?q?=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/blackjack/domain/Player.java | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/main/java/blackjack/domain/Player.java b/src/main/java/blackjack/domain/Player.java index 97cf9f23..647f04ed 100644 --- a/src/main/java/blackjack/domain/Player.java +++ b/src/main/java/blackjack/domain/Player.java @@ -34,4 +34,8 @@ public int getScore() { public List getCards() { return Collections.unmodifiableList(cards); } + + public boolean isDealer() { + return this.isDealer; + } } From 176ee2fd9e16e908b5229d4781b721d6c53eed94 Mon Sep 17 00:00:00 2001 From: kimsunghyun Date: Tue, 15 Feb 2022 20:57:25 +0900 Subject: [PATCH 057/182] =?UTF-8?q?feat:=20=EA=B2=8C=EC=9E=84=EC=9D=84=20?= =?UTF-8?q?=EC=A7=84=ED=96=89=ED=95=98=EB=8A=94=20Dealer=20=ED=81=B4?= =?UTF-8?q?=EB=9E=98=EC=8A=A4=20=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - game() : 플레이어들이 게임을 진행하는 메소드 - isLowerThanBlackJack() : 플레이어의 스코어가 21보다 작은지 검증하는 메서드 --- src/main/java/blackjack/domain/Dealer.java | 38 ++++++++++++---------- 1 file changed, 21 insertions(+), 17 deletions(-) diff --git a/src/main/java/blackjack/domain/Dealer.java b/src/main/java/blackjack/domain/Dealer.java index a16e95cc..c63a8b96 100644 --- a/src/main/java/blackjack/domain/Dealer.java +++ b/src/main/java/blackjack/domain/Dealer.java @@ -1,31 +1,35 @@ package blackjack.domain; + +import blackjack.view.InputView; +import blackjack.view.OutputView; import java.util.List; public class Dealer { - private static final String DEALER = "딜러"; - - private final String name; - private int score; - private List cards; + private static final int BLACKJACK = 21; + private final CardPack cardPack; - public Dealer(int score, List cards) { - this.name = DEALER; - this.score = score; - this.cards = cards; + public Dealer(CardPack cardPack) { + this.cardPack = cardPack; } - public void addCard(final Card card) { - score += card.getPoint(); - this.cards.add(card); - } + public void game(List players) { + for (Player player : players) { + if (player.isDealer()) continue; + + if(isLowerThanBlackJack(player)) { + OutputView.printQuestionAcceptCard(player); - public String getName() { - return this.name; + while (InputView.getPlayerChoice()) { + cardPack.giveCard(player); + OutputView.printCardStatus(player); + } + } + } } - public int getScore() { - return this.score; + public boolean isLowerThanBlackJack(Player player) { + return player.getScore() < BLACKJACK; } } From ff55ccdf60e622045615271fc5849c09456290d8 Mon Sep 17 00:00:00 2001 From: kimsunghyun Date: Tue, 15 Feb 2022 20:59:46 +0900 Subject: [PATCH 058/182] =?UTF-8?q?feat:=20InputView=EC=97=90=EC=84=9C=20?= =?UTF-8?q?=ED=94=8C=EB=A0=88=EC=9D=B4=EC=96=B4=EA=B0=80=20y=20=EB=98=90?= =?UTF-8?q?=EB=8A=94=20n=EC=9D=84=20=EC=84=A0=ED=83=9D=ED=95=98=EB=8A=94?= =?UTF-8?q?=20=EA=B8=B0=EB=8A=A5=20=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/blackjack/view/InputView.java | 17 ++++++++++++++--- 1 file changed, 14 insertions(+), 3 deletions(-) diff --git a/src/main/java/blackjack/view/InputView.java b/src/main/java/blackjack/view/InputView.java index dcff9886..dfc4d00e 100644 --- a/src/main/java/blackjack/view/InputView.java +++ b/src/main/java/blackjack/view/InputView.java @@ -19,9 +19,14 @@ public static List getPlayerName() { return splitPlayerName(input); } - private static void validateEmpty(String input) { - if (input.isEmpty()) { - throw new IllegalArgumentException(); + public static boolean getPlayerChoice() { + try { + String input = scanner.nextLine(); + validateEmpty(input); + return input.equals("y"); + } catch (IllegalArgumentException e) { + e.printStackTrace(); + return getPlayerChoice(); } } @@ -32,4 +37,10 @@ private static List splitPlayerName(String input) { .filter(name -> !name.isEmpty()) .collect(Collectors.toList()); } + + private static void validateEmpty(String input) { + if (input.isEmpty()) { + throw new IllegalArgumentException(); + } + } } From b521d586711e9469a22992428986b4265558bb65 Mon Sep 17 00:00:00 2001 From: kimsunghyun Date: Tue, 15 Feb 2022 21:00:26 +0900 Subject: [PATCH 059/182] =?UTF-8?q?feat:=20OutputView=EC=97=90=EC=84=9C=20?= =?UTF-8?q?=EC=B9=B4=EB=93=9C=EB=A5=BC=20=EB=8D=94=20=EB=B0=9B=EA=B2=A0?= =?UTF-8?q?=EB=83=90=EB=8A=94=20=EB=A9=94=EC=8B=9C=EC=A7=80=EB=A5=BC=20?= =?UTF-8?q?=EB=8D=98=EC=A7=80=EB=8A=94=20=EA=B8=B0=EB=8A=A5=20=EA=B5=AC?= =?UTF-8?q?=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/blackjack/view/OutputView.java | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/main/java/blackjack/view/OutputView.java b/src/main/java/blackjack/view/OutputView.java index c0897d3b..1f9717db 100644 --- a/src/main/java/blackjack/view/OutputView.java +++ b/src/main/java/blackjack/view/OutputView.java @@ -10,6 +10,7 @@ public class OutputView { private static final String GAME_INITIAL_MANAGER = "딜러와 %s에게 2장의 카드를 나누었습니다."; private static final String COMMA = ", "; private static final String CARDS_LOG = "%s: %s"; + private static final String QUESTION_ACCEPT_CARD_MESSAGE = "%s는 한장의 카드를 더 받겠습니까?(예는 y, 아니오는 n)"; public static void printInitialMessage(List players) { String playerNames = players.stream() @@ -30,4 +31,8 @@ public static void printCardStatus(Player player) { } System.out.println(String.format(CARDS_LOG, player.getName(), stringBuilder.toString())); } + + public static void printQuestionAcceptCard(Player player) { + System.out.println(String.format(QUESTION_ACCEPT_CARD_MESSAGE, player.getName())); + } } From c15d518ef2e19d7afee8e098375a4dabd8eee71d Mon Sep 17 00:00:00 2001 From: kimsunghyun Date: Tue, 15 Feb 2022 21:03:11 +0900 Subject: [PATCH 060/182] =?UTF-8?q?feat:=20=ED=95=9C=EB=AA=85=EC=97=90?= =?UTF-8?q?=EA=B2=8C=20=EC=B9=B4=EB=93=9C=EB=A5=BC=20=EB=B6=84=EB=B0=B0?= =?UTF-8?q?=ED=95=98=EB=8A=94=20=EA=B8=B0=EB=8A=A5=20=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/blackjack/domain/CardPack.java | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/src/main/java/blackjack/domain/CardPack.java b/src/main/java/blackjack/domain/CardPack.java index 9929173e..55e705f6 100644 --- a/src/main/java/blackjack/domain/CardPack.java +++ b/src/main/java/blackjack/domain/CardPack.java @@ -46,6 +46,16 @@ public void removeCard(List players) { } } + public void giveCard(Player player) { + int symbolIndex = CardShuffler.pickIndexIn(4); + String symbol = symbols.get(symbolIndex); + List cards = map.get(symbol); + + int cardIndex = CardShuffler.pickIndexIn(cards.size()); + Card pickedCard = map.get(symbol).remove(cardIndex); + player.addCard(pickedCard); + } + public Map> getMap() { return map; } From 972447ced77e26b1f7f5f4c0dab106b9aae30846 Mon Sep 17 00:00:00 2001 From: kimsunghyun Date: Tue, 15 Feb 2022 21:06:54 +0900 Subject: [PATCH 061/182] =?UTF-8?q?feat:=20Controller=EC=97=90=EC=84=9C=20?= =?UTF-8?q?Players=EB=A7=8C=EB=93=9C=EB=8A=94=20=EB=A9=94=EC=84=9C?= =?UTF-8?q?=EB=93=9C=EB=A5=BC=20=EB=B6=84=EB=A6=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../blackjack/controller/GameController.java | 29 ++++++++++++------- 1 file changed, 19 insertions(+), 10 deletions(-) diff --git a/src/main/java/blackjack/controller/GameController.java b/src/main/java/blackjack/controller/GameController.java index f7caef93..4233ace2 100644 --- a/src/main/java/blackjack/controller/GameController.java +++ b/src/main/java/blackjack/controller/GameController.java @@ -1,6 +1,7 @@ package blackjack.controller; import blackjack.domain.CardPack; +import blackjack.domain.Dealer; import blackjack.domain.Player; import blackjack.view.InputView; import blackjack.view.OutputView; @@ -12,6 +13,23 @@ public class GameController { public void start() { + CardPack cardPack = CardPack.create(); + Dealer dealer = new Dealer(cardPack); + + List players = makePlayers(); + + cardPack.removeCard(players); + + OutputView.printInitialMessage(players); + + for (Player player : players) { + OutputView.printCardStatus(player); + } + + dealer.game(players); + } + + private List makePlayers() { List playerNames = InputView.getPlayerName(); Player dealerPlayer = new Player("딜러", true); @@ -22,17 +40,8 @@ public void start() { .map(player -> new Player(player, false)) .collect(Collectors.toList()); - List players = Stream.of(dealerPlayers, commonPlayers) + return Stream.of(dealerPlayers, commonPlayers) .flatMap(lotto -> lotto.stream()) .collect(Collectors.toList()); - - CardPack cardPack = CardPack.create(); - cardPack.removeCard(players); - - OutputView.printInitialMessage(players); - - for (Player player : players) { - OutputView.printCardStatus(player); - } } } From bca2a79611a7b4a4b4cc3a25b7571c27270ea7be Mon Sep 17 00:00:00 2001 From: kimsunghyun Date: Tue, 15 Feb 2022 21:07:55 +0900 Subject: [PATCH 062/182] refactor: CardPack#removeCard() rename -> pickCard() --- src/main/java/blackjack/controller/GameController.java | 2 +- src/main/java/blackjack/domain/CardPack.java | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/java/blackjack/controller/GameController.java b/src/main/java/blackjack/controller/GameController.java index 4233ace2..727a535a 100644 --- a/src/main/java/blackjack/controller/GameController.java +++ b/src/main/java/blackjack/controller/GameController.java @@ -18,7 +18,7 @@ public void start() { List players = makePlayers(); - cardPack.removeCard(players); + cardPack.pickCard(players); OutputView.printInitialMessage(players); diff --git a/src/main/java/blackjack/domain/CardPack.java b/src/main/java/blackjack/domain/CardPack.java index 55e705f6..11f5a2bd 100644 --- a/src/main/java/blackjack/domain/CardPack.java +++ b/src/main/java/blackjack/domain/CardPack.java @@ -32,7 +32,7 @@ public static CardPack create() { //TODO: removeCard 로직분리, 네이명 수정, 테스트코드 작성 - public void removeCard(List players) { + public void pickCard(List players) { for (Player player : players) { for (int i = 0; i < 2; i++) { int symbolIndex = CardShuffler.pickIndexIn(4); From 030bf46cfd16ad56a0f4295eedfe14203aa93c7a Mon Sep 17 00:00:00 2001 From: kimsunghyun Date: Tue, 15 Feb 2022 22:46:28 +0900 Subject: [PATCH 063/182] =?UTF-8?q?feat:=20Player=20class=20=EC=B9=B4?= =?UTF-8?q?=EB=93=9C=EB=A5=BC=20=EB=B0=9B=EA=B3=A0=20=EC=A0=90=EC=88=98?= =?UTF-8?q?=EB=A5=BC=20=EC=B6=94=EA=B0=80=ED=95=98=EB=8A=94=20=EB=A9=94?= =?UTF-8?q?=EC=84=9C=EB=93=9C=20=EB=B6=84=EB=A6=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/blackjack/domain/Player.java | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/src/main/java/blackjack/domain/Player.java b/src/main/java/blackjack/domain/Player.java index 647f04ed..3841e773 100644 --- a/src/main/java/blackjack/domain/Player.java +++ b/src/main/java/blackjack/domain/Player.java @@ -18,11 +18,19 @@ public Player(String name, boolean isDealer) { this.isDealer = isDealer; } + public void receiveCard(Card card) { + addCard(card); + addScore(card); + } + public void addCard(final Card card) { - score += card.getPoint(); this.cards.add(card); } + public void addScore(final Card card) { + this.score += card.getPoint(); + } + public String getName() { return this.name; } From 90056e24f66869ba3f4d7a95afe61daa6a9cd948 Mon Sep 17 00:00:00 2001 From: kimsunghyun Date: Tue, 15 Feb 2022 22:46:58 +0900 Subject: [PATCH 064/182] =?UTF-8?q?feat:=20=EA=B2=8C=EC=9E=84=ED=94=8C?= =?UTF-8?q?=EB=A0=88=EC=9D=B4=EC=96=B4=EB=A5=BC=20=EA=B0=90=EC=8B=B8?= =?UTF-8?q?=EB=8A=94=20=EC=9D=BC=EA=B8=89=EC=BB=AC=EB=A0=89=EC=85=98=20?= =?UTF-8?q?=EC=83=9D=EC=84=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/blackjack/domain/GamePlayers.java | 33 +++++++++++++++++++ 1 file changed, 33 insertions(+) create mode 100644 src/main/java/blackjack/domain/GamePlayers.java diff --git a/src/main/java/blackjack/domain/GamePlayers.java b/src/main/java/blackjack/domain/GamePlayers.java new file mode 100644 index 00000000..efd932c1 --- /dev/null +++ b/src/main/java/blackjack/domain/GamePlayers.java @@ -0,0 +1,33 @@ +package blackjack.domain; + +import blackjack.view.InputView; +import java.util.Arrays; +import java.util.List; +import java.util.stream.Collectors; +import java.util.stream.Stream; + +public class GamePlayers { + + private final List players; + + public GamePlayers(List players) { + this.players = players; + } + + public List getPlayers() { + return this.players; + } + + public static GamePlayers makePlayers(List playerNames) { + List dealerPlayers = Arrays.asList(new Player("딜러", true)); + List commonPlayers = playerNames.stream() + .map(player -> new Player(player, false)) + .collect(Collectors.toList()); + + List players = Stream.of(dealerPlayers, commonPlayers) + .flatMap(lotto -> lotto.stream()) + .collect(Collectors.toList()); + + return new GamePlayers(players); + } +} From d719731908d50cf512f4ada487539ed3987279bd Mon Sep 17 00:00:00 2001 From: kimsunghyun Date: Tue, 15 Feb 2022 22:47:53 +0900 Subject: [PATCH 065/182] =?UTF-8?q?fix:=20CardPack#pickCard=20=EB=A1=9C?= =?UTF-8?q?=EC=A7=81=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/CardPack.java | 19 ++----------------- 1 file changed, 2 insertions(+), 17 deletions(-) diff --git a/src/main/java/blackjack/domain/CardPack.java b/src/main/java/blackjack/domain/CardPack.java index 11f5a2bd..4170baa8 100644 --- a/src/main/java/blackjack/domain/CardPack.java +++ b/src/main/java/blackjack/domain/CardPack.java @@ -32,28 +32,13 @@ public static CardPack create() { //TODO: removeCard 로직분리, 네이명 수정, 테스트코드 작성 - public void pickCard(List players) { - for (Player player : players) { - for (int i = 0; i < 2; i++) { - int symbolIndex = CardShuffler.pickIndexIn(4); - String symbol = symbols.get(symbolIndex); - List cards = map.get(symbol); - - int cardIndex = CardShuffler.pickIndexIn(cards.size()); - Card pickedCard = map.get(symbol).remove(cardIndex); - player.addCard(pickedCard); - } - } - } - - public void giveCard(Player player) { + public Card pickCard(Player player) { int symbolIndex = CardShuffler.pickIndexIn(4); String symbol = symbols.get(symbolIndex); List cards = map.get(symbol); int cardIndex = CardShuffler.pickIndexIn(cards.size()); - Card pickedCard = map.get(symbol).remove(cardIndex); - player.addCard(pickedCard); + return map.get(symbol).remove(cardIndex); } public Map> getMap() { From cea8f931331af353f800c85bbd1b02cb4f9e531d Mon Sep 17 00:00:00 2001 From: kimsunghyun Date: Tue, 15 Feb 2022 22:48:19 +0900 Subject: [PATCH 066/182] =?UTF-8?q?feat:=20OutputView=20=EB=94=9C=EB=9F=AC?= =?UTF-8?q?=EA=B0=80=20=ED=95=9C=EC=9E=A5=20=EB=8D=94=20=EB=B0=9B=EC=95=98?= =?UTF-8?q?=EB=8B=A4=EB=8A=94=20=EB=A9=94=EC=8B=9C=EC=A7=80=20=EC=B6=9C?= =?UTF-8?q?=EB=A0=A5=20=EA=B8=B0=EB=8A=A5=20=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/blackjack/view/OutputView.java | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/main/java/blackjack/view/OutputView.java b/src/main/java/blackjack/view/OutputView.java index 1f9717db..78223ff7 100644 --- a/src/main/java/blackjack/view/OutputView.java +++ b/src/main/java/blackjack/view/OutputView.java @@ -11,6 +11,7 @@ public class OutputView { private static final String COMMA = ", "; private static final String CARDS_LOG = "%s: %s"; private static final String QUESTION_ACCEPT_CARD_MESSAGE = "%s는 한장의 카드를 더 받겠습니까?(예는 y, 아니오는 n)"; + private static final String DEALER_RECEIVE_ONE_CARD_MESSAGE = "딜러는 한장의 카드를 더 받았습니다."; public static void printInitialMessage(List players) { String playerNames = players.stream() @@ -35,4 +36,8 @@ public static void printCardStatus(Player player) { public static void printQuestionAcceptCard(Player player) { System.out.println(String.format(QUESTION_ACCEPT_CARD_MESSAGE, player.getName())); } + + public static void printDealrAcceptCard() { + System.out.println(DEALER_RECEIVE_ONE_CARD_MESSAGE); + } } From 86799b78b61eabe1affd1b97714492583663e72e Mon Sep 17 00:00:00 2001 From: kimsunghyun Date: Tue, 15 Feb 2022 22:49:34 +0900 Subject: [PATCH 067/182] =?UTF-8?q?feat:=20Dealer=20Class=20=EB=82=B4?= =?UTF-8?q?=EB=B6=80=20=EB=A9=94=EC=84=9C=EB=93=9C=20=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 - 게임 로직에 의해 메서드 분리 --- src/main/java/blackjack/domain/Dealer.java | 67 ++++++++++++++++++---- 1 file changed, 57 insertions(+), 10 deletions(-) diff --git a/src/main/java/blackjack/domain/Dealer.java b/src/main/java/blackjack/domain/Dealer.java index c63a8b96..ccd05b76 100644 --- a/src/main/java/blackjack/domain/Dealer.java +++ b/src/main/java/blackjack/domain/Dealer.java @@ -7,29 +7,76 @@ public class Dealer { + private static final int INITIAL_CARD_QUANTITY = 2; private static final int BLACKJACK = 21; + private static final int DEALER_BOUND = 16; private final CardPack cardPack; public Dealer(CardPack cardPack) { this.cardPack = cardPack; } - public void game(List players) { + public void initializeGame(GamePlayers gamePlayers) { + List players = gamePlayers.getPlayers(); + + for (int i = 0; i < INITIAL_CARD_QUANTITY; i++) { + players.stream() + .forEach(player -> giveCardAfterPick(player)); + } + } + + public void playGame(GamePlayers gamePlayers) { + List players = gamePlayers.getPlayers(); + for (Player player : players) { - if (player.isDealer()) continue; + giveCardToPlayer(player); + } + for (Player player : players) { + System.out.println(player.getName()+"의 점수 : "+player.getScore()); + } + } + + private void giveCardToPlayer(Player player) { + if (player.isDealer()) { + giveCardToDealerPlayer(player); + return; + } + giveCardToGeneralPlayer(player); + } + + private void giveCardToGeneralPlayer(Player player) { + int score = player.getScore(); - if(isLowerThanBlackJack(player)) { - OutputView.printQuestionAcceptCard(player); + if (isLowerThanBlackJack(score)) { + OutputView.printQuestionAcceptCard(player); - while (InputView.getPlayerChoice()) { - cardPack.giveCard(player); - OutputView.printCardStatus(player); - } + while (isLowerThanBlackJack(score) && InputView.getPlayerChoice()) { + giveCardAfterPick(player); + OutputView.printCardStatus(player); + score = player.getScore(); } } } - public boolean isLowerThanBlackJack(Player player) { - return player.getScore() < BLACKJACK; + private void giveCardToDealerPlayer(Player player){ + int score = player.getScore(); + while (isLowerThanDealerBound(score)) { + OutputView.printDealrAcceptCard(); + giveCardAfterPick(player); + score = player.getScore(); + } + } + + private void giveCardAfterPick(Player player) { + Card pickedCard = cardPack.pickCard(player); + player.receiveCard(pickedCard); + } + + public boolean isLowerThanBlackJack(int score) { + return score < BLACKJACK; + } + + public boolean isLowerThanDealerBound(int score) { + return score < DEALER_BOUND; } } From 8947cb3a8085b98d123361d0bb1e16d875a5144f Mon Sep 17 00:00:00 2001 From: kimsunghyun Date: Tue, 15 Feb 2022 22:50:19 +0900 Subject: [PATCH 068/182] =?UTF-8?q?feat:=20=EC=9D=BC=EA=B8=89=EC=BB=AC?= =?UTF-8?q?=EB=A0=89=EC=85=98=20=EC=83=9D=EC=84=B1=EC=9C=BC=EB=A1=9C=20?= =?UTF-8?q?=EC=9D=B8=ED=95=9C=20Controller=20=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 - 메서드, 클래스 분리 --- .../blackjack/controller/GameController.java | 32 ++++++------------- 1 file changed, 9 insertions(+), 23 deletions(-) diff --git a/src/main/java/blackjack/controller/GameController.java b/src/main/java/blackjack/controller/GameController.java index 727a535a..0cc2a9dc 100644 --- a/src/main/java/blackjack/controller/GameController.java +++ b/src/main/java/blackjack/controller/GameController.java @@ -2,13 +2,11 @@ import blackjack.domain.CardPack; import blackjack.domain.Dealer; +import blackjack.domain.GamePlayers; import blackjack.domain.Player; import blackjack.view.InputView; import blackjack.view.OutputView; -import java.util.Arrays; import java.util.List; -import java.util.stream.Collectors; -import java.util.stream.Stream; public class GameController { @@ -16,32 +14,20 @@ public void start() { CardPack cardPack = CardPack.create(); Dealer dealer = new Dealer(cardPack); - List players = makePlayers(); + GamePlayers gamePlayers = GamePlayers.makePlayers(InputView.getPlayerName()); - cardPack.pickCard(players); + dealer.initializeGame(gamePlayers); + printInitialStatus(gamePlayers); + dealer.playGame(gamePlayers); + } + + private void printInitialStatus(GamePlayers gamePlayers) { + List players = gamePlayers.getPlayers(); OutputView.printInitialMessage(players); for (Player player : players) { OutputView.printCardStatus(player); } - - dealer.game(players); - } - - private List makePlayers() { - List playerNames = InputView.getPlayerName(); - - Player dealerPlayer = new Player("딜러", true); - - List dealerPlayers = Arrays.asList(dealerPlayer); - - List commonPlayers = playerNames.stream() - .map(player -> new Player(player, false)) - .collect(Collectors.toList()); - - return Stream.of(dealerPlayers, commonPlayers) - .flatMap(lotto -> lotto.stream()) - .collect(Collectors.toList()); } } From a3c0f076f49abcd00f2d1ed982656bcbabf15f24 Mon Sep 17 00:00:00 2001 From: kimsunghyun Date: Tue, 15 Feb 2022 23:05:27 +0900 Subject: [PATCH 069/182] =?UTF-8?q?fix:=20CardType=EC=9D=98=20Name?= =?UTF-8?q?=EC=9D=84=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Ace, Queen, King, Jack의 경우 알맞는 네임으로 변경 --- src/main/java/blackjack/domain/CardType.java | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/main/java/blackjack/domain/CardType.java b/src/main/java/blackjack/domain/CardType.java index 47a46fca..0dcf5a56 100644 --- a/src/main/java/blackjack/domain/CardType.java +++ b/src/main/java/blackjack/domain/CardType.java @@ -9,10 +9,10 @@ public enum CardType { SEVEN("7", 7), EIGHT("8", 8), NINE("9", 9), - ACE("11", 11), - QUEEN("10", 10), - KING("10", 10), - JACK("10", 10); + ACE("A", 11), + QUEEN("Q", 10), + KING("K", 10), + JACK("J", 10); private final String name; private final int point; From 6974cd1bdd798e581d8e68201b786af6101add20 Mon Sep 17 00:00:00 2001 From: kimsunghyun Date: Tue, 15 Feb 2022 23:11:47 +0900 Subject: [PATCH 070/182] =?UTF-8?q?refactor:=20Stream=20=EB=82=B4=EB=B6=80?= =?UTF-8?q?=20=EA=B5=AC=ED=98=84=20=EB=B3=80=EC=88=98=EB=AA=85=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/CardPack.java | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/main/java/blackjack/domain/CardPack.java b/src/main/java/blackjack/domain/CardPack.java index 4170baa8..346dc2fd 100644 --- a/src/main/java/blackjack/domain/CardPack.java +++ b/src/main/java/blackjack/domain/CardPack.java @@ -21,7 +21,7 @@ public static CardPack create() { Map> map = new HashMap<>(); for (String symbol : symbols) { List cards = Arrays.stream(CardType.values()) - .map(x -> new Card(symbol, x.getName(), x.getPoint())) + .map(card -> new Card(symbol, card.getName(), card.getPoint())) .collect(Collectors.toList()); map.put(symbol, cards); @@ -31,7 +31,6 @@ public static CardPack create() { } //TODO: removeCard 로직분리, 네이명 수정, 테스트코드 작성 - public Card pickCard(Player player) { int symbolIndex = CardShuffler.pickIndexIn(4); String symbol = symbols.get(symbolIndex); From 81e21a8d2b186023912d423c076c75346129db3a Mon Sep 17 00:00:00 2001 From: kimsunghyun Date: Tue, 15 Feb 2022 23:38:36 +0900 Subject: [PATCH 071/182] =?UTF-8?q?feat:=20CardType=EC=97=90=EC=84=9C=20Ac?= =?UTF-8?q?e=EB=A5=BC=20=EC=9C=84=ED=95=9C=20=EB=A9=A4=EB=B2=84=EB=B3=80?= =?UTF-8?q?=EC=88=98=20=EB=B0=8F=20=EC=83=9D=EC=84=B1=EC=9E=90=20=EC=B6=94?= =?UTF-8?q?=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/blackjack/domain/CardType.java | 17 ++++++++++++++--- 1 file changed, 14 insertions(+), 3 deletions(-) diff --git a/src/main/java/blackjack/domain/CardType.java b/src/main/java/blackjack/domain/CardType.java index 0dcf5a56..22bbbff8 100644 --- a/src/main/java/blackjack/domain/CardType.java +++ b/src/main/java/blackjack/domain/CardType.java @@ -9,17 +9,24 @@ public enum CardType { SEVEN("7", 7), EIGHT("8", 8), NINE("9", 9), - ACE("A", 11), + ACE("A", 11, 1), QUEEN("Q", 10), KING("K", 10), JACK("J", 10); private final String name; private final int point; + private int lowerAcePoint; - CardType(String name, int value) { + CardType(String name, int point) { this.name = name; - this.point = value; + this.point = point; + } + + CardType(String name, int point, int lowerAcePoint) { + this.name = name; + this.point = point; + this.lowerAcePoint = lowerAcePoint; } public String getName() { @@ -29,4 +36,8 @@ public String getName() { public int getPoint() { return this.point; } + + public int getLowerAcePoint() { + return this.lowerAcePoint; + } } From 53fa7a1f37bfdd749a0dfe525b928d808c61457b Mon Sep 17 00:00:00 2001 From: kimsunghyun Date: Tue, 15 Feb 2022 23:38:58 +0900 Subject: [PATCH 072/182] =?UTF-8?q?feat:=20Card=20=EC=97=90=EC=84=9C=20Ace?= =?UTF-8?q?=EB=A5=BC=20=EC=9C=84=ED=95=9C=20=EB=A9=A4=EB=B2=84=EB=B3=80?= =?UTF-8?q?=EC=88=98=20=EB=B0=8F=20=EC=83=9D=EC=84=B1=EC=9E=90=20=EC=B6=94?= =?UTF-8?q?=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/blackjack/domain/Card.java | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/src/main/java/blackjack/domain/Card.java b/src/main/java/blackjack/domain/Card.java index b0cc9409..a1047b84 100644 --- a/src/main/java/blackjack/domain/Card.java +++ b/src/main/java/blackjack/domain/Card.java @@ -5,6 +5,7 @@ public class Card { private final String symbol; private final String name; private final int point; + private int lowerAcePoint; public Card(String symbol, String name, int point) { this.symbol = symbol; @@ -12,6 +13,13 @@ public Card(String symbol, String name, int point) { this.point = point; } + public Card(String symbol, String name, int point, int lowerAcePoint) { + this.symbol = symbol; + this.name = name; + this.point = point; + this.lowerAcePoint = lowerAcePoint; + } + public String getSymbol() { return this.symbol; } @@ -23,4 +31,8 @@ public String getName() { public int getPoint() { return this.point; } + + public int getLowerAcePoint() { + return this.lowerAcePoint; + } } From 0c3361fa34dc3da319da58d6eb0bcaf805565afd Mon Sep 17 00:00:00 2001 From: kimsunghyun Date: Tue, 15 Feb 2022 23:40:25 +0900 Subject: [PATCH 073/182] =?UTF-8?q?feat:=20Ace=EC=9D=B8=20=EA=B2=BD?= =?UTF-8?q?=EC=9A=B0=EB=A5=BC=20=EA=B5=AC=EB=B6=84=ED=95=98=EC=97=AC=20?= =?UTF-8?q?=EC=B9=B4=EB=93=9C=ED=8C=A9=EC=9D=84=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/CardPack.java | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/src/main/java/blackjack/domain/CardPack.java b/src/main/java/blackjack/domain/CardPack.java index 346dc2fd..f6c4b8ec 100644 --- a/src/main/java/blackjack/domain/CardPack.java +++ b/src/main/java/blackjack/domain/CardPack.java @@ -10,6 +10,8 @@ public class CardPack { private static final List symbols = Arrays.asList("스페이드", "다이아몬드", "클로버", "하트"); + private static final int SYMBOL_SIZE = symbols.size(); + private static final String ACE = "A"; private final Map> map; @@ -21,7 +23,12 @@ public static CardPack create() { Map> map = new HashMap<>(); for (String symbol : symbols) { List cards = Arrays.stream(CardType.values()) - .map(card -> new Card(symbol, card.getName(), card.getPoint())) + .map(card -> { + if (card.getName().equals(ACE)) { + return new Card(symbol, card.getName(), card.getPoint(), card.getLowerAcePoint()); + } + return new Card(symbol, card.getName(), card.getPoint()); + }) .collect(Collectors.toList()); map.put(symbol, cards); @@ -30,9 +37,8 @@ public static CardPack create() { return new CardPack(map); } - //TODO: removeCard 로직분리, 네이명 수정, 테스트코드 작성 - public Card pickCard(Player player) { - int symbolIndex = CardShuffler.pickIndexIn(4); + public Card pickCard() { + int symbolIndex = CardShuffler.pickIndexIn(SYMBOL_SIZE); String symbol = symbols.get(symbolIndex); List cards = map.get(symbol); From be15ff60b3bfaa212aacd087f0d75d9bd122a618 Mon Sep 17 00:00:00 2001 From: kimsunghyun Date: Tue, 15 Feb 2022 23:40:56 +0900 Subject: [PATCH 074/182] =?UTF-8?q?fix:=20OutputView=EC=97=90=EC=84=9C=20?= =?UTF-8?q?=EC=A0=9C=EB=8C=80=EB=A1=9C=EB=94=98=20=EC=B9=B4=EB=93=9C?= =?UTF-8?q?=EC=9D=B4=EB=A6=84=EC=9D=84=20=EC=B6=9C=EB=A0=A5=ED=95=98?= =?UTF-8?q?=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/view/OutputView.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/blackjack/view/OutputView.java b/src/main/java/blackjack/view/OutputView.java index 78223ff7..4e54d6e3 100644 --- a/src/main/java/blackjack/view/OutputView.java +++ b/src/main/java/blackjack/view/OutputView.java @@ -26,7 +26,7 @@ public static void printCardStatus(Player player) { List cards = player.getCards(); for (Card card : cards) { - stringBuilder.append(card.getPoint()) + stringBuilder.append(card.getName()) .append(card.getSymbol()) .append(COMMA); } From 30a0189de5563bd03069cf215edc75d07bfd1929 Mon Sep 17 00:00:00 2001 From: kimsunghyun Date: Tue, 15 Feb 2022 23:41:20 +0900 Subject: [PATCH 075/182] =?UTF-8?q?refactor:=20=ED=95=84=EC=9A=94=EC=97=86?= =?UTF-8?q?=EB=8A=94=20=ED=8C=8C=EB=9D=BC=EB=AF=B8=ED=84=B0=20=EC=A0=9C?= =?UTF-8?q?=EA=B1=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/blackjack/domain/Dealer.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/blackjack/domain/Dealer.java b/src/main/java/blackjack/domain/Dealer.java index ccd05b76..04886ded 100644 --- a/src/main/java/blackjack/domain/Dealer.java +++ b/src/main/java/blackjack/domain/Dealer.java @@ -68,7 +68,7 @@ private void giveCardToDealerPlayer(Player player){ } private void giveCardAfterPick(Player player) { - Card pickedCard = cardPack.pickCard(player); + Card pickedCard = cardPack.pickCard(); player.receiveCard(pickedCard); } From f93fbd4ca6f1af46bfbc52ef4bf7c87297834c76 Mon Sep 17 00:00:00 2001 From: kimsunghyun Date: Tue, 15 Feb 2022 23:42:53 +0900 Subject: [PATCH 076/182] =?UTF-8?q?feat:=20Player#addScore=20Ace=EC=9D=B8?= =?UTF-8?q?=20=EA=B2=BD=EC=9A=B0=20=EC=B5=9C=EC=84=A0=EC=9D=98=20=ED=8F=AC?= =?UTF-8?q?=EC=9D=B8=ED=8A=B8=EB=A5=BC=20=EC=84=A0=ED=83=9D=ED=95=98?= =?UTF-8?q?=EB=8A=94=20=EA=B8=B0=EB=8A=A5=20=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/blackjack/domain/Player.java | 23 ++++++++++++++++++++-- 1 file changed, 21 insertions(+), 2 deletions(-) diff --git a/src/main/java/blackjack/domain/Player.java b/src/main/java/blackjack/domain/Player.java index 3841e773..c1501ed4 100644 --- a/src/main/java/blackjack/domain/Player.java +++ b/src/main/java/blackjack/domain/Player.java @@ -6,6 +6,9 @@ public class Player { + private static final String ACE = "A"; + private static final int BLACK_JACK = 21; + private final String name; private int score; private List cards; @@ -23,14 +26,30 @@ public void receiveCard(Card card) { addScore(card); } - public void addCard(final Card card) { + private void addCard(final Card card) { this.cards.add(card); } - public void addScore(final Card card) { + private void addScore(final Card card) { + if (isAceCard(card)) { + this.score = getBetterPointForAce(card); + return; + } this.score += card.getPoint(); } + private boolean isAceCard(final Card card) { + return card.getName().equals(ACE); + } + + private int getBetterPointForAce(Card card) { + int curScore = this.score; + if (curScore + card.getPoint() < BLACK_JACK) { + return curScore + card.getPoint(); + } + return curScore + card.getLowerAcePoint(); + } + public String getName() { return this.name; } From 5858e73e65cd5fb7ac79efdd4e1bc24e0aed8071 Mon Sep 17 00:00:00 2001 From: kimsunghyun Date: Tue, 15 Feb 2022 23:57:51 +0900 Subject: [PATCH 077/182] =?UTF-8?q?styles:=20=EB=A9=94=EC=84=9C=EB=93=9C?= =?UTF-8?q?=EB=AA=85=20=EC=98=A4=ED=83=88=EC=9E=90=20=EC=88=98=EC=A0=95?= =?UTF-8?q?=EC=9C=BC=EB=A1=9C=20=EC=9D=B8=ED=95=9C=20=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/blackjack/domain/Dealer.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/blackjack/domain/Dealer.java b/src/main/java/blackjack/domain/Dealer.java index 04886ded..2c69605c 100644 --- a/src/main/java/blackjack/domain/Dealer.java +++ b/src/main/java/blackjack/domain/Dealer.java @@ -61,7 +61,7 @@ private void giveCardToGeneralPlayer(Player player) { private void giveCardToDealerPlayer(Player player){ int score = player.getScore(); while (isLowerThanDealerBound(score)) { - OutputView.printDealrAcceptCard(); + OutputView.printDealerAcceptCard(); giveCardAfterPick(player); score = player.getScore(); } From 520b60711da16f7efdf821611769cb96eb152036 Mon Sep 17 00:00:00 2001 From: kimsunghyun Date: Tue, 15 Feb 2022 23:58:33 +0900 Subject: [PATCH 078/182] =?UTF-8?q?feat:=20OutputView=EC=97=90=EC=84=9C=20?= =?UTF-8?q?=EA=B2=8C=EC=9E=84=EA=B2=B0=EA=B3=BC=EB=A5=BC=20=EC=B6=9C?= =?UTF-8?q?=EB=A0=A5=ED=95=98=EB=8A=94=20=EA=B8=B0=EB=8A=A5=20=EA=B5=AC?= =?UTF-8?q?=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/blackjack/view/OutputView.java | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) diff --git a/src/main/java/blackjack/view/OutputView.java b/src/main/java/blackjack/view/OutputView.java index 4e54d6e3..d11b666d 100644 --- a/src/main/java/blackjack/view/OutputView.java +++ b/src/main/java/blackjack/view/OutputView.java @@ -1,6 +1,7 @@ package blackjack.view; import blackjack.domain.Card; +import blackjack.domain.GamePlayers; import blackjack.domain.Player; import java.util.List; import java.util.stream.Collectors; @@ -12,6 +13,7 @@ public class OutputView { private static final String CARDS_LOG = "%s: %s"; private static final String QUESTION_ACCEPT_CARD_MESSAGE = "%s는 한장의 카드를 더 받겠습니까?(예는 y, 아니오는 n)"; private static final String DEALER_RECEIVE_ONE_CARD_MESSAGE = "딜러는 한장의 카드를 더 받았습니다."; + private static final String RESULT_CARDS_LOG = "%s카드: %s - 결과: %d"; public static void printInitialMessage(List players) { String playerNames = players.stream() @@ -37,7 +39,19 @@ public static void printQuestionAcceptCard(Player player) { System.out.println(String.format(QUESTION_ACCEPT_CARD_MESSAGE, player.getName())); } - public static void printDealrAcceptCard() { + public static void printDealerAcceptCard() { System.out.println(DEALER_RECEIVE_ONE_CARD_MESSAGE); } + + public static void printResult(GamePlayers gamePlayers) { + List players = gamePlayers.getPlayers(); + + for (Player player : players) { + String cardNameWithSymbol = player.getCards().stream() + .map(card -> card.getName() + card.getSymbol()) + .collect(Collectors.joining(COMMA)); + + System.out.println(String.format(RESULT_CARDS_LOG, player.getName(), cardNameWithSymbol, player.getScore())); + } + } } From c49b06efe749d9c56d26aa40d6c3cd2b34e94629 Mon Sep 17 00:00:00 2001 From: kimsunghyun Date: Tue, 15 Feb 2022 23:58:56 +0900 Subject: [PATCH 079/182] =?UTF-8?q?feat:=20Controller=EC=97=90=EC=84=9C=20?= =?UTF-8?q?gamePlayers=EB=A5=BC=20=EB=B0=9B=EC=95=84=20=EA=B2=B0=EA=B3=BC?= =?UTF-8?q?=EB=A5=BC=20=EC=B6=9C=EB=A0=A5=ED=95=98=EB=8F=84=EB=A1=9D=20?= =?UTF-8?q?=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/blackjack/controller/GameController.java | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/main/java/blackjack/controller/GameController.java b/src/main/java/blackjack/controller/GameController.java index 0cc2a9dc..230db1cd 100644 --- a/src/main/java/blackjack/controller/GameController.java +++ b/src/main/java/blackjack/controller/GameController.java @@ -19,6 +19,8 @@ public void start() { dealer.initializeGame(gamePlayers); printInitialStatus(gamePlayers); dealer.playGame(gamePlayers); + + OutputView.printResult(gamePlayers); } private void printInitialStatus(GamePlayers gamePlayers) { From 44a0d82dd70ba71e0b796d73e0f329a4abf4abf0 Mon Sep 17 00:00:00 2001 From: kimsunghyun Date: Wed, 16 Feb 2022 00:36:26 +0900 Subject: [PATCH 080/182] =?UTF-8?q?refactor:=20=EB=AF=B8=EC=82=AC=EC=9A=A9?= =?UTF-8?q?=20import=EB=AC=B8=20=EC=A0=9C=EA=B1=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/blackjack/domain/GamePlayers.java | 1 - 1 file changed, 1 deletion(-) diff --git a/src/main/java/blackjack/domain/GamePlayers.java b/src/main/java/blackjack/domain/GamePlayers.java index efd932c1..e5d325e5 100644 --- a/src/main/java/blackjack/domain/GamePlayers.java +++ b/src/main/java/blackjack/domain/GamePlayers.java @@ -1,6 +1,5 @@ package blackjack.domain; -import blackjack.view.InputView; import java.util.Arrays; import java.util.List; import java.util.stream.Collectors; From 4006f7580dc53fa03822a684a30e3b2008af01c8 Mon Sep 17 00:00:00 2001 From: kimsunghyun Date: Wed, 16 Feb 2022 00:36:39 +0900 Subject: [PATCH 081/182] =?UTF-8?q?feat:=20OutputView=EC=97=90=EC=84=9C=20?= =?UTF-8?q?=EA=B2=8C=EC=9E=84=EA=B2=B0=EA=B3=BC=20=EC=B6=9C=EB=A0=A5?= =?UTF-8?q?=EA=B8=B0=EB=8A=A5=20=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/blackjack/view/OutputView.java | 33 +++++++++++++++++++- 1 file changed, 32 insertions(+), 1 deletion(-) diff --git a/src/main/java/blackjack/view/OutputView.java b/src/main/java/blackjack/view/OutputView.java index d11b666d..5f653ee3 100644 --- a/src/main/java/blackjack/view/OutputView.java +++ b/src/main/java/blackjack/view/OutputView.java @@ -4,6 +4,7 @@ import blackjack.domain.GamePlayers; import blackjack.domain.Player; import java.util.List; +import java.util.NoSuchElementException; import java.util.stream.Collectors; public class OutputView { @@ -14,6 +15,9 @@ public class OutputView { private static final String QUESTION_ACCEPT_CARD_MESSAGE = "%s는 한장의 카드를 더 받겠습니까?(예는 y, 아니오는 n)"; private static final String DEALER_RECEIVE_ONE_CARD_MESSAGE = "딜러는 한장의 카드를 더 받았습니다."; private static final String RESULT_CARDS_LOG = "%s카드: %s - 결과: %d"; + private static final String RESULT_GAME_LOG = "%s: %s"; + private static final String WIN = "승"; + private static final String LOSE = "패"; public static void printInitialMessage(List players) { String playerNames = players.stream() @@ -43,7 +47,7 @@ public static void printDealerAcceptCard() { System.out.println(DEALER_RECEIVE_ONE_CARD_MESSAGE); } - public static void printResult(GamePlayers gamePlayers) { + public static void printCardResult(GamePlayers gamePlayers) { List players = gamePlayers.getPlayers(); for (Player player : players) { @@ -54,4 +58,31 @@ public static void printResult(GamePlayers gamePlayers) { System.out.println(String.format(RESULT_CARDS_LOG, player.getName(), cardNameWithSymbol, player.getScore())); } } + + public static void printGameResult(GamePlayers gamePlayers) { + List players = gamePlayers.getPlayers(); + int maxScore = getWinnerScore(players); + + for (Player player : players) { + System.out.println(String.format(RESULT_GAME_LOG, player.getName(), getGameResult(player, maxScore))); + } + } + + private static int getWinnerScore(List players) { + return players.stream() + .map(Player::getScore) + .max(Integer::compareTo) + .orElseThrow(NoSuchElementException::new); + } + + private static String getGameResult(Player player, int maxScore) { + if (isPlayerWinner(player, maxScore)) { + return WIN; + } + return LOSE; + } + + private static boolean isPlayerWinner(Player player, int maxScore) { + return player.getScore() == maxScore; + } } From bab3a0117e8b6e451b7d5952c1de59a6283028de Mon Sep 17 00:00:00 2001 From: kimsunghyun Date: Wed, 16 Feb 2022 00:36:53 +0900 Subject: [PATCH 082/182] =?UTF-8?q?feat:=20Controller=EC=97=90=EC=84=9C=20?= =?UTF-8?q?=EA=B2=8C=EC=9E=84=EA=B2=B0=EA=B3=BC=20=EC=B6=9C=EB=A0=A5?= =?UTF-8?q?=ED=95=98=EB=8F=84=EB=A1=9D=20=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/blackjack/controller/GameController.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/main/java/blackjack/controller/GameController.java b/src/main/java/blackjack/controller/GameController.java index 230db1cd..6088f756 100644 --- a/src/main/java/blackjack/controller/GameController.java +++ b/src/main/java/blackjack/controller/GameController.java @@ -20,7 +20,8 @@ public void start() { printInitialStatus(gamePlayers); dealer.playGame(gamePlayers); - OutputView.printResult(gamePlayers); + OutputView.printCardResult(gamePlayers); + OutputView.printGameResult(gamePlayers); } private void printInitialStatus(GamePlayers gamePlayers) { From c67556e91f5fdb8fba80f85a669dec8c1b04bd07 Mon Sep 17 00:00:00 2001 From: kimsunghyun Date: Wed, 16 Feb 2022 00:47:21 +0900 Subject: [PATCH 083/182] docs: Update README - add TODO list --- README.md | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index c9e65d09..aba0e109 100644 --- a/README.md +++ b/README.md @@ -30,14 +30,21 @@ - [ ] ### 카드 -- [ ] Ace는 1 또는 11로 계산한다. +- [x] Ace는 1 또는 11로 계산한다. - [x] King, Queen, Jack은 10으로 계산한다. - [x] 나머지 카드는 카드숫자를 기본으로 계산한다. ### 게임 - [x] 게임시작 시 2장의 카드를 지급 받는다. -- [ ] 21을 초과하지 않으면 카드를 계속 받을 수 있다. +- [x] 21을 초과하지 않으면 카드를 계속 받을 수 있다. - [ ] 21을 초과하면 패배로 처리한다. -- [ ] 21을 초과하지 않으면서 21에 가까운 사람이 이긴다. +- [x] 21을 초과하지 않으면서 21에 가까운 사람이 이긴다. #### 딜러 -- [ ] 처음에 받은 2장의 합계가 16이하면 1장을 추가로 지급받는다. +- [x] 처음에 받은 2장의 합계가 16이하면 1장을 추가로 지급받는다. + +# TODO +- [ ] 플레이어를 추상클래스 혹은 인터페이스로 구현하기 +- [ ] 플레이어 클래스에서 승자 여부에 대한 속성을 추가 +- [ ] 딜러가 한장 더 받는다는 메시지를 맨 마지막에 위치 +- [ ] 딜러의 상대적 최종 승패 구현 +- [ ] 단위 테스트 보완하기 \ No newline at end of file From 22d41b54f45425378caf3d8d4f4ed08ab3f202dc Mon Sep 17 00:00:00 2001 From: kimsunghyun Date: Wed, 16 Feb 2022 16:59:33 +0900 Subject: [PATCH 084/182] =?UTF-8?q?feat:=20GamePlayers#makePlayers=20?= =?UTF-8?q?=EB=8B=A8=EC=9C=84=ED=85=8C=EC=8A=A4=ED=8A=B8=20=EB=A1=9C?= =?UTF-8?q?=EC=A7=81=20=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../blackjack/domain/GamePlayersTest.java | 26 +++++++++++++++++++ 1 file changed, 26 insertions(+) create mode 100644 src/test/java/blackjack/domain/GamePlayersTest.java diff --git a/src/test/java/blackjack/domain/GamePlayersTest.java b/src/test/java/blackjack/domain/GamePlayersTest.java new file mode 100644 index 00000000..60e94ff5 --- /dev/null +++ b/src/test/java/blackjack/domain/GamePlayersTest.java @@ -0,0 +1,26 @@ +package blackjack.domain; + +import static org.assertj.core.api.Assertions.assertThat; + +import java.util.Arrays; +import java.util.List; +import java.util.stream.Collectors; +import org.junit.jupiter.api.Test; + +class GamePlayersTest { + + @Test + public void 입력된_플레이어이름으로_게임플레이어객체가_생성된다() { + //given + List names = Arrays.asList("pobi", "jason"); + + //when + GamePlayers gamePlayers = GamePlayers.makePlayers(Arrays.asList("pobi", "jason")); + List players = gamePlayers.getPlayers().stream() + .map(Player::getName) + .collect(Collectors.toList()); + + //then + assertThat(players).contains(names.toArray(new String[0])); + } +} \ No newline at end of file From 446ef1df846d75771f0760ff6ed3f4937c86a0fe Mon Sep 17 00:00:00 2001 From: kimsunghyun Date: Wed, 16 Feb 2022 17:06:03 +0900 Subject: [PATCH 085/182] =?UTF-8?q?feat:=20Dealer#initializeGame=20?= =?UTF-8?q?=EB=8B=A8=EC=9C=84=ED=85=8C=EC=8A=A4=ED=8A=B8=20=EB=A1=9C?= =?UTF-8?q?=EC=A7=81=20=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/blackjack/domain/DealerTest.java | 30 +++++++++++++++++++ 1 file changed, 30 insertions(+) create mode 100644 src/test/java/blackjack/domain/DealerTest.java diff --git a/src/test/java/blackjack/domain/DealerTest.java b/src/test/java/blackjack/domain/DealerTest.java new file mode 100644 index 00000000..1fa2fdb7 --- /dev/null +++ b/src/test/java/blackjack/domain/DealerTest.java @@ -0,0 +1,30 @@ +package blackjack.domain; + +import static org.assertj.core.api.Assertions.assertThat; + +import java.util.Arrays; +import java.util.List; +import org.junit.jupiter.api.Test; + +class DealerTest { + + CardPack cardPack = CardPack.create(); + List playerNames = Arrays.asList("pobi", "jason"); + + @Test + public void 게임초기_딜러는_플레이어들에게_카드를_2장씩_배분한다() { + //given + GamePlayers gamePlayers = GamePlayers.makePlayers(playerNames); + Dealer dealer = new Dealer(cardPack); + + //when + dealer.initializeGame(gamePlayers); + List players = gamePlayers.getPlayers(); + + //then + for (Player player : players) { + List cards = player.getCards(); + assertThat(cards.size()).isEqualTo(2); + } + } +} \ No newline at end of file From e1fdc0fb6832c8e8dbeb9214327354184e7d4814 Mon Sep 17 00:00:00 2001 From: kimsunghyun Date: Wed, 16 Feb 2022 17:07:45 +0900 Subject: [PATCH 086/182] =?UTF-8?q?refactor:=20=EC=82=AC=EC=9A=A9=ED=95=98?= =?UTF-8?q?=EC=A7=80=20=EC=95=8A=EB=8A=94=20print=EB=AC=B8=20=EC=A0=9C?= =?UTF-8?q?=EA=B1=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/blackjack/domain/Dealer.java | 3 --- 1 file changed, 3 deletions(-) diff --git a/src/main/java/blackjack/domain/Dealer.java b/src/main/java/blackjack/domain/Dealer.java index 2c69605c..23b1e464 100644 --- a/src/main/java/blackjack/domain/Dealer.java +++ b/src/main/java/blackjack/domain/Dealer.java @@ -31,9 +31,6 @@ public void playGame(GamePlayers gamePlayers) { for (Player player : players) { giveCardToPlayer(player); } - for (Player player : players) { - System.out.println(player.getName()+"의 점수 : "+player.getScore()); - } } private void giveCardToPlayer(Player player) { From f11d6aabefbc1a03622e698c44c0b44697421c16 Mon Sep 17 00:00:00 2001 From: kimsunghyun Date: Wed, 16 Feb 2022 17:08:28 +0900 Subject: [PATCH 087/182] =?UTF-8?q?refactor:=20=EC=99=B8=EB=B6=80=EC=97=90?= =?UTF-8?q?=EC=84=9C=20=EC=82=AC=EC=9A=A9=EC=95=8A=EB=8A=94=20=EB=A9=94?= =?UTF-8?q?=EC=84=9C=EB=93=9C=EB=8A=94=20private?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/blackjack/domain/Dealer.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/java/blackjack/domain/Dealer.java b/src/main/java/blackjack/domain/Dealer.java index 23b1e464..0eac2d6f 100644 --- a/src/main/java/blackjack/domain/Dealer.java +++ b/src/main/java/blackjack/domain/Dealer.java @@ -69,11 +69,11 @@ private void giveCardAfterPick(Player player) { player.receiveCard(pickedCard); } - public boolean isLowerThanBlackJack(int score) { + private boolean isLowerThanBlackJack(int score) { return score < BLACKJACK; } - public boolean isLowerThanDealerBound(int score) { + private boolean isLowerThanDealerBound(int score) { return score < DEALER_BOUND; } } From fe5a66b9a805c83e6f0e02ca8b408ae1531eacfe Mon Sep 17 00:00:00 2001 From: kimsunghyun Date: Wed, 16 Feb 2022 17:19:18 +0900 Subject: [PATCH 088/182] =?UTF-8?q?feat:=20=EB=8B=A8=EC=9C=84=ED=85=8C?= =?UTF-8?q?=EC=8A=A4=ED=8A=B8=EB=A5=BC=20=EC=9C=84=ED=95=B4=20Player?= =?UTF-8?q?=EC=97=90=20score=EB=A5=BC=20=EC=9D=B8=EC=9E=90=EB=A1=9C=20?= =?UTF-8?q?=EB=B0=9B=EB=8A=94=20=EC=83=9D=EC=84=B1=EC=9E=90=20=EC=B6=94?= =?UTF-8?q?=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/blackjack/domain/Player.java | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/src/main/java/blackjack/domain/Player.java b/src/main/java/blackjack/domain/Player.java index c1501ed4..f12c8353 100644 --- a/src/main/java/blackjack/domain/Player.java +++ b/src/main/java/blackjack/domain/Player.java @@ -15,8 +15,13 @@ public class Player { private boolean isDealer; public Player(String name, boolean isDealer) { + this(name, 0, isDealer); + this.cards = new ArrayList<>(); + } + + public Player(String name, int score, boolean isDealer) { this.name = name; - this.score = 0; + this.score = score; this.cards = new ArrayList<>(); this.isDealer = isDealer; } From c9a7ef78b53114432c77ed611eee6df13abd7f84 Mon Sep 17 00:00:00 2001 From: kimsunghyun Date: Wed, 16 Feb 2022 17:19:45 +0900 Subject: [PATCH 089/182] =?UTF-8?q?feat:=20Player#Ace=20=EC=97=90=EC=9D=B4?= =?UTF-8?q?=EC=8A=A4=EB=A5=BC=20=EB=B0=9B=EC=95=98=EC=9D=84=20=EB=95=8C=20?= =?UTF-8?q?=EC=B5=9C=EC=84=A0=EC=9D=98=20=EA=B0=92=EC=9D=84=20=EB=8D=94?= =?UTF-8?q?=ED=95=98=EB=8A=94=20=EB=A1=9C=EC=A7=81=20=ED=85=8C=EC=8A=A4?= =?UTF-8?q?=ED=8A=B8=20=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/blackjack/domain/PlayerTest.java | 32 +++++++++++++++++++ 1 file changed, 32 insertions(+) create mode 100644 src/test/java/blackjack/domain/PlayerTest.java diff --git a/src/test/java/blackjack/domain/PlayerTest.java b/src/test/java/blackjack/domain/PlayerTest.java new file mode 100644 index 00000000..ae627631 --- /dev/null +++ b/src/test/java/blackjack/domain/PlayerTest.java @@ -0,0 +1,32 @@ +package blackjack.domain; + +import static org.assertj.core.api.Assertions.assertThat; + +import org.junit.jupiter.api.Test; + +class PlayerTest { + + @Test + public void Ace를_받았을때_합이_21을_넘을경우_1을_더해준다() { + //given + Player player = new Player("pobi", 15, false); + + //when + player.receiveCard(new Card("스페이드", "A", 11, 1)); + + //then + assertThat(player.getScore()).isEqualTo(16); + } + + @Test + public void Ace를_받았을때_합이_21을_넘지않을경우_11을_더해준다() { + //given + Player player = new Player("pobi", 8, false); + + //when + player.receiveCard(new Card("스페이드", "A", 11, 1)); + + //then + assertThat(player.getScore()).isEqualTo(19); + } +} \ No newline at end of file From 87b93b3117f4efa75a475d36a39ba987c3b833a0 Mon Sep 17 00:00:00 2001 From: kimsunghyun Date: Wed, 16 Feb 2022 18:06:44 +0900 Subject: [PATCH 090/182] =?UTF-8?q?feat:=20CardShuffler=EC=97=90=EC=84=9C?= =?UTF-8?q?=EC=9D=98=20=EB=A9=94=EC=84=9C=EB=93=9C=20=EB=B6=84=EB=A6=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - symbols에서 랜덤 symbol을 뽑는 메서드와 - 해당 symbol에서 랜덤 cardIndex를 뽑는 메서드 --- src/main/java/blackjack/util/CardShuffler.java | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/src/main/java/blackjack/util/CardShuffler.java b/src/main/java/blackjack/util/CardShuffler.java index e0e8273e..a3c65595 100644 --- a/src/main/java/blackjack/util/CardShuffler.java +++ b/src/main/java/blackjack/util/CardShuffler.java @@ -1,12 +1,18 @@ package blackjack.util; +import java.util.List; import java.util.Random; public class CardShuffler { private static final Random random = new Random(); - public static int pickIndexIn(int bound) { + public static String pickSymbolIn(List symbols) { + int pickIndex = random.nextInt(symbols.size()); + return symbols.get(pickIndex); + } + + public static int pickCardIndexIn(int bound) { return random.nextInt(bound); } } From e4b0c93dbe85b185297634da1a326124ae9472de Mon Sep 17 00:00:00 2001 From: kimsunghyun Date: Wed, 16 Feb 2022 18:07:52 +0900 Subject: [PATCH 091/182] =?UTF-8?q?feat:=20=EC=B9=B4=EB=93=9C=ED=8C=A9?= =?UTF-8?q?=EC=97=90=EC=84=9C=20=EB=9E=9C=EB=8D=A4=EC=B9=B4=EB=93=9C?= =?UTF-8?q?=EB=A5=BC=20=EB=BD=91=EC=9D=84=20=EB=95=8C=20=EC=9E=AC=EA=B3=A0?= =?UTF-8?q?=EA=B0=80=20=EC=9E=88=EB=8A=94=20=EA=B2=BD=EC=9A=B0=EB=A7=8C=20?= =?UTF-8?q?=EB=BD=91=EC=95=84=EC=98=A4=EB=8A=94=20=EA=B8=B0=EB=8A=A5=20?= =?UTF-8?q?=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/blackjack/domain/Dealer.java | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/src/main/java/blackjack/domain/Dealer.java b/src/main/java/blackjack/domain/Dealer.java index 0eac2d6f..01209037 100644 --- a/src/main/java/blackjack/domain/Dealer.java +++ b/src/main/java/blackjack/domain/Dealer.java @@ -1,12 +1,16 @@ package blackjack.domain; +import blackjack.util.CardShuffler; import blackjack.view.InputView; import blackjack.view.OutputView; +import java.util.Arrays; import java.util.List; +import java.util.stream.Collectors; public class Dealer { + private static final List symbols = Arrays.asList("스페이드", "다이아몬드", "클로버", "하트"); private static final int INITIAL_CARD_QUANTITY = 2; private static final int BLACKJACK = 21; private static final int DEALER_BOUND = 16; @@ -65,7 +69,15 @@ private void giveCardToDealerPlayer(Player player){ } private void giveCardAfterPick(Player player) { - Card pickedCard = cardPack.pickCard(); + List stockSymbols = symbols.stream() + .filter(symbol -> cardPack.getMap().get(symbol).size() > 0) + .collect(Collectors.toList()); + + String symbol = CardShuffler.pickSymbolIn(stockSymbols); + int cardSize = cardPack.getCardSizeBy(symbol); + int pickCardIndex = CardShuffler.pickCardIndexIn(cardSize); + + Card pickedCard = cardPack.pickCard(symbol, pickCardIndex); player.receiveCard(pickedCard); } From 9972ae72c0c5c51a5c2e80a33d66c43f41dd3dfc Mon Sep 17 00:00:00 2001 From: kimsunghyun Date: Wed, 16 Feb 2022 18:09:10 +0900 Subject: [PATCH 092/182] =?UTF-8?q?feat:=20CardPack#pickCard=20=EB=A1=9C?= =?UTF-8?q?=EC=A7=81=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 외부에서 symbol과 cardIndex를 주입하여 해당하는 카드를 반환 - symbol에 해당하는 카드사이즈와 카드리스트를 반환하는 getter() 구현 --- src/main/java/blackjack/domain/CardPack.java | 17 ++++++++++------- 1 file changed, 10 insertions(+), 7 deletions(-) diff --git a/src/main/java/blackjack/domain/CardPack.java b/src/main/java/blackjack/domain/CardPack.java index f6c4b8ec..b374b89b 100644 --- a/src/main/java/blackjack/domain/CardPack.java +++ b/src/main/java/blackjack/domain/CardPack.java @@ -1,6 +1,5 @@ package blackjack.domain; -import blackjack.util.CardShuffler; import java.util.Arrays; import java.util.HashMap; import java.util.List; @@ -12,6 +11,7 @@ public class CardPack { private static final List symbols = Arrays.asList("스페이드", "다이아몬드", "클로버", "하트"); private static final int SYMBOL_SIZE = symbols.size(); private static final String ACE = "A"; + private static final int EMPTY = 0; private final Map> map; @@ -37,16 +37,19 @@ public static CardPack create() { return new CardPack(map); } - public Card pickCard() { - int symbolIndex = CardShuffler.pickIndexIn(SYMBOL_SIZE); - String symbol = symbols.get(symbolIndex); - List cards = map.get(symbol); - - int cardIndex = CardShuffler.pickIndexIn(cards.size()); + public Card pickCard(String symbol, int cardIndex) { return map.get(symbol).remove(cardIndex); } public Map> getMap() { return map; } + + public int getCardSizeBy(String symbol) { + return map.get(symbol).size(); + } + + public List getCardsBy(String symbol) { + return map.get(symbol); + } } From db75b6f186f687c5ce221865d7e2db3fbd088f65 Mon Sep 17 00:00:00 2001 From: kimsunghyun Date: Thu, 17 Feb 2022 00:02:57 +0900 Subject: [PATCH 093/182] 02/17 00:02 --- .../blackjack/controller/GameController.java | 11 +-- src/main/java/blackjack/domain/Card.java | 36 +++------ src/main/java/blackjack/domain/CardPack.java | 52 ++++-------- .../java/blackjack/domain/CardSymbol.java | 18 +++++ src/main/java/blackjack/domain/CardType.java | 11 ++- src/main/java/blackjack/domain/Cards.java | 81 +++++++++++++++++++ src/main/java/blackjack/domain/Dealer.java | 75 +++++------------ .../java/blackjack/domain/DealerPlayer.java | 46 +++++++++++ .../java/blackjack/domain/GamePlayer.java | 40 +++++++++ .../java/blackjack/domain/GamePlayers.java | 36 +++++---- src/main/java/blackjack/domain/Player.java | 79 +++++------------- .../java/blackjack/util/CardShuffler.java | 18 ----- src/main/java/blackjack/view/InputView.java | 7 +- src/main/java/blackjack/view/OutputView.java | 55 ++++--------- .../java/blackjack/domain/DealerTest.java | 4 +- .../blackjack/domain/GamePlayersTest.java | 2 +- .../java/blackjack/domain/PlayerTest.java | 4 +- 17 files changed, 308 insertions(+), 267 deletions(-) create mode 100644 src/main/java/blackjack/domain/CardSymbol.java create mode 100644 src/main/java/blackjack/domain/Cards.java create mode 100644 src/main/java/blackjack/domain/DealerPlayer.java create mode 100644 src/main/java/blackjack/domain/GamePlayer.java delete mode 100644 src/main/java/blackjack/util/CardShuffler.java diff --git a/src/main/java/blackjack/controller/GameController.java b/src/main/java/blackjack/controller/GameController.java index 6088f756..f7dd67d8 100644 --- a/src/main/java/blackjack/controller/GameController.java +++ b/src/main/java/blackjack/controller/GameController.java @@ -3,7 +3,7 @@ import blackjack.domain.CardPack; import blackjack.domain.Dealer; import blackjack.domain.GamePlayers; -import blackjack.domain.Player; +import blackjack.domain.GamePlayer; import blackjack.view.InputView; import blackjack.view.OutputView; import java.util.List; @@ -11,25 +11,26 @@ public class GameController { public void start() { - CardPack cardPack = CardPack.create(); + CardPack cardPack = new CardPack(); + Dealer dealer = new Dealer(cardPack); GamePlayers gamePlayers = GamePlayers.makePlayers(InputView.getPlayerName()); dealer.initializeGame(gamePlayers); printInitialStatus(gamePlayers); - dealer.playGame(gamePlayers); + dealer.playGame(gamePlayers.getPlayers(), gamePlayers.getDealer()); OutputView.printCardResult(gamePlayers); OutputView.printGameResult(gamePlayers); } private void printInitialStatus(GamePlayers gamePlayers) { - List players = gamePlayers.getPlayers(); + List players = gamePlayers.getAllPlayers(); OutputView.printInitialMessage(players); - for (Player player : players) { + for (GamePlayer player : players) { OutputView.printCardStatus(player); } } diff --git a/src/main/java/blackjack/domain/Card.java b/src/main/java/blackjack/domain/Card.java index a1047b84..65819ca8 100644 --- a/src/main/java/blackjack/domain/Card.java +++ b/src/main/java/blackjack/domain/Card.java @@ -2,37 +2,19 @@ public class Card { - private final String symbol; - private final String name; - private final int point; - private int lowerAcePoint; + private final CardSymbol cardSymbol; + private final CardType cardType; - public Card(String symbol, String name, int point) { - this.symbol = symbol; - this.name = name; - this.point = point; + public Card(CardSymbol cardSymbol, CardType cardType) { + this.cardSymbol = cardSymbol; + this.cardType = cardType; } - public Card(String symbol, String name, int point, int lowerAcePoint) { - this.symbol = symbol; - this.name = name; - this.point = point; - this.lowerAcePoint = lowerAcePoint; + public CardSymbol getCardSymbol() { + return cardSymbol; } - public String getSymbol() { - return this.symbol; - } - - public String getName() { - return this.name; - } - - public int getPoint() { - return this.point; - } - - public int getLowerAcePoint() { - return this.lowerAcePoint; + public CardType getCardType() { + return cardType; } } diff --git a/src/main/java/blackjack/domain/CardPack.java b/src/main/java/blackjack/domain/CardPack.java index b374b89b..26b02c1d 100644 --- a/src/main/java/blackjack/domain/CardPack.java +++ b/src/main/java/blackjack/domain/CardPack.java @@ -1,55 +1,31 @@ package blackjack.domain; +import java.util.ArrayList; import java.util.Arrays; -import java.util.HashMap; +import java.util.Collections; import java.util.List; -import java.util.Map; -import java.util.stream.Collectors; public class CardPack { - private static final List symbols = Arrays.asList("스페이드", "다이아몬드", "클로버", "하트"); - private static final int SYMBOL_SIZE = symbols.size(); - private static final String ACE = "A"; - private static final int EMPTY = 0; + private final List cardPack = new ArrayList<>(); - private final Map> map; - - public CardPack(Map> map) { - this.map = map; + public CardPack() { + create(); } - public static CardPack create() { - Map> map = new HashMap<>(); - for (String symbol : symbols) { - List cards = Arrays.stream(CardType.values()) - .map(card -> { - if (card.getName().equals(ACE)) { - return new Card(symbol, card.getName(), card.getPoint(), card.getLowerAcePoint()); - } - return new Card(symbol, card.getName(), card.getPoint()); - }) - .collect(Collectors.toList()); - - map.put(symbol, cards); + public void create() { + for (final CardSymbol symbol : CardSymbol.values()) { + Arrays.stream(CardType.values()) + .forEach(type -> cardPack.add(new Card(symbol, type))); } - - return new CardPack(map); - } - - public Card pickCard(String symbol, int cardIndex) { - return map.get(symbol).remove(cardIndex); - } - - public Map> getMap() { - return map; + Collections.shuffle(cardPack); } - public int getCardSizeBy(String symbol) { - return map.get(symbol).size(); + public List getCardPack() { + return Collections.unmodifiableList(cardPack); } - public List getCardsBy(String symbol) { - return map.get(symbol); + public Card remove() { + return cardPack.remove(0); } } diff --git a/src/main/java/blackjack/domain/CardSymbol.java b/src/main/java/blackjack/domain/CardSymbol.java new file mode 100644 index 00000000..1fc4806a --- /dev/null +++ b/src/main/java/blackjack/domain/CardSymbol.java @@ -0,0 +1,18 @@ +package blackjack.domain; + +public enum CardSymbol { + SPADE("스페이드"), + DIAMOND("다이아몬드"), + CLOVER("클로버"), + HEART("하트"); + + private final String symbol; + + CardSymbol(final String symbol) { + this.symbol = symbol; + } + + public String getSymbol() { + return this.symbol; + } +} diff --git a/src/main/java/blackjack/domain/CardType.java b/src/main/java/blackjack/domain/CardType.java index 22bbbff8..74147266 100644 --- a/src/main/java/blackjack/domain/CardType.java +++ b/src/main/java/blackjack/domain/CardType.java @@ -1,6 +1,7 @@ package blackjack.domain; public enum CardType { + ACE("A", 11, 1), TWO("2", 2), THREE("3", 3), FOUR("4", 4), @@ -9,10 +10,10 @@ public enum CardType { SEVEN("7", 7), EIGHT("8", 8), NINE("9", 9), - ACE("A", 11, 1), + TEN("10", 10), + JACK("J", 10), QUEEN("Q", 10), - KING("K", 10), - JACK("J", 10); + KING("K", 10); private final String name; private final int point; @@ -40,4 +41,8 @@ public int getPoint() { public int getLowerAcePoint() { return this.lowerAcePoint; } + + public boolean isAce() { + return this == CardType.ACE; + } } diff --git a/src/main/java/blackjack/domain/Cards.java b/src/main/java/blackjack/domain/Cards.java new file mode 100644 index 00000000..a8322a91 --- /dev/null +++ b/src/main/java/blackjack/domain/Cards.java @@ -0,0 +1,81 @@ +package blackjack.domain; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Collections; +import java.util.List; + +public class Cards { + + private static final int BLACK_JACK = 21; + private static final int LOSE = 22; + + private final List cards; + + public Cards() { + this.cards = new ArrayList<>(); + } + + public void receiveCard(final Card card) { + cards.add(card); + } + + public List toList() { + return Collections.unmodifiableList(cards); + } + + public int calculateCards() { + final int aceCount = (int) cards.stream() + .map(Card::getCardType) + .map(CardType::isAce) + .count(); + + if (aceCount == 0) { + return getPointExceptAce(); + } + return getBestPointWithAce(aceCount); + } + + private int getPointExceptAce() { + return cards.stream() + .map(Card::getCardType) + .mapToInt(CardType::getPoint) + .sum(); + } + + private int getBestPointWithAce(final int aceCount) { + final List sums = new ArrayList<>(); + final int sumNotAce = cards.stream() + .map(Card::getCardType) + .filter(type -> !type.isAce()) + .mapToInt(CardType::getPoint) + .sum(); + + for (final int possibleSum : getSumsAce(aceCount)) { + sums.add(sumNotAce + possibleSum); + } + return getMaxPoint(sums); + } + + private List getSumsAce(final int aceCount) { + int lowerPoint = CardType.ACE.getPoint(); + int higherPoint = CardType.ACE.getLowerAcePoint(); + + for (int i = 1; i < aceCount; i++) { + lowerPoint += CardType.ACE.getLowerAcePoint(); + higherPoint += CardType.ACE.getLowerAcePoint(); + } + return new ArrayList<>(Arrays.asList(lowerPoint, higherPoint)); + } + + private int getMaxPoint(final List sums) { + return sums.stream() + .filter(sum -> sum <= BLACK_JACK) + .mapToInt(Integer::intValue) + .max() + .orElse(LOSE); + } + + + +} diff --git a/src/main/java/blackjack/domain/Dealer.java b/src/main/java/blackjack/domain/Dealer.java index 01209037..52c5c0a9 100644 --- a/src/main/java/blackjack/domain/Dealer.java +++ b/src/main/java/blackjack/domain/Dealer.java @@ -1,19 +1,13 @@ package blackjack.domain; -import blackjack.util.CardShuffler; import blackjack.view.InputView; import blackjack.view.OutputView; -import java.util.Arrays; import java.util.List; -import java.util.stream.Collectors; public class Dealer { - private static final List symbols = Arrays.asList("스페이드", "다이아몬드", "클로버", "하트"); private static final int INITIAL_CARD_QUANTITY = 2; - private static final int BLACKJACK = 21; - private static final int DEALER_BOUND = 16; private final CardPack cardPack; public Dealer(CardPack cardPack) { @@ -21,71 +15,44 @@ public Dealer(CardPack cardPack) { } public void initializeGame(GamePlayers gamePlayers) { - List players = gamePlayers.getPlayers(); + List players = gamePlayers.getAllPlayers(); for (int i = 0; i < INITIAL_CARD_QUANTITY; i++) { players.stream() .forEach(player -> giveCardAfterPick(player)); } - } - - public void playGame(GamePlayers gamePlayers) { - List players = gamePlayers.getPlayers(); - - for (Player player : players) { - giveCardToPlayer(player); + for (GamePlayer gamePlayer : players) { + System.out.println(gamePlayer.getName() + ", "+ gamePlayer.getScore()); } } - private void giveCardToPlayer(Player player) { - if (player.isDealer()) { - giveCardToDealerPlayer(player); - return; + public void playGame(final List players, final GamePlayer dealer) { + for (final GamePlayer player : players) { + playerGameProcess(player); } - giveCardToGeneralPlayer(player); + dealerGameProcess(dealer); } - private void giveCardToGeneralPlayer(Player player) { - int score = player.getScore(); - - if (isLowerThanBlackJack(score)) { - OutputView.printQuestionAcceptCard(player); - - while (isLowerThanBlackJack(score) && InputView.getPlayerChoice()) { - giveCardAfterPick(player); - OutputView.printCardStatus(player); - score = player.getScore(); - } + private void playerGameProcess(final GamePlayer player) { + while (player.isContinue() && InputView.getPlayerChoice(player)) { + giveCardAfterPick(player); + OutputView.printCardStatus(player); + } + if (!player.isContinue()) { + // 탈락 } + OutputView.printCardStatus(player); } - private void giveCardToDealerPlayer(Player player){ - int score = player.getScore(); - while (isLowerThanDealerBound(score)) { + private void dealerGameProcess(final GamePlayer dealer) { + while (dealer.isLowerThanBound()) { OutputView.printDealerAcceptCard(); - giveCardAfterPick(player); - score = player.getScore(); + giveCardAfterPick(dealer); + System.out.println(dealer.getScore()); } } - private void giveCardAfterPick(Player player) { - List stockSymbols = symbols.stream() - .filter(symbol -> cardPack.getMap().get(symbol).size() > 0) - .collect(Collectors.toList()); - - String symbol = CardShuffler.pickSymbolIn(stockSymbols); - int cardSize = cardPack.getCardSizeBy(symbol); - int pickCardIndex = CardShuffler.pickCardIndexIn(cardSize); - - Card pickedCard = cardPack.pickCard(symbol, pickCardIndex); - player.receiveCard(pickedCard); - } - - private boolean isLowerThanBlackJack(int score) { - return score < BLACKJACK; - } - - private boolean isLowerThanDealerBound(int score) { - return score < DEALER_BOUND; + private void giveCardAfterPick(GamePlayer player) { + player.receiveCard(cardPack.remove()); } } diff --git a/src/main/java/blackjack/domain/DealerPlayer.java b/src/main/java/blackjack/domain/DealerPlayer.java new file mode 100644 index 00000000..610948e9 --- /dev/null +++ b/src/main/java/blackjack/domain/DealerPlayer.java @@ -0,0 +1,46 @@ +package blackjack.domain; + +import java.util.List; + +public class DealerPlayer extends GamePlayer { + + private static final int DEALER_BOUND = 16; + private static final String WIN = "승"; + private static final String LOSE = "패"; + + public DealerPlayer(String name) { + super(name); + } + + @Override + public boolean isLowerThanBound() { + return getScore() <= DEALER_BOUND; + } + + @Override + public String getGameResult(List allPlayers) { + int winCount = 0; + int loseCount = 0; + + for (GamePlayer gamePlayer : allPlayers) { + if (this.getScore() > gamePlayer.getScore()) { + winCount++; + } + loseCount++; + } + return getGameResultWord(winCount, loseCount); + } + + private String getGameResultWord(int winCount, int loseCount) { + StringBuilder resultWord = new StringBuilder(""); + if (winCount > 0) { + resultWord.append(winCount + WIN); + } + + if (loseCount > 0) { + resultWord.append(loseCount + LOSE); + } + + return String.valueOf(resultWord.toString()); + } +} diff --git a/src/main/java/blackjack/domain/GamePlayer.java b/src/main/java/blackjack/domain/GamePlayer.java new file mode 100644 index 00000000..6d41fa53 --- /dev/null +++ b/src/main/java/blackjack/domain/GamePlayer.java @@ -0,0 +1,40 @@ +package blackjack.domain; + +import java.util.List; + +public abstract class GamePlayer { + + private static final int BLACK_JACK = 21; + + private final String name; + private Cards cards; + + public GamePlayer(String name) { + this.name = name; + this.cards = new Cards(); + } + + public void receiveCard(final Card card) { + cards.receiveCard(card); + } + + public String getName() { + return this.name; + } + + public int getScore() { + return cards.calculateCards(); + } + + public List getCards() { + return cards.toList(); + } + + public boolean isContinue() { + return getScore() <= BLACK_JACK; + } + + public abstract boolean isLowerThanBound(); + + public abstract String getGameResult(final List gamePlayers); +} diff --git a/src/main/java/blackjack/domain/GamePlayers.java b/src/main/java/blackjack/domain/GamePlayers.java index e5d325e5..e996ab16 100644 --- a/src/main/java/blackjack/domain/GamePlayers.java +++ b/src/main/java/blackjack/domain/GamePlayers.java @@ -1,32 +1,38 @@ package blackjack.domain; -import java.util.Arrays; +import java.util.ArrayList; +import java.util.Collections; import java.util.List; import java.util.stream.Collectors; -import java.util.stream.Stream; public class GamePlayers { - private final List players; + private final List players; - public GamePlayers(List players) { + public GamePlayers(List players) { this.players = players; } - public List getPlayers() { - return this.players; - } - public static GamePlayers makePlayers(List playerNames) { - List dealerPlayers = Arrays.asList(new Player("딜러", true)); - List commonPlayers = playerNames.stream() - .map(player -> new Player(player, false)) - .collect(Collectors.toList()); - List players = Stream.of(dealerPlayers, commonPlayers) - .flatMap(lotto -> lotto.stream()) + List players = playerNames.stream() + .map(player -> new Player(player)) .collect(Collectors.toList()); - return new GamePlayers(players); + players.add(0, new Player("딜러")); + + return new GamePlayers(new ArrayList<>(players)); + } + + public GamePlayer getDealer() { + return players.get(0); + } + + public List getPlayers() { + return Collections.unmodifiableList(players.subList(1, players.size())); + } + + public List getAllPlayers() { + return Collections.unmodifiableList(players); } } diff --git a/src/main/java/blackjack/domain/Player.java b/src/main/java/blackjack/domain/Player.java index f12c8353..f2f73acc 100644 --- a/src/main/java/blackjack/domain/Player.java +++ b/src/main/java/blackjack/domain/Player.java @@ -1,73 +1,34 @@ package blackjack.domain; -import java.util.ArrayList; -import java.util.Collections; import java.util.List; +import java.util.NoSuchElementException; -public class Player { +public class Player extends GamePlayer { - private static final String ACE = "A"; - private static final int BLACK_JACK = 21; + private static final int BLACKJACK = 21; + private static final String WIN = "승"; + private static final String LOSE = "패"; - private final String name; - private int score; - private List cards; - private boolean isDealer; - - public Player(String name, boolean isDealer) { - this(name, 0, isDealer); - this.cards = new ArrayList<>(); - } - - public Player(String name, int score, boolean isDealer) { - this.name = name; - this.score = score; - this.cards = new ArrayList<>(); - this.isDealer = isDealer; - } - - public void receiveCard(Card card) { - addCard(card); - addScore(card); + public Player(String name) { + super(name); } - private void addCard(final Card card) { - this.cards.add(card); + @Override + public boolean isLowerThanBound() { + //여기가 문제입니다 + return getScore() < BLACKJACK; } - private void addScore(final Card card) { - if (isAceCard(card)) { - this.score = getBetterPointForAce(card); - return; - } - this.score += card.getPoint(); - } - - private boolean isAceCard(final Card card) { - return card.getName().equals(ACE); - } + @Override + public String getGameResult(List allPlayers) { + int winnerScore = allPlayers.stream() + .map(GamePlayer::getScore) + .max(Integer::compareTo) + .orElseThrow(NoSuchElementException::new); - private int getBetterPointForAce(Card card) { - int curScore = this.score; - if (curScore + card.getPoint() < BLACK_JACK) { - return curScore + card.getPoint(); + if(this.getScore() == winnerScore){ + return WIN; } - return curScore + card.getLowerAcePoint(); - } - - public String getName() { - return this.name; - } - - public int getScore() { - return this.score; - } - - public List getCards() { - return Collections.unmodifiableList(cards); - } - - public boolean isDealer() { - return this.isDealer; + return LOSE; } } diff --git a/src/main/java/blackjack/util/CardShuffler.java b/src/main/java/blackjack/util/CardShuffler.java deleted file mode 100644 index a3c65595..00000000 --- a/src/main/java/blackjack/util/CardShuffler.java +++ /dev/null @@ -1,18 +0,0 @@ -package blackjack.util; - -import java.util.List; -import java.util.Random; - -public class CardShuffler { - - private static final Random random = new Random(); - - public static String pickSymbolIn(List symbols) { - int pickIndex = random.nextInt(symbols.size()); - return symbols.get(pickIndex); - } - - public static int pickCardIndexIn(int bound) { - return random.nextInt(bound); - } -} diff --git a/src/main/java/blackjack/view/InputView.java b/src/main/java/blackjack/view/InputView.java index dfc4d00e..90f13610 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.GamePlayer; import java.util.Arrays; import java.util.List; import java.util.Scanner; @@ -9,6 +10,7 @@ public class InputView { private static final Scanner scanner = new Scanner(System.in); private static final String GET_PLAYER_MESSAGE = "게임에 참여할 사람의 이름을 입력하세요."; + private static final String QUESTION_ACCEPT_CARD_MESSAGE = "%s는 한장의 카드를 더 받겠습니까?(예는 y, 아니오는 n)"; private static final String DELIMITER = ","; public static List getPlayerName() { @@ -19,14 +21,15 @@ public static List getPlayerName() { return splitPlayerName(input); } - public static boolean getPlayerChoice() { + public static boolean getPlayerChoice(GamePlayer player) { try { + System.out.println(String.format(QUESTION_ACCEPT_CARD_MESSAGE, player.getName())); String input = scanner.nextLine(); validateEmpty(input); return input.equals("y"); } catch (IllegalArgumentException e) { e.printStackTrace(); - return getPlayerChoice(); + return getPlayerChoice(player); } } diff --git a/src/main/java/blackjack/view/OutputView.java b/src/main/java/blackjack/view/OutputView.java index 5f653ee3..58b9d35d 100644 --- a/src/main/java/blackjack/view/OutputView.java +++ b/src/main/java/blackjack/view/OutputView.java @@ -2,57 +2,50 @@ import blackjack.domain.Card; import blackjack.domain.GamePlayers; -import blackjack.domain.Player; +import blackjack.domain.GamePlayer; import java.util.List; -import java.util.NoSuchElementException; import java.util.stream.Collectors; public class OutputView { - private static final String GAME_INITIAL_MANAGER = "딜러와 %s에게 2장의 카드를 나누었습니다."; + private static final String GAME_INITIAL_MANAGER = "%s에게 2장의 카드를 나누었습니다."; private static final String COMMA = ", "; private static final String CARDS_LOG = "%s: %s"; - private static final String QUESTION_ACCEPT_CARD_MESSAGE = "%s는 한장의 카드를 더 받겠습니까?(예는 y, 아니오는 n)"; private static final String DEALER_RECEIVE_ONE_CARD_MESSAGE = "딜러는 한장의 카드를 더 받았습니다."; private static final String RESULT_CARDS_LOG = "%s카드: %s - 결과: %d"; private static final String RESULT_GAME_LOG = "%s: %s"; - private static final String WIN = "승"; - private static final String LOSE = "패"; - public static void printInitialMessage(List players) { + public static void printInitialMessage(List players) { String playerNames = players.stream() - .map(Player::getName) + .map(GamePlayer::getName) .collect(Collectors.joining(COMMA)); System.out.println(String.format(GAME_INITIAL_MANAGER, playerNames)); } - public static void printCardStatus(Player player) { + public static void printCardStatus(GamePlayer player) { StringBuilder stringBuilder = new StringBuilder(); List cards = player.getCards(); for (Card card : cards) { - stringBuilder.append(card.getName()) - .append(card.getSymbol()) + + stringBuilder.append(card.getCardType().getName()) + .append(card.getCardSymbol().getSymbol()) .append(COMMA); } System.out.println(String.format(CARDS_LOG, player.getName(), stringBuilder.toString())); } - public static void printQuestionAcceptCard(Player player) { - System.out.println(String.format(QUESTION_ACCEPT_CARD_MESSAGE, player.getName())); - } - public static void printDealerAcceptCard() { System.out.println(DEALER_RECEIVE_ONE_CARD_MESSAGE); } public static void printCardResult(GamePlayers gamePlayers) { - List players = gamePlayers.getPlayers(); + List players = gamePlayers.getAllPlayers(); - for (Player player : players) { + for (GamePlayer player : players) { String cardNameWithSymbol = player.getCards().stream() - .map(card -> card.getName() + card.getSymbol()) + .map(card -> card.getCardType().getName() + card.getCardSymbol().getSymbol()) .collect(Collectors.joining(COMMA)); System.out.println(String.format(RESULT_CARDS_LOG, player.getName(), cardNameWithSymbol, player.getScore())); @@ -60,29 +53,9 @@ public static void printCardResult(GamePlayers gamePlayers) { } public static void printGameResult(GamePlayers gamePlayers) { - List players = gamePlayers.getPlayers(); - int maxScore = getWinnerScore(players); - - for (Player player : players) { - System.out.println(String.format(RESULT_GAME_LOG, player.getName(), getGameResult(player, maxScore))); + List players = gamePlayers.getAllPlayers(); + for (GamePlayer player : players) { + System.out.println(String.format(RESULT_GAME_LOG, player.getName(), player.getGameResult(players))); } } - - private static int getWinnerScore(List players) { - return players.stream() - .map(Player::getScore) - .max(Integer::compareTo) - .orElseThrow(NoSuchElementException::new); - } - - private static String getGameResult(Player player, int maxScore) { - if (isPlayerWinner(player, maxScore)) { - return WIN; - } - return LOSE; - } - - private static boolean isPlayerWinner(Player player, int maxScore) { - return player.getScore() == maxScore; - } } diff --git a/src/test/java/blackjack/domain/DealerTest.java b/src/test/java/blackjack/domain/DealerTest.java index 1fa2fdb7..d6812bc6 100644 --- a/src/test/java/blackjack/domain/DealerTest.java +++ b/src/test/java/blackjack/domain/DealerTest.java @@ -19,10 +19,10 @@ class DealerTest { //when dealer.initializeGame(gamePlayers); - List players = gamePlayers.getPlayers(); + List players = gamePlayers.getPlayers(); //then - for (Player player : players) { + for (GamePlayer player : players) { List cards = player.getCards(); assertThat(cards.size()).isEqualTo(2); } diff --git a/src/test/java/blackjack/domain/GamePlayersTest.java b/src/test/java/blackjack/domain/GamePlayersTest.java index 60e94ff5..ef0b55c0 100644 --- a/src/test/java/blackjack/domain/GamePlayersTest.java +++ b/src/test/java/blackjack/domain/GamePlayersTest.java @@ -17,7 +17,7 @@ class GamePlayersTest { //when GamePlayers gamePlayers = GamePlayers.makePlayers(Arrays.asList("pobi", "jason")); List players = gamePlayers.getPlayers().stream() - .map(Player::getName) + .map(GamePlayer::getName) .collect(Collectors.toList()); //then diff --git a/src/test/java/blackjack/domain/PlayerTest.java b/src/test/java/blackjack/domain/PlayerTest.java index ae627631..1a35c0a1 100644 --- a/src/test/java/blackjack/domain/PlayerTest.java +++ b/src/test/java/blackjack/domain/PlayerTest.java @@ -9,7 +9,7 @@ class PlayerTest { @Test public void Ace를_받았을때_합이_21을_넘을경우_1을_더해준다() { //given - Player player = new Player("pobi", 15, false); + GamePlayer player = new GamePlayer("pobi", 15, false); //when player.receiveCard(new Card("스페이드", "A", 11, 1)); @@ -21,7 +21,7 @@ class PlayerTest { @Test public void Ace를_받았을때_합이_21을_넘지않을경우_11을_더해준다() { //given - Player player = new Player("pobi", 8, false); + GamePlayer player = new GamePlayer("pobi", 8, false); //when player.receiveCard(new Card("스페이드", "A", 11, 1)); From 8a2977dc3144b66c1ca2b4d76b4ae27efa89797d Mon Sep 17 00:00:00 2001 From: kimsunghyun Date: Thu, 17 Feb 2022 00:44:12 +0900 Subject: [PATCH 094/182] =?UTF-8?q?styles:=20Controller=EC=97=90=20final?= =?UTF-8?q?=20=ED=82=A4=EC=9B=8C=EB=93=9C=20=EB=B6=80=EC=97=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/blackjack/controller/GameController.java | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/main/java/blackjack/controller/GameController.java b/src/main/java/blackjack/controller/GameController.java index f7dd67d8..f97f8b1e 100644 --- a/src/main/java/blackjack/controller/GameController.java +++ b/src/main/java/blackjack/controller/GameController.java @@ -11,14 +11,15 @@ public class GameController { public void start() { - CardPack cardPack = new CardPack(); + final CardPack cardPack = new CardPack(); Dealer dealer = new Dealer(cardPack); - GamePlayers gamePlayers = GamePlayers.makePlayers(InputView.getPlayerName()); + final GamePlayers gamePlayers = new GamePlayers(InputView.getPlayerName()); dealer.initializeGame(gamePlayers); printInitialStatus(gamePlayers); + dealer.playGame(gamePlayers.getPlayers(), gamePlayers.getDealer()); OutputView.printCardResult(gamePlayers); From 3ea2ca9a96481360dfb865319a435554ad2b360a Mon Sep 17 00:00:00 2001 From: kimsunghyun Date: Thu, 17 Feb 2022 00:45:11 +0900 Subject: [PATCH 095/182] =?UTF-8?q?fix:=20ace=EC=9D=98=20=EA=B0=9C?= =?UTF-8?q?=EC=88=98=EB=A5=BC=20=EC=84=B8=EB=8A=94=20=EB=A1=9C=EC=A7=81=20?= =?UTF-8?q?=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit map() -> filter() --- src/main/java/blackjack/domain/Cards.java | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/src/main/java/blackjack/domain/Cards.java b/src/main/java/blackjack/domain/Cards.java index a8322a91..0e6e88c2 100644 --- a/src/main/java/blackjack/domain/Cards.java +++ b/src/main/java/blackjack/domain/Cards.java @@ -27,7 +27,7 @@ public List toList() { public int calculateCards() { final int aceCount = (int) cards.stream() .map(Card::getCardType) - .map(CardType::isAce) + .filter(CardType::isAce) .count(); if (aceCount == 0) { @@ -75,7 +75,4 @@ private int getMaxPoint(final List sums) { .max() .orElse(LOSE); } - - - } From b9adb4f20f77bfc6412a55a14cdb726acb5c5178 Mon Sep 17 00:00:00 2001 From: kimsunghyun Date: Thu, 17 Feb 2022 00:45:35 +0900 Subject: [PATCH 096/182] =?UTF-8?q?refactor:=20=EC=A4=91=EB=B3=B5=EB=90=98?= =?UTF-8?q?=EB=8A=94=20=EC=BD=94=EB=93=9C=20=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/blackjack/domain/Player.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/blackjack/domain/Player.java b/src/main/java/blackjack/domain/Player.java index f2f73acc..fae60287 100644 --- a/src/main/java/blackjack/domain/Player.java +++ b/src/main/java/blackjack/domain/Player.java @@ -16,7 +16,7 @@ public Player(String name) { @Override public boolean isLowerThanBound() { //여기가 문제입니다 - return getScore() < BLACKJACK; + return isContinue(); } @Override From 7cd211c98e135f7e353f9df1506e7e4c6272e37a Mon Sep 17 00:00:00 2001 From: kimsunghyun Date: Thu, 17 Feb 2022 00:46:07 +0900 Subject: [PATCH 097/182] =?UTF-8?q?refactor:=20List=EB=A5=BC?= =?UTF-8?q?=20=EB=8B=B4=EB=8A=94=20=EB=A1=9C=EC=A7=81=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/GamePlayers.java | 15 +++++++-------- 1 file changed, 7 insertions(+), 8 deletions(-) diff --git a/src/main/java/blackjack/domain/GamePlayers.java b/src/main/java/blackjack/domain/GamePlayers.java index e996ab16..7c64d151 100644 --- a/src/main/java/blackjack/domain/GamePlayers.java +++ b/src/main/java/blackjack/domain/GamePlayers.java @@ -9,19 +9,18 @@ public class GamePlayers { private final List players; - public GamePlayers(List players) { - this.players = players; + public GamePlayers(final List players) { + this.players = makePlayers(players); } - public static GamePlayers makePlayers(List playerNames) { - - List players = playerNames.stream() - .map(player -> new Player(player)) + public List makePlayers(List playerNames) { + final List players = playerNames.stream() + .map(Player::new) .collect(Collectors.toList()); - players.add(0, new Player("딜러")); + players.add(0, new DealerPlayer("딜러")); - return new GamePlayers(new ArrayList<>(players)); + return new ArrayList<>(players); } public GamePlayer getDealer() { From 614e6042e21cfdb3a3bcd11ea9d3da6d5824953a Mon Sep 17 00:00:00 2001 From: kimsunghyun Date: Thu, 17 Feb 2022 00:47:56 +0900 Subject: [PATCH 098/182] =?UTF-8?q?refactor:=20=EA=B2=8C=EC=9E=84=20?= =?UTF-8?q?=EC=B4=88=EA=B8=B0=202=EC=9E=A5=EC=94=A9=20=EB=82=98=EB=88=A0?= =?UTF-8?q?=EC=A3=BC=EB=8A=94=20=EA=B8=B0=EB=8A=A5=20=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 --- src/main/java/blackjack/domain/Dealer.java | 18 +++++++----------- 1 file changed, 7 insertions(+), 11 deletions(-) diff --git a/src/main/java/blackjack/domain/Dealer.java b/src/main/java/blackjack/domain/Dealer.java index 52c5c0a9..9577fa3b 100644 --- a/src/main/java/blackjack/domain/Dealer.java +++ b/src/main/java/blackjack/domain/Dealer.java @@ -7,7 +7,6 @@ public class Dealer { - private static final int INITIAL_CARD_QUANTITY = 2; private final CardPack cardPack; public Dealer(CardPack cardPack) { @@ -17,10 +16,11 @@ public Dealer(CardPack cardPack) { public void initializeGame(GamePlayers gamePlayers) { List players = gamePlayers.getAllPlayers(); - for (int i = 0; i < INITIAL_CARD_QUANTITY; i++) { - players.stream() - .forEach(player -> giveCardAfterPick(player)); - } + players.forEach(player -> { + player.receiveCard(cardPack.remove()); + player.receiveCard(cardPack.remove()); + }); + for (GamePlayer gamePlayer : players) { System.out.println(gamePlayer.getName() + ", "+ gamePlayer.getScore()); } @@ -35,7 +35,7 @@ public void playGame(final List players, final GamePlayer dealer) { private void playerGameProcess(final GamePlayer player) { while (player.isContinue() && InputView.getPlayerChoice(player)) { - giveCardAfterPick(player); + player.receiveCard(cardPack.remove()); OutputView.printCardStatus(player); } if (!player.isContinue()) { @@ -47,12 +47,8 @@ private void playerGameProcess(final GamePlayer player) { private void dealerGameProcess(final GamePlayer dealer) { while (dealer.isLowerThanBound()) { OutputView.printDealerAcceptCard(); - giveCardAfterPick(dealer); + dealer.receiveCard(cardPack.remove()); System.out.println(dealer.getScore()); } } - - private void giveCardAfterPick(GamePlayer player) { - player.receiveCard(cardPack.remove()); - } } From f3dd988d39dd8dd2fcb944329c1745a9df7846cc Mon Sep 17 00:00:00 2001 From: kimsunghyun Date: Thu, 17 Feb 2022 01:01:14 +0900 Subject: [PATCH 099/182] docs: Update README --- README.md | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index aba0e109..571ba80a 100644 --- a/README.md +++ b/README.md @@ -43,8 +43,9 @@ - [x] 처음에 받은 2장의 합계가 16이하면 1장을 추가로 지급받는다. # TODO -- [ ] 플레이어를 추상클래스 혹은 인터페이스로 구현하기 -- [ ] 플레이어 클래스에서 승자 여부에 대한 속성을 추가 -- [ ] 딜러가 한장 더 받는다는 메시지를 맨 마지막에 위치 +- [x] 플레이어를 추상클래스 혹은 인터페이스로 구현하기 +- [x] 딜러가 한장 더 받는다는 메시지를 맨 마지막에 위치 - [ ] 딜러의 상대적 최종 승패 구현 -- [ ] 단위 테스트 보완하기 \ No newline at end of file +- [ ] 단위 테스트 보완하기 +- [ ] 최종승패 딜러 로직 버그 수정 +- [ ] 진짜 진짜 최종 리팩토링 \ No newline at end of file From 35dcfb36182d43fe30ff85d4c714cc69854cfd0c Mon Sep 17 00:00:00 2001 From: kimsunghyun Date: Thu, 17 Feb 2022 09:36:55 +0900 Subject: [PATCH 100/182] =?UTF-8?q?chore:=20card=20=EA=B4=80=EB=A0=A8?= =?UTF-8?q?=EB=90=9C=20=ED=81=B4=EB=9E=98=EC=8A=A4=EB=8A=94=20card=20?= =?UTF-8?q?=ED=8C=A8=ED=82=A4=EC=A7=80=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 --- src/main/java/blackjack/controller/GameController.java | 2 +- src/main/java/blackjack/domain/Dealer.java | 1 + src/main/java/blackjack/domain/GamePlayer.java | 2 ++ src/main/java/blackjack/domain/{ => card}/Card.java | 2 +- src/main/java/blackjack/domain/{ => card}/CardPack.java | 2 +- src/main/java/blackjack/domain/{ => card}/CardSymbol.java | 2 +- src/main/java/blackjack/domain/{ => card}/CardType.java | 2 +- src/main/java/blackjack/domain/{ => card}/Cards.java | 2 +- src/main/java/blackjack/view/OutputView.java | 2 +- src/test/java/blackjack/domain/CardPackTest.java | 3 +++ src/test/java/blackjack/domain/DealerTest.java | 2 ++ src/test/java/blackjack/domain/PlayerTest.java | 1 + 12 files changed, 16 insertions(+), 7 deletions(-) rename src/main/java/blackjack/domain/{ => card}/Card.java (92%) rename src/main/java/blackjack/domain/{ => card}/CardPack.java (95%) rename src/main/java/blackjack/domain/{ => card}/CardSymbol.java (90%) rename src/main/java/blackjack/domain/{ => card}/CardType.java (96%) rename src/main/java/blackjack/domain/{ => card}/Cards.java (98%) diff --git a/src/main/java/blackjack/controller/GameController.java b/src/main/java/blackjack/controller/GameController.java index f97f8b1e..20dc2311 100644 --- a/src/main/java/blackjack/controller/GameController.java +++ b/src/main/java/blackjack/controller/GameController.java @@ -1,6 +1,6 @@ package blackjack.controller; -import blackjack.domain.CardPack; +import blackjack.domain.card.CardPack; import blackjack.domain.Dealer; import blackjack.domain.GamePlayers; import blackjack.domain.GamePlayer; diff --git a/src/main/java/blackjack/domain/Dealer.java b/src/main/java/blackjack/domain/Dealer.java index 9577fa3b..61a839bd 100644 --- a/src/main/java/blackjack/domain/Dealer.java +++ b/src/main/java/blackjack/domain/Dealer.java @@ -1,6 +1,7 @@ package blackjack.domain; +import blackjack.domain.card.CardPack; import blackjack.view.InputView; import blackjack.view.OutputView; import java.util.List; diff --git a/src/main/java/blackjack/domain/GamePlayer.java b/src/main/java/blackjack/domain/GamePlayer.java index 6d41fa53..2054e18f 100644 --- a/src/main/java/blackjack/domain/GamePlayer.java +++ b/src/main/java/blackjack/domain/GamePlayer.java @@ -1,5 +1,7 @@ package blackjack.domain; +import blackjack.domain.card.Card; +import blackjack.domain.card.Cards; import java.util.List; public abstract class GamePlayer { diff --git a/src/main/java/blackjack/domain/Card.java b/src/main/java/blackjack/domain/card/Card.java similarity index 92% rename from src/main/java/blackjack/domain/Card.java rename to src/main/java/blackjack/domain/card/Card.java index 65819ca8..aadad0e7 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/CardPack.java b/src/main/java/blackjack/domain/card/CardPack.java similarity index 95% rename from src/main/java/blackjack/domain/CardPack.java rename to src/main/java/blackjack/domain/card/CardPack.java index 26b02c1d..753e2760 100644 --- a/src/main/java/blackjack/domain/CardPack.java +++ b/src/main/java/blackjack/domain/card/CardPack.java @@ -1,4 +1,4 @@ -package blackjack.domain; +package blackjack.domain.card; import java.util.ArrayList; import java.util.Arrays; diff --git a/src/main/java/blackjack/domain/CardSymbol.java b/src/main/java/blackjack/domain/card/CardSymbol.java similarity index 90% rename from src/main/java/blackjack/domain/CardSymbol.java rename to src/main/java/blackjack/domain/card/CardSymbol.java index 1fc4806a..225eb683 100644 --- a/src/main/java/blackjack/domain/CardSymbol.java +++ b/src/main/java/blackjack/domain/card/CardSymbol.java @@ -1,4 +1,4 @@ -package blackjack.domain; +package blackjack.domain.card; public enum CardSymbol { SPADE("스페이드"), diff --git a/src/main/java/blackjack/domain/CardType.java b/src/main/java/blackjack/domain/card/CardType.java similarity index 96% rename from src/main/java/blackjack/domain/CardType.java rename to src/main/java/blackjack/domain/card/CardType.java index 74147266..832ac510 100644 --- a/src/main/java/blackjack/domain/CardType.java +++ b/src/main/java/blackjack/domain/card/CardType.java @@ -1,4 +1,4 @@ -package blackjack.domain; +package blackjack.domain.card; public enum CardType { ACE("A", 11, 1), diff --git a/src/main/java/blackjack/domain/Cards.java b/src/main/java/blackjack/domain/card/Cards.java similarity index 98% rename from src/main/java/blackjack/domain/Cards.java rename to src/main/java/blackjack/domain/card/Cards.java index 0e6e88c2..259d8d74 100644 --- a/src/main/java/blackjack/domain/Cards.java +++ b/src/main/java/blackjack/domain/card/Cards.java @@ -1,4 +1,4 @@ -package blackjack.domain; +package blackjack.domain.card; import java.util.ArrayList; import java.util.Arrays; diff --git a/src/main/java/blackjack/view/OutputView.java b/src/main/java/blackjack/view/OutputView.java index 58b9d35d..b7a813a0 100644 --- a/src/main/java/blackjack/view/OutputView.java +++ b/src/main/java/blackjack/view/OutputView.java @@ -1,6 +1,6 @@ package blackjack.view; -import blackjack.domain.Card; +import blackjack.domain.card.Card; import blackjack.domain.GamePlayers; import blackjack.domain.GamePlayer; import java.util.List; diff --git a/src/test/java/blackjack/domain/CardPackTest.java b/src/test/java/blackjack/domain/CardPackTest.java index 77bb6e6c..da62514e 100644 --- a/src/test/java/blackjack/domain/CardPackTest.java +++ b/src/test/java/blackjack/domain/CardPackTest.java @@ -2,6 +2,9 @@ import static org.assertj.core.api.Assertions.*; +import blackjack.domain.card.Card; +import blackjack.domain.card.CardPack; +import blackjack.domain.card.CardType; import java.util.ArrayList; import java.util.Arrays; import java.util.List; diff --git a/src/test/java/blackjack/domain/DealerTest.java b/src/test/java/blackjack/domain/DealerTest.java index d6812bc6..47d9f56f 100644 --- a/src/test/java/blackjack/domain/DealerTest.java +++ b/src/test/java/blackjack/domain/DealerTest.java @@ -2,6 +2,8 @@ import static org.assertj.core.api.Assertions.assertThat; +import blackjack.domain.card.Card; +import blackjack.domain.card.CardPack; import java.util.Arrays; import java.util.List; import org.junit.jupiter.api.Test; diff --git a/src/test/java/blackjack/domain/PlayerTest.java b/src/test/java/blackjack/domain/PlayerTest.java index 1a35c0a1..96dba1e2 100644 --- a/src/test/java/blackjack/domain/PlayerTest.java +++ b/src/test/java/blackjack/domain/PlayerTest.java @@ -2,6 +2,7 @@ import static org.assertj.core.api.Assertions.assertThat; +import blackjack.domain.card.Card; import org.junit.jupiter.api.Test; class PlayerTest { From 2c53c7b0f09e5902f3eb9c7723858d0994821cc3 Mon Sep 17 00:00:00 2001 From: kimsunghyun Date: Thu, 17 Feb 2022 09:37:44 +0900 Subject: [PATCH 101/182] =?UTF-8?q?chore:=20=EA=B2=8C=EC=9E=84=ED=94=8C?= =?UTF-8?q?=EB=A0=88=EC=9D=B4=EC=96=B4=20=EA=B4=80=EB=A0=A8=20=ED=81=B4?= =?UTF-8?q?=EB=9E=98=EC=8A=A4=EB=8A=94=20gameplayer=EB=A1=9C=20=ED=8C=A8?= =?UTF-8?q?=ED=82=A4=EC=A7=80=20=EB=B6=84=EB=A6=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/blackjack/controller/GameController.java | 2 +- src/main/java/blackjack/domain/Dealer.java | 1 + src/main/java/blackjack/domain/GamePlayers.java | 3 +++ .../java/blackjack/domain/{ => gameplayer}/DealerPlayer.java | 2 +- .../java/blackjack/domain/{ => gameplayer}/GamePlayer.java | 2 +- src/main/java/blackjack/domain/{ => gameplayer}/Player.java | 2 +- src/main/java/blackjack/view/InputView.java | 2 +- src/main/java/blackjack/view/OutputView.java | 2 +- src/test/java/blackjack/domain/DealerTest.java | 1 + src/test/java/blackjack/domain/GamePlayersTest.java | 1 + src/test/java/blackjack/domain/PlayerTest.java | 1 + 11 files changed, 13 insertions(+), 6 deletions(-) rename src/main/java/blackjack/domain/{ => gameplayer}/DealerPlayer.java (96%) rename src/main/java/blackjack/domain/{ => gameplayer}/GamePlayer.java (95%) rename src/main/java/blackjack/domain/{ => gameplayer}/Player.java (95%) diff --git a/src/main/java/blackjack/controller/GameController.java b/src/main/java/blackjack/controller/GameController.java index 20dc2311..825185e8 100644 --- a/src/main/java/blackjack/controller/GameController.java +++ b/src/main/java/blackjack/controller/GameController.java @@ -3,7 +3,7 @@ import blackjack.domain.card.CardPack; import blackjack.domain.Dealer; import blackjack.domain.GamePlayers; -import blackjack.domain.GamePlayer; +import blackjack.domain.gameplayer.GamePlayer; import blackjack.view.InputView; import blackjack.view.OutputView; import java.util.List; diff --git a/src/main/java/blackjack/domain/Dealer.java b/src/main/java/blackjack/domain/Dealer.java index 61a839bd..e60e608e 100644 --- a/src/main/java/blackjack/domain/Dealer.java +++ b/src/main/java/blackjack/domain/Dealer.java @@ -2,6 +2,7 @@ import blackjack.domain.card.CardPack; +import blackjack.domain.gameplayer.GamePlayer; import blackjack.view.InputView; import blackjack.view.OutputView; import java.util.List; diff --git a/src/main/java/blackjack/domain/GamePlayers.java b/src/main/java/blackjack/domain/GamePlayers.java index 7c64d151..f41fc55c 100644 --- a/src/main/java/blackjack/domain/GamePlayers.java +++ b/src/main/java/blackjack/domain/GamePlayers.java @@ -1,5 +1,8 @@ package blackjack.domain; +import blackjack.domain.gameplayer.DealerPlayer; +import blackjack.domain.gameplayer.GamePlayer; +import blackjack.domain.gameplayer.Player; import java.util.ArrayList; import java.util.Collections; import java.util.List; diff --git a/src/main/java/blackjack/domain/DealerPlayer.java b/src/main/java/blackjack/domain/gameplayer/DealerPlayer.java similarity index 96% rename from src/main/java/blackjack/domain/DealerPlayer.java rename to src/main/java/blackjack/domain/gameplayer/DealerPlayer.java index 610948e9..c3d3edbf 100644 --- a/src/main/java/blackjack/domain/DealerPlayer.java +++ b/src/main/java/blackjack/domain/gameplayer/DealerPlayer.java @@ -1,4 +1,4 @@ -package blackjack.domain; +package blackjack.domain.gameplayer; import java.util.List; diff --git a/src/main/java/blackjack/domain/GamePlayer.java b/src/main/java/blackjack/domain/gameplayer/GamePlayer.java similarity index 95% rename from src/main/java/blackjack/domain/GamePlayer.java rename to src/main/java/blackjack/domain/gameplayer/GamePlayer.java index 2054e18f..aa70a32d 100644 --- a/src/main/java/blackjack/domain/GamePlayer.java +++ b/src/main/java/blackjack/domain/gameplayer/GamePlayer.java @@ -1,4 +1,4 @@ -package blackjack.domain; +package blackjack.domain.gameplayer; import blackjack.domain.card.Card; import blackjack.domain.card.Cards; diff --git a/src/main/java/blackjack/domain/Player.java b/src/main/java/blackjack/domain/gameplayer/Player.java similarity index 95% rename from src/main/java/blackjack/domain/Player.java rename to src/main/java/blackjack/domain/gameplayer/Player.java index fae60287..ededeb36 100644 --- a/src/main/java/blackjack/domain/Player.java +++ b/src/main/java/blackjack/domain/gameplayer/Player.java @@ -1,4 +1,4 @@ -package blackjack.domain; +package blackjack.domain.gameplayer; import java.util.List; import java.util.NoSuchElementException; diff --git a/src/main/java/blackjack/view/InputView.java b/src/main/java/blackjack/view/InputView.java index 90f13610..89f9c63f 100644 --- a/src/main/java/blackjack/view/InputView.java +++ b/src/main/java/blackjack/view/InputView.java @@ -1,6 +1,6 @@ package blackjack.view; -import blackjack.domain.GamePlayer; +import blackjack.domain.gameplayer.GamePlayer; import java.util.Arrays; import java.util.List; import java.util.Scanner; diff --git a/src/main/java/blackjack/view/OutputView.java b/src/main/java/blackjack/view/OutputView.java index b7a813a0..c298cc5a 100644 --- a/src/main/java/blackjack/view/OutputView.java +++ b/src/main/java/blackjack/view/OutputView.java @@ -2,7 +2,7 @@ import blackjack.domain.card.Card; import blackjack.domain.GamePlayers; -import blackjack.domain.GamePlayer; +import blackjack.domain.gameplayer.GamePlayer; import java.util.List; import java.util.stream.Collectors; diff --git a/src/test/java/blackjack/domain/DealerTest.java b/src/test/java/blackjack/domain/DealerTest.java index 47d9f56f..b7d91474 100644 --- a/src/test/java/blackjack/domain/DealerTest.java +++ b/src/test/java/blackjack/domain/DealerTest.java @@ -4,6 +4,7 @@ import blackjack.domain.card.Card; import blackjack.domain.card.CardPack; +import blackjack.domain.gameplayer.GamePlayer; import java.util.Arrays; import java.util.List; import org.junit.jupiter.api.Test; diff --git a/src/test/java/blackjack/domain/GamePlayersTest.java b/src/test/java/blackjack/domain/GamePlayersTest.java index ef0b55c0..8d49f34d 100644 --- a/src/test/java/blackjack/domain/GamePlayersTest.java +++ b/src/test/java/blackjack/domain/GamePlayersTest.java @@ -2,6 +2,7 @@ import static org.assertj.core.api.Assertions.assertThat; +import blackjack.domain.gameplayer.GamePlayer; import java.util.Arrays; import java.util.List; import java.util.stream.Collectors; diff --git a/src/test/java/blackjack/domain/PlayerTest.java b/src/test/java/blackjack/domain/PlayerTest.java index 96dba1e2..8098a924 100644 --- a/src/test/java/blackjack/domain/PlayerTest.java +++ b/src/test/java/blackjack/domain/PlayerTest.java @@ -3,6 +3,7 @@ import static org.assertj.core.api.Assertions.assertThat; import blackjack.domain.card.Card; +import blackjack.domain.gameplayer.GamePlayer; import org.junit.jupiter.api.Test; class PlayerTest { From a7fe789932710df28ea75d1191a39041439aa34e Mon Sep 17 00:00:00 2001 From: kimsunghyun Date: Thu, 17 Feb 2022 09:39:03 +0900 Subject: [PATCH 102/182] =?UTF-8?q?chore:=20=EA=B2=8C=EC=9E=84=ED=94=8C?= =?UTF-8?q?=EB=A0=88=EC=9D=B4=EC=96=B4=20=EB=A6=AC=EC=8A=A4=ED=8A=B8?= =?UTF-8?q?=EC=9D=98=20=EC=9D=BC=EA=B8=89=EC=BB=AC=EB=A0=89=EC=85=98?= =?UTF-8?q?=EC=9D=84=20gameplayer=20=ED=8C=A8=ED=82=A4=EC=A7=80=EB=A1=9C?= =?UTF-8?q?=20=EC=9D=B4=EB=8F=99?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/blackjack/controller/GameController.java | 2 +- src/main/java/blackjack/domain/Dealer.java | 1 + .../java/blackjack/domain/{ => gameplayer}/GamePlayers.java | 2 +- src/main/java/blackjack/view/OutputView.java | 2 +- src/test/java/blackjack/domain/DealerTest.java | 1 + src/test/java/blackjack/domain/GamePlayersTest.java | 1 + 6 files changed, 6 insertions(+), 3 deletions(-) rename src/main/java/blackjack/domain/{ => gameplayer}/GamePlayers.java (96%) diff --git a/src/main/java/blackjack/controller/GameController.java b/src/main/java/blackjack/controller/GameController.java index 825185e8..e1efd32d 100644 --- a/src/main/java/blackjack/controller/GameController.java +++ b/src/main/java/blackjack/controller/GameController.java @@ -2,7 +2,7 @@ import blackjack.domain.card.CardPack; import blackjack.domain.Dealer; -import blackjack.domain.GamePlayers; +import blackjack.domain.gameplayer.GamePlayers; import blackjack.domain.gameplayer.GamePlayer; import blackjack.view.InputView; import blackjack.view.OutputView; diff --git a/src/main/java/blackjack/domain/Dealer.java b/src/main/java/blackjack/domain/Dealer.java index e60e608e..a61ec36b 100644 --- a/src/main/java/blackjack/domain/Dealer.java +++ b/src/main/java/blackjack/domain/Dealer.java @@ -3,6 +3,7 @@ import blackjack.domain.card.CardPack; import blackjack.domain.gameplayer.GamePlayer; +import blackjack.domain.gameplayer.GamePlayers; import blackjack.view.InputView; import blackjack.view.OutputView; import java.util.List; diff --git a/src/main/java/blackjack/domain/GamePlayers.java b/src/main/java/blackjack/domain/gameplayer/GamePlayers.java similarity index 96% rename from src/main/java/blackjack/domain/GamePlayers.java rename to src/main/java/blackjack/domain/gameplayer/GamePlayers.java index f41fc55c..15efefdd 100644 --- a/src/main/java/blackjack/domain/GamePlayers.java +++ b/src/main/java/blackjack/domain/gameplayer/GamePlayers.java @@ -1,4 +1,4 @@ -package blackjack.domain; +package blackjack.domain.gameplayer; import blackjack.domain.gameplayer.DealerPlayer; import blackjack.domain.gameplayer.GamePlayer; diff --git a/src/main/java/blackjack/view/OutputView.java b/src/main/java/blackjack/view/OutputView.java index c298cc5a..8c32ad53 100644 --- a/src/main/java/blackjack/view/OutputView.java +++ b/src/main/java/blackjack/view/OutputView.java @@ -1,7 +1,7 @@ package blackjack.view; import blackjack.domain.card.Card; -import blackjack.domain.GamePlayers; +import blackjack.domain.gameplayer.GamePlayers; import blackjack.domain.gameplayer.GamePlayer; import java.util.List; import java.util.stream.Collectors; diff --git a/src/test/java/blackjack/domain/DealerTest.java b/src/test/java/blackjack/domain/DealerTest.java index b7d91474..d513212d 100644 --- a/src/test/java/blackjack/domain/DealerTest.java +++ b/src/test/java/blackjack/domain/DealerTest.java @@ -5,6 +5,7 @@ import blackjack.domain.card.Card; import blackjack.domain.card.CardPack; import blackjack.domain.gameplayer.GamePlayer; +import blackjack.domain.gameplayer.GamePlayers; import java.util.Arrays; import java.util.List; import org.junit.jupiter.api.Test; diff --git a/src/test/java/blackjack/domain/GamePlayersTest.java b/src/test/java/blackjack/domain/GamePlayersTest.java index 8d49f34d..19bc4cae 100644 --- a/src/test/java/blackjack/domain/GamePlayersTest.java +++ b/src/test/java/blackjack/domain/GamePlayersTest.java @@ -3,6 +3,7 @@ import static org.assertj.core.api.Assertions.assertThat; import blackjack.domain.gameplayer.GamePlayer; +import blackjack.domain.gameplayer.GamePlayers; import java.util.Arrays; import java.util.List; import java.util.stream.Collectors; From 64e08abeb764eef7582e7e663f5a85827663051e Mon Sep 17 00:00:00 2001 From: kimsunghyun Date: Thu, 17 Feb 2022 09:42:38 +0900 Subject: [PATCH 103/182] =?UTF-8?q?styles:=20=ED=95=84=EC=9A=94=EC=97=86?= =?UTF-8?q?=EB=8A=94=20=EC=BD=94=EB=93=9C=20=EC=A0=9C=EA=B1=B0=20=EB=B0=8F?= =?UTF-8?q?=20=EC=98=A4=ED=83=80=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/blackjack/domain/Dealer.java | 3 +-- src/main/java/blackjack/domain/gameplayer/DealerPlayer.java | 2 +- src/main/java/blackjack/domain/gameplayer/GamePlayers.java | 3 --- src/main/java/blackjack/domain/gameplayer/Player.java | 3 +-- 4 files changed, 3 insertions(+), 8 deletions(-) diff --git a/src/main/java/blackjack/domain/Dealer.java b/src/main/java/blackjack/domain/Dealer.java index a61ec36b..3d564db3 100644 --- a/src/main/java/blackjack/domain/Dealer.java +++ b/src/main/java/blackjack/domain/Dealer.java @@ -1,6 +1,5 @@ package blackjack.domain; - import blackjack.domain.card.CardPack; import blackjack.domain.gameplayer.GamePlayer; import blackjack.domain.gameplayer.GamePlayers; @@ -42,7 +41,7 @@ private void playerGameProcess(final GamePlayer player) { OutputView.printCardStatus(player); } if (!player.isContinue()) { - // 탈락 + } OutputView.printCardStatus(player); } diff --git a/src/main/java/blackjack/domain/gameplayer/DealerPlayer.java b/src/main/java/blackjack/domain/gameplayer/DealerPlayer.java index c3d3edbf..a808460c 100644 --- a/src/main/java/blackjack/domain/gameplayer/DealerPlayer.java +++ b/src/main/java/blackjack/domain/gameplayer/DealerPlayer.java @@ -41,6 +41,6 @@ private String getGameResultWord(int winCount, int loseCount) { resultWord.append(loseCount + LOSE); } - return String.valueOf(resultWord.toString()); + return resultWord.toString(); } } diff --git a/src/main/java/blackjack/domain/gameplayer/GamePlayers.java b/src/main/java/blackjack/domain/gameplayer/GamePlayers.java index 15efefdd..d7960705 100644 --- a/src/main/java/blackjack/domain/gameplayer/GamePlayers.java +++ b/src/main/java/blackjack/domain/gameplayer/GamePlayers.java @@ -1,8 +1,5 @@ package blackjack.domain.gameplayer; -import blackjack.domain.gameplayer.DealerPlayer; -import blackjack.domain.gameplayer.GamePlayer; -import blackjack.domain.gameplayer.Player; import java.util.ArrayList; import java.util.Collections; import java.util.List; diff --git a/src/main/java/blackjack/domain/gameplayer/Player.java b/src/main/java/blackjack/domain/gameplayer/Player.java index ededeb36..e5b70a03 100644 --- a/src/main/java/blackjack/domain/gameplayer/Player.java +++ b/src/main/java/blackjack/domain/gameplayer/Player.java @@ -15,7 +15,6 @@ public Player(String name) { @Override public boolean isLowerThanBound() { - //여기가 문제입니다 return isContinue(); } @@ -26,7 +25,7 @@ public String getGameResult(List allPlayers) { .max(Integer::compareTo) .orElseThrow(NoSuchElementException::new); - if(this.getScore() == winnerScore){ + if (this.getScore() == winnerScore){ return WIN; } return LOSE; From 258454cbdae225f91bdb9d720332c204f99324aa Mon Sep 17 00:00:00 2001 From: kimsunghyun Date: Thu, 17 Feb 2022 09:45:56 +0900 Subject: [PATCH 104/182] =?UTF-8?q?refactor:=20controller=EC=97=90?= =?UTF-8?q?=EC=84=9C=20=EC=B5=9C=EC=A2=85=20=EC=83=81=ED=83=9C=EB=A5=BC=20?= =?UTF-8?q?=EC=B6=9C=EB=A0=A5=ED=95=98=EB=8A=94=20=EB=A9=94=EC=84=9C?= =?UTF-8?q?=EB=93=9C=20=EB=B6=84=EB=A6=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/blackjack/controller/GameController.java | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/src/main/java/blackjack/controller/GameController.java b/src/main/java/blackjack/controller/GameController.java index e1efd32d..fcae1025 100644 --- a/src/main/java/blackjack/controller/GameController.java +++ b/src/main/java/blackjack/controller/GameController.java @@ -22,8 +22,7 @@ public void start() { dealer.playGame(gamePlayers.getPlayers(), gamePlayers.getDealer()); - OutputView.printCardResult(gamePlayers); - OutputView.printGameResult(gamePlayers); + printFinalStatus(gamePlayers); } private void printInitialStatus(GamePlayers gamePlayers) { @@ -35,4 +34,9 @@ private void printInitialStatus(GamePlayers gamePlayers) { OutputView.printCardStatus(player); } } + + private void printFinalStatus(GamePlayers gamePlayers) { + OutputView.printCardResult(gamePlayers); + OutputView.printGameResult(gamePlayers); + } } From 2944f076851fc9cfd91db498be394ee18ae6bde0 Mon Sep 17 00:00:00 2001 From: kimsunghyun Date: Thu, 17 Feb 2022 09:49:10 +0900 Subject: [PATCH 105/182] =?UTF-8?q?feat:=20=EB=B6=88=EB=B3=80=EC=9D=B4?= =?UTF-8?q?=EC=96=B4=EC=95=BC=20=ED=95=98=EB=8A=94=20=EB=AA=A8=EB=93=A0=20?= =?UTF-8?q?=ED=95=84=EB=93=9C=EC=97=90=20final=20=EB=B6=80=EC=97=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/blackjack/controller/GameController.java | 2 +- src/main/java/blackjack/domain/Dealer.java | 6 +++--- src/main/java/blackjack/domain/card/Card.java | 2 +- src/main/java/blackjack/domain/gameplayer/DealerPlayer.java | 6 +++--- src/main/java/blackjack/domain/gameplayer/GamePlayer.java | 4 ++-- src/main/java/blackjack/domain/gameplayer/GamePlayers.java | 2 +- 6 files changed, 11 insertions(+), 11 deletions(-) diff --git a/src/main/java/blackjack/controller/GameController.java b/src/main/java/blackjack/controller/GameController.java index fcae1025..2db387db 100644 --- a/src/main/java/blackjack/controller/GameController.java +++ b/src/main/java/blackjack/controller/GameController.java @@ -13,7 +13,7 @@ public class GameController { public void start() { final CardPack cardPack = new CardPack(); - Dealer dealer = new Dealer(cardPack); + final Dealer dealer = new Dealer(cardPack); final GamePlayers gamePlayers = new GamePlayers(InputView.getPlayerName()); diff --git a/src/main/java/blackjack/domain/Dealer.java b/src/main/java/blackjack/domain/Dealer.java index 3d564db3..6f598ef9 100644 --- a/src/main/java/blackjack/domain/Dealer.java +++ b/src/main/java/blackjack/domain/Dealer.java @@ -11,11 +11,11 @@ public class Dealer { private final CardPack cardPack; - public Dealer(CardPack cardPack) { + public Dealer(final CardPack cardPack) { this.cardPack = cardPack; } - public void initializeGame(GamePlayers gamePlayers) { + public void initializeGame(final GamePlayers gamePlayers) { List players = gamePlayers.getAllPlayers(); players.forEach(player -> { @@ -23,7 +23,7 @@ public void initializeGame(GamePlayers gamePlayers) { player.receiveCard(cardPack.remove()); }); - for (GamePlayer gamePlayer : players) { + for (final GamePlayer gamePlayer : players) { System.out.println(gamePlayer.getName() + ", "+ gamePlayer.getScore()); } } diff --git a/src/main/java/blackjack/domain/card/Card.java b/src/main/java/blackjack/domain/card/Card.java index aadad0e7..2b2462c7 100644 --- a/src/main/java/blackjack/domain/card/Card.java +++ b/src/main/java/blackjack/domain/card/Card.java @@ -5,7 +5,7 @@ public class Card { private final CardSymbol cardSymbol; private final CardType cardType; - public Card(CardSymbol cardSymbol, CardType cardType) { + public Card(final CardSymbol cardSymbol, final CardType cardType) { this.cardSymbol = cardSymbol; this.cardType = cardType; } diff --git a/src/main/java/blackjack/domain/gameplayer/DealerPlayer.java b/src/main/java/blackjack/domain/gameplayer/DealerPlayer.java index a808460c..66fbe0ba 100644 --- a/src/main/java/blackjack/domain/gameplayer/DealerPlayer.java +++ b/src/main/java/blackjack/domain/gameplayer/DealerPlayer.java @@ -8,7 +8,7 @@ public class DealerPlayer extends GamePlayer { private static final String WIN = "승"; private static final String LOSE = "패"; - public DealerPlayer(String name) { + public DealerPlayer(final String name) { super(name); } @@ -31,8 +31,8 @@ public String getGameResult(List allPlayers) { return getGameResultWord(winCount, loseCount); } - private String getGameResultWord(int winCount, int loseCount) { - StringBuilder resultWord = new StringBuilder(""); + private String getGameResultWord(final int winCount, final int loseCount) { + final StringBuilder resultWord = new StringBuilder(); if (winCount > 0) { resultWord.append(winCount + WIN); } diff --git a/src/main/java/blackjack/domain/gameplayer/GamePlayer.java b/src/main/java/blackjack/domain/gameplayer/GamePlayer.java index aa70a32d..22d32e35 100644 --- a/src/main/java/blackjack/domain/gameplayer/GamePlayer.java +++ b/src/main/java/blackjack/domain/gameplayer/GamePlayer.java @@ -9,9 +9,9 @@ public abstract class GamePlayer { private static final int BLACK_JACK = 21; private final String name; - private Cards cards; + private final Cards cards; - public GamePlayer(String name) { + public GamePlayer(final String name) { this.name = name; this.cards = new Cards(); } diff --git a/src/main/java/blackjack/domain/gameplayer/GamePlayers.java b/src/main/java/blackjack/domain/gameplayer/GamePlayers.java index d7960705..3fc0cf2e 100644 --- a/src/main/java/blackjack/domain/gameplayer/GamePlayers.java +++ b/src/main/java/blackjack/domain/gameplayer/GamePlayers.java @@ -13,7 +13,7 @@ public GamePlayers(final List players) { this.players = makePlayers(players); } - public List makePlayers(List playerNames) { + public List makePlayers(final List playerNames) { final List players = playerNames.stream() .map(Player::new) .collect(Collectors.toList()); From 2f56aa659123ad1be563bf6ee9f36eb73821969a Mon Sep 17 00:00:00 2001 From: kimsunghyun Date: Thu, 17 Feb 2022 09:51:01 +0900 Subject: [PATCH 106/182] =?UTF-8?q?refactor:=20=EB=AF=B8=EC=82=AC=EC=9A=A9?= =?UTF-8?q?=20print=EB=AC=B8=20=EC=A0=9C=EA=B1=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/blackjack/domain/Dealer.java | 4 ---- 1 file changed, 4 deletions(-) diff --git a/src/main/java/blackjack/domain/Dealer.java b/src/main/java/blackjack/domain/Dealer.java index 6f598ef9..9ac84e97 100644 --- a/src/main/java/blackjack/domain/Dealer.java +++ b/src/main/java/blackjack/domain/Dealer.java @@ -22,10 +22,6 @@ public void initializeGame(final GamePlayers gamePlayers) { player.receiveCard(cardPack.remove()); player.receiveCard(cardPack.remove()); }); - - for (final GamePlayer gamePlayer : players) { - System.out.println(gamePlayer.getName() + ", "+ gamePlayer.getScore()); - } } public void playGame(final List players, final GamePlayer dealer) { From 4f72ffe72701156ca0d7fae5b3068ec28c4e2f4e Mon Sep 17 00:00:00 2001 From: kimsunghyun Date: Thu, 17 Feb 2022 09:58:21 +0900 Subject: [PATCH 107/182] =?UTF-8?q?feat:=20OutputView=EC=97=90=EC=84=9C=20?= =?UTF-8?q?=ED=8A=B9=EC=A0=95=20=ED=94=8C=EB=A0=88=EC=9D=B4=EC=96=B4?= =?UTF-8?q?=EC=9D=98=20=EC=B9=B4=EB=93=9C=EC=83=81=ED=83=9C=EB=A5=BC=20?= =?UTF-8?q?=EB=B0=98=ED=99=98=ED=95=98=EB=8A=94=20=EB=A9=94=EC=84=9C?= =?UTF-8?q?=EB=93=9C=20=EA=B5=AC=ED=98=84=20=ED=95=98=EC=97=AC=20=EC=A4=91?= =?UTF-8?q?=EB=B3=B5=EC=A0=9C=EA=B1=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/blackjack/view/OutputView.java | 26 +++++++------------- 1 file changed, 9 insertions(+), 17 deletions(-) diff --git a/src/main/java/blackjack/view/OutputView.java b/src/main/java/blackjack/view/OutputView.java index 8c32ad53..73e32500 100644 --- a/src/main/java/blackjack/view/OutputView.java +++ b/src/main/java/blackjack/view/OutputView.java @@ -1,8 +1,7 @@ package blackjack.view; -import blackjack.domain.card.Card; -import blackjack.domain.gameplayer.GamePlayers; import blackjack.domain.gameplayer.GamePlayer; +import blackjack.domain.gameplayer.GamePlayers; import java.util.List; import java.util.stream.Collectors; @@ -24,16 +23,7 @@ public static void printInitialMessage(List players) { } public static void printCardStatus(GamePlayer player) { - StringBuilder stringBuilder = new StringBuilder(); - - List cards = player.getCards(); - for (Card card : cards) { - - stringBuilder.append(card.getCardType().getName()) - .append(card.getCardSymbol().getSymbol()) - .append(COMMA); - } - System.out.println(String.format(CARDS_LOG, player.getName(), stringBuilder.toString())); + System.out.println(String.format(CARDS_LOG, player.getName(), getPlayerCardStatus(player))); } public static void printDealerAcceptCard() { @@ -44,14 +34,16 @@ public static void printCardResult(GamePlayers gamePlayers) { List players = gamePlayers.getAllPlayers(); for (GamePlayer player : players) { - String cardNameWithSymbol = player.getCards().stream() - .map(card -> card.getCardType().getName() + card.getCardSymbol().getSymbol()) - .collect(Collectors.joining(COMMA)); - - System.out.println(String.format(RESULT_CARDS_LOG, player.getName(), cardNameWithSymbol, player.getScore())); + System.out.println(String.format(RESULT_CARDS_LOG, player.getName(), getPlayerCardStatus(player), player.getScore())); } } + private static String getPlayerCardStatus(GamePlayer gamePlayer) { + return gamePlayer.getCards().stream() + .map(card -> card.getCardType().getName() + card.getCardSymbol().getSymbol()) + .collect(Collectors.joining(COMMA)); + } + public static void printGameResult(GamePlayers gamePlayers) { List players = gamePlayers.getAllPlayers(); for (GamePlayer player : players) { From e05f946c4fa579fccb5993710d5c8e995767eb23 Mon Sep 17 00:00:00 2001 From: kimsunghyun Date: Thu, 17 Feb 2022 10:01:48 +0900 Subject: [PATCH 108/182] =?UTF-8?q?chore:=20=ED=94=8C=EB=A0=88=EC=9D=B4?= =?UTF-8?q?=EC=96=B4=EA=B0=80=20=EA=B0=80=EC=A7=84=20=EC=B9=B4=EB=93=9C?= =?UTF-8?q?=EC=9D=98=20=EC=9D=BC=EA=B8=89=EC=BB=AC=EB=A0=89=EC=85=98?= =?UTF-8?q?=EC=9D=80=20=EA=B2=8C=EC=9E=84=ED=94=8C=EB=A0=88=EC=9D=B4?= =?UTF-8?q?=EC=96=B4=EC=99=80=20=EA=B0=99=EC=9D=80=20=ED=8C=A8=ED=82=A4?= =?UTF-8?q?=EC=A7=80=EB=A1=9C=20=EC=9D=B4=EB=8F=99?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/blackjack/domain/{card => gameplayer}/Cards.java | 4 +++- src/main/java/blackjack/domain/gameplayer/GamePlayer.java | 1 - 2 files changed, 3 insertions(+), 2 deletions(-) rename src/main/java/blackjack/domain/{card => gameplayer}/Cards.java (94%) diff --git a/src/main/java/blackjack/domain/card/Cards.java b/src/main/java/blackjack/domain/gameplayer/Cards.java similarity index 94% rename from src/main/java/blackjack/domain/card/Cards.java rename to src/main/java/blackjack/domain/gameplayer/Cards.java index 259d8d74..7fea00e1 100644 --- a/src/main/java/blackjack/domain/card/Cards.java +++ b/src/main/java/blackjack/domain/gameplayer/Cards.java @@ -1,5 +1,7 @@ -package blackjack.domain.card; +package blackjack.domain.gameplayer; +import blackjack.domain.card.Card; +import blackjack.domain.card.CardType; import java.util.ArrayList; import java.util.Arrays; import java.util.Collections; diff --git a/src/main/java/blackjack/domain/gameplayer/GamePlayer.java b/src/main/java/blackjack/domain/gameplayer/GamePlayer.java index 22d32e35..b48397a2 100644 --- a/src/main/java/blackjack/domain/gameplayer/GamePlayer.java +++ b/src/main/java/blackjack/domain/gameplayer/GamePlayer.java @@ -1,7 +1,6 @@ package blackjack.domain.gameplayer; import blackjack.domain.card.Card; -import blackjack.domain.card.Cards; import java.util.List; public abstract class GamePlayer { From c1900cec8c4f227adc2ed6a492e142f8f3ce57a8 Mon Sep 17 00:00:00 2001 From: kimsunghyun Date: Thu, 17 Feb 2022 10:05:06 +0900 Subject: [PATCH 109/182] =?UTF-8?q?fix:=20Dealear#playGame()=20=EC=9D=B8?= =?UTF-8?q?=EC=9E=90=EB=A5=BC=20GamePlayers=20=EA=B0=9D=EC=B2=B4=EB=A5=BC?= =?UTF-8?q?=20=EB=B0=9B=EB=8F=84=EB=A1=9D=20=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/blackjack/domain/Dealer.java | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/main/java/blackjack/domain/Dealer.java b/src/main/java/blackjack/domain/Dealer.java index 9ac84e97..45a37d9c 100644 --- a/src/main/java/blackjack/domain/Dealer.java +++ b/src/main/java/blackjack/domain/Dealer.java @@ -24,7 +24,10 @@ public void initializeGame(final GamePlayers gamePlayers) { }); } - public void playGame(final List players, final GamePlayer dealer) { + public void playGame(GamePlayers gamePlayers) { + final List players = gamePlayers.getPlayers(); + final GamePlayer dealer = gamePlayers.getDealer(); + for (final GamePlayer player : players) { playerGameProcess(player); } From 5b875ca913eec0a00d3c484a546039dcf4e2af00 Mon Sep 17 00:00:00 2001 From: kimsunghyun Date: Thu, 17 Feb 2022 10:07:46 +0900 Subject: [PATCH 110/182] =?UTF-8?q?fix:=20=EA=B2=8C=EC=9E=84=ED=94=8C?= =?UTF-8?q?=EB=A0=88=EC=9D=B4=EC=96=B4=EC=99=80=20=EB=94=9C=EB=9F=AC=20?= =?UTF-8?q?=EA=B0=84=20=EB=A9=94=EC=8B=9C=EC=A7=80=EB=A5=BC=20=EA=B5=90?= =?UTF-8?q?=ED=99=98=ED=95=98=EB=8A=94=20=EB=B0=A9=EC=8B=9D=EC=9C=BC?= =?UTF-8?q?=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/controller/GameController.java | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/src/main/java/blackjack/controller/GameController.java b/src/main/java/blackjack/controller/GameController.java index 2db387db..344220f7 100644 --- a/src/main/java/blackjack/controller/GameController.java +++ b/src/main/java/blackjack/controller/GameController.java @@ -12,16 +12,13 @@ public class GameController { public void start() { final CardPack cardPack = new CardPack(); - final Dealer dealer = new Dealer(cardPack); - final GamePlayers gamePlayers = new GamePlayers(InputView.getPlayerName()); dealer.initializeGame(gamePlayers); printInitialStatus(gamePlayers); - dealer.playGame(gamePlayers.getPlayers(), gamePlayers.getDealer()); - + dealer.playGame(gamePlayers); printFinalStatus(gamePlayers); } From bf6984eaa7174789142cefd846dd8ee9f4e06d62 Mon Sep 17 00:00:00 2001 From: kimsunghyun Date: Thu, 17 Feb 2022 10:11:58 +0900 Subject: [PATCH 111/182] =?UTF-8?q?fix:=20CardPack=EC=9D=98=20=EC=9D=B8?= =?UTF-8?q?=EC=8A=A4=ED=84=B4=EC=8A=A4=EB=8A=94=20=EC=A0=95=EC=A0=81?= =?UTF-8?q?=ED=8C=A9=ED=84=B0=EB=A6=AC=EB=A9=94=EC=84=9C=EB=93=9C=EB=A1=9C?= =?UTF-8?q?=20=EC=83=9D=EC=84=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/blackjack/controller/GameController.java | 2 +- src/main/java/blackjack/domain/card/CardPack.java | 14 ++++++++------ 2 files changed, 9 insertions(+), 7 deletions(-) diff --git a/src/main/java/blackjack/controller/GameController.java b/src/main/java/blackjack/controller/GameController.java index 344220f7..9f3c4f69 100644 --- a/src/main/java/blackjack/controller/GameController.java +++ b/src/main/java/blackjack/controller/GameController.java @@ -11,7 +11,7 @@ public class GameController { public void start() { - final CardPack cardPack = new CardPack(); + final CardPack cardPack = CardPack.create(); final Dealer dealer = new Dealer(cardPack); final GamePlayers gamePlayers = new GamePlayers(InputView.getPlayerName()); diff --git a/src/main/java/blackjack/domain/card/CardPack.java b/src/main/java/blackjack/domain/card/CardPack.java index 753e2760..37239779 100644 --- a/src/main/java/blackjack/domain/card/CardPack.java +++ b/src/main/java/blackjack/domain/card/CardPack.java @@ -7,18 +7,20 @@ public class CardPack { - private final List cardPack = new ArrayList<>(); + private final List cardPack; - public CardPack() { - create(); + public CardPack(List cardPack) { + this.cardPack = cardPack; } - public void create() { + public static CardPack create() { + final List cards = new ArrayList<>(); for (final CardSymbol symbol : CardSymbol.values()) { Arrays.stream(CardType.values()) - .forEach(type -> cardPack.add(new Card(symbol, type))); + .forEach(type -> cards.add(new Card(symbol, type))); } - Collections.shuffle(cardPack); + Collections.shuffle(cards); + return new CardPack(new ArrayList<>(cards)); } public List getCardPack() { From a075f482e66a1713d2cb9369f5c8543262b7e000 Mon Sep 17 00:00:00 2001 From: kimsunghyun Date: Thu, 17 Feb 2022 10:50:22 +0900 Subject: [PATCH 112/182] =?UTF-8?q?feat:=20Cards=EC=97=90=EC=84=9C=20?= =?UTF-8?q?=EC=B9=B4=EB=93=9C=EC=9D=98=20=EC=B4=9D=ED=95=A9=20=EC=A0=90?= =?UTF-8?q?=EC=88=98=EB=A5=BC=20=EC=B5=9C=EC=84=A0=EC=9C=BC=EB=A1=9C=20?= =?UTF-8?q?=EA=B3=84=EC=82=B0=ED=95=98=EB=8A=94=20=EB=A1=9C=EC=A7=81=20?= =?UTF-8?q?=EB=B3=80=EA=B2=BD=20=EB=B0=8F=20=EB=A9=94=EC=84=9C=EB=93=9C=20?= =?UTF-8?q?=EB=B6=84=EB=A6=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../blackjack/domain/gameplayer/Cards.java | 60 +++++++------------ 1 file changed, 21 insertions(+), 39 deletions(-) diff --git a/src/main/java/blackjack/domain/gameplayer/Cards.java b/src/main/java/blackjack/domain/gameplayer/Cards.java index 7fea00e1..81f3105b 100644 --- a/src/main/java/blackjack/domain/gameplayer/Cards.java +++ b/src/main/java/blackjack/domain/gameplayer/Cards.java @@ -3,14 +3,12 @@ import blackjack.domain.card.Card; import blackjack.domain.card.CardType; import java.util.ArrayList; -import java.util.Arrays; import java.util.Collections; import java.util.List; public class Cards { - private static final int BLACK_JACK = 21; - private static final int LOSE = 22; + private static final int BLACK_JACK_BOUND = 22; private final List cards; @@ -27,54 +25,38 @@ public List toList() { } public int calculateCards() { - final int aceCount = (int) cards.stream() - .map(Card::getCardType) - .filter(CardType::isAce) - .count(); + final int sum = getSumAllElement(); + final int aceCount = getAceCount(); - if (aceCount == 0) { - return getPointExceptAce(); + if (sum >= BLACK_JACK_BOUND && aceCount > 0) { + return getBestSumWithAce(sum); } - return getBestPointWithAce(aceCount); + return sum; } - private int getPointExceptAce() { - return cards.stream() - .map(Card::getCardType) - .mapToInt(CardType::getPoint) - .sum(); + private int getAceCount() { + return (int) cards.stream() + .filter(card -> card.getCardType().isAce()) + .count(); } - private int getBestPointWithAce(final int aceCount) { - final List sums = new ArrayList<>(); - final int sumNotAce = cards.stream() + private int getSumAllElement() { + return cards.stream() .map(Card::getCardType) - .filter(type -> !type.isAce()) .mapToInt(CardType::getPoint) .sum(); - - for (final int possibleSum : getSumsAce(aceCount)) { - sums.add(sumNotAce + possibleSum); - } - return getMaxPoint(sums); } - private List getSumsAce(final int aceCount) { - int lowerPoint = CardType.ACE.getPoint(); - int higherPoint = CardType.ACE.getLowerAcePoint(); + private int getBestSumWithAce(final int sum) { + final int lowerAcePoint = CardType.ACE.getLowerAcePoint(); + final int higherAcePoint = CardType.ACE.getPoint(); - for (int i = 1; i < aceCount; i++) { - lowerPoint += CardType.ACE.getLowerAcePoint(); - higherPoint += CardType.ACE.getLowerAcePoint(); - } - return new ArrayList<>(Arrays.asList(lowerPoint, higherPoint)); - } + int aceCount = getAceCount(); + int point = sum; - private int getMaxPoint(final List sums) { - return sums.stream() - .filter(sum -> sum <= BLACK_JACK) - .mapToInt(Integer::intValue) - .max() - .orElse(LOSE); + while (aceCount-- > 0 && point >= BLACK_JACK_BOUND) { + point = point - higherAcePoint + lowerAcePoint; + } + return point; } } From 8e11872a6e2772cbdd1fb542c4fc567215037f7c Mon Sep 17 00:00:00 2001 From: kimsunghyun Date: Thu, 17 Feb 2022 11:11:12 +0900 Subject: [PATCH 113/182] =?UTF-8?q?refactor:=20=EB=AF=B8=EC=82=AC=EC=9A=A9?= =?UTF-8?q?=20print=EB=AC=B8=20=EC=A0=9C=EA=B1=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/blackjack/domain/Dealer.java | 1 - 1 file changed, 1 deletion(-) diff --git a/src/main/java/blackjack/domain/Dealer.java b/src/main/java/blackjack/domain/Dealer.java index 45a37d9c..5324aeaf 100644 --- a/src/main/java/blackjack/domain/Dealer.java +++ b/src/main/java/blackjack/domain/Dealer.java @@ -49,7 +49,6 @@ private void dealerGameProcess(final GamePlayer dealer) { while (dealer.isLowerThanBound()) { OutputView.printDealerAcceptCard(); dealer.receiveCard(cardPack.remove()); - System.out.println(dealer.getScore()); } } } From c3d9a00173fca3f1f6ee0b310644c0120381609f Mon Sep 17 00:00:00 2001 From: kimsunghyun Date: Thu, 17 Feb 2022 11:11:40 +0900 Subject: [PATCH 114/182] =?UTF-8?q?refactor:=20Controller=EC=97=90?= =?UTF-8?q?=EC=84=9C=20print=EA=B5=AC=EB=AC=B8=20=EB=A9=94=EC=84=9C?= =?UTF-8?q?=EB=93=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/controller/GameController.java | 11 ++--------- 1 file changed, 2 insertions(+), 9 deletions(-) diff --git a/src/main/java/blackjack/controller/GameController.java b/src/main/java/blackjack/controller/GameController.java index 9f3c4f69..76244e11 100644 --- a/src/main/java/blackjack/controller/GameController.java +++ b/src/main/java/blackjack/controller/GameController.java @@ -3,10 +3,8 @@ import blackjack.domain.card.CardPack; import blackjack.domain.Dealer; import blackjack.domain.gameplayer.GamePlayers; -import blackjack.domain.gameplayer.GamePlayer; import blackjack.view.InputView; import blackjack.view.OutputView; -import java.util.List; public class GameController { @@ -23,13 +21,8 @@ public void start() { } private void printInitialStatus(GamePlayers gamePlayers) { - List players = gamePlayers.getAllPlayers(); - - OutputView.printInitialMessage(players); - - for (GamePlayer player : players) { - OutputView.printCardStatus(player); - } + OutputView.printInitialMessage(gamePlayers); + OutputView.printCardAllStatus(gamePlayers); } private void printFinalStatus(GamePlayers gamePlayers) { From 48e99494a449c93c8ad3a741d36de202fad85511 Mon Sep 17 00:00:00 2001 From: kimsunghyun Date: Thu, 17 Feb 2022 11:12:22 +0900 Subject: [PATCH 115/182] =?UTF-8?q?feat:=20OutputView=EC=97=90=EC=84=9C=20?= =?UTF-8?q?=EA=B3=B5=ED=86=B5=EC=BD=94=EB=93=9C=20=EB=A9=94=EC=84=9C?= =?UTF-8?q?=EB=93=9C=20=EB=B6=84=EB=A6=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 및 요구사항대로 뷰를 출력하기 위한 리팩터링 --- src/main/java/blackjack/view/OutputView.java | 19 ++++++++++++++++--- 1 file changed, 16 insertions(+), 3 deletions(-) diff --git a/src/main/java/blackjack/view/OutputView.java b/src/main/java/blackjack/view/OutputView.java index 73e32500..3bf600d4 100644 --- a/src/main/java/blackjack/view/OutputView.java +++ b/src/main/java/blackjack/view/OutputView.java @@ -7,19 +7,30 @@ public class OutputView { + private static final String ENTER = "\n"; private static final String GAME_INITIAL_MANAGER = "%s에게 2장의 카드를 나누었습니다."; private static final String COMMA = ", "; private static final String CARDS_LOG = "%s: %s"; - private static final String DEALER_RECEIVE_ONE_CARD_MESSAGE = "딜러는 한장의 카드를 더 받았습니다."; + private static final String DEALER_RECEIVE_ONE_CARD_MESSAGE = "딜러는 16이하라 한장의 카드를 더 받았습니다."; private static final String RESULT_CARDS_LOG = "%s카드: %s - 결과: %d"; private static final String RESULT_GAME_LOG = "%s: %s"; - public static void printInitialMessage(List players) { + public static void printInitialMessage(GamePlayers gamePlayers) { + List players = gamePlayers.getAllPlayers(); + String playerNames = players.stream() .map(GamePlayer::getName) .collect(Collectors.joining(COMMA)); - System.out.println(String.format(GAME_INITIAL_MANAGER, playerNames)); + System.out.println(ENTER + String.format(GAME_INITIAL_MANAGER, playerNames)); + } + + public static void printCardAllStatus(GamePlayers gamePlayers) { + List players = gamePlayers.getAllPlayers(); + + players.stream() + .forEach(player -> System.out.println(String.format(CARDS_LOG, player.getName(), getPlayerCardStatus(player)))); + System.out.println(); } public static void printCardStatus(GamePlayer player) { @@ -31,11 +42,13 @@ public static void printDealerAcceptCard() { } public static void printCardResult(GamePlayers gamePlayers) { + System.out.println(); List players = gamePlayers.getAllPlayers(); for (GamePlayer player : players) { System.out.println(String.format(RESULT_CARDS_LOG, player.getName(), getPlayerCardStatus(player), player.getScore())); } + System.out.println(); } private static String getPlayerCardStatus(GamePlayer gamePlayer) { From f34a1c0dad834b7a1c36bd1fef93b71bedea8796 Mon Sep 17 00:00:00 2001 From: kimsunghyun Date: Thu, 17 Feb 2022 11:19:33 +0900 Subject: [PATCH 116/182] =?UTF-8?q?feat:=20OutputView=EC=97=90=EC=84=9C=20?= =?UTF-8?q?=EC=B5=9C=EC=A2=85=20=EC=8A=B9=ED=8C=A8=20=ED=97=A4=EB=8D=94=20?= =?UTF-8?q?=EB=AC=B8=EA=B5=AC=20=EC=B6=9C=EB=A0=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/OutputView.java | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/main/java/blackjack/view/OutputView.java b/src/main/java/blackjack/view/OutputView.java index 3bf600d4..dc2f12cd 100644 --- a/src/main/java/blackjack/view/OutputView.java +++ b/src/main/java/blackjack/view/OutputView.java @@ -13,6 +13,7 @@ public class OutputView { private static final String CARDS_LOG = "%s: %s"; private static final String DEALER_RECEIVE_ONE_CARD_MESSAGE = "딜러는 16이하라 한장의 카드를 더 받았습니다."; private static final String RESULT_CARDS_LOG = "%s카드: %s - 결과: %d"; + private static final String RESULT_HEADER_LOG = "## 최종 승패"; private static final String RESULT_GAME_LOG = "%s: %s"; public static void printInitialMessage(GamePlayers gamePlayers) { @@ -58,6 +59,7 @@ private static String getPlayerCardStatus(GamePlayer gamePlayer) { } public static void printGameResult(GamePlayers gamePlayers) { + System.out.println(RESULT_HEADER_LOG); List players = gamePlayers.getAllPlayers(); for (GamePlayer player : players) { System.out.println(String.format(RESULT_GAME_LOG, player.getName(), player.getGameResult(players))); From 9f3dfde4272320f64f8e9d457a72e6693c156602 Mon Sep 17 00:00:00 2001 From: kimsunghyun Date: Thu, 17 Feb 2022 11:37:23 +0900 Subject: [PATCH 117/182] =?UTF-8?q?feat:=20String=20name=EC=9D=98=20?= =?UTF-8?q?=EC=9B=90=EC=8B=9C=EA=B0=92=EC=9D=84=20=ED=8F=AC=EC=9E=A5?= =?UTF-8?q?=ED=95=98=EB=8A=94=20=ED=81=B4=EB=9E=98=EC=8A=A4=20=EA=B5=AC?= =?UTF-8?q?=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../blackjack/domain/gameplayer/Name.java | 23 +++++++++++++++++++ 1 file changed, 23 insertions(+) create mode 100644 src/main/java/blackjack/domain/gameplayer/Name.java diff --git a/src/main/java/blackjack/domain/gameplayer/Name.java b/src/main/java/blackjack/domain/gameplayer/Name.java new file mode 100644 index 00000000..f982ade5 --- /dev/null +++ b/src/main/java/blackjack/domain/gameplayer/Name.java @@ -0,0 +1,23 @@ +package blackjack.domain.gameplayer; + +public class Name { + + private static final String PLAYER_NAME_ERROR_MESSAGE = "이름은 공백이 들어올 수 없습니다."; + + private final String name; + + public Name(final String name) { + validateName(name); + this.name = name; + } + + private void validateName(final String name) { + if (name.trim().isEmpty()) { + throw new IllegalArgumentException(PLAYER_NAME_ERROR_MESSAGE); + } + } + + public String getName() { + return this.name; + } +} From 7ec5ea4c74629a101e54ff20d21cfdeb3104397c Mon Sep 17 00:00:00 2001 From: kimsunghyun Date: Thu, 17 Feb 2022 11:37:54 +0900 Subject: [PATCH 118/182] =?UTF-8?q?feat:=20List=EC=9D=84=20=ED=8F=AC?= =?UTF-8?q?=EC=9E=A5=ED=95=98=EB=8A=94=20=EC=9D=BC=EA=B8=89=EC=BB=AC?= =?UTF-8?q?=EB=A0=89=EC=85=98=20=ED=81=B4=EB=9E=98=EC=8A=A4=20=EA=B5=AC?= =?UTF-8?q?=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Names Class --- .../java/blackjack/domain/gameplayer/Names.java | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) create mode 100644 src/main/java/blackjack/domain/gameplayer/Names.java diff --git a/src/main/java/blackjack/domain/gameplayer/Names.java b/src/main/java/blackjack/domain/gameplayer/Names.java new file mode 100644 index 00000000..c6500077 --- /dev/null +++ b/src/main/java/blackjack/domain/gameplayer/Names.java @@ -0,0 +1,17 @@ +package blackjack.domain.gameplayer; + +import java.util.Collections; +import java.util.List; + +public class Names { + + private final List names; + + public Names(final List names) { + this.names = names; + } + + public List getNames() { + return Collections.unmodifiableList(names); + } +} From 7aba82d107b12c374c4700a4636ffbdb9b532128 Mon Sep 17 00:00:00 2001 From: kimsunghyun Date: Thu, 17 Feb 2022 11:38:34 +0900 Subject: [PATCH 119/182] =?UTF-8?q?fix:=20=EA=B2=8C=EC=9E=84=ED=94=8C?= =?UTF-8?q?=EB=A0=88=EC=9D=B4=EC=96=B4=EC=9D=98=20=EC=9D=B4=EB=A6=84=20?= =?UTF-8?q?=EC=83=81=ED=83=9C=EB=A5=BC=20=EC=9B=90=EC=8B=9C=EA=B0=92?= =?UTF-8?q?=EC=9D=B4=20=EC=95=84=EB=8B=8C=20Name=20=ED=81=B4=EB=9E=98?= =?UTF-8?q?=EC=8A=A4=EB=A1=9C=20=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/blackjack/domain/gameplayer/DealerPlayer.java | 2 +- src/main/java/blackjack/domain/gameplayer/GamePlayer.java | 6 +++--- src/main/java/blackjack/domain/gameplayer/Player.java | 2 +- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/src/main/java/blackjack/domain/gameplayer/DealerPlayer.java b/src/main/java/blackjack/domain/gameplayer/DealerPlayer.java index 66fbe0ba..2262cff4 100644 --- a/src/main/java/blackjack/domain/gameplayer/DealerPlayer.java +++ b/src/main/java/blackjack/domain/gameplayer/DealerPlayer.java @@ -8,7 +8,7 @@ public class DealerPlayer extends GamePlayer { private static final String WIN = "승"; private static final String LOSE = "패"; - public DealerPlayer(final String name) { + public DealerPlayer(final Name name) { super(name); } diff --git a/src/main/java/blackjack/domain/gameplayer/GamePlayer.java b/src/main/java/blackjack/domain/gameplayer/GamePlayer.java index b48397a2..7b6cc222 100644 --- a/src/main/java/blackjack/domain/gameplayer/GamePlayer.java +++ b/src/main/java/blackjack/domain/gameplayer/GamePlayer.java @@ -7,10 +7,10 @@ public abstract class GamePlayer { private static final int BLACK_JACK = 21; - private final String name; + private final Name name; private final Cards cards; - public GamePlayer(final String name) { + public GamePlayer(final Name name) { this.name = name; this.cards = new Cards(); } @@ -20,7 +20,7 @@ public void receiveCard(final Card card) { } public String getName() { - return this.name; + return name.getName(); } public int getScore() { diff --git a/src/main/java/blackjack/domain/gameplayer/Player.java b/src/main/java/blackjack/domain/gameplayer/Player.java index e5b70a03..b2592008 100644 --- a/src/main/java/blackjack/domain/gameplayer/Player.java +++ b/src/main/java/blackjack/domain/gameplayer/Player.java @@ -9,7 +9,7 @@ public class Player extends GamePlayer { private static final String WIN = "승"; private static final String LOSE = "패"; - public Player(String name) { + public Player(Name name) { super(name); } From 0816dbb1f680d314a79c85dbcbf01fb14d1fffb5 Mon Sep 17 00:00:00 2001 From: kimsunghyun Date: Thu, 17 Feb 2022 11:39:23 +0900 Subject: [PATCH 120/182] =?UTF-8?q?feat:=20=EC=9D=B4=EB=A6=84=EC=9D=84=20?= =?UTF-8?q?=EC=82=AC=EC=9A=A9=ED=95=98=EB=8A=94=20=EC=9D=B4=EC=99=B8=20?= =?UTF-8?q?=EB=A1=9C=EC=A7=81=EC=97=90=EC=84=9C=EB=8F=84=20=ED=8F=AC?= =?UTF-8?q?=EC=9E=A5=EB=90=9C=20=EC=9D=B4=EB=A6=84=20=EA=B0=9D=EC=B2=B4?= =?UTF-8?q?=EB=A5=BC=20=ED=99=9C=EC=9A=A9=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 --- .../blackjack/controller/GameController.java | 16 +++++++++++++++- .../blackjack/domain/gameplayer/GamePlayers.java | 8 ++++---- 2 files changed, 19 insertions(+), 5 deletions(-) diff --git a/src/main/java/blackjack/controller/GameController.java b/src/main/java/blackjack/controller/GameController.java index 76244e11..ad44957b 100644 --- a/src/main/java/blackjack/controller/GameController.java +++ b/src/main/java/blackjack/controller/GameController.java @@ -3,15 +3,19 @@ import blackjack.domain.card.CardPack; import blackjack.domain.Dealer; import blackjack.domain.gameplayer.GamePlayers; +import blackjack.domain.gameplayer.Name; +import blackjack.domain.gameplayer.Names; import blackjack.view.InputView; import blackjack.view.OutputView; +import java.util.List; +import java.util.stream.Collectors; public class GameController { public void start() { final CardPack cardPack = CardPack.create(); final Dealer dealer = new Dealer(cardPack); - final GamePlayers gamePlayers = new GamePlayers(InputView.getPlayerName()); + final GamePlayers gamePlayers = new GamePlayers(getConsoleNames()); dealer.initializeGame(gamePlayers); printInitialStatus(gamePlayers); @@ -20,6 +24,16 @@ public void start() { printFinalStatus(gamePlayers); } + private Names getConsoleNames() { + return convertStringsToNames(InputView.getPlayerName()); + } + + private Names convertStringsToNames(List originNames) { + return new Names(originNames.stream() + .map(Name::new) + .collect(Collectors.toList())); + } + private void printInitialStatus(GamePlayers gamePlayers) { OutputView.printInitialMessage(gamePlayers); OutputView.printCardAllStatus(gamePlayers); diff --git a/src/main/java/blackjack/domain/gameplayer/GamePlayers.java b/src/main/java/blackjack/domain/gameplayer/GamePlayers.java index 3fc0cf2e..990912c4 100644 --- a/src/main/java/blackjack/domain/gameplayer/GamePlayers.java +++ b/src/main/java/blackjack/domain/gameplayer/GamePlayers.java @@ -9,16 +9,16 @@ public class GamePlayers { private final List players; - public GamePlayers(final List players) { + public GamePlayers(final Names players) { this.players = makePlayers(players); } - public List makePlayers(final List playerNames) { - final List players = playerNames.stream() + public List makePlayers(final Names names) { + final List players = names.getNames().stream() .map(Player::new) .collect(Collectors.toList()); - players.add(0, new DealerPlayer("딜러")); + players.add(0, new DealerPlayer(new Name("딜러"))); return new ArrayList<>(players); } From 66144aa1945ff2c67363702cf07fd7cfb0a3620d Mon Sep 17 00:00:00 2001 From: kimsunghyun Date: Thu, 17 Feb 2022 12:11:05 +0900 Subject: [PATCH 121/182] =?UTF-8?q?fix:=20GamePlayers=EC=9D=98=20=EC=83=9D?= =?UTF-8?q?=EC=84=B1=EB=B0=A9=EB=B2=95=EC=9D=84=20=EC=A0=95=EC=A0=81?= =?UTF-8?q?=ED=8C=A9=ED=86=A0=EB=A6=AC=EB=A9=94=EC=84=9C=EB=93=9C=EB=A1=9C?= =?UTF-8?q?=20=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/blackjack/controller/GameController.java | 2 +- .../java/blackjack/domain/gameplayer/GamePlayers.java | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/src/main/java/blackjack/controller/GameController.java b/src/main/java/blackjack/controller/GameController.java index ad44957b..6bcbae8a 100644 --- a/src/main/java/blackjack/controller/GameController.java +++ b/src/main/java/blackjack/controller/GameController.java @@ -15,7 +15,7 @@ public class GameController { public void start() { final CardPack cardPack = CardPack.create(); final Dealer dealer = new Dealer(cardPack); - final GamePlayers gamePlayers = new GamePlayers(getConsoleNames()); + final GamePlayers gamePlayers = GamePlayers.makePlayers(getConsoleNames()); dealer.initializeGame(gamePlayers); printInitialStatus(gamePlayers); diff --git a/src/main/java/blackjack/domain/gameplayer/GamePlayers.java b/src/main/java/blackjack/domain/gameplayer/GamePlayers.java index 990912c4..83d007f1 100644 --- a/src/main/java/blackjack/domain/gameplayer/GamePlayers.java +++ b/src/main/java/blackjack/domain/gameplayer/GamePlayers.java @@ -9,18 +9,18 @@ public class GamePlayers { private final List players; - public GamePlayers(final Names players) { - this.players = makePlayers(players); + public GamePlayers(final List players) { + this.players = players; } - public List makePlayers(final Names names) { + public static GamePlayers makePlayers(final Names names) { final List players = names.getNames().stream() .map(Player::new) .collect(Collectors.toList()); players.add(0, new DealerPlayer(new Name("딜러"))); - return new ArrayList<>(players); + return new GamePlayers(new ArrayList<>(players)); } public GamePlayer getDealer() { From 19cb561d34ca0170253eb67be4c7a5aedbb125d4 Mon Sep 17 00:00:00 2001 From: kimsunghyun Date: Thu, 17 Feb 2022 12:11:57 +0900 Subject: [PATCH 122/182] =?UTF-8?q?feat:=20CardPackTest=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 - 초기 카드팩은 52장의 카드가 생성된다 --- .../java/blackjack/domain/CardPackTest.java | 88 +++++++++---------- 1 file changed, 40 insertions(+), 48 deletions(-) diff --git a/src/test/java/blackjack/domain/CardPackTest.java b/src/test/java/blackjack/domain/CardPackTest.java index da62514e..34fd5cd9 100644 --- a/src/test/java/blackjack/domain/CardPackTest.java +++ b/src/test/java/blackjack/domain/CardPackTest.java @@ -1,66 +1,58 @@ package blackjack.domain; -import static org.assertj.core.api.Assertions.*; +import static org.assertj.core.api.Assertions.assertThat; import blackjack.domain.card.Card; import blackjack.domain.card.CardPack; -import blackjack.domain.card.CardType; -import java.util.ArrayList; -import java.util.Arrays; import java.util.List; -import java.util.Map; -import java.util.stream.Collectors; import org.junit.jupiter.api.Test; class CardPackTest { - private static final List symbols = Arrays.asList("스페이드", "다이아몬드", "클로버", "하트"); - CardPack cardPack = CardPack.create(); - Map> cardMap = cardPack.getMap(); - @Test - public void 카드팩에는_모든_심볼의_카드_타입이_있어야_한다() { + public void 초기_카드팩은_52장의_카드가_생성된다() { //given + CardPack cardPack = CardPack.create(); //when - List cardMapKeys = new ArrayList<>(cardMap.keySet()); + List cards = cardPack.getCardPack(); //then - assertThat(cardMapKeys).contains(symbols.toArray(new String[0])); + assertThat(cards.size()).isEqualTo(52); } - @Test - public void 각_심볼별_카드에는_12개의_카드가_존재한다() { - //given - List cardMapKeys = new ArrayList<>(cardMap.keySet()); - - //when - //then - for (String symbol : cardMapKeys) { - final int cardQuantity = cardMap.get(symbol).size(); - assertThat(cardQuantity).isEqualTo(12); - } - } - - @Test - public void 각_심볼별_카드의_종류는_Enum_CardType을_모두_포함한다() { - //given - List cardMapKeys = new ArrayList<>(cardMap.keySet()); - - //when - //then - for (String symbol : cardMapKeys) { - final List cards = cardMap.get(symbol); - - List cardNames = cards.stream() - .map(Card::getName) - .collect(Collectors.toList()); - - List expectedCards = Arrays.stream(CardType.values()) - .map(x -> new Card(symbol, x.getName(), x.getPoint())) - .map(Card::getName) - .collect(Collectors.toList()); - - assertThat(cardNames).contains(expectedCards.toArray(new String[0])); - } - } +// @Test +// public void 각_심볼별_카드에는_12개의_카드가_존재한다() { +// //given +// List cardMapKeys = new ArrayList<>(cardMap.keySet()); +// +// //when +// //then +// for (String symbol : cardMapKeys) { +// final int cardQuantity = cardMap.get(symbol).size(); +// assertThat(cardQuantity).isEqualTo(12); +// } +// } +// +// @Test +// public void 각_심볼별_카드의_종류는_Enum_CardType을_모두_포함한다() { +// //given +// List cardMapKeys = new ArrayList<>(cardMap.keySet()); +// +// //when +// //then +// for (String symbol : cardMapKeys) { +// final List cards = cardMap.get(symbol); +// +// List cardNames = cards.stream() +// .map(Card::getName) +// .collect(Collectors.toList()); +// +// List expectedCards = Arrays.stream(CardType.values()) +// .map(x -> new Card(symbol, x.getName(), x.getPoint())) +// .map(Card::getName) +// .collect(Collectors.toList()); +// +// assertThat(cardNames).contains(expectedCards.toArray(new String[0])); +// } +// } } \ No newline at end of file From c1f0bfdb0370dc132c509e8025822c8413a9f05a Mon Sep 17 00:00:00 2001 From: kimsunghyun Date: Thu, 17 Feb 2022 12:12:19 +0900 Subject: [PATCH 123/182] =?UTF-8?q?feat:=20DealerTest=20=EB=82=B4=EB=B6=80?= =?UTF-8?q?=20=EA=B5=AC=ED=98=84=20=EB=A1=9C=EC=A7=81=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/test/java/blackjack/domain/DealerTest.java | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/test/java/blackjack/domain/DealerTest.java b/src/test/java/blackjack/domain/DealerTest.java index d513212d..6129f290 100644 --- a/src/test/java/blackjack/domain/DealerTest.java +++ b/src/test/java/blackjack/domain/DealerTest.java @@ -6,6 +6,8 @@ import blackjack.domain.card.CardPack; import blackjack.domain.gameplayer.GamePlayer; import blackjack.domain.gameplayer.GamePlayers; +import blackjack.domain.gameplayer.Name; +import blackjack.domain.gameplayer.Names; import java.util.Arrays; import java.util.List; import org.junit.jupiter.api.Test; @@ -13,12 +15,11 @@ class DealerTest { CardPack cardPack = CardPack.create(); - List playerNames = Arrays.asList("pobi", "jason"); @Test public void 게임초기_딜러는_플레이어들에게_카드를_2장씩_배분한다() { //given - GamePlayers gamePlayers = GamePlayers.makePlayers(playerNames); + GamePlayers gamePlayers = GamePlayers.makePlayers(new Names(Arrays.asList(new Name("pobi"), new Name("jason")))); Dealer dealer = new Dealer(cardPack); //when From 24226e44a73940eb88f30dd68414dab6a68191a4 Mon Sep 17 00:00:00 2001 From: kimsunghyun Date: Thu, 17 Feb 2022 12:13:28 +0900 Subject: [PATCH 124/182] =?UTF-8?q?feat:=20PlayerTest=20=EB=82=B4=EB=B6=80?= =?UTF-8?q?=20=EA=B5=AC=ED=98=84=20=EB=A1=9C=EC=A7=81=20=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 특정 카드를 받았을 때 그 카드의 점수만큼 정확하게 계산한다. - 플레이어가 Ace카드를 포함하고 있을 때 최선의 방법으로 결과값을 반환하는지 검증한다. --- .../java/blackjack/domain/PlayerTest.java | 32 +++++++++++++++---- 1 file changed, 26 insertions(+), 6 deletions(-) diff --git a/src/test/java/blackjack/domain/PlayerTest.java b/src/test/java/blackjack/domain/PlayerTest.java index 8098a924..75a34c5d 100644 --- a/src/test/java/blackjack/domain/PlayerTest.java +++ b/src/test/java/blackjack/domain/PlayerTest.java @@ -3,19 +3,37 @@ import static org.assertj.core.api.Assertions.assertThat; import blackjack.domain.card.Card; +import blackjack.domain.card.CardSymbol; +import blackjack.domain.card.CardType; import blackjack.domain.gameplayer.GamePlayer; +import blackjack.domain.gameplayer.Name; +import blackjack.domain.gameplayer.Player; import org.junit.jupiter.api.Test; class PlayerTest { @Test - public void Ace를_받았을때_합이_21을_넘을경우_1을_더해준다() { + public void 특정카드를_받았을때_그만큼의_점수를_더해준다() { //given - GamePlayer player = new GamePlayer("pobi", 15, false); + GamePlayer player = new Player(new Name("pobi")); //when - player.receiveCard(new Card("스페이드", "A", 11, 1)); + player.receiveCard(new Card(CardSymbol.CLOVER, CardType.FIVE)); + //then + assertThat(player.getScore()).isEqualTo(5); + } + + @Test + public void Ace를_받았을때_합이_21을_넘을경우_1을_더해준다() { + //given + GamePlayer player = new Player(new Name("pobi")); + + //when + player.receiveCard(new Card(CardSymbol.CLOVER, CardType.FIVE)); + player.receiveCard(new Card(CardSymbol.CLOVER, CardType.FIVE)); + player.receiveCard(new Card(CardSymbol.CLOVER, CardType.FIVE)); + player.receiveCard(new Card(CardSymbol.CLOVER, CardType.ACE)); //then assertThat(player.getScore()).isEqualTo(16); } @@ -23,12 +41,14 @@ class PlayerTest { @Test public void Ace를_받았을때_합이_21을_넘지않을경우_11을_더해준다() { //given - GamePlayer player = new GamePlayer("pobi", 8, false); + GamePlayer player = new Player(new Name("pobi")); //when - player.receiveCard(new Card("스페이드", "A", 11, 1)); + player.receiveCard(new Card(CardSymbol.CLOVER, CardType.FIVE)); + player.receiveCard(new Card(CardSymbol.CLOVER, CardType.FIVE)); + player.receiveCard(new Card(CardSymbol.CLOVER, CardType.ACE)); //then - assertThat(player.getScore()).isEqualTo(19); + assertThat(player.getScore()).isEqualTo(21); } } \ No newline at end of file From 9caa918d4db2df37afccb6247467f4c3540628be Mon Sep 17 00:00:00 2001 From: kimsunghyun Date: Thu, 17 Feb 2022 12:13:50 +0900 Subject: [PATCH 125/182] =?UTF-8?q?refactor:=20GamePlayersTest=20=EB=82=B4?= =?UTF-8?q?=EB=B6=80=20=EA=B5=AC=ED=98=84=20=EB=A1=9C=EC=A7=81=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/test/java/blackjack/domain/GamePlayersTest.java | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/test/java/blackjack/domain/GamePlayersTest.java b/src/test/java/blackjack/domain/GamePlayersTest.java index 19bc4cae..df89ddf8 100644 --- a/src/test/java/blackjack/domain/GamePlayersTest.java +++ b/src/test/java/blackjack/domain/GamePlayersTest.java @@ -4,6 +4,8 @@ import blackjack.domain.gameplayer.GamePlayer; import blackjack.domain.gameplayer.GamePlayers; +import blackjack.domain.gameplayer.Name; +import blackjack.domain.gameplayer.Names; import java.util.Arrays; import java.util.List; import java.util.stream.Collectors; @@ -17,7 +19,7 @@ class GamePlayersTest { List names = Arrays.asList("pobi", "jason"); //when - GamePlayers gamePlayers = GamePlayers.makePlayers(Arrays.asList("pobi", "jason")); + GamePlayers gamePlayers = GamePlayers.makePlayers(new Names(Arrays.asList(new Name("pobi"), new Name("jason")))); List players = gamePlayers.getPlayers().stream() .map(GamePlayer::getName) .collect(Collectors.toList()); From d37b745ce08e3ef57d3ed6144e9664445db0e618 Mon Sep 17 00:00:00 2001 From: kimsunghyun Date: Thu, 17 Feb 2022 13:32:54 +0900 Subject: [PATCH 126/182] =?UTF-8?q?refactor:=20GamePlayer#getGameResult?= =?UTF-8?q?=EC=9D=98=20=EC=9D=B8=EC=9E=90=EB=A1=9C=20=EA=B2=8C=EC=9E=84?= =?UTF-8?q?=ED=94=8C=EB=A0=88=EC=9D=B4=EC=96=B4=20=EA=B0=9D=EC=B2=B4?= =?UTF-8?q?=EB=A5=BC=20=EB=B0=9B=EB=8F=84=EB=A1=9D=20=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 및 딜러플레이어가 승자일 경우 패배 카운트가 증가하는 버그 수정 --- .../java/blackjack/domain/gameplayer/DealerPlayer.java | 7 +++++-- src/main/java/blackjack/domain/gameplayer/GamePlayer.java | 2 +- src/main/java/blackjack/domain/gameplayer/Player.java | 4 +++- src/main/java/blackjack/view/OutputView.java | 2 +- 4 files changed, 10 insertions(+), 5 deletions(-) diff --git a/src/main/java/blackjack/domain/gameplayer/DealerPlayer.java b/src/main/java/blackjack/domain/gameplayer/DealerPlayer.java index 2262cff4..7d9cc48d 100644 --- a/src/main/java/blackjack/domain/gameplayer/DealerPlayer.java +++ b/src/main/java/blackjack/domain/gameplayer/DealerPlayer.java @@ -18,13 +18,16 @@ public boolean isLowerThanBound() { } @Override - public String getGameResult(List allPlayers) { + public String getGameResult(GamePlayers gamePlayers) { + List players = gamePlayers.getPlayers(); + int winCount = 0; int loseCount = 0; - for (GamePlayer gamePlayer : allPlayers) { + for (GamePlayer gamePlayer : players) { if (this.getScore() > gamePlayer.getScore()) { winCount++; + continue; } loseCount++; } diff --git a/src/main/java/blackjack/domain/gameplayer/GamePlayer.java b/src/main/java/blackjack/domain/gameplayer/GamePlayer.java index 7b6cc222..749a9fd0 100644 --- a/src/main/java/blackjack/domain/gameplayer/GamePlayer.java +++ b/src/main/java/blackjack/domain/gameplayer/GamePlayer.java @@ -37,5 +37,5 @@ public boolean isContinue() { public abstract boolean isLowerThanBound(); - public abstract String getGameResult(final List gamePlayers); + public abstract String getGameResult(final GamePlayers gamePlayers); } diff --git a/src/main/java/blackjack/domain/gameplayer/Player.java b/src/main/java/blackjack/domain/gameplayer/Player.java index b2592008..f437751c 100644 --- a/src/main/java/blackjack/domain/gameplayer/Player.java +++ b/src/main/java/blackjack/domain/gameplayer/Player.java @@ -19,7 +19,9 @@ public boolean isLowerThanBound() { } @Override - public String getGameResult(List allPlayers) { + public String getGameResult(GamePlayers gamePlayers) { + + List allPlayers = gamePlayers.getAllPlayers(); int winnerScore = allPlayers.stream() .map(GamePlayer::getScore) .max(Integer::compareTo) diff --git a/src/main/java/blackjack/view/OutputView.java b/src/main/java/blackjack/view/OutputView.java index dc2f12cd..a5fb0f8c 100644 --- a/src/main/java/blackjack/view/OutputView.java +++ b/src/main/java/blackjack/view/OutputView.java @@ -62,7 +62,7 @@ public static void printGameResult(GamePlayers gamePlayers) { System.out.println(RESULT_HEADER_LOG); List players = gamePlayers.getAllPlayers(); for (GamePlayer player : players) { - System.out.println(String.format(RESULT_GAME_LOG, player.getName(), player.getGameResult(players))); + System.out.println(String.format(RESULT_GAME_LOG, player.getName(), player.getGameResult(gamePlayers))); } } } From 98a8e0226653bbe71c095459c33218915a366c1b Mon Sep 17 00:00:00 2001 From: kimsunghyun Date: Thu, 17 Feb 2022 13:47:47 +0900 Subject: [PATCH 127/182] =?UTF-8?q?feat:=20=EC=8A=B9=ED=8C=A8=EB=A5=BC=20?= =?UTF-8?q?=EA=B2=B0=EC=A0=95=ED=95=A0=20=EB=95=8C=20=EC=A0=90=EC=88=98?= =?UTF-8?q?=EA=B0=80=2021=EC=9D=84=20=EC=B4=88=EA=B3=BC=ED=95=9C=EB=8B=A4?= =?UTF-8?q?=EB=A9=B4=20=ED=8C=A8=EB=B0=B0=20=EC=B2=98=EB=A6=AC=20=EB=A1=9C?= =?UTF-8?q?=EC=A7=81=20=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/blackjack/domain/gameplayer/DealerPlayer.java | 3 +-- src/main/java/blackjack/domain/gameplayer/Player.java | 5 ++--- 2 files changed, 3 insertions(+), 5 deletions(-) diff --git a/src/main/java/blackjack/domain/gameplayer/DealerPlayer.java b/src/main/java/blackjack/domain/gameplayer/DealerPlayer.java index 7d9cc48d..181b8152 100644 --- a/src/main/java/blackjack/domain/gameplayer/DealerPlayer.java +++ b/src/main/java/blackjack/domain/gameplayer/DealerPlayer.java @@ -20,12 +20,11 @@ public boolean isLowerThanBound() { @Override public String getGameResult(GamePlayers gamePlayers) { List players = gamePlayers.getPlayers(); - int winCount = 0; int loseCount = 0; for (GamePlayer gamePlayer : players) { - if (this.getScore() > gamePlayer.getScore()) { + if (isContinue() && this.getScore() > gamePlayer.getScore()) { winCount++; continue; } diff --git a/src/main/java/blackjack/domain/gameplayer/Player.java b/src/main/java/blackjack/domain/gameplayer/Player.java index f437751c..1e6b5fd2 100644 --- a/src/main/java/blackjack/domain/gameplayer/Player.java +++ b/src/main/java/blackjack/domain/gameplayer/Player.java @@ -5,7 +5,6 @@ public class Player extends GamePlayer { - private static final int BLACKJACK = 21; private static final String WIN = "승"; private static final String LOSE = "패"; @@ -20,14 +19,14 @@ public boolean isLowerThanBound() { @Override public String getGameResult(GamePlayers gamePlayers) { - List allPlayers = gamePlayers.getAllPlayers(); int winnerScore = allPlayers.stream() + .filter(GamePlayer::isContinue) .map(GamePlayer::getScore) .max(Integer::compareTo) .orElseThrow(NoSuchElementException::new); - if (this.getScore() == winnerScore){ + if (this.getScore() == winnerScore && isContinue()){ return WIN; } return LOSE; From f62c76014d9a863b2a10e5dd7e37d8a9ab3f47dc Mon Sep 17 00:00:00 2001 From: kimsunghyun Date: Thu, 17 Feb 2022 14:07:21 +0900 Subject: [PATCH 128/182] =?UTF-8?q?feat:=20Names=EC=97=90=EC=84=9C=20?= =?UTF-8?q?=EC=A4=91=EB=B3=B5=EB=90=9C=20=EC=9D=B4=EB=A6=84=EC=9D=84=20?= =?UTF-8?q?=EA=B2=80=EC=82=AC=ED=95=98=EB=8A=94=20=EB=A1=9C=EC=A7=81=20?= =?UTF-8?q?=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/blackjack/domain/gameplayer/Names.java | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/src/main/java/blackjack/domain/gameplayer/Names.java b/src/main/java/blackjack/domain/gameplayer/Names.java index c6500077..395eb8c7 100644 --- a/src/main/java/blackjack/domain/gameplayer/Names.java +++ b/src/main/java/blackjack/domain/gameplayer/Names.java @@ -1,16 +1,28 @@ package blackjack.domain.gameplayer; import java.util.Collections; +import java.util.HashSet; import java.util.List; +import java.util.Set; public class Names { + private static final String DUPLICATE_NAMES = "중복된 이름은 들어올 수 없습니다."; + private final List names; public Names(final List names) { + validateDuplicateNames(names); this.names = names; } + private void validateDuplicateNames(List names) { + final Set set = new HashSet<>(names); + if (set.size() != names.size()) { + throw new IllegalArgumentException(DUPLICATE_NAMES); + } + } + public List getNames() { return Collections.unmodifiableList(names); } From dc27fa9cb2830a34117242cb24a1c0b487a46056 Mon Sep 17 00:00:00 2001 From: kimsunghyun Date: Thu, 17 Feb 2022 14:19:18 +0900 Subject: [PATCH 129/182] =?UTF-8?q?feat:=20=EC=9D=B4=EB=A6=84=EC=9D=98=20?= =?UTF-8?q?=EC=A4=91=EB=B3=B5=20=EA=B2=80=EC=82=AC=EB=A5=BC=20=EC=9C=84?= =?UTF-8?q?=ED=95=9C=20equals()=20and=20hashcode()=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../blackjack/domain/gameplayer/Name.java | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/src/main/java/blackjack/domain/gameplayer/Name.java b/src/main/java/blackjack/domain/gameplayer/Name.java index f982ade5..eb8ac62d 100644 --- a/src/main/java/blackjack/domain/gameplayer/Name.java +++ b/src/main/java/blackjack/domain/gameplayer/Name.java @@ -1,5 +1,7 @@ package blackjack.domain.gameplayer; +import java.util.Objects; + public class Name { private static final String PLAYER_NAME_ERROR_MESSAGE = "이름은 공백이 들어올 수 없습니다."; @@ -20,4 +22,21 @@ private void validateName(final String name) { public String getName() { return this.name; } + + @Override + public boolean equals(Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + Name name1 = (Name) o; + return Objects.equals(name, name1.name); + } + + @Override + public int hashCode() { + return Objects.hash(name); + } } From e2e3b6dfe7f346601224e6e4971b462d56c5daff Mon Sep 17 00:00:00 2001 From: kimsunghyun Date: Thu, 17 Feb 2022 14:19:52 +0900 Subject: [PATCH 130/182] =?UTF-8?q?feat:=20Controller=EC=97=90=EC=84=9C=20?= =?UTF-8?q?=EC=9D=B4=EB=A6=84=20=EC=9E=85=EB=A0=A5=EC=8B=9C=20=EC=A4=91?= =?UTF-8?q?=EB=B3=B5=EB=90=9C=20=EC=9D=B4=EB=A6=84=EC=9D=B4=EB=9D=BC?= =?UTF-8?q?=EB=A9=B4=20=EB=8B=A4=EC=8B=9C=20=EC=8B=9C=EB=8F=84=ED=95=98?= =?UTF-8?q?=EB=8F=84=EB=A1=9D=20=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/blackjack/controller/GameController.java | 9 +++++++-- src/main/java/blackjack/domain/gameplayer/Names.java | 2 +- 2 files changed, 8 insertions(+), 3 deletions(-) diff --git a/src/main/java/blackjack/controller/GameController.java b/src/main/java/blackjack/controller/GameController.java index 6bcbae8a..91563a87 100644 --- a/src/main/java/blackjack/controller/GameController.java +++ b/src/main/java/blackjack/controller/GameController.java @@ -1,7 +1,7 @@ package blackjack.controller; -import blackjack.domain.card.CardPack; import blackjack.domain.Dealer; +import blackjack.domain.card.CardPack; import blackjack.domain.gameplayer.GamePlayers; import blackjack.domain.gameplayer.Name; import blackjack.domain.gameplayer.Names; @@ -25,7 +25,12 @@ public void start() { } private Names getConsoleNames() { - return convertStringsToNames(InputView.getPlayerName()); + try { + return convertStringsToNames(InputView.getPlayerName()); + } catch (IllegalArgumentException e) { + e.printStackTrace(); + return getConsoleNames(); + } } private Names convertStringsToNames(List originNames) { diff --git a/src/main/java/blackjack/domain/gameplayer/Names.java b/src/main/java/blackjack/domain/gameplayer/Names.java index 395eb8c7..e1da83b2 100644 --- a/src/main/java/blackjack/domain/gameplayer/Names.java +++ b/src/main/java/blackjack/domain/gameplayer/Names.java @@ -16,7 +16,7 @@ public Names(final List names) { this.names = names; } - private void validateDuplicateNames(List names) { + private void validateDuplicateNames(final List names) { final Set set = new HashSet<>(names); if (set.size() != names.size()) { throw new IllegalArgumentException(DUPLICATE_NAMES); From 5f47bbe583a2b62936a2240bec496ff561c6b0a3 Mon Sep 17 00:00:00 2001 From: kimsunghyun Date: Thu, 17 Feb 2022 17:02:23 +0900 Subject: [PATCH 131/182] =?UTF-8?q?refactor:=20=ED=95=84=EC=9A=94=EC=97=86?= =?UTF-8?q?=EB=8A=94=20=EA=B5=AC=EB=AC=B8=20=EC=82=AD=EC=A0=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/blackjack/domain/Dealer.java | 2 -- 1 file changed, 2 deletions(-) diff --git a/src/main/java/blackjack/domain/Dealer.java b/src/main/java/blackjack/domain/Dealer.java index 5324aeaf..919836e3 100644 --- a/src/main/java/blackjack/domain/Dealer.java +++ b/src/main/java/blackjack/domain/Dealer.java @@ -39,9 +39,7 @@ private void playerGameProcess(final GamePlayer player) { player.receiveCard(cardPack.remove()); OutputView.printCardStatus(player); } - if (!player.isContinue()) { - } OutputView.printCardStatus(player); } From d333559ace1b5b270aa4e58b340f0850858bf16a Mon Sep 17 00:00:00 2001 From: kimsunghyun Date: Thu, 17 Feb 2022 17:03:07 +0900 Subject: [PATCH 132/182] =?UTF-8?q?refactor:=20BLACK=5FJACK=20=EB=A7=A4?= =?UTF-8?q?=EC=A7=81=EB=84=98=EB=B2=84=EB=A5=BC=2021=EB=A1=9C=20=EB=B6=80?= =?UTF-8?q?=EC=97=AC=ED=95=B4=20=EA=B0=80=EB=8F=85=EC=84=B1=20=EC=A6=9D?= =?UTF-8?q?=EB=8C=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/blackjack/domain/gameplayer/Cards.java | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/src/main/java/blackjack/domain/gameplayer/Cards.java b/src/main/java/blackjack/domain/gameplayer/Cards.java index 81f3105b..ba61312e 100644 --- a/src/main/java/blackjack/domain/gameplayer/Cards.java +++ b/src/main/java/blackjack/domain/gameplayer/Cards.java @@ -8,7 +8,7 @@ public class Cards { - private static final int BLACK_JACK_BOUND = 22; + private static final int BLACK_JACK = 21; private final List cards; @@ -28,7 +28,7 @@ public int calculateCards() { final int sum = getSumAllElement(); final int aceCount = getAceCount(); - if (sum >= BLACK_JACK_BOUND && aceCount > 0) { + if (sum > BLACK_JACK && aceCount > 0) { return getBestSumWithAce(sum); } return sum; @@ -52,11 +52,11 @@ private int getBestSumWithAce(final int sum) { final int higherAcePoint = CardType.ACE.getPoint(); int aceCount = getAceCount(); - int point = sum; + int totalPoint = sum; - while (aceCount-- > 0 && point >= BLACK_JACK_BOUND) { - point = point - higherAcePoint + lowerAcePoint; + while (aceCount-- > 0 && totalPoint > BLACK_JACK) { + totalPoint = totalPoint - higherAcePoint + lowerAcePoint; } - return point; + return totalPoint; } } From 95d67a33c2afdba89eb442477c94ec49a528049d Mon Sep 17 00:00:00 2001 From: kimsunghyun Date: Thu, 17 Feb 2022 17:06:23 +0900 Subject: [PATCH 133/182] =?UTF-8?q?feat:=20CardPackTest#remove=20=EB=8B=A8?= =?UTF-8?q?=EC=9C=84=ED=85=8C=EC=8A=A4=ED=8A=B8=20=EC=9E=91=EC=84=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/blackjack/domain/CardPackTest.java | 47 +++++-------------- 1 file changed, 12 insertions(+), 35 deletions(-) diff --git a/src/test/java/blackjack/domain/CardPackTest.java b/src/test/java/blackjack/domain/CardPackTest.java index 34fd5cd9..bc4a50ae 100644 --- a/src/test/java/blackjack/domain/CardPackTest.java +++ b/src/test/java/blackjack/domain/CardPackTest.java @@ -13,6 +13,7 @@ class CardPackTest { public void 초기_카드팩은_52장의_카드가_생성된다() { //given CardPack cardPack = CardPack.create(); + //when List cards = cardPack.getCardPack(); @@ -20,39 +21,15 @@ class CardPackTest { assertThat(cards.size()).isEqualTo(52); } -// @Test -// public void 각_심볼별_카드에는_12개의_카드가_존재한다() { -// //given -// List cardMapKeys = new ArrayList<>(cardMap.keySet()); -// -// //when -// //then -// for (String symbol : cardMapKeys) { -// final int cardQuantity = cardMap.get(symbol).size(); -// assertThat(cardQuantity).isEqualTo(12); -// } -// } -// -// @Test -// public void 각_심볼별_카드의_종류는_Enum_CardType을_모두_포함한다() { -// //given -// List cardMapKeys = new ArrayList<>(cardMap.keySet()); -// -// //when -// //then -// for (String symbol : cardMapKeys) { -// final List cards = cardMap.get(symbol); -// -// List cardNames = cards.stream() -// .map(Card::getName) -// .collect(Collectors.toList()); -// -// List expectedCards = Arrays.stream(CardType.values()) -// .map(x -> new Card(symbol, x.getName(), x.getPoint())) -// .map(Card::getName) -// .collect(Collectors.toList()); -// -// assertThat(cardNames).contains(expectedCards.toArray(new String[0])); -// } -// } + @Test + public void 카드팩에서_한장_빼온뒤에는_카드팩에_남아있는_재고가_하나_감소한다() { + //given + CardPack cardPack = CardPack.create(); + + //when + cardPack.remove(); + + //then + assertThat(cardPack.getCardPack().size()).isEqualTo(51); + } } \ No newline at end of file From e7881a8db5cfca39b5c60c9f2e010234d7a82d36 Mon Sep 17 00:00:00 2001 From: kimsunghyun Date: Thu, 17 Feb 2022 17:10:59 +0900 Subject: [PATCH 134/182] =?UTF-8?q?feat:=20NameTest=20=EB=8B=A8=EC=9C=84?= =?UTF-8?q?=ED=85=8C=EC=8A=A4=ED=8A=B8=20=EC=9E=91=EC=84=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 이름엔 공백이 들어올 수 없다 --- .../blackjack/domain/gameplayer/NameTest.java | 22 +++++++++++++++++++ 1 file changed, 22 insertions(+) create mode 100644 src/test/java/blackjack/domain/gameplayer/NameTest.java diff --git a/src/test/java/blackjack/domain/gameplayer/NameTest.java b/src/test/java/blackjack/domain/gameplayer/NameTest.java new file mode 100644 index 00000000..a7553c4c --- /dev/null +++ b/src/test/java/blackjack/domain/gameplayer/NameTest.java @@ -0,0 +1,22 @@ +package blackjack.domain.gameplayer; + +import static org.junit.jupiter.api.Assertions.*; + +import org.assertj.core.api.Assertions; +import org.junit.jupiter.api.Test; + +class NameTest { + + @Test + public void 이름은_공백이_들어올_수_없다() { + //given + String PLAYER_NAME_ERROR_MESSAGE = "이름은 공백이 들어올 수 없습니다."; + + //when + + //then + Assertions.assertThatThrownBy(() -> new Name("")) + .isInstanceOf(IllegalArgumentException.class) + .hasMessage(PLAYER_NAME_ERROR_MESSAGE); + } +} \ No newline at end of file From 1b2d2f90c153669c4c83564d4e52c76d90ff0061 Mon Sep 17 00:00:00 2001 From: kimsunghyun Date: Thu, 17 Feb 2022 17:12:59 +0900 Subject: [PATCH 135/182] =?UTF-8?q?feat:=20NamesTest=20=EB=8B=A8=EC=9C=84?= =?UTF-8?q?=ED=85=8C=EC=8A=A4=ED=8A=B8=20=EC=9E=91=EC=84=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 중복된 이름은 들어올 수 없다 --- .../blackjack/domain/gameplayer/NameTest.java | 5 ++--- .../domain/gameplayer/NamesTest.java | 22 +++++++++++++++++++ 2 files changed, 24 insertions(+), 3 deletions(-) create mode 100644 src/test/java/blackjack/domain/gameplayer/NamesTest.java diff --git a/src/test/java/blackjack/domain/gameplayer/NameTest.java b/src/test/java/blackjack/domain/gameplayer/NameTest.java index a7553c4c..684b171d 100644 --- a/src/test/java/blackjack/domain/gameplayer/NameTest.java +++ b/src/test/java/blackjack/domain/gameplayer/NameTest.java @@ -1,8 +1,7 @@ package blackjack.domain.gameplayer; -import static org.junit.jupiter.api.Assertions.*; +import static org.assertj.core.api.Assertions.assertThatThrownBy; -import org.assertj.core.api.Assertions; import org.junit.jupiter.api.Test; class NameTest { @@ -15,7 +14,7 @@ class NameTest { //when //then - Assertions.assertThatThrownBy(() -> new Name("")) + assertThatThrownBy(() -> new Name("")) .isInstanceOf(IllegalArgumentException.class) .hasMessage(PLAYER_NAME_ERROR_MESSAGE); } diff --git a/src/test/java/blackjack/domain/gameplayer/NamesTest.java b/src/test/java/blackjack/domain/gameplayer/NamesTest.java new file mode 100644 index 00000000..b68732aa --- /dev/null +++ b/src/test/java/blackjack/domain/gameplayer/NamesTest.java @@ -0,0 +1,22 @@ +package blackjack.domain.gameplayer; + +import static org.assertj.core.api.Assertions.assertThatThrownBy; + +import java.util.Arrays; +import org.junit.jupiter.api.Test; + +class NamesTest { + + @Test + public void 중복된_이름은_들어올_수_없다() { + //given + final String DUPLICATE_NAMES = "중복된 이름은 들어올 수 없습니다."; + + //when + + //then + assertThatThrownBy(() -> new Names(Arrays.asList(new Name("pobi"), new Name("pobi")))) + .isInstanceOf(IllegalArgumentException.class) + .hasMessage(DUPLICATE_NAMES); + } +} \ No newline at end of file From 6c7cb0c59e59338c2a2c9c951ba010452f417b07 Mon Sep 17 00:00:00 2001 From: kimsunghyun Date: Thu, 17 Feb 2022 17:27:51 +0900 Subject: [PATCH 136/182] =?UTF-8?q?feat:=20GamePlayer=EC=9D=98=20=EA=B5=AC?= =?UTF-8?q?=ED=98=84=EC=B2=B4=20=EB=8B=A8=EC=9C=84=ED=85=8C=EC=8A=A4?= =?UTF-8?q?=ED=8A=B8=20=EC=9E=91=EC=84=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 게임플레이어가 카드를 더 받을 수 있는 조건은 일반플레이어와 딜러플레이어가 다르다 - 게임플리어와 딜러플레이어의 최종승패 출력 방식은 다르다 --- .../java/blackjack/domain/PlayerTest.java | 56 +++++++++++++ .../domain/gameplayer/DealerPlayerTest.java | 79 +++++++++++++++++++ 2 files changed, 135 insertions(+) create mode 100644 src/test/java/blackjack/domain/gameplayer/DealerPlayerTest.java diff --git a/src/test/java/blackjack/domain/PlayerTest.java b/src/test/java/blackjack/domain/PlayerTest.java index 75a34c5d..75dbea07 100644 --- a/src/test/java/blackjack/domain/PlayerTest.java +++ b/src/test/java/blackjack/domain/PlayerTest.java @@ -6,8 +6,12 @@ import blackjack.domain.card.CardSymbol; import blackjack.domain.card.CardType; import blackjack.domain.gameplayer.GamePlayer; +import blackjack.domain.gameplayer.GamePlayers; import blackjack.domain.gameplayer.Name; +import blackjack.domain.gameplayer.Names; import blackjack.domain.gameplayer.Player; +import java.util.Arrays; +import java.util.List; import org.junit.jupiter.api.Test; class PlayerTest { @@ -51,4 +55,56 @@ class PlayerTest { //then assertThat(player.getScore()).isEqualTo(21); } + + @Test + public void 플레이어는_카드의합이_21이하면_카드를_받을수있는_조건이_된다() { + //given + GamePlayers gamePlayers = GamePlayers.makePlayers(new Names( + Arrays.asList(new Name("pobi")))); + + List players = gamePlayers.getPlayers(); + GamePlayer player = players.get(0); + + //when + player.receiveCard(new Card(CardSymbol.DIAMOND, CardType.NINE)); + player.receiveCard(new Card(CardSymbol.DIAMOND, CardType.TEN)); + + //then + assertThat(player.isLowerThanBound()).isTrue(); + } + + @Test + public void 딜러는_카드의합이_21초과면_카드를_받을수없다() { + //given + GamePlayers gamePlayers = GamePlayers.makePlayers(new Names( + Arrays.asList(new Name("pobi")))); + + List players = gamePlayers.getPlayers(); + GamePlayer player = players.get(0); + + //when + player.receiveCard(new Card(CardSymbol.DIAMOND, CardType.NINE)); + player.receiveCard(new Card(CardSymbol.DIAMOND, CardType.TEN)); + player.receiveCard(new Card(CardSymbol.DIAMOND, CardType.EIGHT)); + + //then + assertThat(player.isLowerThanBound()).isFalse(); + } + + @Test + public void 일반플레이어의_최종승패는_올바르게_계산된다() { + //given + GamePlayers gamePlayers = GamePlayers.makePlayers(new Names(Arrays.asList(new Name("pobi"), new Name("jason")))); + List players = gamePlayers.getPlayers(); + players.get(0).receiveCard(new Card(CardSymbol.CLOVER, CardType.NINE)); + players.get(1).receiveCard(new Card(CardSymbol.CLOVER, CardType.FOUR)); + + //when + String pobiResult = players.get(0).getGameResult(gamePlayers); + String jasonResult = players.get(1).getGameResult(gamePlayers); + + //then + assertThat(pobiResult).isEqualTo("승"); + assertThat(jasonResult).isEqualTo("패"); + } } \ No newline at end of file diff --git a/src/test/java/blackjack/domain/gameplayer/DealerPlayerTest.java b/src/test/java/blackjack/domain/gameplayer/DealerPlayerTest.java new file mode 100644 index 00000000..fd5c2c38 --- /dev/null +++ b/src/test/java/blackjack/domain/gameplayer/DealerPlayerTest.java @@ -0,0 +1,79 @@ +package blackjack.domain.gameplayer; + +import static org.assertj.core.api.Assertions.assertThat; +import static org.junit.jupiter.api.Assertions.*; + +import blackjack.domain.card.Card; +import blackjack.domain.card.CardSymbol; +import blackjack.domain.card.CardType; +import java.util.Arrays; +import java.util.List; +import org.junit.jupiter.api.Test; + +class DealerPlayerTest { + + @Test + public void 딜러는_카드의합이_16이하면_카드를_받을수있는_조건이_된다() { + //given + GamePlayers gamePlayers = GamePlayers.makePlayers(new Names( + Arrays.asList(new Name("pobi"), new Name("jason")))); + GamePlayer dealer = gamePlayers.getDealer(); + + //when + dealer.receiveCard(new Card(CardSymbol.DIAMOND, CardType.ACE)); + + //then + assertThat(dealer.isLowerThanBound()).isTrue(); + } + + @Test + public void 딜러는_카드의합이_16초과면_카드를_받을수없다() { + //given + GamePlayers gamePlayers = GamePlayers.makePlayers(new Names( + Arrays.asList(new Name("pobi"), new Name("jason")))); + GamePlayer dealer = gamePlayers.getDealer(); + + //when + dealer.receiveCard(new Card(CardSymbol.DIAMOND, CardType.ACE)); + dealer.receiveCard(new Card(CardSymbol.DIAMOND, CardType.NINE)); + + //then + assertThat(dealer.isLowerThanBound()).isFalse(); + } + + @Test + public void 딜러플레이어의_최종승패는_올바르게_계산된다_2승을출력() { + //given + GamePlayers gamePlayers = GamePlayers.makePlayers(new Names( + Arrays.asList(new Name("pobi"), new Name("jason")))); + List players = gamePlayers.getPlayers(); + GamePlayer dealer = gamePlayers.getDealer(); + dealer.receiveCard(new Card(CardSymbol.DIAMOND, CardType.ACE)); + players.get(0).receiveCard(new Card(CardSymbol.CLOVER, CardType.NINE)); + players.get(1).receiveCard(new Card(CardSymbol.CLOVER, CardType.FOUR)); + + //when + String dealerResult = dealer.getGameResult(gamePlayers); + + //then + assertThat(dealerResult).isEqualTo("2승"); + } + + @Test + public void 딜러플레이어의_최종승패는_올바르게_계산된다_1승1패를출력() { + //given + GamePlayers gamePlayers = GamePlayers.makePlayers(new Names( + Arrays.asList(new Name("pobi"), new Name("jason")))); + List players = gamePlayers.getPlayers(); + GamePlayer dealer = gamePlayers.getDealer(); + dealer.receiveCard(new Card(CardSymbol.DIAMOND, CardType.SIX)); + players.get(0).receiveCard(new Card(CardSymbol.CLOVER, CardType.NINE)); + players.get(1).receiveCard(new Card(CardSymbol.CLOVER, CardType.FOUR)); + + //when + String dealerResult = dealer.getGameResult(gamePlayers); + + //then + assertThat(dealerResult).isEqualTo("1승1패"); + } +} \ No newline at end of file From dcd270964853bed086e64e7eabcdfcb0037c9b75 Mon Sep 17 00:00:00 2001 From: kimsunghyun Date: Thu, 17 Feb 2022 17:29:31 +0900 Subject: [PATCH 137/182] =?UTF-8?q?chore:=20=ED=85=8C=EC=8A=A4=ED=8A=B8=20?= =?UTF-8?q?=ED=8C=A8=ED=82=A4=EC=A7=80=20=EB=B6=84=EB=A6=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/test/java/blackjack/domain/{ => card}/CardPackTest.java | 2 +- .../java/blackjack/domain/{ => gameplayer}/GamePlayersTest.java | 2 +- src/test/java/blackjack/domain/{ => gameplayer}/PlayerTest.java | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) rename src/test/java/blackjack/domain/{ => card}/CardPackTest.java (96%) rename src/test/java/blackjack/domain/{ => gameplayer}/GamePlayersTest.java (96%) rename src/test/java/blackjack/domain/{ => gameplayer}/PlayerTest.java (99%) diff --git a/src/test/java/blackjack/domain/CardPackTest.java b/src/test/java/blackjack/domain/card/CardPackTest.java similarity index 96% rename from src/test/java/blackjack/domain/CardPackTest.java rename to src/test/java/blackjack/domain/card/CardPackTest.java index bc4a50ae..f10ef90f 100644 --- a/src/test/java/blackjack/domain/CardPackTest.java +++ b/src/test/java/blackjack/domain/card/CardPackTest.java @@ -1,4 +1,4 @@ -package blackjack.domain; +package blackjack.domain.card; import static org.assertj.core.api.Assertions.assertThat; diff --git a/src/test/java/blackjack/domain/GamePlayersTest.java b/src/test/java/blackjack/domain/gameplayer/GamePlayersTest.java similarity index 96% rename from src/test/java/blackjack/domain/GamePlayersTest.java rename to src/test/java/blackjack/domain/gameplayer/GamePlayersTest.java index df89ddf8..37b5e5c6 100644 --- a/src/test/java/blackjack/domain/GamePlayersTest.java +++ b/src/test/java/blackjack/domain/gameplayer/GamePlayersTest.java @@ -1,4 +1,4 @@ -package blackjack.domain; +package blackjack.domain.gameplayer; import static org.assertj.core.api.Assertions.assertThat; diff --git a/src/test/java/blackjack/domain/PlayerTest.java b/src/test/java/blackjack/domain/gameplayer/PlayerTest.java similarity index 99% rename from src/test/java/blackjack/domain/PlayerTest.java rename to src/test/java/blackjack/domain/gameplayer/PlayerTest.java index 75dbea07..f369465a 100644 --- a/src/test/java/blackjack/domain/PlayerTest.java +++ b/src/test/java/blackjack/domain/gameplayer/PlayerTest.java @@ -1,4 +1,4 @@ -package blackjack.domain; +package blackjack.domain.gameplayer; import static org.assertj.core.api.Assertions.assertThat; From e15720479d99f29f92dc68f2ed4ea160b48ace65 Mon Sep 17 00:00:00 2001 From: kimsunghyun Date: Thu, 17 Feb 2022 17:42:02 +0900 Subject: [PATCH 138/182] =?UTF-8?q?refactor:=20=EB=AF=B8=EC=82=AC=EC=9A=A9?= =?UTF-8?q?=20import=EB=AC=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/CardPackTest.java | 2 -- .../java/blackjack/domain/gameplayer/DealerPlayerTest.java | 1 - .../java/blackjack/domain/gameplayer/GamePlayersTest.java | 4 ---- src/test/java/blackjack/domain/gameplayer/PlayerTest.java | 5 ----- 4 files changed, 12 deletions(-) diff --git a/src/test/java/blackjack/domain/card/CardPackTest.java b/src/test/java/blackjack/domain/card/CardPackTest.java index f10ef90f..fae7d48f 100644 --- a/src/test/java/blackjack/domain/card/CardPackTest.java +++ b/src/test/java/blackjack/domain/card/CardPackTest.java @@ -2,8 +2,6 @@ import static org.assertj.core.api.Assertions.assertThat; -import blackjack.domain.card.Card; -import blackjack.domain.card.CardPack; import java.util.List; import org.junit.jupiter.api.Test; diff --git a/src/test/java/blackjack/domain/gameplayer/DealerPlayerTest.java b/src/test/java/blackjack/domain/gameplayer/DealerPlayerTest.java index fd5c2c38..ad18e3ad 100644 --- a/src/test/java/blackjack/domain/gameplayer/DealerPlayerTest.java +++ b/src/test/java/blackjack/domain/gameplayer/DealerPlayerTest.java @@ -1,7 +1,6 @@ package blackjack.domain.gameplayer; import static org.assertj.core.api.Assertions.assertThat; -import static org.junit.jupiter.api.Assertions.*; import blackjack.domain.card.Card; import blackjack.domain.card.CardSymbol; diff --git a/src/test/java/blackjack/domain/gameplayer/GamePlayersTest.java b/src/test/java/blackjack/domain/gameplayer/GamePlayersTest.java index 37b5e5c6..a0a9192c 100644 --- a/src/test/java/blackjack/domain/gameplayer/GamePlayersTest.java +++ b/src/test/java/blackjack/domain/gameplayer/GamePlayersTest.java @@ -2,10 +2,6 @@ import static org.assertj.core.api.Assertions.assertThat; -import blackjack.domain.gameplayer.GamePlayer; -import blackjack.domain.gameplayer.GamePlayers; -import blackjack.domain.gameplayer.Name; -import blackjack.domain.gameplayer.Names; import java.util.Arrays; import java.util.List; import java.util.stream.Collectors; diff --git a/src/test/java/blackjack/domain/gameplayer/PlayerTest.java b/src/test/java/blackjack/domain/gameplayer/PlayerTest.java index f369465a..5dc996ab 100644 --- a/src/test/java/blackjack/domain/gameplayer/PlayerTest.java +++ b/src/test/java/blackjack/domain/gameplayer/PlayerTest.java @@ -5,11 +5,6 @@ import blackjack.domain.card.Card; import blackjack.domain.card.CardSymbol; import blackjack.domain.card.CardType; -import blackjack.domain.gameplayer.GamePlayer; -import blackjack.domain.gameplayer.GamePlayers; -import blackjack.domain.gameplayer.Name; -import blackjack.domain.gameplayer.Names; -import blackjack.domain.gameplayer.Player; import java.util.Arrays; import java.util.List; import org.junit.jupiter.api.Test; From 9c5e2a45101411d6d7264af735487aada847a084 Mon Sep 17 00:00:00 2001 From: kimsunghyun Date: Thu, 17 Feb 2022 17:42:35 +0900 Subject: [PATCH 139/182] =?UTF-8?q?feat:=20CardsTest#caculate()=20?= =?UTF-8?q?=EB=8B=A8=EC=9C=84=ED=85=8C=EC=8A=A4=ED=8A=B8=20=EC=9E=91?= =?UTF-8?q?=EC=84=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - ACE가 포함된것과 포함되지 않은 것 모두 정상적으로 작동하는지 검증 --- .../domain/gameplayer/CardsTest.java | 39 +++++++++++++++++++ 1 file changed, 39 insertions(+) create mode 100644 src/test/java/blackjack/domain/gameplayer/CardsTest.java diff --git a/src/test/java/blackjack/domain/gameplayer/CardsTest.java b/src/test/java/blackjack/domain/gameplayer/CardsTest.java new file mode 100644 index 00000000..fd114cfc --- /dev/null +++ b/src/test/java/blackjack/domain/gameplayer/CardsTest.java @@ -0,0 +1,39 @@ +package blackjack.domain.gameplayer; + +import static org.assertj.core.api.Assertions.assertThat; + +import blackjack.domain.card.Card; +import blackjack.domain.card.CardSymbol; +import blackjack.domain.card.CardType; +import org.junit.jupiter.api.Test; + +class CardsTest { + + @Test + public void ACE가_포함되지않는_카드리스트는_모두_합산하여_계산한다() { + //given + Cards cards = new Cards(); + + //when + cards.receiveCard(new Card(CardSymbol.DIAMOND, CardType.FIVE)); + cards.receiveCard(new Card(CardSymbol.DIAMOND, CardType.FIVE)); + cards.receiveCard(new Card(CardSymbol.DIAMOND, CardType.FIVE)); + + //then + assertThat(cards.calculateCards()).isEqualTo(15); + } + + @Test + public void ACE가_포함된_카드리스트는_자체적으로_최선의합으로_계산한다() { + //given + Cards cards = new Cards(); + + //when + cards.receiveCard(new Card(CardSymbol.DIAMOND, CardType.ACE)); + cards.receiveCard(new Card(CardSymbol.DIAMOND, CardType.TEN)); + cards.receiveCard(new Card(CardSymbol.DIAMOND, CardType.NINE)); + + //then + assertThat(cards.calculateCards()).isEqualTo(20); + } +} \ No newline at end of file From e5e75532b4cb304cd6959e36586404f97ca42fad Mon Sep 17 00:00:00 2001 From: kimsunghyun Date: Thu, 17 Feb 2022 17:43:48 +0900 Subject: [PATCH 140/182] docs: Update README --- README.md | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/README.md b/README.md index 571ba80a..679fbe1c 100644 --- a/README.md +++ b/README.md @@ -37,7 +37,7 @@ ### 게임 - [x] 게임시작 시 2장의 카드를 지급 받는다. - [x] 21을 초과하지 않으면 카드를 계속 받을 수 있다. -- [ ] 21을 초과하면 패배로 처리한다. +- [x] 21을 초과하면 패배로 처리한다. - [x] 21을 초과하지 않으면서 21에 가까운 사람이 이긴다. #### 딜러 - [x] 처음에 받은 2장의 합계가 16이하면 1장을 추가로 지급받는다. @@ -45,7 +45,6 @@ # TODO - [x] 플레이어를 추상클래스 혹은 인터페이스로 구현하기 - [x] 딜러가 한장 더 받는다는 메시지를 맨 마지막에 위치 -- [ ] 딜러의 상대적 최종 승패 구현 -- [ ] 단위 테스트 보완하기 -- [ ] 최종승패 딜러 로직 버그 수정 -- [ ] 진짜 진짜 최종 리팩토링 \ No newline at end of file +- [x] 딜러의 상대적 최종 승패 구현 +- [x] 단위 테스트 보완하기 +- [x] 최종승패 딜러 로직 버그 수정 \ No newline at end of file From 52a8b1eb88d70661a79486620556619f0897236c Mon Sep 17 00:00:00 2001 From: Dami Kim Date: Thu, 17 Feb 2022 18:10:27 +0900 Subject: [PATCH 141/182] =?UTF-8?q?refactor:=20CardPack#create=20>=20creat?= =?UTF-8?q?eWithShuffling=EB=A1=9C=20=EB=84=A4=EC=9D=B4=EB=B0=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/blackjack/domain/card/CardPack.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/java/blackjack/domain/card/CardPack.java b/src/main/java/blackjack/domain/card/CardPack.java index 37239779..0e1c023f 100644 --- a/src/main/java/blackjack/domain/card/CardPack.java +++ b/src/main/java/blackjack/domain/card/CardPack.java @@ -13,7 +13,7 @@ public CardPack(List cardPack) { this.cardPack = cardPack; } - public static CardPack create() { + public static CardPack createWithShuffling() { final List cards = new ArrayList<>(); for (final CardSymbol symbol : CardSymbol.values()) { Arrays.stream(CardType.values()) @@ -27,7 +27,7 @@ public List getCardPack() { return Collections.unmodifiableList(cardPack); } - public Card remove() { + public Card pick() { return cardPack.remove(0); } } From a307ae7331f1f1f70b42c2e984cb369d04290434 Mon Sep 17 00:00:00 2001 From: Dami Kim Date: Thu, 17 Feb 2022 18:11:54 +0900 Subject: [PATCH 142/182] =?UTF-8?q?styles:=20=EB=B3=80=EC=88=98,=20?= =?UTF-8?q?=EB=A9=94=EC=84=9C=EB=93=9C=EB=AA=85=20=EA=B5=AC=EC=B2=B4?= =?UTF-8?q?=ED=99=94=ED=95=98=EC=97=AC=20=EB=84=A4=EC=9D=B4=EB=B0=8D,=20?= =?UTF-8?q?=EC=BD=94=EB=93=9C=20=ED=8F=AC=EB=A7=B7=ED=8C=85?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/blackjack/controller/GameController.java | 2 +- src/main/java/blackjack/domain/Dealer.java | 8 ++++---- src/main/java/blackjack/domain/gameplayer/Cards.java | 10 +++++----- .../java/blackjack/domain/gameplayer/DealerPlayer.java | 4 ++-- src/main/java/blackjack/view/InputView.java | 2 +- src/main/java/blackjack/view/OutputView.java | 3 +-- src/test/java/blackjack/domain/DealerTest.java | 2 +- src/test/java/blackjack/domain/card/CardPackTest.java | 6 +++--- 8 files changed, 18 insertions(+), 19 deletions(-) diff --git a/src/main/java/blackjack/controller/GameController.java b/src/main/java/blackjack/controller/GameController.java index 91563a87..7c7644eb 100644 --- a/src/main/java/blackjack/controller/GameController.java +++ b/src/main/java/blackjack/controller/GameController.java @@ -13,7 +13,7 @@ public class GameController { public void start() { - final CardPack cardPack = CardPack.create(); + final CardPack cardPack = CardPack.createWithShuffling(); final Dealer dealer = new Dealer(cardPack); final GamePlayers gamePlayers = GamePlayers.makePlayers(getConsoleNames()); diff --git a/src/main/java/blackjack/domain/Dealer.java b/src/main/java/blackjack/domain/Dealer.java index 919836e3..caefe998 100644 --- a/src/main/java/blackjack/domain/Dealer.java +++ b/src/main/java/blackjack/domain/Dealer.java @@ -19,8 +19,8 @@ public void initializeGame(final GamePlayers gamePlayers) { List players = gamePlayers.getAllPlayers(); players.forEach(player -> { - player.receiveCard(cardPack.remove()); - player.receiveCard(cardPack.remove()); + player.receiveCard(cardPack.pick()); + player.receiveCard(cardPack.pick()); }); } @@ -36,7 +36,7 @@ public void playGame(GamePlayers gamePlayers) { private void playerGameProcess(final GamePlayer player) { while (player.isContinue() && InputView.getPlayerChoice(player)) { - player.receiveCard(cardPack.remove()); + player.receiveCard(cardPack.pick()); OutputView.printCardStatus(player); } @@ -46,7 +46,7 @@ private void playerGameProcess(final GamePlayer player) { private void dealerGameProcess(final GamePlayer dealer) { while (dealer.isLowerThanBound()) { OutputView.printDealerAcceptCard(); - dealer.receiveCard(cardPack.remove()); + dealer.receiveCard(cardPack.pick()); } } } diff --git a/src/main/java/blackjack/domain/gameplayer/Cards.java b/src/main/java/blackjack/domain/gameplayer/Cards.java index ba61312e..c588461c 100644 --- a/src/main/java/blackjack/domain/gameplayer/Cards.java +++ b/src/main/java/blackjack/domain/gameplayer/Cards.java @@ -25,13 +25,13 @@ public List toList() { } public int calculateCards() { - final int sum = getSumAllElement(); + final int sumOfCards = getSumOfCards(); final int aceCount = getAceCount(); - if (sum > BLACK_JACK && aceCount > 0) { - return getBestSumWithAce(sum); + if (sumOfCards > BLACK_JACK && aceCount > 0) { + return getBestSumWithAce(sumOfCards); } - return sum; + return sumOfCards; } private int getAceCount() { @@ -40,7 +40,7 @@ private int getAceCount() { .count(); } - private int getSumAllElement() { + private int getSumOfCards() { return cards.stream() .map(Card::getCardType) .mapToInt(CardType::getPoint) diff --git a/src/main/java/blackjack/domain/gameplayer/DealerPlayer.java b/src/main/java/blackjack/domain/gameplayer/DealerPlayer.java index 181b8152..bcd7a942 100644 --- a/src/main/java/blackjack/domain/gameplayer/DealerPlayer.java +++ b/src/main/java/blackjack/domain/gameplayer/DealerPlayer.java @@ -36,11 +36,11 @@ public String getGameResult(GamePlayers gamePlayers) { private String getGameResultWord(final int winCount, final int loseCount) { final StringBuilder resultWord = new StringBuilder(); if (winCount > 0) { - resultWord.append(winCount + WIN); + resultWord.append(winCount).append(WIN); } if (loseCount > 0) { - resultWord.append(loseCount + LOSE); + resultWord.append(loseCount).append(LOSE); } return resultWord.toString(); diff --git a/src/main/java/blackjack/view/InputView.java b/src/main/java/blackjack/view/InputView.java index 89f9c63f..9f544703 100644 --- a/src/main/java/blackjack/view/InputView.java +++ b/src/main/java/blackjack/view/InputView.java @@ -36,7 +36,7 @@ public static boolean getPlayerChoice(GamePlayer player) { private static List splitPlayerName(String input) { String[] split = input.split(DELIMITER); return Arrays.stream(split) - .map(name -> name.trim()) + .map(String::trim) .filter(name -> !name.isEmpty()) .collect(Collectors.toList()); } diff --git a/src/main/java/blackjack/view/OutputView.java b/src/main/java/blackjack/view/OutputView.java index a5fb0f8c..c7e00a93 100644 --- a/src/main/java/blackjack/view/OutputView.java +++ b/src/main/java/blackjack/view/OutputView.java @@ -29,8 +29,7 @@ public static void printInitialMessage(GamePlayers gamePlayers) { public static void printCardAllStatus(GamePlayers gamePlayers) { List players = gamePlayers.getAllPlayers(); - players.stream() - .forEach(player -> System.out.println(String.format(CARDS_LOG, player.getName(), getPlayerCardStatus(player)))); + players.forEach(player -> System.out.println(String.format(CARDS_LOG, player.getName(), getPlayerCardStatus(player)))); System.out.println(); } diff --git a/src/test/java/blackjack/domain/DealerTest.java b/src/test/java/blackjack/domain/DealerTest.java index 6129f290..6d0080d1 100644 --- a/src/test/java/blackjack/domain/DealerTest.java +++ b/src/test/java/blackjack/domain/DealerTest.java @@ -14,7 +14,7 @@ class DealerTest { - CardPack cardPack = CardPack.create(); + CardPack cardPack = CardPack.createWithShuffling(); @Test public void 게임초기_딜러는_플레이어들에게_카드를_2장씩_배분한다() { diff --git a/src/test/java/blackjack/domain/card/CardPackTest.java b/src/test/java/blackjack/domain/card/CardPackTest.java index fae7d48f..c9702f31 100644 --- a/src/test/java/blackjack/domain/card/CardPackTest.java +++ b/src/test/java/blackjack/domain/card/CardPackTest.java @@ -10,7 +10,7 @@ class CardPackTest { @Test public void 초기_카드팩은_52장의_카드가_생성된다() { //given - CardPack cardPack = CardPack.create(); + CardPack cardPack = CardPack.createWithShuffling(); //when List cards = cardPack.getCardPack(); @@ -22,10 +22,10 @@ class CardPackTest { @Test public void 카드팩에서_한장_빼온뒤에는_카드팩에_남아있는_재고가_하나_감소한다() { //given - CardPack cardPack = CardPack.create(); + CardPack cardPack = CardPack.createWithShuffling(); //when - cardPack.remove(); + cardPack.pick(); //then assertThat(cardPack.getCardPack().size()).isEqualTo(51); From 3b23a3fba924496056a8db945f29498bd54a6260 Mon Sep 17 00:00:00 2001 From: kimsunghyun Date: Sat, 19 Feb 2022 11:10:12 +0900 Subject: [PATCH 143/182] =?UTF-8?q?fix:=20RentCompany=EC=9D=98=20=EC=9D=B8?= =?UTF-8?q?=EC=8A=A4=ED=84=B4=EC=8A=A4=EB=8A=94=20=EC=83=9D=EC=84=B1?= =?UTF-8?q?=EC=9E=90=EB=A1=9C=20=EC=83=9D=EC=84=B1=ED=95=98=EB=8F=84?= =?UTF-8?q?=EB=A1=9D=20=EB=B3=80=EA=B2=BD=20-=20receive()=EC=9D=98=20?= =?UTF-8?q?=EC=9D=B8=EC=9E=90=EB=A1=9C=20=EC=9D=B4=EB=8F=99=EA=B1=B0?= =?UTF-8?q?=EB=A6=AC=EB=A5=BC=20=EB=B0=9B=EC=95=84=EC=84=9C=20=EB=B3=B4?= =?UTF-8?q?=EA=B3=A0=EC=84=9C=EC=97=90=20=EB=93=A4=EC=96=B4=EA=B0=88=20?= =?UTF-8?q?=EC=B0=A8=EB=9F=89=EC=9D=84=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/controller/RentController.java | 3 ++- src/main/java/rentcar/domain/RentCompany.java | 8 +++----- 2 files changed, 5 insertions(+), 6 deletions(-) diff --git a/src/main/java/rentcar/controller/RentController.java b/src/main/java/rentcar/controller/RentController.java index cd4fa333..9f2e7133 100644 --- a/src/main/java/rentcar/controller/RentController.java +++ b/src/main/java/rentcar/controller/RentController.java @@ -7,7 +7,8 @@ public class RentController { public void start() { - RentCompany rentCompany = RentCompany.create(InputView.getTripDistance()); + RentCompany rentCompany = new RentCompany(); + rentCompany.receive(InputView.getTripDistance()); ReportView.generateReport(rentCompany.generateChargeQuantityByName()); } diff --git a/src/main/java/rentcar/domain/RentCompany.java b/src/main/java/rentcar/domain/RentCompany.java index d11489db..2fb1f6ef 100644 --- a/src/main/java/rentcar/domain/RentCompany.java +++ b/src/main/java/rentcar/domain/RentCompany.java @@ -9,16 +9,14 @@ public class RentCompany { private final List cars; - public RentCompany(List cars) { - this.cars = cars; + public RentCompany() { + this.cars = new ArrayList<>(); } - public static RentCompany create(int distance) { - List cars = new ArrayList<>(); + public void receive(final int distance) { cars.add(new Avante(distance)); cars.add(new K5(distance)); cars.add(new Sonata(distance)); - return new RentCompany(cars); } public Map generateChargeQuantityByName() { From 0c94cbd89996e1b3a322a96d0c97612c3e00f241 Mon Sep 17 00:00:00 2001 From: kimsunghyun Date: Sat, 19 Feb 2022 11:12:11 +0900 Subject: [PATCH 144/182] =?UTF-8?q?styles:=20=ED=85=8C=EC=8A=A4=ED=8A=B8?= =?UTF-8?q?=20=EC=BD=94=EB=93=9C=20=ED=8C=8C=EC=9D=BC=20=EB=A7=88=EC=A7=80?= =?UTF-8?q?=EB=A7=89=EC=97=90=20=EA=B0=9C=ED=96=89=EB=AC=B8=EC=9E=90=20?= =?UTF-8?q?=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/test/java/blackjack/domain/DealerTest.java | 2 +- src/test/java/blackjack/domain/card/CardPackTest.java | 2 +- src/test/java/blackjack/domain/gameplayer/CardsTest.java | 2 +- .../java/blackjack/domain/gameplayer/DealerPlayerTest.java | 2 +- .../java/blackjack/domain/gameplayer/GamePlayersTest.java | 2 +- src/test/java/blackjack/domain/gameplayer/NameTest.java | 2 +- src/test/java/blackjack/domain/gameplayer/NamesTest.java | 2 +- src/test/java/blackjack/domain/gameplayer/PlayerTest.java | 2 +- src/test/java/rentcar/domain/CarTest.java | 2 +- src/test/java/rentcar/domain/RentCompanyTest.java | 4 ++-- 10 files changed, 11 insertions(+), 11 deletions(-) diff --git a/src/test/java/blackjack/domain/DealerTest.java b/src/test/java/blackjack/domain/DealerTest.java index 6d0080d1..c3350d23 100644 --- a/src/test/java/blackjack/domain/DealerTest.java +++ b/src/test/java/blackjack/domain/DealerTest.java @@ -32,4 +32,4 @@ class DealerTest { assertThat(cards.size()).isEqualTo(2); } } -} \ No newline at end of file +} diff --git a/src/test/java/blackjack/domain/card/CardPackTest.java b/src/test/java/blackjack/domain/card/CardPackTest.java index c9702f31..7a268ede 100644 --- a/src/test/java/blackjack/domain/card/CardPackTest.java +++ b/src/test/java/blackjack/domain/card/CardPackTest.java @@ -30,4 +30,4 @@ class CardPackTest { //then assertThat(cardPack.getCardPack().size()).isEqualTo(51); } -} \ No newline at end of file +} diff --git a/src/test/java/blackjack/domain/gameplayer/CardsTest.java b/src/test/java/blackjack/domain/gameplayer/CardsTest.java index fd114cfc..337d2051 100644 --- a/src/test/java/blackjack/domain/gameplayer/CardsTest.java +++ b/src/test/java/blackjack/domain/gameplayer/CardsTest.java @@ -36,4 +36,4 @@ class CardsTest { //then assertThat(cards.calculateCards()).isEqualTo(20); } -} \ No newline at end of file +} diff --git a/src/test/java/blackjack/domain/gameplayer/DealerPlayerTest.java b/src/test/java/blackjack/domain/gameplayer/DealerPlayerTest.java index ad18e3ad..c6353ee4 100644 --- a/src/test/java/blackjack/domain/gameplayer/DealerPlayerTest.java +++ b/src/test/java/blackjack/domain/gameplayer/DealerPlayerTest.java @@ -75,4 +75,4 @@ class DealerPlayerTest { //then assertThat(dealerResult).isEqualTo("1승1패"); } -} \ No newline at end of file +} diff --git a/src/test/java/blackjack/domain/gameplayer/GamePlayersTest.java b/src/test/java/blackjack/domain/gameplayer/GamePlayersTest.java index a0a9192c..2c974881 100644 --- a/src/test/java/blackjack/domain/gameplayer/GamePlayersTest.java +++ b/src/test/java/blackjack/domain/gameplayer/GamePlayersTest.java @@ -23,4 +23,4 @@ class GamePlayersTest { //then assertThat(players).contains(names.toArray(new String[0])); } -} \ No newline at end of file +} diff --git a/src/test/java/blackjack/domain/gameplayer/NameTest.java b/src/test/java/blackjack/domain/gameplayer/NameTest.java index 684b171d..9e015efb 100644 --- a/src/test/java/blackjack/domain/gameplayer/NameTest.java +++ b/src/test/java/blackjack/domain/gameplayer/NameTest.java @@ -18,4 +18,4 @@ class NameTest { .isInstanceOf(IllegalArgumentException.class) .hasMessage(PLAYER_NAME_ERROR_MESSAGE); } -} \ No newline at end of file +} diff --git a/src/test/java/blackjack/domain/gameplayer/NamesTest.java b/src/test/java/blackjack/domain/gameplayer/NamesTest.java index b68732aa..e4a03421 100644 --- a/src/test/java/blackjack/domain/gameplayer/NamesTest.java +++ b/src/test/java/blackjack/domain/gameplayer/NamesTest.java @@ -19,4 +19,4 @@ class NamesTest { .isInstanceOf(IllegalArgumentException.class) .hasMessage(DUPLICATE_NAMES); } -} \ No newline at end of file +} diff --git a/src/test/java/blackjack/domain/gameplayer/PlayerTest.java b/src/test/java/blackjack/domain/gameplayer/PlayerTest.java index 5dc996ab..586e761b 100644 --- a/src/test/java/blackjack/domain/gameplayer/PlayerTest.java +++ b/src/test/java/blackjack/domain/gameplayer/PlayerTest.java @@ -102,4 +102,4 @@ class PlayerTest { assertThat(pobiResult).isEqualTo("승"); assertThat(jasonResult).isEqualTo("패"); } -} \ No newline at end of file +} diff --git a/src/test/java/rentcar/domain/CarTest.java b/src/test/java/rentcar/domain/CarTest.java index 4200f35a..e305fe88 100644 --- a/src/test/java/rentcar/domain/CarTest.java +++ b/src/test/java/rentcar/domain/CarTest.java @@ -33,4 +33,4 @@ public void getChargeQuantity() { //then assertThat(results).isEqualTo(FUELS); } -} \ No newline at end of file +} diff --git a/src/test/java/rentcar/domain/RentCompanyTest.java b/src/test/java/rentcar/domain/RentCompanyTest.java index 2e8628a9..9d0c2601 100644 --- a/src/test/java/rentcar/domain/RentCompanyTest.java +++ b/src/test/java/rentcar/domain/RentCompanyTest.java @@ -16,7 +16,7 @@ class RentCompanyTest { cars.add(new K5(260)); cars.add(new Sonata(150)); - RentCompany rentCompany = new RentCompany(cars); + RentCompany rentCompany = new RentCompany(); Map chargeQuantityByName = rentCompany.generateChargeQuantityByName(); @@ -24,4 +24,4 @@ class RentCompanyTest { Assertions.assertThat(chargeQuantityByName.get("K5")).isEqualTo(20); Assertions.assertThat(chargeQuantityByName.get("Sonata")).isEqualTo(15); } -} \ No newline at end of file +} From f1af70cef723485c9e2296438aa9c946c53f1532 Mon Sep 17 00:00:00 2001 From: kimsunghyun Date: Sat, 19 Feb 2022 11:30:24 +0900 Subject: [PATCH 145/182] =?UTF-8?q?fix:=20RentCompany=EA=B0=80=20=EA=B0=80?= =?UTF-8?q?=EC=A7=80=EB=8A=94=20map=EC=9D=84=20=EC=9D=BC=EA=B8=89=EC=BB=AC?= =?UTF-8?q?=EB=A0=89=EC=85=98=EC=9C=BC=EB=A1=9C=20=EB=9E=98=ED=95=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 기존에 HashMap을 ConcurrentHashMap으로 변경 --- src/main/java/rentcar/domain/RentCompany.java | 18 +++++---------- src/main/java/rentcar/domain/Report.java | 23 +++++++++++++++++++ src/main/java/rentcar/view/ReportView.java | 8 ++++--- 3 files changed, 34 insertions(+), 15 deletions(-) create mode 100644 src/main/java/rentcar/domain/Report.java diff --git a/src/main/java/rentcar/domain/RentCompany.java b/src/main/java/rentcar/domain/RentCompany.java index 2fb1f6ef..3e8dc188 100644 --- a/src/main/java/rentcar/domain/RentCompany.java +++ b/src/main/java/rentcar/domain/RentCompany.java @@ -1,16 +1,16 @@ package rentcar.domain; import java.util.ArrayList; -import java.util.HashMap; import java.util.List; -import java.util.Map; public class RentCompany { private final List cars; + private final Report report; public RentCompany() { this.cars = new ArrayList<>(); + this.report = new Report(); } public void receive(final int distance) { @@ -19,15 +19,9 @@ public void receive(final int distance) { cars.add(new Sonata(distance)); } - public Map generateChargeQuantityByName() { - Map map = new HashMap<>(); - - for (Car car : cars) { - String name = car.getCarName(); - double chargeQuantity = car.getChargeQuantity(); - - map.put(name, chargeQuantity); - } - return map; + public Report generateChargeQuantityByName() { + cars + .forEach(car -> report.putDetails(car)); + return report; } } diff --git a/src/main/java/rentcar/domain/Report.java b/src/main/java/rentcar/domain/Report.java new file mode 100644 index 00000000..8e2f78e7 --- /dev/null +++ b/src/main/java/rentcar/domain/Report.java @@ -0,0 +1,23 @@ +package rentcar.domain; + +import java.util.Map; +import java.util.concurrent.ConcurrentHashMap; + +public class Report { + + private final Map report; + + public Report() { + this.report = new ConcurrentHashMap<>(); + } + + public void putDetails(final Car car) { + String carName = car.getCarName(); + double chargeQuantity = car.getChargeQuantity(); + report.put(carName, chargeQuantity); + } + + public Map getReport() { + return this.report; + } +} diff --git a/src/main/java/rentcar/view/ReportView.java b/src/main/java/rentcar/view/ReportView.java index fb093990..b79f8eeb 100644 --- a/src/main/java/rentcar/view/ReportView.java +++ b/src/main/java/rentcar/view/ReportView.java @@ -1,14 +1,16 @@ package rentcar.view; import java.util.Map; +import rentcar.domain.Report; public class ReportView { private static final String MESSAGE = "%s : %.2f 리터"; - public static void generateReport(Map report) { - for (String carName : report.keySet()) { - System.out.printf((MESSAGE) + "%n", carName, report.get(carName)); + public static void generateReport(Report report) { + Map reportMap = report.getReport(); + for (String carName : reportMap.keySet()) { + System.out.printf((MESSAGE) + "%n", carName, reportMap.get(carName)); } } } From 248feb65c6ed4a8db2f62c0749d5f50cfb344047 Mon Sep 17 00:00:00 2001 From: kimsunghyun Date: Sun, 20 Feb 2022 10:46:00 +0900 Subject: [PATCH 146/182] =?UTF-8?q?feat:=20=ED=85=8C=EC=8A=A4=ED=8A=B8?= =?UTF-8?q?=EB=A5=BC=20=EC=9C=84=ED=95=9C=20RentCompany=20=EC=83=9D?= =?UTF-8?q?=EC=84=B1=EC=9E=90=20=EC=8B=9C=EA=B7=B8=EB=8B=88=EC=B2=98=20?= =?UTF-8?q?=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/rentcar/domain/RentCompany.java | 9 ++++++--- src/test/java/rentcar/domain/RentCompanyTest.java | 11 +++++------ 2 files changed, 11 insertions(+), 9 deletions(-) diff --git a/src/main/java/rentcar/domain/RentCompany.java b/src/main/java/rentcar/domain/RentCompany.java index 3e8dc188..a5dcad81 100644 --- a/src/main/java/rentcar/domain/RentCompany.java +++ b/src/main/java/rentcar/domain/RentCompany.java @@ -5,12 +5,15 @@ public class RentCompany { + private final Report report = new Report(); private final List cars; - private final Report report; public RentCompany() { - this.cars = new ArrayList<>(); - this.report = new Report(); + this(new ArrayList<>()); + } + + public RentCompany(final List cars) { + this.cars = cars; } public void receive(final int distance) { diff --git a/src/test/java/rentcar/domain/RentCompanyTest.java b/src/test/java/rentcar/domain/RentCompanyTest.java index 9d0c2601..4999946d 100644 --- a/src/test/java/rentcar/domain/RentCompanyTest.java +++ b/src/test/java/rentcar/domain/RentCompanyTest.java @@ -2,7 +2,6 @@ import java.util.ArrayList; import java.util.List; -import java.util.Map; import org.assertj.core.api.Assertions; import org.junit.jupiter.api.Test; @@ -16,12 +15,12 @@ class RentCompanyTest { cars.add(new K5(260)); cars.add(new Sonata(150)); - RentCompany rentCompany = new RentCompany(); + RentCompany rentCompany = new RentCompany(cars); - Map chargeQuantityByName = rentCompany.generateChargeQuantityByName(); + Report report = rentCompany.generateChargeQuantityByName(); - Assertions.assertThat(chargeQuantityByName.get("Avante")).isEqualTo(20); - Assertions.assertThat(chargeQuantityByName.get("K5")).isEqualTo(20); - Assertions.assertThat(chargeQuantityByName.get("Sonata")).isEqualTo(15); + Assertions.assertThat(report.getReport().get("Avante")).isEqualTo(20); + Assertions.assertThat(report.getReport().get("K5")).isEqualTo(20); + Assertions.assertThat(report.getReport().get("Sonata")).isEqualTo(15); } } From bf788499bc0c78a607fb23e0132d9460e9a8795f Mon Sep 17 00:00:00 2001 From: kimsunghyun Date: Sun, 20 Feb 2022 10:50:17 +0900 Subject: [PATCH 147/182] =?UTF-8?q?refactor:=20PlayerTest=20=EC=97=90?= =?UTF-8?q?=EC=84=9C=20=EC=97=AC=EB=9F=AC=EA=B0=9C=EC=9D=98=20=EA=B2=80?= =?UTF-8?q?=EC=A6=9D=EC=9D=84=20=EB=8F=99=EC=8B=9C=EC=97=90=20=ED=99=95?= =?UTF-8?q?=EC=9D=B8=ED=95=A0=20=EA=B2=BD=EC=9A=B0=20assertThat=20?= =?UTF-8?q?=EC=82=AC=EC=9A=A9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/test/java/blackjack/domain/gameplayer/PlayerTest.java | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/test/java/blackjack/domain/gameplayer/PlayerTest.java b/src/test/java/blackjack/domain/gameplayer/PlayerTest.java index 586e761b..89cda73c 100644 --- a/src/test/java/blackjack/domain/gameplayer/PlayerTest.java +++ b/src/test/java/blackjack/domain/gameplayer/PlayerTest.java @@ -99,7 +99,9 @@ class PlayerTest { String jasonResult = players.get(1).getGameResult(gamePlayers); //then - assertThat(pobiResult).isEqualTo("승"); - assertThat(jasonResult).isEqualTo("패"); + org.junit.jupiter.api.Assertions.assertAll( + () -> assertThat(pobiResult).isEqualTo("승"), + () -> assertThat(jasonResult).isEqualTo("패") + ); } } From 0e7f9a58c7045352500277dd616f39f1979a7b7e Mon Sep 17 00:00:00 2001 From: kimsunghyun Date: Sun, 20 Feb 2022 10:59:51 +0900 Subject: [PATCH 148/182] =?UTF-8?q?fix:=20=EC=B9=B4=EB=93=9C=ED=8C=A9=20?= =?UTF-8?q?=EC=83=9D=EC=84=B1=EC=9E=90=EC=9D=98=20=EC=A0=91=EA=B7=BC?= =?UTF-8?q?=EC=A0=9C=EC=96=B4=EC=9E=90=EB=8A=94=20private?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/blackjack/domain/card/CardPack.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/blackjack/domain/card/CardPack.java b/src/main/java/blackjack/domain/card/CardPack.java index 0e1c023f..7196f3e9 100644 --- a/src/main/java/blackjack/domain/card/CardPack.java +++ b/src/main/java/blackjack/domain/card/CardPack.java @@ -9,7 +9,7 @@ public class CardPack { private final List cardPack; - public CardPack(List cardPack) { + private CardPack(List cardPack) { this.cardPack = cardPack; } From 3e8521be0b50a967ee4ba99de7ac901d0063a8f9 Mon Sep 17 00:00:00 2001 From: kimsunghyun Date: Sun, 20 Feb 2022 11:01:26 +0900 Subject: [PATCH 149/182] =?UTF-8?q?refactor:=20CardPack=EC=9D=98=20?= =?UTF-8?q?=EB=A7=A4=EC=A7=81=EB=84=98=EB=B2=84=20=EC=A0=9C=EA=B1=B0=20?= =?UTF-8?q?=EB=B0=8F=20=ED=8C=A9=ED=84=B0=EB=A6=AC=EB=A9=94=EC=84=9C?= =?UTF-8?q?=EB=93=9C=20=EB=84=A4=EC=9D=B4=EB=B0=8D=20create()=EB=A1=9C=20?= =?UTF-8?q?=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/blackjack/controller/GameController.java | 2 +- src/main/java/blackjack/domain/card/CardPack.java | 6 ++++-- src/test/java/blackjack/domain/DealerTest.java | 2 +- src/test/java/blackjack/domain/card/CardPackTest.java | 4 ++-- 4 files changed, 8 insertions(+), 6 deletions(-) diff --git a/src/main/java/blackjack/controller/GameController.java b/src/main/java/blackjack/controller/GameController.java index 7c7644eb..91563a87 100644 --- a/src/main/java/blackjack/controller/GameController.java +++ b/src/main/java/blackjack/controller/GameController.java @@ -13,7 +13,7 @@ public class GameController { public void start() { - final CardPack cardPack = CardPack.createWithShuffling(); + final CardPack cardPack = CardPack.create(); final Dealer dealer = new Dealer(cardPack); final GamePlayers gamePlayers = GamePlayers.makePlayers(getConsoleNames()); diff --git a/src/main/java/blackjack/domain/card/CardPack.java b/src/main/java/blackjack/domain/card/CardPack.java index 7196f3e9..8579ac04 100644 --- a/src/main/java/blackjack/domain/card/CardPack.java +++ b/src/main/java/blackjack/domain/card/CardPack.java @@ -7,13 +7,15 @@ public class CardPack { + private static final int FRONT = 0; + private final List cardPack; private CardPack(List cardPack) { this.cardPack = cardPack; } - public static CardPack createWithShuffling() { + public static CardPack create() { final List cards = new ArrayList<>(); for (final CardSymbol symbol : CardSymbol.values()) { Arrays.stream(CardType.values()) @@ -28,6 +30,6 @@ public List getCardPack() { } public Card pick() { - return cardPack.remove(0); + return cardPack.remove(FRONT); } } diff --git a/src/test/java/blackjack/domain/DealerTest.java b/src/test/java/blackjack/domain/DealerTest.java index c3350d23..041a422b 100644 --- a/src/test/java/blackjack/domain/DealerTest.java +++ b/src/test/java/blackjack/domain/DealerTest.java @@ -14,7 +14,7 @@ class DealerTest { - CardPack cardPack = CardPack.createWithShuffling(); + CardPack cardPack = CardPack.create(); @Test public void 게임초기_딜러는_플레이어들에게_카드를_2장씩_배분한다() { diff --git a/src/test/java/blackjack/domain/card/CardPackTest.java b/src/test/java/blackjack/domain/card/CardPackTest.java index 7a268ede..e943d07f 100644 --- a/src/test/java/blackjack/domain/card/CardPackTest.java +++ b/src/test/java/blackjack/domain/card/CardPackTest.java @@ -10,7 +10,7 @@ class CardPackTest { @Test public void 초기_카드팩은_52장의_카드가_생성된다() { //given - CardPack cardPack = CardPack.createWithShuffling(); + CardPack cardPack = CardPack.create(); //when List cards = cardPack.getCardPack(); @@ -22,7 +22,7 @@ class CardPackTest { @Test public void 카드팩에서_한장_빼온뒤에는_카드팩에_남아있는_재고가_하나_감소한다() { //given - CardPack cardPack = CardPack.createWithShuffling(); + CardPack cardPack = CardPack.create(); //when cardPack.pick(); From 5056122968977e78c2f69142324f68bbc37f8a43 Mon Sep 17 00:00:00 2001 From: kimsunghyun Date: Sun, 20 Feb 2022 11:16:52 +0900 Subject: [PATCH 150/182] =?UTF-8?q?feat:=20DealerPlayer=EC=9D=98=20?= =?UTF-8?q?=EA=B8=B0=EB=B3=B8=20=EC=83=9D=EC=84=B1=EC=9E=90=EB=A5=BC=20"?= =?UTF-8?q?=EB=94=9C=EB=9F=AC"=EB=9D=BC=EB=8A=94=20=EC=9D=B4=EB=A6=84?= =?UTF-8?q?=EC=9C=BC=EB=A1=9C=20=EB=A7=8C=EB=93=A4=EB=8F=84=EB=A1=9D=20?= =?UTF-8?q?=EC=83=9D=EC=84=B1=EC=9E=90=20=EC=8B=9C=EA=B7=B8=EB=8B=88?= =?UTF-8?q?=EC=B2=98=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/blackjack/domain/gameplayer/DealerPlayer.java | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/main/java/blackjack/domain/gameplayer/DealerPlayer.java b/src/main/java/blackjack/domain/gameplayer/DealerPlayer.java index bcd7a942..68cec127 100644 --- a/src/main/java/blackjack/domain/gameplayer/DealerPlayer.java +++ b/src/main/java/blackjack/domain/gameplayer/DealerPlayer.java @@ -4,10 +4,15 @@ public class DealerPlayer extends GamePlayer { + private static final String DEALER = "딜러"; private static final int DEALER_BOUND = 16; private static final String WIN = "승"; private static final String LOSE = "패"; + public DealerPlayer() { + this(new Name(DEALER)); + } + public DealerPlayer(final Name name) { super(name); } From a0aa83ebb90db8916e343df5b2f80a7724fae51b Mon Sep 17 00:00:00 2001 From: kimsunghyun Date: Sun, 20 Feb 2022 11:18:11 +0900 Subject: [PATCH 151/182] =?UTF-8?q?refactor:=20GamePlayers=EC=9D=98=20?= =?UTF-8?q?=EB=94=9C=EB=9F=AC=EC=99=80=20=ED=94=8C=EB=A0=88=EC=9D=B4?= =?UTF-8?q?=EB=9F=AC=EB=A5=BC=20stream()=EC=9D=84=20=ED=99=9C=EC=9A=A9?= =?UTF-8?q?=ED=95=B4=20"=EB=94=9C=EB=9F=AC"=EB=9D=BC=EB=8A=94=20=EC=9D=B4?= =?UTF-8?q?=EB=A6=84=EC=9C=BC=EB=A1=9C=20=EA=B5=AC=EB=B6=84=ED=95=B4=20?= =?UTF-8?q?=EA=B0=9D=EC=B2=B4,=EB=A6=AC=EC=8A=A4=ED=8A=B8=20=EB=B0=98?= =?UTF-8?q?=ED=99=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../blackjack/domain/gameplayer/GamePlayers.java | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/src/main/java/blackjack/domain/gameplayer/GamePlayers.java b/src/main/java/blackjack/domain/gameplayer/GamePlayers.java index 83d007f1..4a341652 100644 --- a/src/main/java/blackjack/domain/gameplayer/GamePlayers.java +++ b/src/main/java/blackjack/domain/gameplayer/GamePlayers.java @@ -7,6 +7,9 @@ public class GamePlayers { + private static final String DEALER = "딜러"; + private static final int FRONT = 0; + private final List players; public GamePlayers(final List players) { @@ -18,17 +21,22 @@ public static GamePlayers makePlayers(final Names names) { .map(Player::new) .collect(Collectors.toList()); - players.add(0, new DealerPlayer(new Name("딜러"))); + players.add(FRONT, new DealerPlayer()); return new GamePlayers(new ArrayList<>(players)); } public GamePlayer getDealer() { - return players.get(0); + return players.stream() + .filter(player -> player.getName().equals(DEALER)) + .findAny() + .orElseThrow(NullPointerException::new); } public List getPlayers() { - return Collections.unmodifiableList(players.subList(1, players.size())); + return players.stream() + .filter(player -> player != getDealer()) + .collect(Collectors.toList()); } public List getAllPlayers() { From dc2977e63a4707a2b122183c253abb1727ba1acc Mon Sep 17 00:00:00 2001 From: kimsunghyun Date: Sun, 20 Feb 2022 12:05:38 +0900 Subject: [PATCH 152/182] =?UTF-8?q?refactor:=20=EB=94=9C=EB=9F=AC=ED=94=8C?= =?UTF-8?q?=EB=A0=88=EC=9D=B4=EC=96=B4=EC=9D=98=20=EC=B5=9C=EC=A2=85=20?= =?UTF-8?q?=EA=B2=B0=EA=B3=BC=EB=A5=BC=20=EC=B9=B4=EC=9A=B4=ED=8A=B8?= =?UTF-8?q?=ED=95=98=EB=8A=94=20=EB=A1=9C=EC=A7=81=20=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - else 제거 - 메서드의 max depth를 2로 제한 --- .../domain/gameplayer/DealerPlayer.java | 36 +++++++------------ 1 file changed, 12 insertions(+), 24 deletions(-) diff --git a/src/main/java/blackjack/domain/gameplayer/DealerPlayer.java b/src/main/java/blackjack/domain/gameplayer/DealerPlayer.java index 68cec127..0c5551e9 100644 --- a/src/main/java/blackjack/domain/gameplayer/DealerPlayer.java +++ b/src/main/java/blackjack/domain/gameplayer/DealerPlayer.java @@ -6,8 +6,7 @@ public class DealerPlayer extends GamePlayer { private static final String DEALER = "딜러"; private static final int DEALER_BOUND = 16; - private static final String WIN = "승"; - private static final String LOSE = "패"; + private static final String DealerResult = "%d승 %d패"; public DealerPlayer() { this(new Name(DEALER)); @@ -23,31 +22,20 @@ public boolean isLowerThanBound() { } @Override - public String getGameResult(GamePlayers gamePlayers) { - List players = gamePlayers.getPlayers(); + public String getGameResult(List players) { int winCount = 0; - int loseCount = 0; - - for (GamePlayer gamePlayer : players) { - if (isContinue() && this.getScore() > gamePlayer.getScore()) { - winCount++; - continue; - } - loseCount++; - } - return getGameResultWord(winCount, loseCount); - } - - private String getGameResultWord(final int winCount, final int loseCount) { - final StringBuilder resultWord = new StringBuilder(); - if (winCount > 0) { - resultWord.append(winCount).append(WIN); + if (isContinue()) { + winCount = findWinnerCount(getScore(), players); } + int loseCount = players.size() - winCount; - if (loseCount > 0) { - resultWord.append(loseCount).append(LOSE); - } + return String.format(DealerResult, winCount, loseCount); + } - return resultWord.toString(); + private int findWinnerCount(int dealerScore, List players) { + return (int) players.stream() + .filter(player -> player.getName() != DEALER) + .filter(player -> player.isContinue() && player.getScore() < dealerScore) + .count(); } } From 6cdd436170a1f8f2d6253b23613c89e73845ec72 Mon Sep 17 00:00:00 2001 From: kimsunghyun Date: Sun, 20 Feb 2022 12:06:04 +0900 Subject: [PATCH 153/182] =?UTF-8?q?fix:=20GamePlayer=EC=9D=98=20=EC=9D=B8?= =?UTF-8?q?=EC=9E=90=EB=A1=9C=20=EC=9D=BC=EA=B8=89=EC=BB=AC=EB=A0=89?= =?UTF-8?q?=EC=85=98=EC=9D=B4=20=EC=95=84=EB=8B=88=EB=9D=BC=20=EA=B2=8C?= =?UTF-8?q?=EC=9E=84=ED=94=8C=EB=A0=88=EC=9D=B4=EC=96=B4=EC=9D=98=20?= =?UTF-8?q?=EB=A6=AC=EC=8A=A4=ED=8B=80=EB=A5=BC=20=EB=B0=9B=EB=8F=84?= =?UTF-8?q?=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/gameplayer/GamePlayer.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/blackjack/domain/gameplayer/GamePlayer.java b/src/main/java/blackjack/domain/gameplayer/GamePlayer.java index 749a9fd0..7b6cc222 100644 --- a/src/main/java/blackjack/domain/gameplayer/GamePlayer.java +++ b/src/main/java/blackjack/domain/gameplayer/GamePlayer.java @@ -37,5 +37,5 @@ public boolean isContinue() { public abstract boolean isLowerThanBound(); - public abstract String getGameResult(final GamePlayers gamePlayers); + public abstract String getGameResult(final List gamePlayers); } From fb105cc4d1265bcb8109b9b8ced9cd0e318d39ae Mon Sep 17 00:00:00 2001 From: kimsunghyun Date: Sun, 20 Feb 2022 12:06:30 +0900 Subject: [PATCH 154/182] =?UTF-8?q?refactor:=20=EC=9C=84=EC=9D=98=20?= =?UTF-8?q?=EB=B3=80=EA=B2=BD=EC=9C=BC=EB=A1=9C=20=EC=9D=B8=ED=95=9C=20?= =?UTF-8?q?=EB=A1=9C=EC=A7=81=20=EC=9D=BC=EB=B6=80=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/blackjack/domain/gameplayer/Player.java | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/src/main/java/blackjack/domain/gameplayer/Player.java b/src/main/java/blackjack/domain/gameplayer/Player.java index 1e6b5fd2..c877086e 100644 --- a/src/main/java/blackjack/domain/gameplayer/Player.java +++ b/src/main/java/blackjack/domain/gameplayer/Player.java @@ -18,9 +18,8 @@ public boolean isLowerThanBound() { } @Override - public String getGameResult(GamePlayers gamePlayers) { - List allPlayers = gamePlayers.getAllPlayers(); - int winnerScore = allPlayers.stream() + public String getGameResult(List gamePlayers) { + int winnerScore = gamePlayers.stream() .filter(GamePlayer::isContinue) .map(GamePlayer::getScore) .max(Integer::compareTo) From 5c31940320527c1cc718219c09a093a285b961c6 Mon Sep 17 00:00:00 2001 From: kimsunghyun Date: Sun, 20 Feb 2022 12:07:15 +0900 Subject: [PATCH 155/182] =?UTF-8?q?refactor:=20OutputView=EC=97=90?= =?UTF-8?q?=EC=84=9C=20=EA=B2=B0=EA=B3=BC=EB=A5=BC=20=EC=B6=9C=EB=A0=A5?= =?UTF-8?q?=ED=95=98=EB=8A=94=20=EB=A9=94=EC=84=9C=EB=93=9C=EB=A5=BC=20?= =?UTF-8?q?=EB=94=9C=EB=9F=AC=EC=99=80=20=ED=94=8C=EB=A0=88=EC=9D=B4?= =?UTF-8?q?=EC=96=B4=20=EB=A1=9C=EC=A7=81=20=EA=B0=81=EA=B0=81=20=EB=B6=84?= =?UTF-8?q?=EB=A6=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/blackjack/view/OutputView.java | 17 +++++++++++++++-- 1 file changed, 15 insertions(+), 2 deletions(-) diff --git a/src/main/java/blackjack/view/OutputView.java b/src/main/java/blackjack/view/OutputView.java index c7e00a93..8e2ad151 100644 --- a/src/main/java/blackjack/view/OutputView.java +++ b/src/main/java/blackjack/view/OutputView.java @@ -59,9 +59,22 @@ private static String getPlayerCardStatus(GamePlayer gamePlayer) { public static void printGameResult(GamePlayers gamePlayers) { System.out.println(RESULT_HEADER_LOG); - List players = gamePlayers.getAllPlayers(); + + dealerPlayerResult(gamePlayers); + generalPlayerResult(gamePlayers); + } + + private static void dealerPlayerResult(GamePlayers gamePlayers) { + GamePlayer dealer = gamePlayers.getDealer(); + List players = gamePlayers.getPlayers(); + System.out.println(String.format(RESULT_GAME_LOG, dealer.getName(), dealer.getGameResult(players))); + } + + private static void generalPlayerResult(GamePlayers gamePlayers) { + List players = gamePlayers.getPlayers(); + List AllPlayer = gamePlayers.getAllPlayers(); for (GamePlayer player : players) { - System.out.println(String.format(RESULT_GAME_LOG, player.getName(), player.getGameResult(gamePlayers))); + System.out.println(String.format(RESULT_GAME_LOG, player.getName(), player.getGameResult(AllPlayer))); } } } From 2567ff0d8c33d8dd77e65f980f47c52423217c4a Mon Sep 17 00:00:00 2001 From: kimsunghyun Date: Sun, 20 Feb 2022 12:08:46 +0900 Subject: [PATCH 156/182] refactor: rename Dealer -> BlackJackGame --- src/main/java/blackjack/controller/GameController.java | 4 ++-- .../java/blackjack/domain/{Dealer.java => BlackJackGame.java} | 4 ++-- src/test/java/blackjack/domain/DealerTest.java | 2 +- 3 files changed, 5 insertions(+), 5 deletions(-) rename src/main/java/blackjack/domain/{Dealer.java => BlackJackGame.java} (94%) diff --git a/src/main/java/blackjack/controller/GameController.java b/src/main/java/blackjack/controller/GameController.java index 91563a87..62dc97e7 100644 --- a/src/main/java/blackjack/controller/GameController.java +++ b/src/main/java/blackjack/controller/GameController.java @@ -1,6 +1,6 @@ package blackjack.controller; -import blackjack.domain.Dealer; +import blackjack.domain.BlackJackGame; import blackjack.domain.card.CardPack; import blackjack.domain.gameplayer.GamePlayers; import blackjack.domain.gameplayer.Name; @@ -14,7 +14,7 @@ public class GameController { public void start() { final CardPack cardPack = CardPack.create(); - final Dealer dealer = new Dealer(cardPack); + final BlackJackGame dealer = new BlackJackGame(cardPack); final GamePlayers gamePlayers = GamePlayers.makePlayers(getConsoleNames()); dealer.initializeGame(gamePlayers); diff --git a/src/main/java/blackjack/domain/Dealer.java b/src/main/java/blackjack/domain/BlackJackGame.java similarity index 94% rename from src/main/java/blackjack/domain/Dealer.java rename to src/main/java/blackjack/domain/BlackJackGame.java index caefe998..e307b59c 100644 --- a/src/main/java/blackjack/domain/Dealer.java +++ b/src/main/java/blackjack/domain/BlackJackGame.java @@ -7,11 +7,11 @@ import blackjack.view.OutputView; import java.util.List; -public class Dealer { +public class BlackJackGame { private final CardPack cardPack; - public Dealer(final CardPack cardPack) { + public BlackJackGame(final CardPack cardPack) { this.cardPack = cardPack; } diff --git a/src/test/java/blackjack/domain/DealerTest.java b/src/test/java/blackjack/domain/DealerTest.java index 041a422b..01e533b5 100644 --- a/src/test/java/blackjack/domain/DealerTest.java +++ b/src/test/java/blackjack/domain/DealerTest.java @@ -20,7 +20,7 @@ class DealerTest { public void 게임초기_딜러는_플레이어들에게_카드를_2장씩_배분한다() { //given GamePlayers gamePlayers = GamePlayers.makePlayers(new Names(Arrays.asList(new Name("pobi"), new Name("jason")))); - Dealer dealer = new Dealer(cardPack); + BlackJackGame dealer = new BlackJackGame(cardPack); //when dealer.initializeGame(gamePlayers); From c86ac82999b7f852b3a1a31051a225d46352d1cf Mon Sep 17 00:00:00 2001 From: kimsunghyun Date: Sun, 20 Feb 2022 12:10:25 +0900 Subject: [PATCH 157/182] =?UTF-8?q?refactor:=20DealerPlayer#findWinnerCoun?= =?UTF-8?q?t=20stream()=20=EB=82=B4=EB=B6=80=20=EC=9D=98=EB=AF=B8=EC=97=86?= =?UTF-8?q?=EB=8A=94=20filter=20=EC=A0=9C=EA=B1=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/blackjack/domain/gameplayer/DealerPlayer.java | 1 - 1 file changed, 1 deletion(-) diff --git a/src/main/java/blackjack/domain/gameplayer/DealerPlayer.java b/src/main/java/blackjack/domain/gameplayer/DealerPlayer.java index 0c5551e9..a3392958 100644 --- a/src/main/java/blackjack/domain/gameplayer/DealerPlayer.java +++ b/src/main/java/blackjack/domain/gameplayer/DealerPlayer.java @@ -34,7 +34,6 @@ public String getGameResult(List players) { private int findWinnerCount(int dealerScore, List players) { return (int) players.stream() - .filter(player -> player.getName() != DEALER) .filter(player -> player.isContinue() && player.getScore() < dealerScore) .count(); } From d07149fc48d16742379ae7708ecfae324dc7187e Mon Sep 17 00:00:00 2001 From: kimsunghyun Date: Sun, 20 Feb 2022 12:11:30 +0900 Subject: [PATCH 158/182] refactor: DealerPlayer#findWinnerCount rename -> findWinCount --- src/main/java/blackjack/domain/gameplayer/DealerPlayer.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/java/blackjack/domain/gameplayer/DealerPlayer.java b/src/main/java/blackjack/domain/gameplayer/DealerPlayer.java index a3392958..67a00d10 100644 --- a/src/main/java/blackjack/domain/gameplayer/DealerPlayer.java +++ b/src/main/java/blackjack/domain/gameplayer/DealerPlayer.java @@ -25,14 +25,14 @@ public boolean isLowerThanBound() { public String getGameResult(List players) { int winCount = 0; if (isContinue()) { - winCount = findWinnerCount(getScore(), players); + winCount = findWinCount(getScore(), players); } int loseCount = players.size() - winCount; return String.format(DealerResult, winCount, loseCount); } - private int findWinnerCount(int dealerScore, List players) { + private int findWinCount(int dealerScore, List players) { return (int) players.stream() .filter(player -> player.isContinue() && player.getScore() < dealerScore) .count(); From 33d178ce7a843a427452109e81e403dcf7201635 Mon Sep 17 00:00:00 2001 From: kimsunghyun Date: Sun, 20 Feb 2022 12:13:10 +0900 Subject: [PATCH 159/182] =?UTF-8?q?feat:=20CardPack=20getter=20=EC=B6=94?= =?UTF-8?q?=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/blackjack/domain/BlackJackGame.java | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/main/java/blackjack/domain/BlackJackGame.java b/src/main/java/blackjack/domain/BlackJackGame.java index e307b59c..ae120b6d 100644 --- a/src/main/java/blackjack/domain/BlackJackGame.java +++ b/src/main/java/blackjack/domain/BlackJackGame.java @@ -49,4 +49,8 @@ private void dealerGameProcess(final GamePlayer dealer) { dealer.receiveCard(cardPack.pick()); } } + + public CardPack getCardPack() { + return this.cardPack; + } } From ed64b7365ee71fe00c472a6d3b192ae8163cb569 Mon Sep 17 00:00:00 2001 From: kimsunghyun Date: Sun, 20 Feb 2022 13:25:11 +0900 Subject: [PATCH 160/182] =?UTF-8?q?fix:=20CardPack=EA=B3=BC=20Gameplayers?= =?UTF-8?q?=EC=9D=98=20=EC=9D=B8=EC=8A=A4=ED=84=B4=EC=8A=A4=EB=A5=BC=20?= =?UTF-8?q?=ED=8C=A9=ED=86=A0=EB=A6=AC=EB=A9=94=EC=84=9C=EB=93=9C=EC=97=90?= =?UTF-8?q?=EC=84=9C=20=EC=83=9D=EC=84=B1=EC=9E=90=20=EC=B4=88=EA=B8=B0?= =?UTF-8?q?=ED=99=94=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/controller/GameController.java | 4 ++-- src/main/java/blackjack/domain/card/CardPack.java | 8 ++++---- .../java/blackjack/domain/gameplayer/GamePlayers.java | 8 ++++---- 3 files changed, 10 insertions(+), 10 deletions(-) diff --git a/src/main/java/blackjack/controller/GameController.java b/src/main/java/blackjack/controller/GameController.java index 62dc97e7..9cb028cf 100644 --- a/src/main/java/blackjack/controller/GameController.java +++ b/src/main/java/blackjack/controller/GameController.java @@ -13,9 +13,9 @@ public class GameController { public void start() { - final CardPack cardPack = CardPack.create(); + final CardPack cardPack = new CardPack(); final BlackJackGame dealer = new BlackJackGame(cardPack); - final GamePlayers gamePlayers = GamePlayers.makePlayers(getConsoleNames()); + final GamePlayers gamePlayers = new GamePlayers(getConsoleNames()); dealer.initializeGame(gamePlayers); printInitialStatus(gamePlayers); diff --git a/src/main/java/blackjack/domain/card/CardPack.java b/src/main/java/blackjack/domain/card/CardPack.java index 8579ac04..e375a6c0 100644 --- a/src/main/java/blackjack/domain/card/CardPack.java +++ b/src/main/java/blackjack/domain/card/CardPack.java @@ -11,18 +11,18 @@ public class CardPack { private final List cardPack; - private CardPack(List cardPack) { - this.cardPack = cardPack; + public CardPack() { + this.cardPack = create(); } - public static CardPack create() { + public List create() { final List cards = new ArrayList<>(); for (final CardSymbol symbol : CardSymbol.values()) { Arrays.stream(CardType.values()) .forEach(type -> cards.add(new Card(symbol, type))); } Collections.shuffle(cards); - return new CardPack(new ArrayList<>(cards)); + return new ArrayList<>(cards); } public List getCardPack() { diff --git a/src/main/java/blackjack/domain/gameplayer/GamePlayers.java b/src/main/java/blackjack/domain/gameplayer/GamePlayers.java index 4a341652..f6e669cd 100644 --- a/src/main/java/blackjack/domain/gameplayer/GamePlayers.java +++ b/src/main/java/blackjack/domain/gameplayer/GamePlayers.java @@ -12,18 +12,18 @@ public class GamePlayers { private final List players; - public GamePlayers(final List players) { - this.players = players; + public GamePlayers(final Names names) { + this.players = makePlayers(names); } - public static GamePlayers makePlayers(final Names names) { + public static List makePlayers(final Names names) { final List players = names.getNames().stream() .map(Player::new) .collect(Collectors.toList()); players.add(FRONT, new DealerPlayer()); - return new GamePlayers(new ArrayList<>(players)); + return new ArrayList<>(players); } public GamePlayer getDealer() { From f6f71e1c46b331da3c694cb449f7b262231c5570 Mon Sep 17 00:00:00 2001 From: kimsunghyun Date: Sun, 20 Feb 2022 13:36:06 +0900 Subject: [PATCH 161/182] =?UTF-8?q?feat:=20Controlle#print=20=EB=A9=94?= =?UTF-8?q?=EC=84=9C=EB=93=9C=20=EB=B6=84=EB=A6=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../blackjack/controller/GameController.java | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/src/main/java/blackjack/controller/GameController.java b/src/main/java/blackjack/controller/GameController.java index 9cb028cf..7631cbe0 100644 --- a/src/main/java/blackjack/controller/GameController.java +++ b/src/main/java/blackjack/controller/GameController.java @@ -40,12 +40,28 @@ private Names convertStringsToNames(List originNames) { } private void printInitialStatus(GamePlayers gamePlayers) { + printInitialMessage(gamePlayers); + printCardAllStatus(gamePlayers); + } + + private void printInitialMessage(GamePlayers gamePlayers) { OutputView.printInitialMessage(gamePlayers); + } + + private void printCardAllStatus(GamePlayers gamePlayers) { OutputView.printCardAllStatus(gamePlayers); } private void printFinalStatus(GamePlayers gamePlayers) { + printCardResult(gamePlayers); + printGameResult(gamePlayers); + } + + private void printCardResult(GamePlayers gamePlayers) { OutputView.printCardResult(gamePlayers); + } + + private void printGameResult(GamePlayers gamePlayers) { OutputView.printGameResult(gamePlayers); } } From d81a84fa1e6631995f90404269d5c027262f2cad Mon Sep 17 00:00:00 2001 From: kimsunghyun Date: Sun, 20 Feb 2022 14:41:06 +0900 Subject: [PATCH 162/182] =?UTF-8?q?feat:=20Dealer=EC=9D=98=20=EC=B9=B4?= =?UTF-8?q?=EB=93=9C=20=EC=B6=94=EA=B0=80=20=EB=B6=84=EB=B0=B0=20=ED=99=94?= =?UTF-8?q?=EB=A9=B4=EB=A1=9C=EC=A7=81=EC=9D=84=20=EB=8F=84=EB=A9=94?= =?UTF-8?q?=EC=9D=B8=EA=B3=BC=20=EB=B6=84=EB=A5=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../blackjack/controller/GameController.java | 18 ++++++++++++++++++ .../java/blackjack/domain/BlackJackGame.java | 1 - src/main/java/blackjack/view/OutputView.java | 6 ++++-- ...{DealerTest.java => BlackJackGameTest.java} | 0 4 files changed, 22 insertions(+), 3 deletions(-) rename src/test/java/blackjack/domain/{DealerTest.java => BlackJackGameTest.java} (100%) diff --git a/src/main/java/blackjack/controller/GameController.java b/src/main/java/blackjack/controller/GameController.java index 7631cbe0..bbcf78a8 100644 --- a/src/main/java/blackjack/controller/GameController.java +++ b/src/main/java/blackjack/controller/GameController.java @@ -2,6 +2,7 @@ import blackjack.domain.BlackJackGame; import blackjack.domain.card.CardPack; +import blackjack.domain.gameplayer.GamePlayer; import blackjack.domain.gameplayer.GamePlayers; import blackjack.domain.gameplayer.Name; import blackjack.domain.gameplayer.Names; @@ -12,6 +13,8 @@ public class GameController { + private static final int initialCardSize = 2; + public void start() { final CardPack cardPack = new CardPack(); final BlackJackGame dealer = new BlackJackGame(cardPack); @@ -21,6 +24,8 @@ public void start() { printInitialStatus(gamePlayers); dealer.playGame(gamePlayers); +// printPlayerMessage(gamePlayers); + printDealerMessage(gamePlayers); printFinalStatus(gamePlayers); } @@ -52,6 +57,19 @@ private void printCardAllStatus(GamePlayers gamePlayers) { OutputView.printCardAllStatus(gamePlayers); } + private void printDealerMessage(GamePlayers gamePlayers) { + GamePlayer dealer = gamePlayers.getDealer(); + int dealerReceiveCount = dealer.getCards().size() - initialCardSize; + OutputView.printDealerAcceptCard(dealerReceiveCount); + } + + private void printPlayerMessage(GamePlayers gamePlayers) { + List players = gamePlayers.getPlayers(); + for (GamePlayer player : players) { +// OutputView.printCardStatus(player); + } + } + private void printFinalStatus(GamePlayers gamePlayers) { printCardResult(gamePlayers); printGameResult(gamePlayers); diff --git a/src/main/java/blackjack/domain/BlackJackGame.java b/src/main/java/blackjack/domain/BlackJackGame.java index ae120b6d..480f810b 100644 --- a/src/main/java/blackjack/domain/BlackJackGame.java +++ b/src/main/java/blackjack/domain/BlackJackGame.java @@ -45,7 +45,6 @@ private void playerGameProcess(final GamePlayer player) { private void dealerGameProcess(final GamePlayer dealer) { while (dealer.isLowerThanBound()) { - OutputView.printDealerAcceptCard(); dealer.receiveCard(cardPack.pick()); } } diff --git a/src/main/java/blackjack/view/OutputView.java b/src/main/java/blackjack/view/OutputView.java index 8e2ad151..c0452429 100644 --- a/src/main/java/blackjack/view/OutputView.java +++ b/src/main/java/blackjack/view/OutputView.java @@ -37,8 +37,10 @@ public static void printCardStatus(GamePlayer player) { System.out.println(String.format(CARDS_LOG, player.getName(), getPlayerCardStatus(player))); } - public static void printDealerAcceptCard() { - System.out.println(DEALER_RECEIVE_ONE_CARD_MESSAGE); + public static void printDealerAcceptCard(int dealerReceiveCount) { + for (int i = 0; i < dealerReceiveCount; i++) { + System.out.println(DEALER_RECEIVE_ONE_CARD_MESSAGE); + } } public static void printCardResult(GamePlayers gamePlayers) { diff --git a/src/test/java/blackjack/domain/DealerTest.java b/src/test/java/blackjack/domain/BlackJackGameTest.java similarity index 100% rename from src/test/java/blackjack/domain/DealerTest.java rename to src/test/java/blackjack/domain/BlackJackGameTest.java From 726aca76f6bfff9b7103398a535bd86acd3f2434 Mon Sep 17 00:00:00 2001 From: kimsunghyun Date: Sun, 20 Feb 2022 14:41:34 +0900 Subject: [PATCH 163/182] =?UTF-8?q?refactor:=20=EB=B3=80=EA=B2=BD=EC=82=AC?= =?UTF-8?q?=ED=95=AD=EC=9C=BC=EB=A1=9C=20=EC=9D=B8=ED=95=9C=20=ED=85=8C?= =?UTF-8?q?=EC=8A=A4=ED=8A=B8=20=EC=BD=94=EB=93=9C=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../blackjack/domain/BlackJackGameTest.java | 6 +++--- .../blackjack/domain/card/CardPackTest.java | 4 ++-- .../domain/gameplayer/DealerPlayerTest.java | 20 ++++++++----------- .../domain/gameplayer/GamePlayersTest.java | 2 +- .../domain/gameplayer/PlayerTest.java | 12 +++++------ 5 files changed, 19 insertions(+), 25 deletions(-) diff --git a/src/test/java/blackjack/domain/BlackJackGameTest.java b/src/test/java/blackjack/domain/BlackJackGameTest.java index 01e533b5..9f3dd5d4 100644 --- a/src/test/java/blackjack/domain/BlackJackGameTest.java +++ b/src/test/java/blackjack/domain/BlackJackGameTest.java @@ -12,14 +12,14 @@ import java.util.List; import org.junit.jupiter.api.Test; -class DealerTest { +class BlackJackGameTest { - CardPack cardPack = CardPack.create(); + CardPack cardPack = new CardPack(); @Test public void 게임초기_딜러는_플레이어들에게_카드를_2장씩_배분한다() { //given - GamePlayers gamePlayers = GamePlayers.makePlayers(new Names(Arrays.asList(new Name("pobi"), new Name("jason")))); + GamePlayers gamePlayers = new GamePlayers(new Names(Arrays.asList(new Name("pobi"), new Name("jason")))); BlackJackGame dealer = new BlackJackGame(cardPack); //when diff --git a/src/test/java/blackjack/domain/card/CardPackTest.java b/src/test/java/blackjack/domain/card/CardPackTest.java index e943d07f..c7d8a6b1 100644 --- a/src/test/java/blackjack/domain/card/CardPackTest.java +++ b/src/test/java/blackjack/domain/card/CardPackTest.java @@ -10,7 +10,7 @@ class CardPackTest { @Test public void 초기_카드팩은_52장의_카드가_생성된다() { //given - CardPack cardPack = CardPack.create(); + CardPack cardPack = new CardPack(); //when List cards = cardPack.getCardPack(); @@ -22,7 +22,7 @@ class CardPackTest { @Test public void 카드팩에서_한장_빼온뒤에는_카드팩에_남아있는_재고가_하나_감소한다() { //given - CardPack cardPack = CardPack.create(); + CardPack cardPack = new CardPack(); //when cardPack.pick(); diff --git a/src/test/java/blackjack/domain/gameplayer/DealerPlayerTest.java b/src/test/java/blackjack/domain/gameplayer/DealerPlayerTest.java index c6353ee4..99b36b83 100644 --- a/src/test/java/blackjack/domain/gameplayer/DealerPlayerTest.java +++ b/src/test/java/blackjack/domain/gameplayer/DealerPlayerTest.java @@ -14,8 +14,7 @@ class DealerPlayerTest { @Test public void 딜러는_카드의합이_16이하면_카드를_받을수있는_조건이_된다() { //given - GamePlayers gamePlayers = GamePlayers.makePlayers(new Names( - Arrays.asList(new Name("pobi"), new Name("jason")))); + GamePlayers gamePlayers = new GamePlayers(new Names(Arrays.asList(new Name("pobi"), new Name("jason")))); GamePlayer dealer = gamePlayers.getDealer(); //when @@ -28,8 +27,7 @@ class DealerPlayerTest { @Test public void 딜러는_카드의합이_16초과면_카드를_받을수없다() { //given - GamePlayers gamePlayers = GamePlayers.makePlayers(new Names( - Arrays.asList(new Name("pobi"), new Name("jason")))); + GamePlayers gamePlayers = new GamePlayers(new Names(Arrays.asList(new Name("pobi"), new Name("jason")))); GamePlayer dealer = gamePlayers.getDealer(); //when @@ -43,8 +41,7 @@ class DealerPlayerTest { @Test public void 딜러플레이어의_최종승패는_올바르게_계산된다_2승을출력() { //given - GamePlayers gamePlayers = GamePlayers.makePlayers(new Names( - Arrays.asList(new Name("pobi"), new Name("jason")))); + GamePlayers gamePlayers = new GamePlayers(new Names(Arrays.asList(new Name("pobi"), new Name("jason")))); List players = gamePlayers.getPlayers(); GamePlayer dealer = gamePlayers.getDealer(); dealer.receiveCard(new Card(CardSymbol.DIAMOND, CardType.ACE)); @@ -52,17 +49,16 @@ class DealerPlayerTest { players.get(1).receiveCard(new Card(CardSymbol.CLOVER, CardType.FOUR)); //when - String dealerResult = dealer.getGameResult(gamePlayers); + String dealerResult = dealer.getGameResult(gamePlayers.getPlayers()); //then - assertThat(dealerResult).isEqualTo("2승"); + assertThat(dealerResult).isEqualTo("2승 0패"); } @Test public void 딜러플레이어의_최종승패는_올바르게_계산된다_1승1패를출력() { //given - GamePlayers gamePlayers = GamePlayers.makePlayers(new Names( - Arrays.asList(new Name("pobi"), new Name("jason")))); + GamePlayers gamePlayers = new GamePlayers(new Names(Arrays.asList(new Name("pobi"), new Name("jason")))); List players = gamePlayers.getPlayers(); GamePlayer dealer = gamePlayers.getDealer(); dealer.receiveCard(new Card(CardSymbol.DIAMOND, CardType.SIX)); @@ -70,9 +66,9 @@ class DealerPlayerTest { players.get(1).receiveCard(new Card(CardSymbol.CLOVER, CardType.FOUR)); //when - String dealerResult = dealer.getGameResult(gamePlayers); + String dealerResult = dealer.getGameResult(gamePlayers.getPlayers()); //then - assertThat(dealerResult).isEqualTo("1승1패"); + assertThat(dealerResult).isEqualTo("1승 1패"); } } diff --git a/src/test/java/blackjack/domain/gameplayer/GamePlayersTest.java b/src/test/java/blackjack/domain/gameplayer/GamePlayersTest.java index 2c974881..0374d551 100644 --- a/src/test/java/blackjack/domain/gameplayer/GamePlayersTest.java +++ b/src/test/java/blackjack/domain/gameplayer/GamePlayersTest.java @@ -15,7 +15,7 @@ class GamePlayersTest { List names = Arrays.asList("pobi", "jason"); //when - GamePlayers gamePlayers = GamePlayers.makePlayers(new Names(Arrays.asList(new Name("pobi"), new Name("jason")))); + GamePlayers gamePlayers = new GamePlayers(new Names(Arrays.asList(new Name("pobi"), new Name("jason")))); List players = gamePlayers.getPlayers().stream() .map(GamePlayer::getName) .collect(Collectors.toList()); diff --git a/src/test/java/blackjack/domain/gameplayer/PlayerTest.java b/src/test/java/blackjack/domain/gameplayer/PlayerTest.java index 89cda73c..25f5c6ae 100644 --- a/src/test/java/blackjack/domain/gameplayer/PlayerTest.java +++ b/src/test/java/blackjack/domain/gameplayer/PlayerTest.java @@ -54,8 +54,7 @@ class PlayerTest { @Test public void 플레이어는_카드의합이_21이하면_카드를_받을수있는_조건이_된다() { //given - GamePlayers gamePlayers = GamePlayers.makePlayers(new Names( - Arrays.asList(new Name("pobi")))); + GamePlayers gamePlayers = new GamePlayers(new Names(Arrays.asList(new Name("pobi")))); List players = gamePlayers.getPlayers(); GamePlayer player = players.get(0); @@ -71,8 +70,7 @@ class PlayerTest { @Test public void 딜러는_카드의합이_21초과면_카드를_받을수없다() { //given - GamePlayers gamePlayers = GamePlayers.makePlayers(new Names( - Arrays.asList(new Name("pobi")))); + GamePlayers gamePlayers = new GamePlayers(new Names(Arrays.asList(new Name("pobi")))); List players = gamePlayers.getPlayers(); GamePlayer player = players.get(0); @@ -89,14 +87,14 @@ class PlayerTest { @Test public void 일반플레이어의_최종승패는_올바르게_계산된다() { //given - GamePlayers gamePlayers = GamePlayers.makePlayers(new Names(Arrays.asList(new Name("pobi"), new Name("jason")))); + GamePlayers gamePlayers = new GamePlayers(new Names(Arrays.asList(new Name("pobi"), new Name("jason")))); List players = gamePlayers.getPlayers(); players.get(0).receiveCard(new Card(CardSymbol.CLOVER, CardType.NINE)); players.get(1).receiveCard(new Card(CardSymbol.CLOVER, CardType.FOUR)); //when - String pobiResult = players.get(0).getGameResult(gamePlayers); - String jasonResult = players.get(1).getGameResult(gamePlayers); + String pobiResult = players.get(0).getGameResult(gamePlayers.getAllPlayers()); + String jasonResult = players.get(1).getGameResult(gamePlayers.getAllPlayers()); //then org.junit.jupiter.api.Assertions.assertAll( From 3818a2f17e173d2dd518cd1cebfafa36214c5ffb Mon Sep 17 00:00:00 2001 From: kimsunghyun Date: Sun, 20 Feb 2022 14:43:03 +0900 Subject: [PATCH 164/182] refactor: rename DealerPlayer -> Dealer --- .../domain/gameplayer/{DealerPlayer.java => Dealer.java} | 6 +++--- src/main/java/blackjack/domain/gameplayer/GamePlayers.java | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) rename src/main/java/blackjack/domain/gameplayer/{DealerPlayer.java => Dealer.java} (88%) diff --git a/src/main/java/blackjack/domain/gameplayer/DealerPlayer.java b/src/main/java/blackjack/domain/gameplayer/Dealer.java similarity index 88% rename from src/main/java/blackjack/domain/gameplayer/DealerPlayer.java rename to src/main/java/blackjack/domain/gameplayer/Dealer.java index 67a00d10..8d3a4b5f 100644 --- a/src/main/java/blackjack/domain/gameplayer/DealerPlayer.java +++ b/src/main/java/blackjack/domain/gameplayer/Dealer.java @@ -2,17 +2,17 @@ import java.util.List; -public class DealerPlayer extends GamePlayer { +public class Dealer extends GamePlayer { private static final String DEALER = "딜러"; private static final int DEALER_BOUND = 16; private static final String DealerResult = "%d승 %d패"; - public DealerPlayer() { + public Dealer() { this(new Name(DEALER)); } - public DealerPlayer(final Name name) { + public Dealer(final Name name) { super(name); } diff --git a/src/main/java/blackjack/domain/gameplayer/GamePlayers.java b/src/main/java/blackjack/domain/gameplayer/GamePlayers.java index f6e669cd..ced03b32 100644 --- a/src/main/java/blackjack/domain/gameplayer/GamePlayers.java +++ b/src/main/java/blackjack/domain/gameplayer/GamePlayers.java @@ -21,7 +21,7 @@ public static List makePlayers(final Names names) { .map(Player::new) .collect(Collectors.toList()); - players.add(FRONT, new DealerPlayer()); + players.add(FRONT, new Dealer()); return new ArrayList<>(players); } From 857e174d04e70734fb16df278921db5e9101ee05 Mon Sep 17 00:00:00 2001 From: kimsunghyun Date: Sun, 20 Feb 2022 14:48:52 +0900 Subject: [PATCH 165/182] =?UTF-8?q?feat:=20BlackGameTest=20=EC=B9=B4?= =?UTF-8?q?=EB=93=9C=20=EB=B6=84=EB=B0=B0=ED=9B=84=20=EB=82=A8=EC=95=84?= =?UTF-8?q?=EC=9E=88=EB=8A=94=20=EC=B9=B4=EB=93=9C=ED=8C=A9=EC=97=90=20?= =?UTF-8?q?=EB=82=A8=EC=95=84=EC=9E=88=EB=8A=94=20=EC=B9=B4=EB=93=9C=20?= =?UTF-8?q?=EC=88=98=20=EA=B2=80=EC=A6=9D=20=ED=85=8C=EC=8A=A4=ED=8A=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/blackjack/domain/BlackJackGameTest.java | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/src/test/java/blackjack/domain/BlackJackGameTest.java b/src/test/java/blackjack/domain/BlackJackGameTest.java index 9f3dd5d4..b6c67dac 100644 --- a/src/test/java/blackjack/domain/BlackJackGameTest.java +++ b/src/test/java/blackjack/domain/BlackJackGameTest.java @@ -32,4 +32,17 @@ class BlackJackGameTest { assertThat(cards.size()).isEqualTo(2); } } + + @Test + public void 카드분배후_남아있는_카드의_개수는_그만큼_차감된다() { + //given + GamePlayers gamePlayers = new GamePlayers(new Names(Arrays.asList(new Name("pobi"), new Name("jason")))); + BlackJackGame dealer = new BlackJackGame(cardPack); + + //when + dealer.initializeGame(gamePlayers); + + //then + assertThat(cardPack.getCardPack().size()).isEqualTo(46); + } } From 57591ed488c79d852d5c7ceff2d4e36bc5a3bab0 Mon Sep 17 00:00:00 2001 From: kimsunghyun Date: Sun, 20 Feb 2022 15:15:30 +0900 Subject: [PATCH 166/182] =?UTF-8?q?fix:=20CardPack#create=20=EC=A0=91?= =?UTF-8?q?=EA=B7=BC=EC=A0=9C=EC=96=B4=EC=9E=90=20private=EB=A1=9C=20?= =?UTF-8?q?=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/blackjack/domain/card/CardPack.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/blackjack/domain/card/CardPack.java b/src/main/java/blackjack/domain/card/CardPack.java index e375a6c0..31b1dbbb 100644 --- a/src/main/java/blackjack/domain/card/CardPack.java +++ b/src/main/java/blackjack/domain/card/CardPack.java @@ -15,7 +15,7 @@ public CardPack() { this.cardPack = create(); } - public List create() { + private List create() { final List cards = new ArrayList<>(); for (final CardSymbol symbol : CardSymbol.values()) { Arrays.stream(CardType.values()) From 035065402da6663873cea41cddc2deca8458218c Mon Sep 17 00:00:00 2001 From: kimsunghyun Date: Sun, 20 Feb 2022 15:15:48 +0900 Subject: [PATCH 167/182] =?UTF-8?q?feat:=20CardPackTest=20=EC=B9=B4?= =?UTF-8?q?=EB=93=9C=ED=8C=A9=EC=9D=B4=20=EC=A0=95=EC=83=81=EC=A0=81?= =?UTF-8?q?=EC=9C=BC=EB=A1=9C=20=EC=85=94=ED=94=8C=EB=90=98=EC=96=B4?= =?UTF-8?q?=EC=A7=80=EB=8A=94=EC=A7=80=20=EA=B2=80=EC=A6=9D=20=ED=85=8C?= =?UTF-8?q?=EC=8A=A4=ED=8A=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../blackjack/domain/card/CardPackTest.java | 20 +++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/src/test/java/blackjack/domain/card/CardPackTest.java b/src/test/java/blackjack/domain/card/CardPackTest.java index c7d8a6b1..b9922cdc 100644 --- a/src/test/java/blackjack/domain/card/CardPackTest.java +++ b/src/test/java/blackjack/domain/card/CardPackTest.java @@ -2,6 +2,8 @@ import static org.assertj.core.api.Assertions.assertThat; +import java.util.ArrayList; +import java.util.Arrays; import java.util.List; import org.junit.jupiter.api.Test; @@ -30,4 +32,22 @@ class CardPackTest { //then assertThat(cardPack.getCardPack().size()).isEqualTo(51); } + + @Test + public void 카드가_정상적으로_셔플되어진다() { + //given + CardPack cardPack = new CardPack(); + + //when + List originCards = new ArrayList<>(); + for (final CardSymbol symbol : CardSymbol.values()) { + Arrays.stream(CardType.values()) + .forEach(type -> originCards.add(new Card(symbol, type))); + } + + List shuffleCards = cardPack.getCardPack(); + + //then + assertThat(originCards).doesNotContainSequence(shuffleCards.toArray(new Card[0])); + } } From 339c2145a2365adc1345adca9278c11e29abdec0 Mon Sep 17 00:00:00 2001 From: kimsunghyun Date: Sun, 20 Feb 2022 15:48:16 +0900 Subject: [PATCH 168/182] =?UTF-8?q?fix:=20InputView=EC=97=90=EC=84=9C=20?= =?UTF-8?q?=EC=B2=98=EB=A6=AC=ED=95=98=EB=8D=98=20SplitName=20=EB=A1=9C?= =?UTF-8?q?=EC=A7=81=EC=9D=84=20Names=EA=B0=80=20=EA=B0=80=EC=A7=80?= =?UTF-8?q?=EB=8F=84=EB=A1=9D=20=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 및 Names 생성자 시그니처 추가 --- .../blackjack/controller/GameController.java | 11 +++----- .../blackjack/domain/gameplayer/Names.java | 25 ++++++++++++++++++- src/main/java/blackjack/view/InputView.java | 17 +++---------- 3 files changed, 30 insertions(+), 23 deletions(-) diff --git a/src/main/java/blackjack/controller/GameController.java b/src/main/java/blackjack/controller/GameController.java index bbcf78a8..fc7b1052 100644 --- a/src/main/java/blackjack/controller/GameController.java +++ b/src/main/java/blackjack/controller/GameController.java @@ -4,12 +4,10 @@ import blackjack.domain.card.CardPack; import blackjack.domain.gameplayer.GamePlayer; import blackjack.domain.gameplayer.GamePlayers; -import blackjack.domain.gameplayer.Name; import blackjack.domain.gameplayer.Names; import blackjack.view.InputView; import blackjack.view.OutputView; import java.util.List; -import java.util.stream.Collectors; public class GameController { @@ -31,19 +29,16 @@ public void start() { private Names getConsoleNames() { try { - return convertStringsToNames(InputView.getPlayerName()); + return convertStringToNames(InputView.getPlayerName()); } catch (IllegalArgumentException e) { e.printStackTrace(); return getConsoleNames(); } } - private Names convertStringsToNames(List originNames) { - return new Names(originNames.stream() - .map(Name::new) - .collect(Collectors.toList())); + private Names convertStringToNames(String names) { + return new Names(names); } - private void printInitialStatus(GamePlayers gamePlayers) { printInitialMessage(gamePlayers); printCardAllStatus(gamePlayers); diff --git a/src/main/java/blackjack/domain/gameplayer/Names.java b/src/main/java/blackjack/domain/gameplayer/Names.java index e1da83b2..cd1f71ce 100644 --- a/src/main/java/blackjack/domain/gameplayer/Names.java +++ b/src/main/java/blackjack/domain/gameplayer/Names.java @@ -1,21 +1,44 @@ package blackjack.domain.gameplayer; +import java.util.Arrays; import java.util.Collections; import java.util.HashSet; import java.util.List; import java.util.Set; +import java.util.stream.Collectors; public class Names { + private static final String DELIMITER = ","; private static final String DUPLICATE_NAMES = "중복된 이름은 들어올 수 없습니다."; - private final List names; + private List names; + + public Names(final String input) { + this(stringToNames(input)); + } public Names(final List names) { validateDuplicateNames(names); this.names = names; } + private static List stringToNames(String input) { + List names = splitPlayerName(input); + + return names.stream() + .map(Name::new) + .collect(Collectors.toList()); + } + + private static List splitPlayerName(String input) { + String[] split = input.split(DELIMITER); + return Arrays.stream(split) + .map(String::trim) + .filter(name -> !name.isEmpty()) + .collect(Collectors.toList()); + } + private void validateDuplicateNames(final List names) { final Set set = new HashSet<>(names); if (set.size() != names.size()) { diff --git a/src/main/java/blackjack/view/InputView.java b/src/main/java/blackjack/view/InputView.java index 9f544703..9e971fef 100644 --- a/src/main/java/blackjack/view/InputView.java +++ b/src/main/java/blackjack/view/InputView.java @@ -1,24 +1,21 @@ package blackjack.view; import blackjack.domain.gameplayer.GamePlayer; -import java.util.Arrays; -import java.util.List; import java.util.Scanner; -import java.util.stream.Collectors; public class InputView { private static final Scanner scanner = new Scanner(System.in); private static final String GET_PLAYER_MESSAGE = "게임에 참여할 사람의 이름을 입력하세요."; private static final String QUESTION_ACCEPT_CARD_MESSAGE = "%s는 한장의 카드를 더 받겠습니까?(예는 y, 아니오는 n)"; - private static final String DELIMITER = ","; - public static List getPlayerName() { + + public static String getPlayerName() { System.out.println(GET_PLAYER_MESSAGE); String input = scanner.nextLine(); validateEmpty(input); - return splitPlayerName(input); + return input; } public static boolean getPlayerChoice(GamePlayer player) { @@ -33,14 +30,6 @@ public static boolean getPlayerChoice(GamePlayer player) { } } - private static List splitPlayerName(String input) { - String[] split = input.split(DELIMITER); - return Arrays.stream(split) - .map(String::trim) - .filter(name -> !name.isEmpty()) - .collect(Collectors.toList()); - } - private static void validateEmpty(String input) { if (input.isEmpty()) { throw new IllegalArgumentException(); From fb20edf6ee971a1595c1078d1a1aca46cf271395 Mon Sep 17 00:00:00 2001 From: kimsunghyun Date: Sun, 20 Feb 2022 15:51:25 +0900 Subject: [PATCH 169/182] =?UTF-8?q?refactor:=20Cards#getBestSumWithAce=20?= =?UTF-8?q?=EB=A1=9C=EC=A7=81=EC=9D=84=20=EC=A2=80=20=EB=8D=94=20=EA=B0=80?= =?UTF-8?q?=EB=8F=85=EC=84=B1=EC=9E=88=EA=B2=8C=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/gameplayer/Cards.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/main/java/blackjack/domain/gameplayer/Cards.java b/src/main/java/blackjack/domain/gameplayer/Cards.java index c588461c..a111e377 100644 --- a/src/main/java/blackjack/domain/gameplayer/Cards.java +++ b/src/main/java/blackjack/domain/gameplayer/Cards.java @@ -54,8 +54,9 @@ private int getBestSumWithAce(final int sum) { int aceCount = getAceCount(); int totalPoint = sum; - while (aceCount-- > 0 && totalPoint > BLACK_JACK) { + while (aceCount > 0 && totalPoint > BLACK_JACK) { totalPoint = totalPoint - higherAcePoint + lowerAcePoint; + aceCount--; } return totalPoint; } From d49b8fc9a591808654b75f45fb5892c5cd6f979d Mon Sep 17 00:00:00 2001 From: kimsunghyun Date: Sun, 20 Feb 2022 15:53:46 +0900 Subject: [PATCH 170/182] =?UTF-8?q?refactor:=20InputView=EC=9D=98=20?= =?UTF-8?q?=EB=A7=A4=EC=A7=81=EB=84=98=EB=B2=84=20=EC=B2=98=EB=A6=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/blackjack/view/InputView.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/java/blackjack/view/InputView.java b/src/main/java/blackjack/view/InputView.java index 9e971fef..bdf14198 100644 --- a/src/main/java/blackjack/view/InputView.java +++ b/src/main/java/blackjack/view/InputView.java @@ -8,7 +8,7 @@ public class InputView { private static final Scanner scanner = new Scanner(System.in); private static final String GET_PLAYER_MESSAGE = "게임에 참여할 사람의 이름을 입력하세요."; private static final String QUESTION_ACCEPT_CARD_MESSAGE = "%s는 한장의 카드를 더 받겠습니까?(예는 y, 아니오는 n)"; - + private static final String USER_OK = "y"; public static String getPlayerName() { System.out.println(GET_PLAYER_MESSAGE); @@ -23,7 +23,7 @@ public static boolean getPlayerChoice(GamePlayer player) { System.out.println(String.format(QUESTION_ACCEPT_CARD_MESSAGE, player.getName())); String input = scanner.nextLine(); validateEmpty(input); - return input.equals("y"); + return input.equals(USER_OK); } catch (IllegalArgumentException e) { e.printStackTrace(); return getPlayerChoice(player); From fc179f6331b0716c545e929b4d64087005d0bdd8 Mon Sep 17 00:00:00 2001 From: kimsunghyun Date: Sun, 20 Feb 2022 16:31:37 +0900 Subject: [PATCH 171/182] =?UTF-8?q?chore:=20Cards=EC=9D=98=20=EC=9C=84?= =?UTF-8?q?=EC=B9=98=EB=A5=BC=20Card=20=ED=8C=A8=ED=82=A4=EC=A7=80?= =?UTF-8?q?=EB=A1=9C=20=EC=9D=B4=EB=8F=99?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/blackjack/domain/{gameplayer => card}/Cards.java | 4 +--- src/main/java/blackjack/domain/gameplayer/GamePlayer.java | 1 + src/test/java/blackjack/domain/gameplayer/CardsTest.java | 1 + 3 files changed, 3 insertions(+), 3 deletions(-) rename src/main/java/blackjack/domain/{gameplayer => card}/Cards.java (92%) diff --git a/src/main/java/blackjack/domain/gameplayer/Cards.java b/src/main/java/blackjack/domain/card/Cards.java similarity index 92% rename from src/main/java/blackjack/domain/gameplayer/Cards.java rename to src/main/java/blackjack/domain/card/Cards.java index a111e377..992d3cde 100644 --- a/src/main/java/blackjack/domain/gameplayer/Cards.java +++ b/src/main/java/blackjack/domain/card/Cards.java @@ -1,7 +1,5 @@ -package blackjack.domain.gameplayer; +package blackjack.domain.card; -import blackjack.domain.card.Card; -import blackjack.domain.card.CardType; import java.util.ArrayList; import java.util.Collections; import java.util.List; diff --git a/src/main/java/blackjack/domain/gameplayer/GamePlayer.java b/src/main/java/blackjack/domain/gameplayer/GamePlayer.java index 7b6cc222..78da1ae6 100644 --- a/src/main/java/blackjack/domain/gameplayer/GamePlayer.java +++ b/src/main/java/blackjack/domain/gameplayer/GamePlayer.java @@ -1,6 +1,7 @@ package blackjack.domain.gameplayer; import blackjack.domain.card.Card; +import blackjack.domain.card.Cards; import java.util.List; public abstract class GamePlayer { diff --git a/src/test/java/blackjack/domain/gameplayer/CardsTest.java b/src/test/java/blackjack/domain/gameplayer/CardsTest.java index 337d2051..bef40fab 100644 --- a/src/test/java/blackjack/domain/gameplayer/CardsTest.java +++ b/src/test/java/blackjack/domain/gameplayer/CardsTest.java @@ -5,6 +5,7 @@ import blackjack.domain.card.Card; import blackjack.domain.card.CardSymbol; import blackjack.domain.card.CardType; +import blackjack.domain.card.Cards; import org.junit.jupiter.api.Test; class CardsTest { From 4e769a4a7dc990a79f52c995b9e852111a925694 Mon Sep 17 00:00:00 2001 From: kimsunghyun Date: Mon, 21 Feb 2022 18:32:58 +0900 Subject: [PATCH 172/182] =?UTF-8?q?fix:=20=EB=8F=84=EB=A9=94=EC=9D=B8?= =?UTF-8?q?=EC=97=90=EC=84=9C=20=EC=A7=84=ED=96=89=ED=95=98=EB=8D=98=20?= =?UTF-8?q?=EA=B2=8C=EC=9E=84=EC=A7=84=ED=96=89=ED=94=84=EB=A1=9C=EC=84=B8?= =?UTF-8?q?=EC=8A=A4=EB=A5=BC=20=EC=BB=A8=ED=8A=B8=EB=A1=A4=EB=9F=AC?= =?UTF-8?q?=EB=A1=9C=20=EC=98=AE=EA=B2=A8=EC=84=9C=20=EB=8F=84=EB=A9=94?= =?UTF-8?q?=EC=9D=B8=EB=A1=9C=EC=A7=81=EA=B3=BC=20=ED=99=94=EB=A9=B4?= =?UTF-8?q?=EC=9D=84=20=EB=B6=84=EB=A6=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../blackjack/controller/GameController.java | 49 +++++++++++------ .../java/blackjack/domain/BlackJackGame.java | 55 ------------------- src/main/java/blackjack/view/OutputView.java | 6 +- 3 files changed, 35 insertions(+), 75 deletions(-) delete mode 100644 src/main/java/blackjack/domain/BlackJackGame.java diff --git a/src/main/java/blackjack/controller/GameController.java b/src/main/java/blackjack/controller/GameController.java index fc7b1052..f341d5f8 100644 --- a/src/main/java/blackjack/controller/GameController.java +++ b/src/main/java/blackjack/controller/GameController.java @@ -1,6 +1,5 @@ package blackjack.controller; -import blackjack.domain.BlackJackGame; import blackjack.domain.card.CardPack; import blackjack.domain.gameplayer.GamePlayer; import blackjack.domain.gameplayer.GamePlayers; @@ -11,19 +10,14 @@ public class GameController { - private static final int initialCardSize = 2; - public void start() { final CardPack cardPack = new CardPack(); - final BlackJackGame dealer = new BlackJackGame(cardPack); final GamePlayers gamePlayers = new GamePlayers(getConsoleNames()); - dealer.initializeGame(gamePlayers); + initializeGame(gamePlayers, cardPack); printInitialStatus(gamePlayers); - dealer.playGame(gamePlayers); -// printPlayerMessage(gamePlayers); - printDealerMessage(gamePlayers); + playGame(gamePlayers, cardPack); printFinalStatus(gamePlayers); } @@ -39,6 +33,16 @@ private Names getConsoleNames() { private Names convertStringToNames(String names) { return new Names(names); } + + public void initializeGame(final GamePlayers gamePlayers, final CardPack cardPack) { + List players = gamePlayers.getAllPlayers(); + + players.forEach(player -> { + player.receiveCard(cardPack.pick()); + player.receiveCard(cardPack.pick()); + }); + } + private void printInitialStatus(GamePlayers gamePlayers) { printInitialMessage(gamePlayers); printCardAllStatus(gamePlayers); @@ -52,16 +56,29 @@ private void printCardAllStatus(GamePlayers gamePlayers) { OutputView.printCardAllStatus(gamePlayers); } - private void printDealerMessage(GamePlayers gamePlayers) { - GamePlayer dealer = gamePlayers.getDealer(); - int dealerReceiveCount = dealer.getCards().size() - initialCardSize; - OutputView.printDealerAcceptCard(dealerReceiveCount); + public void playGame(GamePlayers gamePlayers, CardPack cardPack) { + final List players = gamePlayers.getPlayers(); + final GamePlayer dealer = gamePlayers.getDealer(); + + for (final GamePlayer player : players) { + playerGameProcess(player, cardPack); + } + dealerGameProcess(dealer, cardPack); + } + + private void playerGameProcess(final GamePlayer player, CardPack cardPack) { + while (player.isContinue() && InputView.getPlayerChoice(player)) { + player.receiveCard(cardPack.pick()); + OutputView.printCardStatus(player); + } + + OutputView.printCardStatus(player); } - private void printPlayerMessage(GamePlayers gamePlayers) { - List players = gamePlayers.getPlayers(); - for (GamePlayer player : players) { -// OutputView.printCardStatus(player); + private void dealerGameProcess(final GamePlayer dealer, CardPack cardPack) { + while (dealer.isLowerThanBound()) { + dealer.receiveCard(cardPack.pick()); + OutputView.printDealerAcceptCard(); } } diff --git a/src/main/java/blackjack/domain/BlackJackGame.java b/src/main/java/blackjack/domain/BlackJackGame.java deleted file mode 100644 index 480f810b..00000000 --- a/src/main/java/blackjack/domain/BlackJackGame.java +++ /dev/null @@ -1,55 +0,0 @@ -package blackjack.domain; - -import blackjack.domain.card.CardPack; -import blackjack.domain.gameplayer.GamePlayer; -import blackjack.domain.gameplayer.GamePlayers; -import blackjack.view.InputView; -import blackjack.view.OutputView; -import java.util.List; - -public class BlackJackGame { - - private final CardPack cardPack; - - public BlackJackGame(final CardPack cardPack) { - this.cardPack = cardPack; - } - - public void initializeGame(final GamePlayers gamePlayers) { - List players = gamePlayers.getAllPlayers(); - - players.forEach(player -> { - player.receiveCard(cardPack.pick()); - player.receiveCard(cardPack.pick()); - }); - } - - public void playGame(GamePlayers gamePlayers) { - final List players = gamePlayers.getPlayers(); - final GamePlayer dealer = gamePlayers.getDealer(); - - for (final GamePlayer player : players) { - playerGameProcess(player); - } - dealerGameProcess(dealer); - } - - private void playerGameProcess(final GamePlayer player) { - while (player.isContinue() && InputView.getPlayerChoice(player)) { - player.receiveCard(cardPack.pick()); - OutputView.printCardStatus(player); - } - - OutputView.printCardStatus(player); - } - - private void dealerGameProcess(final GamePlayer dealer) { - while (dealer.isLowerThanBound()) { - dealer.receiveCard(cardPack.pick()); - } - } - - public CardPack getCardPack() { - return this.cardPack; - } -} diff --git a/src/main/java/blackjack/view/OutputView.java b/src/main/java/blackjack/view/OutputView.java index c0452429..8e2ad151 100644 --- a/src/main/java/blackjack/view/OutputView.java +++ b/src/main/java/blackjack/view/OutputView.java @@ -37,10 +37,8 @@ public static void printCardStatus(GamePlayer player) { System.out.println(String.format(CARDS_LOG, player.getName(), getPlayerCardStatus(player))); } - public static void printDealerAcceptCard(int dealerReceiveCount) { - for (int i = 0; i < dealerReceiveCount; i++) { - System.out.println(DEALER_RECEIVE_ONE_CARD_MESSAGE); - } + public static void printDealerAcceptCard() { + System.out.println(DEALER_RECEIVE_ONE_CARD_MESSAGE); } public static void printCardResult(GamePlayers gamePlayers) { From aab1025d43fc2d5d46c56b41a7aaef615b45135b Mon Sep 17 00:00:00 2001 From: kimsunghyun Date: Mon, 21 Feb 2022 18:33:44 +0900 Subject: [PATCH 173/182] =?UTF-8?q?refactor:=20=EB=AF=B8=EC=82=AC=EC=9A=A9?= =?UTF-8?q?=20=ED=81=B4=EB=9E=98=EC=8A=A4=20=EC=A0=9C=EA=B1=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../blackjack/domain/BlackJackGameTest.java | 48 ------------------- 1 file changed, 48 deletions(-) delete mode 100644 src/test/java/blackjack/domain/BlackJackGameTest.java diff --git a/src/test/java/blackjack/domain/BlackJackGameTest.java b/src/test/java/blackjack/domain/BlackJackGameTest.java deleted file mode 100644 index b6c67dac..00000000 --- a/src/test/java/blackjack/domain/BlackJackGameTest.java +++ /dev/null @@ -1,48 +0,0 @@ -package blackjack.domain; - -import static org.assertj.core.api.Assertions.assertThat; - -import blackjack.domain.card.Card; -import blackjack.domain.card.CardPack; -import blackjack.domain.gameplayer.GamePlayer; -import blackjack.domain.gameplayer.GamePlayers; -import blackjack.domain.gameplayer.Name; -import blackjack.domain.gameplayer.Names; -import java.util.Arrays; -import java.util.List; -import org.junit.jupiter.api.Test; - -class BlackJackGameTest { - - CardPack cardPack = new CardPack(); - - @Test - public void 게임초기_딜러는_플레이어들에게_카드를_2장씩_배분한다() { - //given - GamePlayers gamePlayers = new GamePlayers(new Names(Arrays.asList(new Name("pobi"), new Name("jason")))); - BlackJackGame dealer = new BlackJackGame(cardPack); - - //when - dealer.initializeGame(gamePlayers); - List players = gamePlayers.getPlayers(); - - //then - for (GamePlayer player : players) { - List cards = player.getCards(); - assertThat(cards.size()).isEqualTo(2); - } - } - - @Test - public void 카드분배후_남아있는_카드의_개수는_그만큼_차감된다() { - //given - GamePlayers gamePlayers = new GamePlayers(new Names(Arrays.asList(new Name("pobi"), new Name("jason")))); - BlackJackGame dealer = new BlackJackGame(cardPack); - - //when - dealer.initializeGame(gamePlayers); - - //then - assertThat(cardPack.getCardPack().size()).isEqualTo(46); - } -} From 22526cd38b6fc23e8852f6ef235b1ad255504bc6 Mon Sep 17 00:00:00 2001 From: kimsunghyun Date: Thu, 24 Feb 2022 20:51:14 +0900 Subject: [PATCH 174/182] =?UTF-8?q?fix:=20=EC=B9=B4=EB=93=9C=ED=8C=A9=20?= =?UTF-8?q?=EC=9D=B8=EC=8A=A4=ED=84=B4=EC=8A=A4=EB=A5=BC=20=EB=A7=A4?= =?UTF-8?q?=EB=B2=88=20=EC=83=9D=EC=84=B1=ED=95=98=EC=A7=80=20=EC=95=8A?= =?UTF-8?q?=EB=8F=84=EB=A1=9D=20=EC=83=81=EC=88=98=ED=99=94=20=ED=95=98?= =?UTF-8?q?=EA=B3=A0=20shuffle=20=EB=A9=94=EC=84=9C=EB=93=9C=EB=A5=BC=20?= =?UTF-8?q?=EB=B6=84=EB=A6=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/blackjack/domain/card/CardPack.java | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/src/main/java/blackjack/domain/card/CardPack.java b/src/main/java/blackjack/domain/card/CardPack.java index 31b1dbbb..e0fc2533 100644 --- a/src/main/java/blackjack/domain/card/CardPack.java +++ b/src/main/java/blackjack/domain/card/CardPack.java @@ -8,19 +8,24 @@ public class CardPack { private static final int FRONT = 0; + private static final List cardPack = create(); - private final List cardPack; + private final List cards; public CardPack() { - this.cardPack = create(); + this.cards = shuffle(cardPack); } - private List create() { + private static List create() { final List cards = new ArrayList<>(); for (final CardSymbol symbol : CardSymbol.values()) { Arrays.stream(CardType.values()) .forEach(type -> cards.add(new Card(symbol, type))); } + return new ArrayList<>(cards); + } + + private List shuffle(List cards) { Collections.shuffle(cards); return new ArrayList<>(cards); } From 7254e358e3f28148baa9c07a3651b370b1d06a10 Mon Sep 17 00:00:00 2001 From: kimsunghyun Date: Thu, 24 Feb 2022 20:53:51 +0900 Subject: [PATCH 175/182] =?UTF-8?q?fix:=20=EC=B9=B4=EB=93=9C=ED=8C=A9?= =?UTF-8?q?=EC=9D=84=20=EB=B0=98=ED=99=98=ED=95=A0=20=EB=95=8C=20new=20Arr?= =?UTF-8?q?ayList<>()=EC=97=90=20=EB=8B=B4=EC=95=84=EC=84=9C=20=EC=B0=B8?= =?UTF-8?q?=EC=A1=B0=EB=A5=BC=20=EC=99=84=EC=A0=84=ED=9E=88=20=EB=81=8A?= =?UTF-8?q?=EC=96=B4=EB=B2=84=EB=A6=AC=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/card/CardPack.java | 6 +++--- src/test/java/blackjack/domain/card/CardPackTest.java | 6 +++--- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/src/main/java/blackjack/domain/card/CardPack.java b/src/main/java/blackjack/domain/card/CardPack.java index e0fc2533..d1a500f6 100644 --- a/src/main/java/blackjack/domain/card/CardPack.java +++ b/src/main/java/blackjack/domain/card/CardPack.java @@ -30,11 +30,11 @@ private List shuffle(List cards) { return new ArrayList<>(cards); } - public List getCardPack() { - return Collections.unmodifiableList(cardPack); + public List getCards() { + return new ArrayList<>(cards); } public Card pick() { - return cardPack.remove(FRONT); + return cards.remove(FRONT); } } diff --git a/src/test/java/blackjack/domain/card/CardPackTest.java b/src/test/java/blackjack/domain/card/CardPackTest.java index b9922cdc..3379eb73 100644 --- a/src/test/java/blackjack/domain/card/CardPackTest.java +++ b/src/test/java/blackjack/domain/card/CardPackTest.java @@ -15,7 +15,7 @@ class CardPackTest { CardPack cardPack = new CardPack(); //when - List cards = cardPack.getCardPack(); + List cards = cardPack.getCards(); //then assertThat(cards.size()).isEqualTo(52); @@ -30,7 +30,7 @@ class CardPackTest { cardPack.pick(); //then - assertThat(cardPack.getCardPack().size()).isEqualTo(51); + assertThat(cardPack.getCards().size()).isEqualTo(51); } @Test @@ -45,7 +45,7 @@ class CardPackTest { .forEach(type -> originCards.add(new Card(symbol, type))); } - List shuffleCards = cardPack.getCardPack(); + List shuffleCards = cardPack.getCards(); //then assertThat(originCards).doesNotContainSequence(shuffleCards.toArray(new Card[0])); From f4bddcfa9e229dd5b99070fbbcf4c7c814b778de Mon Sep 17 00:00:00 2001 From: kimsunghyun Date: Thu, 24 Feb 2022 20:56:51 +0900 Subject: [PATCH 176/182] =?UTF-8?q?refactor:=20=ED=95=98=EB=82=98=EC=9D=98?= =?UTF-8?q?=20=EB=8B=A8=EC=9C=84=ED=85=8C=EC=8A=A4=ED=8A=B8=EC=97=90=20?= =?UTF-8?q?=EC=97=AC=EB=9F=AC=EA=B0=9C=EB=A5=BC=20=EA=B2=80=EC=A6=9D?= =?UTF-8?q?=ED=95=A0=20=EB=95=8C=EB=8A=94=20assertAll=EC=9D=84=20=ED=99=9C?= =?UTF-8?q?=EC=9A=A9=ED=95=98=EB=8F=84=EB=A1=9D=20=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/test/java/rentcar/domain/RentCompanyTest.java | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/src/test/java/rentcar/domain/RentCompanyTest.java b/src/test/java/rentcar/domain/RentCompanyTest.java index 4999946d..2313fa96 100644 --- a/src/test/java/rentcar/domain/RentCompanyTest.java +++ b/src/test/java/rentcar/domain/RentCompanyTest.java @@ -1,5 +1,7 @@ package rentcar.domain; +import static org.assertj.core.api.Assertions.assertThat; + import java.util.ArrayList; import java.util.List; import org.assertj.core.api.Assertions; @@ -19,8 +21,10 @@ class RentCompanyTest { Report report = rentCompany.generateChargeQuantityByName(); - Assertions.assertThat(report.getReport().get("Avante")).isEqualTo(20); - Assertions.assertThat(report.getReport().get("K5")).isEqualTo(20); - Assertions.assertThat(report.getReport().get("Sonata")).isEqualTo(15); + org.junit.jupiter.api.Assertions.assertAll( + () -> assertThat(report.getReport().get("Avante")).isEqualTo(20), + () -> assertThat(report.getReport().get("K5")).isEqualTo(20), + () -> assertThat(report.getReport().get("Sonata")).isEqualTo(15) + ); } } From b7208608810a2b7ece2556e8d5ec80711186ce4e Mon Sep 17 00:00:00 2001 From: kimsunghyun Date: Thu, 24 Feb 2022 21:05:53 +0900 Subject: [PATCH 177/182] =?UTF-8?q?feat:=20Card=20=EA=B0=92=20=EB=B9=84?= =?UTF-8?q?=EA=B5=90=EB=A5=BC=20=EC=9C=84=ED=95=B4=20equals=20and=20hashco?= =?UTF-8?q?de=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/Card.java | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/src/main/java/blackjack/domain/card/Card.java b/src/main/java/blackjack/domain/card/Card.java index 2b2462c7..199e090d 100644 --- a/src/main/java/blackjack/domain/card/Card.java +++ b/src/main/java/blackjack/domain/card/Card.java @@ -1,5 +1,7 @@ package blackjack.domain.card; +import java.util.Objects; + public class Card { private final CardSymbol cardSymbol; @@ -17,4 +19,21 @@ public CardSymbol getCardSymbol() { public CardType getCardType() { return cardType; } + + @Override + public boolean equals(Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + Card card = (Card) o; + return cardSymbol == card.cardSymbol && cardType == card.cardType; + } + + @Override + public int hashCode() { + return Objects.hash(cardSymbol, cardType); + } } From 144e58cc7d7042eb4ec2079d869adefa34706063 Mon Sep 17 00:00:00 2001 From: kimsunghyun Date: Thu, 24 Feb 2022 21:07:04 +0900 Subject: [PATCH 178/182] =?UTF-8?q?fix:=20CardPack#shuffle()=20=EC=9D=98?= =?UTF-8?q?=20=EB=B0=98=ED=99=98=EA=B0=92=EC=9D=84=20void=EB=A1=9C=20?= =?UTF-8?q?=ED=95=98=EA=B3=A0=20=ED=81=B4=EB=9E=98=EC=8A=A4=20=ED=95=84?= =?UTF-8?q?=EB=93=9C=EA=B0=92=EC=97=90=20=EC=A7=81=EC=A0=91=20=EC=A3=BC?= =?UTF-8?q?=EC=9E=85?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/blackjack/controller/GameController.java | 1 + src/main/java/blackjack/domain/card/CardPack.java | 8 ++++---- 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/src/main/java/blackjack/controller/GameController.java b/src/main/java/blackjack/controller/GameController.java index f341d5f8..758952fc 100644 --- a/src/main/java/blackjack/controller/GameController.java +++ b/src/main/java/blackjack/controller/GameController.java @@ -12,6 +12,7 @@ public class GameController { public void start() { final CardPack cardPack = new CardPack(); + cardPack.shuffle(); final GamePlayers gamePlayers = new GamePlayers(getConsoleNames()); initializeGame(gamePlayers, cardPack); diff --git a/src/main/java/blackjack/domain/card/CardPack.java b/src/main/java/blackjack/domain/card/CardPack.java index d1a500f6..42bdaf72 100644 --- a/src/main/java/blackjack/domain/card/CardPack.java +++ b/src/main/java/blackjack/domain/card/CardPack.java @@ -10,10 +10,10 @@ public class CardPack { private static final int FRONT = 0; private static final List cardPack = create(); - private final List cards; + private List cards; public CardPack() { - this.cards = shuffle(cardPack); + this.cards = cardPack; } private static List create() { @@ -25,9 +25,9 @@ private static List create() { return new ArrayList<>(cards); } - private List shuffle(List cards) { + public void shuffle() { Collections.shuffle(cards); - return new ArrayList<>(cards); + this.cards = new ArrayList<>(cards); } public List getCards() { From bcb31243cd339152610424f6e7d0c52108b94f08 Mon Sep 17 00:00:00 2001 From: kimsunghyun Date: Thu, 24 Feb 2022 21:07:48 +0900 Subject: [PATCH 179/182] =?UTF-8?q?feat:=20CardPack#shuffle=20=EB=8B=A8?= =?UTF-8?q?=EC=9C=84=ED=85=8C=EC=8A=A4=ED=8A=B8=20=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../blackjack/domain/card/CardPackTest.java | 19 ++++++++++++++++--- 1 file changed, 16 insertions(+), 3 deletions(-) diff --git a/src/test/java/blackjack/domain/card/CardPackTest.java b/src/test/java/blackjack/domain/card/CardPackTest.java index 3379eb73..39ea1d58 100644 --- a/src/test/java/blackjack/domain/card/CardPackTest.java +++ b/src/test/java/blackjack/domain/card/CardPackTest.java @@ -34,17 +34,30 @@ class CardPackTest { } @Test - public void 카드가_정상적으로_셔플되어진다() { + public void 카드팩_생성초기_카드팩은_셔플되어지지_않은_상태다() { //given CardPack cardPack = new CardPack(); + List originCards = cardPack.getCards(); //when - List originCards = new ArrayList<>(); + final List cards = new ArrayList<>(); for (final CardSymbol symbol : CardSymbol.values()) { Arrays.stream(CardType.values()) - .forEach(type -> originCards.add(new Card(symbol, type))); + .forEach(type -> cards.add(new Card(symbol, type))); } + //then + assertThat(originCards).containsExactlyInAnyOrder(cards.toArray(new Card[0])); + } + + @Test + public void 카드가_정상적으로_셔플되어진다() { + //given + CardPack cardPack = new CardPack(); + + //when + List originCards = cardPack.getCards(); + cardPack.shuffle(); List shuffleCards = cardPack.getCards(); //then From cb7b253bbe6380016f3919ded5e7154f51d329d6 Mon Sep 17 00:00:00 2001 From: kimsunghyun Date: Thu, 24 Feb 2022 21:14:11 +0900 Subject: [PATCH 180/182] =?UTF-8?q?fix:=20Dealer#findWindCount=20=EB=A1=9C?= =?UTF-8?q?=EC=A7=81=20=EC=97=90=EB=9F=AC=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/blackjack/domain/gameplayer/Dealer.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/blackjack/domain/gameplayer/Dealer.java b/src/main/java/blackjack/domain/gameplayer/Dealer.java index 8d3a4b5f..fe0ad5e2 100644 --- a/src/main/java/blackjack/domain/gameplayer/Dealer.java +++ b/src/main/java/blackjack/domain/gameplayer/Dealer.java @@ -34,7 +34,7 @@ public String getGameResult(List players) { private int findWinCount(int dealerScore, List players) { return (int) players.stream() - .filter(player -> player.isContinue() && player.getScore() < dealerScore) + .filter(player -> !player.isContinue() || player.getScore() < dealerScore) .count(); } } From 32dcc56bc25b43dca9a1948f003f8f5eb1349b62 Mon Sep 17 00:00:00 2001 From: kimsunghyun Date: Thu, 24 Feb 2022 21:16:30 +0900 Subject: [PATCH 181/182] =?UTF-8?q?fix:=20CardPack=20=EC=83=9D=EC=84=B1?= =?UTF-8?q?=EC=9E=90=20=EB=A1=9C=EC=A7=81=20=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - new ArrayList<>()의 인자로 미리 생성한 카드팩을 넘겨준다. --- src/main/java/blackjack/domain/card/CardPack.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/blackjack/domain/card/CardPack.java b/src/main/java/blackjack/domain/card/CardPack.java index 42bdaf72..81bb2bc6 100644 --- a/src/main/java/blackjack/domain/card/CardPack.java +++ b/src/main/java/blackjack/domain/card/CardPack.java @@ -13,7 +13,7 @@ public class CardPack { private List cards; public CardPack() { - this.cards = cardPack; + this.cards = new ArrayList<>(cardPack); } private static List create() { From 816e608f882d57d5b9175194e24af99d756805b0 Mon Sep 17 00:00:00 2001 From: kimsunghyun Date: Thu, 24 Feb 2022 21:35:19 +0900 Subject: [PATCH 182/182] =?UTF-8?q?fix:=20CardPackTest#shuffle=20=EB=A1=9C?= =?UTF-8?q?=EC=A7=81=EC=9D=84=20containsExactly=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/test/java/blackjack/domain/card/CardPackTest.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/test/java/blackjack/domain/card/CardPackTest.java b/src/test/java/blackjack/domain/card/CardPackTest.java index 39ea1d58..c7810281 100644 --- a/src/test/java/blackjack/domain/card/CardPackTest.java +++ b/src/test/java/blackjack/domain/card/CardPackTest.java @@ -47,7 +47,7 @@ class CardPackTest { } //then - assertThat(originCards).containsExactlyInAnyOrder(cards.toArray(new Card[0])); + assertThat(originCards).containsExactly(cards.toArray(new Card[0])); } @Test