From cb0237604c685a27e082b2fd39bf6af2d961026d Mon Sep 17 00:00:00 2001 From: Dami Kim Date: Fri, 11 Feb 2022 16:39:09 +0900 Subject: [PATCH 001/155] =?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/155] =?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/155] =?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/155] =?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/155] =?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/155] =?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/155] =?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/155] =?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/155] =?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/155] =?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/155] =?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/155] =?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/155] =?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/155] =?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/155] =?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/155] =?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/155] =?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/155] =?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/155] =?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/155] =?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/155] =?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/155] =?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/155] =?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/155] =?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/155] =?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/155] =?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/155] =?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/155] =?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/155] =?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/155] =?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/155] =?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/155] =?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/155] =?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/155] =?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/155] =?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/155] =?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/155] =?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/155] =?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/155] =?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/155] =?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/155] =?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/155] =?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/155] =?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/155] =?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/155] =?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/155] =?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/155] 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/155] =?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/155] =?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/155] =?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/155] =?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/155] =?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/155] =?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/155] =?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/155] =?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/155] =?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/155] =?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/155] =?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/155] =?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/155] =?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/155] =?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/155] 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/155] =?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/155] =?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/155] =?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/155] =?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/155] =?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/155] =?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/155] =?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/155] =?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/155] =?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/155] =?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/155] =?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/155] =?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/155] =?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/155] =?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/155] =?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/155] =?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/155] =?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/155] =?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/155] =?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/155] =?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/155] 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/155] =?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/155] =?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/155] =?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/155] =?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/155] =?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/155] =?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/155] =?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/155] =?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/155] =?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/155] 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/155] =?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/155] =?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/155] =?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/155] =?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/155] =?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/155] 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/155] =?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/155] =?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/155] =?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/155] =?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/155] =?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/155] =?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/155] =?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/155] =?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/155] =?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/155] =?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/155] =?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/155] =?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/155] =?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/155] =?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/155] =?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/155] =?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/155] =?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/155] =?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/155] =?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/155] =?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/155] =?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/155] =?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/155] =?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/155] =?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/155] =?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/155] =?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/155] =?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/155] =?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/155] =?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/155] =?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/155] =?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/155] =?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/155] =?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/155] =?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/155] =?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/155] =?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/155] =?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/155] =?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/155] =?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/155] =?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/155] 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/155] =?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/155] =?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 6bf3b42254950f9531aecb01252982eda91dba77 Mon Sep 17 00:00:00 2001 From: Dami Kim Date: Mon, 21 Feb 2022 17:14:28 +0900 Subject: [PATCH 143/155] =?UTF-8?q?refactor:=20=EB=B6=88=ED=95=84=EC=9A=94?= =?UTF-8?q?=ED=95=9C=20=EB=A9=94=EC=84=9C=EB=93=9C=20=EC=82=AD=EC=A0=9C=20?= =?UTF-8?q?(Car=20=ED=81=B4=EB=9E=98=EC=8A=A4)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/rentcar/domain/Car.java | 4 ---- 1 file changed, 4 deletions(-) diff --git a/src/main/java/rentcar/domain/Car.java b/src/main/java/rentcar/domain/Car.java index 816c210f..71d87468 100644 --- a/src/main/java/rentcar/domain/Car.java +++ b/src/main/java/rentcar/domain/Car.java @@ -13,8 +13,4 @@ public Car(int distance) { abstract double getDistancePerLiter(); abstract String getCarName(); - - double getChargeQuantity() { - return getTripDistance() / getDistancePerLiter(); - } } From 3725f8b384f5c8f3a3320c597caec1f4f5ec8fc9 Mon Sep 17 00:00:00 2001 From: Dami Kim Date: Mon, 21 Feb 2022 17:48:25 +0900 Subject: [PATCH 144/155] =?UTF-8?q?refactor:=20Car=20=ED=81=B4=EB=9E=98?= =?UTF-8?q?=EC=8A=A4=20getChargeQuantity=20=EB=8B=A4=EC=8B=9C=20=EC=83=9D?= =?UTF-8?q?=EC=84=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/rentcar/domain/Car.java | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/main/java/rentcar/domain/Car.java b/src/main/java/rentcar/domain/Car.java index 71d87468..58082684 100644 --- a/src/main/java/rentcar/domain/Car.java +++ b/src/main/java/rentcar/domain/Car.java @@ -13,4 +13,8 @@ public Car(int distance) { abstract double getDistancePerLiter(); abstract String getCarName(); + + public double getChargeQuantity() { + return getTripDistance() / getDistancePerLiter(); + } } From 620bcf058437fe2f38bc3641c1cb106ff8f4d38d Mon Sep 17 00:00:00 2001 From: Dami Kim Date: Mon, 21 Feb 2022 17:52:33 +0900 Subject: [PATCH 145/155] =?UTF-8?q?refactor:=20getTripDistance()=20?= =?UTF-8?q?=EC=83=81=EC=9C=84=20=ED=81=B4=EB=9E=98=EC=8A=A4=EB=A1=9C=20?= =?UTF-8?q?=EC=9D=B4=EB=8F=99(Car)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/rentcar/domain/Avante.java | 5 ----- src/main/java/rentcar/domain/Car.java | 4 +++- src/main/java/rentcar/domain/K5.java | 5 ----- src/main/java/rentcar/domain/Sonata.java | 5 ----- 4 files changed, 3 insertions(+), 16 deletions(-) diff --git a/src/main/java/rentcar/domain/Avante.java b/src/main/java/rentcar/domain/Avante.java index f447b7ab..ff91a17c 100644 --- a/src/main/java/rentcar/domain/Avante.java +++ b/src/main/java/rentcar/domain/Avante.java @@ -9,11 +9,6 @@ public Avante(final int distance) { super(distance); } - @Override - double getTripDistance() { - return this.distance; - } - @Override double getDistancePerLiter() { return this.DISTANCE_PER_LITER; diff --git a/src/main/java/rentcar/domain/Car.java b/src/main/java/rentcar/domain/Car.java index 58082684..48e86567 100644 --- a/src/main/java/rentcar/domain/Car.java +++ b/src/main/java/rentcar/domain/Car.java @@ -8,7 +8,9 @@ public Car(int distance) { this.distance = distance; } - abstract double getTripDistance(); + public double getTripDistance() { + return this.distance; + } abstract double getDistancePerLiter(); diff --git a/src/main/java/rentcar/domain/K5.java b/src/main/java/rentcar/domain/K5.java index 84b7306e..f997d0a9 100644 --- a/src/main/java/rentcar/domain/K5.java +++ b/src/main/java/rentcar/domain/K5.java @@ -9,11 +9,6 @@ public K5(final int distance) { super(distance); } - @Override - double getTripDistance() { - return this.distance; - } - @Override double getDistancePerLiter() { return this.DISTANCE_PER_LITER; diff --git a/src/main/java/rentcar/domain/Sonata.java b/src/main/java/rentcar/domain/Sonata.java index 07676f86..93bd7cbd 100644 --- a/src/main/java/rentcar/domain/Sonata.java +++ b/src/main/java/rentcar/domain/Sonata.java @@ -9,11 +9,6 @@ public Sonata(final int distance) { super(distance); } - @Override - double getTripDistance() { - return this.distance; - } - @Override double getDistancePerLiter() { return this.DISTANCE_PER_LITER; From 757ab4f0e620ab0aa5e4d6c87d2746d52a8ddae6 Mon Sep 17 00:00:00 2001 From: Dami Kim Date: Mon, 21 Feb 2022 17:53:20 +0900 Subject: [PATCH 146/155] =?UTF-8?q?refactor:=20K5,=20Avante,=20Sonata=20DI?= =?UTF-8?q?STANCE=5FPER=5FLITER=20=EC=A0=91=EA=B7=BC=20=EB=B0=A9=EC=8B=9D?= =?UTF-8?q?=20=EC=88=98=EC=A0=95=20-=20this.DISTANCE=5FPER=5FLITER=20>=20D?= =?UTF-8?q?ISTANCE=5FPER=5FLITER?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/rentcar/domain/Avante.java | 2 +- src/main/java/rentcar/domain/K5.java | 2 +- src/main/java/rentcar/domain/Sonata.java | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/main/java/rentcar/domain/Avante.java b/src/main/java/rentcar/domain/Avante.java index ff91a17c..d17c92fd 100644 --- a/src/main/java/rentcar/domain/Avante.java +++ b/src/main/java/rentcar/domain/Avante.java @@ -11,7 +11,7 @@ public Avante(final int distance) { @Override double getDistancePerLiter() { - return this.DISTANCE_PER_LITER; + return DISTANCE_PER_LITER; } @Override diff --git a/src/main/java/rentcar/domain/K5.java b/src/main/java/rentcar/domain/K5.java index f997d0a9..b4d50dce 100644 --- a/src/main/java/rentcar/domain/K5.java +++ b/src/main/java/rentcar/domain/K5.java @@ -11,7 +11,7 @@ public K5(final int distance) { @Override double getDistancePerLiter() { - return this.DISTANCE_PER_LITER; + return DISTANCE_PER_LITER; } @Override diff --git a/src/main/java/rentcar/domain/Sonata.java b/src/main/java/rentcar/domain/Sonata.java index 93bd7cbd..d4669644 100644 --- a/src/main/java/rentcar/domain/Sonata.java +++ b/src/main/java/rentcar/domain/Sonata.java @@ -11,7 +11,7 @@ public Sonata(final int distance) { @Override double getDistancePerLiter() { - return this.DISTANCE_PER_LITER; + return DISTANCE_PER_LITER; } @Override From e6a009b046d44f0c989f2a20df7cd618e9e5e204 Mon Sep 17 00:00:00 2001 From: Dami Kim Date: Mon, 21 Feb 2022 18:13:49 +0900 Subject: [PATCH 147/155] =?UTF-8?q?refactor:=20cardPack=20=EC=A0=95?= =?UTF-8?q?=EC=A0=81=20=ED=8C=A9=ED=86=A0=EB=A6=AC=20=EB=A9=94=EC=84=9C?= =?UTF-8?q?=EB=93=9C=20=EB=84=A4=EC=9D=B4=EB=B0=8D=20=EC=88=98=EC=A0=95=20?= =?UTF-8?q?-=20createWithShuffling=20>=20create?= 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 | 2 +- src/test/java/blackjack/domain/DealerTest.java | 2 +- src/test/java/blackjack/domain/card/CardPackTest.java | 4 ++-- 4 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 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 0e1c023f..b8d13f87 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 createWithShuffling() { + public static CardPack create() { final List cards = new ArrayList<>(); for (final CardSymbol symbol : CardSymbol.values()) { Arrays.stream(CardType.values()) diff --git a/src/test/java/blackjack/domain/DealerTest.java b/src/test/java/blackjack/domain/DealerTest.java index 6d0080d1..6129f290 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 c9702f31..e8421730 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 7dfdabf9679c6b5f43d16596e08bfb657aaf0471 Mon Sep 17 00:00:00 2001 From: Dami Kim Date: Mon, 21 Feb 2022 22:25:23 +0900 Subject: [PATCH 148/155] =?UTF-8?q?refactor:=20getter=20=EC=9C=84=EC=B9=98?= =?UTF-8?q?=20=ED=95=98=EB=8B=A8=EC=9C=BC=EB=A1=9C=20=EC=9D=B4=EB=8F=99=20?= =?UTF-8?q?(CardPack)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/blackjack/domain/card/CardPack.java | 21 +++++++++++-------- 1 file changed, 12 insertions(+), 9 deletions(-) diff --git a/src/main/java/blackjack/domain/card/CardPack.java b/src/main/java/blackjack/domain/card/CardPack.java index b8d13f87..6f438bbe 100644 --- a/src/main/java/blackjack/domain/card/CardPack.java +++ b/src/main/java/blackjack/domain/card/CardPack.java @@ -8,26 +8,29 @@ public class CardPack { private final List cardPack; + private static final List cards = new ArrayList<>(); + + static { + for (final CardSymbol symbol : CardSymbol.values()) { + Arrays.stream(CardType.values()) + .forEach(type -> cards.add(new Card(symbol, type))); + } + } public CardPack(List cardPack) { this.cardPack = cardPack; } public static CardPack 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)); } - public List getCardPack() { - return Collections.unmodifiableList(cardPack); - } - public Card pick() { return cardPack.remove(0); } + + public List getCardPack() { + return Collections.unmodifiableList(cardPack); + } } From 22b8ed87d173f8c1f8df357fc2a2d27e1c5ddcb4 Mon Sep 17 00:00:00 2001 From: Dami Kim Date: Mon, 21 Feb 2022 22:28:05 +0900 Subject: [PATCH 149/155] =?UTF-8?q?refactor:=20=EC=B2=AB=EB=B2=88=EC=A7=B8?= =?UTF-8?q?=20=EC=B9=B4=EB=93=9C=20index=20(0)=20=EC=83=81=EC=88=98?= =?UTF-8?q?=ED=99=94?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/blackjack/domain/card/CardPack.java | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/main/java/blackjack/domain/card/CardPack.java b/src/main/java/blackjack/domain/card/CardPack.java index 6f438bbe..5950f27f 100644 --- a/src/main/java/blackjack/domain/card/CardPack.java +++ b/src/main/java/blackjack/domain/card/CardPack.java @@ -7,8 +7,9 @@ public class CardPack { - private final List cardPack; + private static final int PICKED_CARD_INDEX = 0; private static final List cards = new ArrayList<>(); + private final List cardPack; static { for (final CardSymbol symbol : CardSymbol.values()) { @@ -27,7 +28,7 @@ public static CardPack create() { } public Card pick() { - return cardPack.remove(0); + return cardPack.remove(PICKED_CARD_INDEX); } public List getCardPack() { From b70757ce947a7010fb89bec72b1818c584923422 Mon Sep 17 00:00:00 2001 From: Dami Kim Date: Tue, 22 Feb 2022 18:05:34 +0900 Subject: [PATCH 150/155] =?UTF-8?q?refactor:=20=EC=83=9D=EC=84=B1=EC=9E=90?= =?UTF-8?q?=20=EB=A9=94=EC=84=9C=EB=93=9C=20=EC=B2=B4=EC=9D=B4=EB=8B=9D=20?= =?UTF-8?q?=EC=82=AC=EC=9A=A9=ED=95=98=EC=97=AC=20=EB=A6=AC=ED=8C=A9?= =?UTF-8?q?=ED=84=B0=EB=A7=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/blackjack/domain/card/CardType.java | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/src/main/java/blackjack/domain/card/CardType.java b/src/main/java/blackjack/domain/card/CardType.java index 832ac510..558f2123 100644 --- a/src/main/java/blackjack/domain/card/CardType.java +++ b/src/main/java/blackjack/domain/card/CardType.java @@ -17,11 +17,10 @@ public enum CardType { private final String name; private final int point; - private int lowerAcePoint; + private final int lowerAcePoint; CardType(String name, int point) { - this.name = name; - this.point = point; + this(name, point, 0); } CardType(String name, int point, int lowerAcePoint) { From a1f98180bc13ed254f9246f09c257f902cb1fb79 Mon Sep 17 00:00:00 2001 From: Dami Kim Date: Tue, 22 Feb 2022 18:14:26 +0900 Subject: [PATCH 151/155] =?UTF-8?q?refactor:=20=EB=A9=94=EC=86=8C=EB=93=9C?= =?UTF-8?q?=20=ED=98=B8=EC=B6=9C=EB=90=98=EB=8A=94=20=EC=88=9C=EC=9C=BC?= =?UTF-8?q?=EB=A1=9C=20=EC=88=9C=EC=84=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/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 c588461c..62b94583 100644 --- a/src/main/java/blackjack/domain/gameplayer/Cards.java +++ b/src/main/java/blackjack/domain/gameplayer/Cards.java @@ -34,12 +34,6 @@ public int calculateCards() { return sumOfCards; } - private int getAceCount() { - return (int) cards.stream() - .filter(card -> card.getCardType().isAce()) - .count(); - } - private int getSumOfCards() { return cards.stream() .map(Card::getCardType) @@ -47,6 +41,12 @@ private int getSumOfCards() { .sum(); } + private int getAceCount() { + return (int) cards.stream() + .filter(card -> card.getCardType().isAce()) + .count(); + } + private int getBestSumWithAce(final int sum) { final int lowerAcePoint = CardType.ACE.getLowerAcePoint(); final int higherAcePoint = CardType.ACE.getPoint(); From 7a74bb1ab537242346e58c68ea5901ed4f4c89af Mon Sep 17 00:00:00 2001 From: Dami Kim Date: Tue, 22 Feb 2022 18:16:14 +0900 Subject: [PATCH 152/155] =?UTF-8?q?refactor:=20=EB=A9=94=EC=84=9C=EB=93=9C?= =?UTF-8?q?=EB=AA=85=20=EC=88=98=EC=A0=95=20-=20getAceCount=20>=20countAce?= =?UTF-8?q?Card?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/blackjack/domain/gameplayer/Cards.java | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/main/java/blackjack/domain/gameplayer/Cards.java b/src/main/java/blackjack/domain/gameplayer/Cards.java index 62b94583..7e2c7fc3 100644 --- a/src/main/java/blackjack/domain/gameplayer/Cards.java +++ b/src/main/java/blackjack/domain/gameplayer/Cards.java @@ -26,7 +26,7 @@ public List toList() { public int calculateCards() { final int sumOfCards = getSumOfCards(); - final int aceCount = getAceCount(); + final int aceCount = countAceCard(); if (sumOfCards > BLACK_JACK && aceCount > 0) { return getBestSumWithAce(sumOfCards); @@ -41,7 +41,7 @@ private int getSumOfCards() { .sum(); } - private int getAceCount() { + private int countAceCard() { return (int) cards.stream() .filter(card -> card.getCardType().isAce()) .count(); @@ -51,7 +51,7 @@ private int getBestSumWithAce(final int sum) { final int lowerAcePoint = CardType.ACE.getLowerAcePoint(); final int higherAcePoint = CardType.ACE.getPoint(); - int aceCount = getAceCount(); + int aceCount = countAceCard(); int totalPoint = sum; while (aceCount-- > 0 && totalPoint > BLACK_JACK) { From e75b900384a541a702665da4dad46c2bedea0e00 Mon Sep 17 00:00:00 2001 From: Dami Kim Date: Tue, 22 Feb 2022 18:18:10 +0900 Subject: [PATCH 153/155] =?UTF-8?q?refactor:=20=EB=A9=94=EC=84=9C=EB=93=9C?= =?UTF-8?q?=EB=AA=85=20=EC=88=98=EC=A0=95=20-=20getBestSumWithAce=20>=20ca?= =?UTF-8?q?lculateBestSumWithAce?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/blackjack/domain/gameplayer/Cards.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/java/blackjack/domain/gameplayer/Cards.java b/src/main/java/blackjack/domain/gameplayer/Cards.java index 7e2c7fc3..3032249a 100644 --- a/src/main/java/blackjack/domain/gameplayer/Cards.java +++ b/src/main/java/blackjack/domain/gameplayer/Cards.java @@ -29,7 +29,7 @@ public int calculateCards() { final int aceCount = countAceCard(); if (sumOfCards > BLACK_JACK && aceCount > 0) { - return getBestSumWithAce(sumOfCards); + return calculateBestSumWithAce(sumOfCards); } return sumOfCards; } @@ -47,7 +47,7 @@ private int countAceCard() { .count(); } - private int getBestSumWithAce(final int sum) { + private int calculateBestSumWithAce(final int sum) { final int lowerAcePoint = CardType.ACE.getLowerAcePoint(); final int higherAcePoint = CardType.ACE.getPoint(); From 81cdb2df7bd56ab77f3a57aeb945f6f35948d894 Mon Sep 17 00:00:00 2001 From: Dami Kim Date: Tue, 22 Feb 2022 18:21:17 +0900 Subject: [PATCH 154/155] =?UTF-8?q?refactor:=20while=20=EB=AC=B8=20?= =?UTF-8?q?=EC=95=88=EC=9D=98=20=EC=A6=9D=EA=B0=90=20=EC=97=B0=EC=82=B0?= =?UTF-8?q?=EC=9E=90=20=EC=A1=B0=EA=B1=B4=EB=AC=B8=EC=97=90=EC=84=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 --- 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 3032249a..6fc0585d 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 calculateBestSumWithAce(final int sum) { int aceCount = countAceCard(); int totalPoint = sum; - while (aceCount-- > 0 && totalPoint > BLACK_JACK) { + while (aceCount > 0 && totalPoint > BLACK_JACK) { totalPoint = totalPoint - higherAcePoint + lowerAcePoint; + aceCount--; } return totalPoint; } From 751f71d9051ef94bda0c7fac18d82e7800288ac5 Mon Sep 17 00:00:00 2001 From: Dami Kim Date: Tue, 22 Feb 2022 18:22:39 +0900 Subject: [PATCH 155/155] =?UTF-8?q?refactor:=20while=20=EB=AC=B8=20?= =?UTF-8?q?=EC=95=88=EC=97=90=200=20=EC=83=81=EC=88=98=ED=99=94=20(MIN=5FA?= =?UTF-8?q?CE=5FCOUNT)?= 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 6fc0585d..2c29cb96 100644 --- a/src/main/java/blackjack/domain/gameplayer/Cards.java +++ b/src/main/java/blackjack/domain/gameplayer/Cards.java @@ -48,13 +48,14 @@ private int countAceCard() { } private int calculateBestSumWithAce(final int sum) { + final int MIN_ACE_COUNT = 0; final int lowerAcePoint = CardType.ACE.getLowerAcePoint(); final int higherAcePoint = CardType.ACE.getPoint(); int aceCount = countAceCard(); int totalPoint = sum; - while (aceCount > 0 && totalPoint > BLACK_JACK) { + while (aceCount > MIN_ACE_COUNT && totalPoint > BLACK_JACK) { totalPoint = totalPoint - higherAcePoint + lowerAcePoint; aceCount--; }