From 1196afa161c518697c84cad921856f802610bfaa Mon Sep 17 00:00:00 2001 From: SANGHEEJEONG <147232817+SANGHEEJEONG@users.noreply.github.com> Date: Fri, 25 Oct 2024 00:59:25 +0900 Subject: [PATCH 01/53] =?UTF-8?q?[FEAT]=20Ladder=20&=20Line=20=ED=81=B4?= =?UTF-8?q?=EB=9E=98=EC=8A=A4=20=EC=83=9D=EC=84=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/test/java/Ladder.java | 9 +++++++++ src/test/java/Line.java | 9 +++++++++ 2 files changed, 18 insertions(+) create mode 100644 src/test/java/Ladder.java create mode 100644 src/test/java/Line.java diff --git a/src/test/java/Ladder.java b/src/test/java/Ladder.java new file mode 100644 index 00000000..5391752d --- /dev/null +++ b/src/test/java/Ladder.java @@ -0,0 +1,9 @@ +import java.util.List; + +public class Ladder { + private final List lines; + + public Ladder(List lines) { + this.lines = lines; + } +} diff --git a/src/test/java/Line.java b/src/test/java/Line.java new file mode 100644 index 00000000..964bdfa7 --- /dev/null +++ b/src/test/java/Line.java @@ -0,0 +1,9 @@ +import java.util.List; + +public class Line { + private final List points; + + public Line(List points) { + this.points = points; + } +} From 8b96693cedadaf0d4c4f1d772661144208b89012 Mon Sep 17 00:00:00 2001 From: SANGHEEJEONG <147232817+SANGHEEJEONG@users.noreply.github.com> Date: Fri, 25 Oct 2024 02:12:04 +0900 Subject: [PATCH 02/53] =?UTF-8?q?[FEAT]=20Line=20=EC=83=9D=EC=84=B1=20?= =?UTF-8?q?=EB=A9=94=EC=84=9C=EB=93=9C=20=EC=9E=91=EC=84=B1=20(1=EB=8B=A8?= =?UTF-8?q?=EA=B3=84)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/test/java/Ladder.java | 1 - src/test/java/LadderGenerator.java | 30 ++++++++++++++++++++++++++++++ 2 files changed, 30 insertions(+), 1 deletion(-) create mode 100644 src/test/java/LadderGenerator.java diff --git a/src/test/java/Ladder.java b/src/test/java/Ladder.java index 5391752d..bf398f35 100644 --- a/src/test/java/Ladder.java +++ b/src/test/java/Ladder.java @@ -2,7 +2,6 @@ public class Ladder { private final List lines; - public Ladder(List lines) { this.lines = lines; } diff --git a/src/test/java/LadderGenerator.java b/src/test/java/LadderGenerator.java new file mode 100644 index 00000000..0c4f7e07 --- /dev/null +++ b/src/test/java/LadderGenerator.java @@ -0,0 +1,30 @@ +import java.util.ArrayList; +import java.util.List; + +import static java.lang.Boolean.TRUE; + +public class LadderGenerator { + private final static int WIDTH = 3; + private final static int HEIGHT = 4; + + private boolean randomTrueOrFalse() { + return Math.random() < 0.5; // 0.0(포함) - 1.0(미포함) 사이의 랜덤한 실수 반환 + } + + private boolean createValue(List line, int index) { + if (index == 0) // index가 0이면 랜덤값 반환 + return randomTrueOrFalse(); + if (line.get(index - 1) == TRUE) // 이전 값이 True면 false 반환 + return false; + + return randomTrueOrFalse(); + } + + private void createLine() { + List points = new ArrayList<>(4); + + for (int i = 0; i < WIDTH; i++) { + points.add(createValue(points, i)); + } + } +} From f20be9f479fb89a3542acabed33ded57397699eb Mon Sep 17 00:00:00 2001 From: SANGHEEJEONG <147232817+SANGHEEJEONG@users.noreply.github.com> Date: Fri, 25 Oct 2024 02:24:56 +0900 Subject: [PATCH 03/53] =?UTF-8?q?[FEAT]=20LineView=20Enum=20=ED=81=B4?= =?UTF-8?q?=EB=9E=98=EC=8A=A4=20=EC=83=9D=EC=84=B1=20(1=EB=8B=A8=EA=B3=84)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/test/java/LadderGenerator.java | 3 ++- src/test/java/LineView.java | 12 ++++++++++++ 2 files changed, 14 insertions(+), 1 deletion(-) create mode 100644 src/test/java/LineView.java diff --git a/src/test/java/LadderGenerator.java b/src/test/java/LadderGenerator.java index 0c4f7e07..926f7761 100644 --- a/src/test/java/LadderGenerator.java +++ b/src/test/java/LadderGenerator.java @@ -4,8 +4,9 @@ import static java.lang.Boolean.TRUE; public class LadderGenerator { - private final static int WIDTH = 3; private final static int HEIGHT = 4; + private final static int WIDTH = HEIGHT - 1; + private boolean randomTrueOrFalse() { return Math.random() < 0.5; // 0.0(포함) - 1.0(미포함) 사이의 랜덤한 실수 반환 diff --git a/src/test/java/LineView.java b/src/test/java/LineView.java new file mode 100644 index 00000000..06a97d5e --- /dev/null +++ b/src/test/java/LineView.java @@ -0,0 +1,12 @@ +public enum LineView { + CONNECTION(true,"-----"), + DISCONNECTION(false," "); + + private final boolean value; + private final String view; + + LineView(boolean value, String view) { + this.value = value; + this.view = view; + } +} From 19995efc3c4e3262b1f210a242911ae8233ecbb2 Mon Sep 17 00:00:00 2001 From: SANGHEEJEONG <147232817+SANGHEEJEONG@users.noreply.github.com> Date: Fri, 25 Oct 2024 02:27:30 +0900 Subject: [PATCH 04/53] =?UTF-8?q?[REFACTOR]=20domain=EA=B3=BC=20view=20?= =?UTF-8?q?=EB=B6=84=EB=A6=AC=20(1=EB=8B=A8=EA=B3=84)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/test/java/Main.java | 2 ++ src/test/java/{ => domain}/Ladder.java | 2 ++ src/test/java/{ => domain}/LadderGenerator.java | 2 ++ src/test/java/{ => domain}/Line.java | 2 ++ src/test/java/{ => domain}/LineView.java | 2 ++ src/test/java/view/OutputView.java | 4 ++++ src/test/java/view/inputView.java | 4 ++++ 7 files changed, 18 insertions(+) create mode 100644 src/test/java/Main.java rename src/test/java/{ => domain}/Ladder.java (90%) rename src/test/java/{ => domain}/LadderGenerator.java (98%) rename src/test/java/{ => domain}/Line.java (90%) rename src/test/java/{ => domain}/LineView.java (93%) create mode 100644 src/test/java/view/OutputView.java create mode 100644 src/test/java/view/inputView.java diff --git a/src/test/java/Main.java b/src/test/java/Main.java new file mode 100644 index 00000000..70464179 --- /dev/null +++ b/src/test/java/Main.java @@ -0,0 +1,2 @@ +public class Main { +} diff --git a/src/test/java/Ladder.java b/src/test/java/domain/Ladder.java similarity index 90% rename from src/test/java/Ladder.java rename to src/test/java/domain/Ladder.java index bf398f35..f7597c68 100644 --- a/src/test/java/Ladder.java +++ b/src/test/java/domain/Ladder.java @@ -1,3 +1,5 @@ +package domain; + import java.util.List; public class Ladder { diff --git a/src/test/java/LadderGenerator.java b/src/test/java/domain/LadderGenerator.java similarity index 98% rename from src/test/java/LadderGenerator.java rename to src/test/java/domain/LadderGenerator.java index 926f7761..34cd768a 100644 --- a/src/test/java/LadderGenerator.java +++ b/src/test/java/domain/LadderGenerator.java @@ -1,3 +1,5 @@ +package domain; + import java.util.ArrayList; import java.util.List; diff --git a/src/test/java/Line.java b/src/test/java/domain/Line.java similarity index 90% rename from src/test/java/Line.java rename to src/test/java/domain/Line.java index 964bdfa7..a255d9b4 100644 --- a/src/test/java/Line.java +++ b/src/test/java/domain/Line.java @@ -1,3 +1,5 @@ +package domain; + import java.util.List; public class Line { diff --git a/src/test/java/LineView.java b/src/test/java/domain/LineView.java similarity index 93% rename from src/test/java/LineView.java rename to src/test/java/domain/LineView.java index 06a97d5e..df0f3f17 100644 --- a/src/test/java/LineView.java +++ b/src/test/java/domain/LineView.java @@ -1,3 +1,5 @@ +package domain; + public enum LineView { CONNECTION(true,"-----"), DISCONNECTION(false," "); diff --git a/src/test/java/view/OutputView.java b/src/test/java/view/OutputView.java new file mode 100644 index 00000000..d8f9743c --- /dev/null +++ b/src/test/java/view/OutputView.java @@ -0,0 +1,4 @@ +package view; + +public class OutputView { +} diff --git a/src/test/java/view/inputView.java b/src/test/java/view/inputView.java new file mode 100644 index 00000000..38c351c9 --- /dev/null +++ b/src/test/java/view/inputView.java @@ -0,0 +1,4 @@ +package view; + +public class inputView { +} From 49d105cc9da49cb92ca08c6b9c908b31a7d0afd9 Mon Sep 17 00:00:00 2001 From: SANGHEEJEONG <147232817+SANGHEEJEONG@users.noreply.github.com> Date: Fri, 25 Oct 2024 02:41:08 +0900 Subject: [PATCH 05/53] =?UTF-8?q?[FEAT]=20Ladder=20=EC=83=9D=EC=84=B1=20?= =?UTF-8?q?=EB=A9=94=EC=84=9C=EB=93=9C=20=EC=9E=91=EC=84=B1=20(1=EB=8B=A8?= =?UTF-8?q?=EA=B3=84)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/test/java/domain/LadderGenerator.java | 14 ++++++++++++-- src/test/java/{domain => view}/LineView.java | 2 +- 2 files changed, 13 insertions(+), 3 deletions(-) rename src/test/java/{domain => view}/LineView.java (94%) diff --git a/src/test/java/domain/LadderGenerator.java b/src/test/java/domain/LadderGenerator.java index 34cd768a..b86141e7 100644 --- a/src/test/java/domain/LadderGenerator.java +++ b/src/test/java/domain/LadderGenerator.java @@ -9,7 +9,6 @@ public class LadderGenerator { private final static int HEIGHT = 4; private final static int WIDTH = HEIGHT - 1; - private boolean randomTrueOrFalse() { return Math.random() < 0.5; // 0.0(포함) - 1.0(미포함) 사이의 랜덤한 실수 반환 } @@ -23,11 +22,22 @@ private boolean createValue(List line, int index) { return randomTrueOrFalse(); } - private void createLine() { + private Line createLine() { List points = new ArrayList<>(4); for (int i = 0; i < WIDTH; i++) { points.add(createValue(points, i)); } + + return new Line(points); + } + + private Ladder createLadder(){ + List lines = new ArrayList<>(HEIGHT); + for(int i = 0; i Date: Fri, 25 Oct 2024 03:20:12 +0900 Subject: [PATCH 06/53] =?UTF-8?q?[FEAT]=20OutputView=20=EB=A9=94=EC=84=9C?= =?UTF-8?q?=EB=93=9C=20=EC=9E=91=EC=84=B1=20=EB=B0=8F=20Main=20=EA=B5=AC?= =?UTF-8?q?=ED=98=84=20(1=EB=8B=A8=EA=B3=84)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/test/java/Main.java | 7 +++++++ src/test/java/domain/Ladder.java | 4 ++++ src/test/java/domain/LadderGenerator.java | 2 +- src/test/java/domain/Line.java | 4 ++++ src/test/java/view/LineView.java | 14 ------------- src/test/java/view/OutputView.java | 24 +++++++++++++++++++++++ 6 files changed, 40 insertions(+), 15 deletions(-) delete mode 100644 src/test/java/view/LineView.java diff --git a/src/test/java/Main.java b/src/test/java/Main.java index 70464179..9cc4f56c 100644 --- a/src/test/java/Main.java +++ b/src/test/java/Main.java @@ -1,2 +1,9 @@ +import domain.LadderGenerator; +import view.OutputView; + public class Main { + public static void main(String[] args) { + LadderGenerator ladderGenerator = new LadderGenerator(); + OutputView.drawLadder(ladderGenerator.createLadder()); + } } diff --git a/src/test/java/domain/Ladder.java b/src/test/java/domain/Ladder.java index f7597c68..671bf763 100644 --- a/src/test/java/domain/Ladder.java +++ b/src/test/java/domain/Ladder.java @@ -7,4 +7,8 @@ public class Ladder { public Ladder(List lines) { this.lines = lines; } + + public List getLadder(){ + return lines; + } } diff --git a/src/test/java/domain/LadderGenerator.java b/src/test/java/domain/LadderGenerator.java index b86141e7..53125980 100644 --- a/src/test/java/domain/LadderGenerator.java +++ b/src/test/java/domain/LadderGenerator.java @@ -32,7 +32,7 @@ private Line createLine() { return new Line(points); } - private Ladder createLadder(){ + public Ladder createLadder(){ List lines = new ArrayList<>(HEIGHT); for(int i = 0; i points) { this.points = points; } + + public List getLine(){ + return points; + } } diff --git a/src/test/java/view/LineView.java b/src/test/java/view/LineView.java deleted file mode 100644 index 583d2203..00000000 --- a/src/test/java/view/LineView.java +++ /dev/null @@ -1,14 +0,0 @@ -package view; - -public enum LineView { - CONNECTION(true,"-----"), - DISCONNECTION(false," "); - - private final boolean value; - private final String view; - - LineView(boolean value, String view) { - this.value = value; - this.view = view; - } -} diff --git a/src/test/java/view/OutputView.java b/src/test/java/view/OutputView.java index d8f9743c..589db785 100644 --- a/src/test/java/view/OutputView.java +++ b/src/test/java/view/OutputView.java @@ -1,4 +1,28 @@ package view; +import domain.Ladder; +import domain.Line; + +import static java.lang.Boolean.TRUE; + public class OutputView { + private static String changeValueToView(Boolean point){ + if(point == TRUE) + return "-----"; + + return " "; + } + private static void drawLine(Line line){ + for(Boolean point : line.getLine()){ + System.out.print("|"); + System.out.print(changeValueToView(point)); + } + System.out.println("|"); + } + + public static void drawLadder(Ladder Ladder){ + for(Line lines : Ladder.getLadder()){ + drawLine(lines); + } + } } From 06a00a7cdce7ec3483daa6267393b140cd953256 Mon Sep 17 00:00:00 2001 From: SANGHEEJEONG <147232817+SANGHEEJEONG@users.noreply.github.com> Date: Fri, 25 Oct 2024 22:53:26 +0900 Subject: [PATCH 07/53] =?UTF-8?q?[FEAT]=20InputView=20=EB=A9=94=EC=84=9C?= =?UTF-8?q?=EB=93=9C=20=EC=9E=91=EC=84=B1=20=EB=B0=8F=20Main=20=EA=B5=AC?= =?UTF-8?q?=ED=98=84=20(2=EB=8B=A8=EA=B3=84)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/test/java/Main.java | 7 +++++-- src/test/java/domain/LadderGenerator.java | 14 ++++++-------- src/test/java/view/InputView.java | 17 +++++++++++++++++ src/test/java/view/inputView.java | 4 ---- 4 files changed, 28 insertions(+), 14 deletions(-) create mode 100644 src/test/java/view/InputView.java delete mode 100644 src/test/java/view/inputView.java diff --git a/src/test/java/Main.java b/src/test/java/Main.java index 9cc4f56c..754f47c3 100644 --- a/src/test/java/Main.java +++ b/src/test/java/Main.java @@ -1,9 +1,12 @@ import domain.LadderGenerator; import view.OutputView; +import view.InputView; public class Main { public static void main(String[] args) { - LadderGenerator ladderGenerator = new LadderGenerator(); - OutputView.drawLadder(ladderGenerator.createLadder()); + final int width = InputView.inputWidth(); + final int height = InputView.inputHeight(); + final LadderGenerator ladderGenerator = new LadderGenerator(); + OutputView.drawLadder(ladderGenerator.createLadder(width,height)); } } diff --git a/src/test/java/domain/LadderGenerator.java b/src/test/java/domain/LadderGenerator.java index 53125980..ce4784be 100644 --- a/src/test/java/domain/LadderGenerator.java +++ b/src/test/java/domain/LadderGenerator.java @@ -6,8 +6,6 @@ import static java.lang.Boolean.TRUE; public class LadderGenerator { - private final static int HEIGHT = 4; - private final static int WIDTH = HEIGHT - 1; private boolean randomTrueOrFalse() { return Math.random() < 0.5; // 0.0(포함) - 1.0(미포함) 사이의 랜덤한 실수 반환 @@ -22,20 +20,20 @@ private boolean createValue(List line, int index) { return randomTrueOrFalse(); } - private Line createLine() { + private Line createLine(int width) { List points = new ArrayList<>(4); - for (int i = 0; i < WIDTH; i++) { + for (int i = 0; i < width - 1; i++) { points.add(createValue(points, i)); } return new Line(points); } - public Ladder createLadder(){ - List lines = new ArrayList<>(HEIGHT); - for(int i = 0; i lines = new ArrayList<>(height); + for (int i = 0; i < height; i++) { + lines.add(createLine(width)); } return new Ladder(lines); diff --git a/src/test/java/view/InputView.java b/src/test/java/view/InputView.java new file mode 100644 index 00000000..d434a286 --- /dev/null +++ b/src/test/java/view/InputView.java @@ -0,0 +1,17 @@ +package view; + +import java.util.Scanner; + +public class InputView { + private static final Scanner input = new Scanner(System.in); + + public static int inputWidth(){ + System.out.println("사다리의 넓이는 몇 개인가요?"); + return input.nextInt(); + } + + public static int inputHeight(){ + System.out.println("사다리의 높이는 몇 개인가요?"); + return input.nextInt(); + } +} diff --git a/src/test/java/view/inputView.java b/src/test/java/view/inputView.java deleted file mode 100644 index 38c351c9..00000000 --- a/src/test/java/view/inputView.java +++ /dev/null @@ -1,4 +0,0 @@ -package view; - -public class inputView { -} From 3e47a2acd3a0bf8b247dd45eb26ef1459bc5e9c1 Mon Sep 17 00:00:00 2001 From: SANGHEEJEONG <147232817+SANGHEEJEONG@users.noreply.github.com> Date: Sat, 26 Oct 2024 12:54:07 +0900 Subject: [PATCH 08/53] =?UTF-8?q?[FEAT]=20=EC=82=AC=EB=8B=A4=EB=A6=AC=20?= =?UTF-8?q?=EB=B0=A9=ED=96=A5=20=ED=99=95=EC=9D=B8=20=EB=A9=94=EC=84=9C?= =?UTF-8?q?=EB=93=9C=20=EC=9E=91=EC=84=B1=20(3=EB=8B=A8=EA=B3=84)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/test/java/domain/LadderGame.java | 17 +++++++++++++++++ src/test/java/domain/LadderGenerator.java | 1 + src/test/java/domain/Line.java | 20 ++++++++++++++++++++ src/test/java/view/OutputView.java | 1 + 4 files changed, 39 insertions(+) create mode 100644 src/test/java/domain/LadderGame.java diff --git a/src/test/java/domain/LadderGame.java b/src/test/java/domain/LadderGame.java new file mode 100644 index 00000000..2e144788 --- /dev/null +++ b/src/test/java/domain/LadderGame.java @@ -0,0 +1,17 @@ +package domain; + +import java.util.List; + +public class LadderGame { + + private int decideWhereToGo(Line line, int ladderOrder) { + if (ladderOrder != 0) + ladderOrder = line.checkGoToRight(ladderOrder); + + if (ladderOrder != line.getSize() - 1) + ladderOrder = line.checkGoToLeft(ladderOrder); + + return ladderOrder; + } + +} diff --git a/src/test/java/domain/LadderGenerator.java b/src/test/java/domain/LadderGenerator.java index ce4784be..ec634621 100644 --- a/src/test/java/domain/LadderGenerator.java +++ b/src/test/java/domain/LadderGenerator.java @@ -32,6 +32,7 @@ private Line createLine(int width) { public Ladder createLadder(int width, int height) { List lines = new ArrayList<>(height); + for (int i = 0; i < height; i++) { lines.add(createLine(width)); } diff --git a/src/test/java/domain/Line.java b/src/test/java/domain/Line.java index 0905bb37..69108f7f 100644 --- a/src/test/java/domain/Line.java +++ b/src/test/java/domain/Line.java @@ -9,7 +9,27 @@ public Line(List points) { this.points = points; } + public int checkGoToRight(int ladderOrder) { + int right = ladderOrder + 1; + if (points.get(right)) + return right; + + return ladderOrder; + } + + public int checkGoToLeft(int ladderOrder) { + int left = ladderOrder - 1; + if (points.get(left)) + return left; + + return ladderOrder; + } + public List getLine(){ return points; } + + public int getSize(){ + return points.size(); + } } diff --git a/src/test/java/view/OutputView.java b/src/test/java/view/OutputView.java index 589db785..2dd1fe25 100644 --- a/src/test/java/view/OutputView.java +++ b/src/test/java/view/OutputView.java @@ -21,6 +21,7 @@ private static void drawLine(Line line){ } public static void drawLadder(Ladder Ladder){ + System.out.println("실행결과"); for(Line lines : Ladder.getLadder()){ drawLine(lines); } From 07fe9759162e38a403a5fdb5423a81c795341691 Mon Sep 17 00:00:00 2001 From: SANGHEEJEONG <147232817+SANGHEEJEONG@users.noreply.github.com> Date: Sat, 26 Oct 2024 13:13:30 +0900 Subject: [PATCH 09/53] =?UTF-8?q?[FEAT]=20=EC=82=AC=EB=8B=A4=EB=A6=AC=20?= =?UTF-8?q?=EA=B2=8C=EC=9E=84=20=EC=8B=A4=ED=96=89=20=EB=A9=94=EC=84=9C?= =?UTF-8?q?=EB=93=9C=20=EC=9E=91=EC=84=B1=20(3=EB=8B=A8=EA=B3=84)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/test/java/domain/LadderGame.java | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/src/test/java/domain/LadderGame.java b/src/test/java/domain/LadderGame.java index 2e144788..64e4d080 100644 --- a/src/test/java/domain/LadderGame.java +++ b/src/test/java/domain/LadderGame.java @@ -1,5 +1,6 @@ package domain; +import java.util.ArrayList; import java.util.List; public class LadderGame { @@ -14,4 +15,19 @@ private int decideWhereToGo(Line line, int ladderOrder) { return ladderOrder; } + private int moveEachLadder(Ladder ladder, int ladderOrder) { + int result = ladderOrder; + for (Line line : ladder.getLadder()) { + result = decideWhereToGo(line, result); + } + return result; + } + + public List runGame(Ladder ladder, int width) { + List result = new ArrayList<>(width); + for (int i = 0; i < width; i++) { + moveEachLadder(ladder, i); + } + return result; + } } From 226578770048952369840a284e3b1b0015b7a051 Mon Sep 17 00:00:00 2001 From: SANGHEEJEONG <147232817+SANGHEEJEONG@users.noreply.github.com> Date: Sat, 26 Oct 2024 13:14:15 +0900 Subject: [PATCH 10/53] =?UTF-8?q?[FEAT]=20=EC=82=AC=EB=8B=A4=EB=A6=AC=20?= =?UTF-8?q?=EA=B2=8C=EC=9E=84=20=EC=8B=A4=ED=96=89=20=EB=A9=94=EC=84=9C?= =?UTF-8?q?=EB=93=9C=20=EC=88=98=EC=A0=95=20(3=EB=8B=A8=EA=B3=84)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/test/java/domain/LadderGame.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/test/java/domain/LadderGame.java b/src/test/java/domain/LadderGame.java index 64e4d080..29654863 100644 --- a/src/test/java/domain/LadderGame.java +++ b/src/test/java/domain/LadderGame.java @@ -26,7 +26,7 @@ private int moveEachLadder(Ladder ladder, int ladderOrder) { public List runGame(Ladder ladder, int width) { List result = new ArrayList<>(width); for (int i = 0; i < width; i++) { - moveEachLadder(ladder, i); + result.add(moveEachLadder(ladder, i)); } return result; } From 2fef17cb8f09e42f259c2a4101a0e7cad994ebc7 Mon Sep 17 00:00:00 2001 From: SANGHEEJEONG <147232817+SANGHEEJEONG@users.noreply.github.com> Date: Sat, 26 Oct 2024 13:45:35 +0900 Subject: [PATCH 11/53] =?UTF-8?q?[FIX]=20=EC=82=AC=EB=8B=A4=EB=A6=AC=20?= =?UTF-8?q?=EB=B0=A9=ED=96=A5=20=EA=B2=B0=EC=A0=95=20=EC=9D=B8=EB=8D=B1?= =?UTF-8?q?=EC=8A=A4=20=EC=98=A4=EB=A5=98=20=EC=88=98=EC=A0=95(3=EB=8B=A8?= =?UTF-8?q?=EA=B3=84)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/test/java/Main.java | 9 ++++++++- src/test/java/domain/LadderGame.java | 11 +---------- src/test/java/domain/Line.java | 16 ++++------------ src/test/java/view/OutputView.java | 21 +++++++++++++++------ 4 files changed, 28 insertions(+), 29 deletions(-) diff --git a/src/test/java/Main.java b/src/test/java/Main.java index 754f47c3..4610a7a5 100644 --- a/src/test/java/Main.java +++ b/src/test/java/Main.java @@ -1,3 +1,5 @@ +import domain.Ladder; +import domain.LadderGame; import domain.LadderGenerator; import view.OutputView; import view.InputView; @@ -6,7 +8,12 @@ public class Main { public static void main(String[] args) { final int width = InputView.inputWidth(); final int height = InputView.inputHeight(); + final LadderGenerator ladderGenerator = new LadderGenerator(); - OutputView.drawLadder(ladderGenerator.createLadder(width,height)); + final Ladder ladder = ladderGenerator.createLadder(width,height); + OutputView.drawLadder(ladder); + + final LadderGame ladderGame = new LadderGame(); + OutputView.printAllResult(ladderGame.runGame(ladder,width)); } } diff --git a/src/test/java/domain/LadderGame.java b/src/test/java/domain/LadderGame.java index 29654863..ff288dc9 100644 --- a/src/test/java/domain/LadderGame.java +++ b/src/test/java/domain/LadderGame.java @@ -5,20 +5,11 @@ public class LadderGame { - private int decideWhereToGo(Line line, int ladderOrder) { - if (ladderOrder != 0) - ladderOrder = line.checkGoToRight(ladderOrder); - - if (ladderOrder != line.getSize() - 1) - ladderOrder = line.checkGoToLeft(ladderOrder); - - return ladderOrder; - } private int moveEachLadder(Ladder ladder, int ladderOrder) { int result = ladderOrder; for (Line line : ladder.getLadder()) { - result = decideWhereToGo(line, result); + result = line.checkWhereToGo(result); } return result; } diff --git a/src/test/java/domain/Line.java b/src/test/java/domain/Line.java index 69108f7f..65593688 100644 --- a/src/test/java/domain/Line.java +++ b/src/test/java/domain/Line.java @@ -9,27 +9,19 @@ public Line(List points) { this.points = points; } - public int checkGoToRight(int ladderOrder) { + public int checkWhereToGo(int ladderOrder) { int right = ladderOrder + 1; - if (points.get(right)) + if (ladderOrder < points.size() && points.get(ladderOrder)) return right; - return ladderOrder; - } - - public int checkGoToLeft(int ladderOrder) { int left = ladderOrder - 1; - if (points.get(left)) + if (ladderOrder != 0 && points.get(left)) return left; return ladderOrder; } - public List getLine(){ + public List getLine() { return points; } - - public int getSize(){ - return points.size(); - } } diff --git a/src/test/java/view/OutputView.java b/src/test/java/view/OutputView.java index 2dd1fe25..caaea3c1 100644 --- a/src/test/java/view/OutputView.java +++ b/src/test/java/view/OutputView.java @@ -3,27 +3,36 @@ import domain.Ladder; import domain.Line; +import java.util.List; + import static java.lang.Boolean.TRUE; public class OutputView { - private static String changeValueToView(Boolean point){ - if(point == TRUE) + private static String changeValueToView(Boolean point) { + if (point == TRUE) return "-----"; return " "; } - private static void drawLine(Line line){ - for(Boolean point : line.getLine()){ + + private static void drawLine(Line line) { + for (Boolean point : line.getLine()) { System.out.print("|"); System.out.print(changeValueToView(point)); } System.out.println("|"); } - public static void drawLadder(Ladder Ladder){ + public static void drawLadder(Ladder Ladder) { System.out.println("실행결과"); - for(Line lines : Ladder.getLadder()){ + for (Line lines : Ladder.getLadder()) { drawLine(lines); } } + + public static void printAllResult(List result) { + for (int i = 0; i < result.size(); i++) { + System.out.println(i + " -> " + result.get(i)); + } + } } From f7ab0941d924d45a83bb45efb4323ed18affff30 Mon Sep 17 00:00:00 2001 From: SANGHEEJEONG <147232817+SANGHEEJEONG@users.noreply.github.com> Date: Sat, 26 Oct 2024 15:15:00 +0900 Subject: [PATCH 12/53] =?UTF-8?q?[FEAT]=204=EB=8B=A8=EA=B3=84=20=EC=9E=85?= =?UTF-8?q?=EB=A0=A5=20=EB=A9=94=EC=84=9C=EB=93=9C=20=EC=9E=91=EC=84=B1=20?= =?UTF-8?q?(4=EB=8B=A8=EA=B3=84)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/test/java/view/InputView.java | 21 +++++++++++++++++++-- src/test/java/view/OutputView.java | 3 ++- 2 files changed, 21 insertions(+), 3 deletions(-) diff --git a/src/test/java/view/InputView.java b/src/test/java/view/InputView.java index d434a286..5a3addc4 100644 --- a/src/test/java/view/InputView.java +++ b/src/test/java/view/InputView.java @@ -5,13 +5,30 @@ public class InputView { private static final Scanner input = new Scanner(System.in); + public static String inputNames(){ + System.out.println("참여할 사람 이름을 입력하세요. (이름은 쉼표(,)로 구분하세요)"); + return input.nextLine(); + } + + public static String inputLadderResults(){ + System.out.println("실행 결과를 입력하세요. (결과는 쉼표(,)로 구분하세요)"); + return input.nextLine(); + } + public static int inputWidth(){ System.out.println("사다리의 넓이는 몇 개인가요?"); return input.nextInt(); } public static int inputHeight(){ - System.out.println("사다리의 높이는 몇 개인가요?"); - return input.nextInt(); + System.out.println("최대 사다리 높이는 몇 개인가요?"); + int height = input.nextInt(); + input.nextLine(); + return height; + } + + public static String inputViewerName(){ + System.out.println("결과를 보고 싶은 사람은?"); + return input.nextLine(); } } diff --git a/src/test/java/view/OutputView.java b/src/test/java/view/OutputView.java index caaea3c1..0516ca51 100644 --- a/src/test/java/view/OutputView.java +++ b/src/test/java/view/OutputView.java @@ -24,13 +24,14 @@ private static void drawLine(Line line) { } public static void drawLadder(Ladder Ladder) { - System.out.println("실행결과"); + System.out.println("\n사다리 결과\n"); for (Line lines : Ladder.getLadder()) { drawLine(lines); } } public static void printAllResult(List result) { + System.out.println("\n실행결과"); for (int i = 0; i < result.size(); i++) { System.out.println(i + " -> " + result.get(i)); } From dbbb328e634cd95d65644a8e16c2e6e2802f3be8 Mon Sep 17 00:00:00 2001 From: SANGHEEJEONG <147232817+SANGHEEJEONG@users.noreply.github.com> Date: Sat, 26 Oct 2024 21:47:20 +0900 Subject: [PATCH 13/53] =?UTF-8?q?[FEAT]=20Players=20=ED=81=B4=EB=9E=98?= =?UTF-8?q?=EC=8A=A4=20=EC=83=9D=EC=84=B1=20(4=EB=8B=A8=EA=B3=84)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/test/java/domain/LadderGame.java | 3 ++- src/test/java/domain/Line.java | 6 ++++-- 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/src/test/java/domain/LadderGame.java b/src/test/java/domain/LadderGame.java index ff288dc9..e555000d 100644 --- a/src/test/java/domain/LadderGame.java +++ b/src/test/java/domain/LadderGame.java @@ -1,11 +1,11 @@ package domain; import java.util.ArrayList; +import java.util.Arrays; import java.util.List; public class LadderGame { - private int moveEachLadder(Ladder ladder, int ladderOrder) { int result = ladderOrder; for (Line line : ladder.getLadder()) { @@ -21,4 +21,5 @@ public List runGame(Ladder ladder, int width) { } return result; } + } diff --git a/src/test/java/domain/Line.java b/src/test/java/domain/Line.java index 65593688..cab75116 100644 --- a/src/test/java/domain/Line.java +++ b/src/test/java/domain/Line.java @@ -2,6 +2,8 @@ import java.util.List; +import static java.lang.Boolean.TRUE; + public class Line { private final List points; @@ -11,11 +13,11 @@ public Line(List points) { public int checkWhereToGo(int ladderOrder) { int right = ladderOrder + 1; - if (ladderOrder < points.size() && points.get(ladderOrder)) + if (ladderOrder < points.size() && points.get(ladderOrder) == TRUE) return right; int left = ladderOrder - 1; - if (ladderOrder != 0 && points.get(left)) + if (ladderOrder != 0 && points.get(left) == TRUE) return left; return ladderOrder; From 65d58d2841894286fc64f5de72979dfeb73257c8 Mon Sep 17 00:00:00 2001 From: SANGHEEJEONG <147232817+SANGHEEJEONG@users.noreply.github.com> Date: Sat, 26 Oct 2024 22:34:11 +0900 Subject: [PATCH 14/53] =?UTF-8?q?[FEAT]=20GameResult=20=ED=81=B4=EB=9E=98?= =?UTF-8?q?=EC=8A=A4=20=EC=83=9D=EC=84=B1=20=EB=B0=8F=20OutputView=20?= =?UTF-8?q?=EB=A9=94=EC=84=9C=EB=93=9C=20=EC=9E=91=EC=84=B1=20(4=EB=8B=A8?= =?UTF-8?q?=EA=B3=84)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/test/java/domain/GameResult.java | 16 ++++++++++++++++ src/test/java/view/InputView.java | 6 ++++++ src/test/java/view/OutputView.java | 13 +++++++++++++ 3 files changed, 35 insertions(+) create mode 100644 src/test/java/domain/GameResult.java diff --git a/src/test/java/domain/GameResult.java b/src/test/java/domain/GameResult.java new file mode 100644 index 00000000..1588484e --- /dev/null +++ b/src/test/java/domain/GameResult.java @@ -0,0 +1,16 @@ +package domain; + +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +public class GameResult { + private final Map resultMap = new HashMap<>(); + + public Map makeMap(List names, List result){ + for(int i = 0; i splitString(String string) { + return Arrays.asList(string.split(",")); + } + public static String inputNames(){ System.out.println("참여할 사람 이름을 입력하세요. (이름은 쉼표(,)로 구분하세요)"); return input.nextLine(); diff --git a/src/test/java/view/OutputView.java b/src/test/java/view/OutputView.java index 0516ca51..7de84775 100644 --- a/src/test/java/view/OutputView.java +++ b/src/test/java/view/OutputView.java @@ -23,6 +23,19 @@ private static void drawLine(Line line) { System.out.println("|"); } + public static void printPlayers(List names) { + for (String name : names) { + System.out.print(name); + } + } + + public static void printKindOfResults(List kindOfResults) { + for (String kind : kindOfResults) { + System.out.print(kind); + } + System.out.println(); + } + public static void drawLadder(Ladder Ladder) { System.out.println("\n사다리 결과\n"); for (Line lines : Ladder.getLadder()) { From 56b093f19a9ebe7110254bf909063b11f6a7d502 Mon Sep 17 00:00:00 2001 From: SANGHEEJEONG <147232817+SANGHEEJEONG@users.noreply.github.com> Date: Sat, 26 Oct 2024 23:25:26 +0900 Subject: [PATCH 15/53] =?UTF-8?q?[FEAT]=20main=20=EC=9E=91=EC=84=B1=20(4?= =?UTF-8?q?=EB=8B=A8=EA=B3=84)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/test/java/Main.java | 24 +++++++++++++++++++++--- src/test/java/domain/GameResult.java | 10 +++++++--- src/test/java/view/InputView.java | 2 +- src/test/java/view/OutputView.java | 22 ++++++++++++++++++---- 4 files changed, 47 insertions(+), 11 deletions(-) diff --git a/src/test/java/Main.java b/src/test/java/Main.java index 4610a7a5..2653b916 100644 --- a/src/test/java/Main.java +++ b/src/test/java/Main.java @@ -1,19 +1,37 @@ +import domain.GameResult; import domain.Ladder; import domain.LadderGame; import domain.LadderGenerator; +import domain.Players; import view.OutputView; import view.InputView; +import java.util.List; + + public class Main { public static void main(String[] args) { - final int width = InputView.inputWidth(); + final List playerNames = InputView.splitString(InputView.inputNames()); + final List kindOfResults = InputView.splitString(InputView.inputLadderResults()); + + final Players players = new Players(playerNames); + + final int width = players.getPlayersSize(); final int height = InputView.inputHeight(); final LadderGenerator ladderGenerator = new LadderGenerator(); final Ladder ladder = ladderGenerator.createLadder(width,height); + final LadderGame ladderGame = new LadderGame(); + final List resultList = ladderGame.runGame(ladder,width); + + final GameResult gameResult = new GameResult(); + gameResult.makeMap(playerNames,kindOfResults,resultList); + + OutputView.printPlayers(players.getPlayersNames()); OutputView.drawLadder(ladder); + OutputView.printKindOfResults(kindOfResults); - final LadderGame ladderGame = new LadderGame(); - OutputView.printAllResult(ladderGame.runGame(ladder,width)); + final String viewerPlayer = InputView.inputViewerName(); + OutputView.printResult(gameResult.getResultMap(),viewerPlayer); } } diff --git a/src/test/java/domain/GameResult.java b/src/test/java/domain/GameResult.java index 1588484e..ac0dde61 100644 --- a/src/test/java/domain/GameResult.java +++ b/src/test/java/domain/GameResult.java @@ -5,12 +5,16 @@ import java.util.Map; public class GameResult { - private final Map resultMap = new HashMap<>(); + private final Map resultMap = new HashMap<>(); - public Map makeMap(List names, List result){ + public void makeMap(List names, List kindOfResults, List result){ for(int i = 0; i getResultMap(){ return resultMap; } + } diff --git a/src/test/java/view/InputView.java b/src/test/java/view/InputView.java index 13c293b9..a680a218 100644 --- a/src/test/java/view/InputView.java +++ b/src/test/java/view/InputView.java @@ -7,7 +7,7 @@ public class InputView { private static final Scanner input = new Scanner(System.in); - public List splitString(String string) { + public static List splitString(String string) { return Arrays.asList(string.split(",")); } diff --git a/src/test/java/view/OutputView.java b/src/test/java/view/OutputView.java index 7de84775..d0d53e4a 100644 --- a/src/test/java/view/OutputView.java +++ b/src/test/java/view/OutputView.java @@ -4,6 +4,7 @@ import domain.Line; import java.util.List; +import java.util.Map; import static java.lang.Boolean.TRUE; @@ -24,9 +25,12 @@ private static void drawLine(Line line) { } public static void printPlayers(List names) { + System.out.println("\n사다리 결과\n"); + System.out.println(); for (String name : names) { System.out.print(name); } + System.out.println(); } public static void printKindOfResults(List kindOfResults) { @@ -37,16 +41,26 @@ public static void printKindOfResults(List kindOfResults) { } public static void drawLadder(Ladder Ladder) { - System.out.println("\n사다리 결과\n"); for (Line lines : Ladder.getLadder()) { drawLine(lines); } } - public static void printAllResult(List result) { + public static void printSelectedResult(String viewerName, Map resultMap) { + System.out.println("\n실행결과"); + System.out.println(resultMap.get(viewerName)); + } + + public static void printResult(Map resultMap, String viewerName) { System.out.println("\n실행결과"); - for (int i = 0; i < result.size(); i++) { - System.out.println(i + " -> " + result.get(i)); + + if ("all".equals(viewerName)) { + resultMap.forEach((player, result) -> System.out.println(player + " -> " + result)); + return; } + + String result = resultMap.getOrDefault(viewerName, "존재하지 않는 플레이어입니다."); + System.out.println(result); } + } From 5c6b21eae216e7129ba4c97c741a4d8cfaac0c21 Mon Sep 17 00:00:00 2001 From: SANGHEEJEONG <147232817+SANGHEEJEONG@users.noreply.github.com> Date: Sat, 26 Oct 2024 23:40:32 +0900 Subject: [PATCH 16/53] =?UTF-8?q?[REFACTOR]=20decideWhereToGo=20=EB=A9=94?= =?UTF-8?q?=EC=84=9C=EB=93=9C=20=EB=B6=84=EB=A6=AC=20(5=EB=8B=A8=EA=B3=84)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/test/java/domain/Line.java | 20 ++++++++++++++------ 1 file changed, 14 insertions(+), 6 deletions(-) diff --git a/src/test/java/domain/Line.java b/src/test/java/domain/Line.java index cab75116..0952d260 100644 --- a/src/test/java/domain/Line.java +++ b/src/test/java/domain/Line.java @@ -12,17 +12,25 @@ public Line(List points) { } public int checkWhereToGo(int ladderOrder) { - int right = ladderOrder + 1; - if (ladderOrder < points.size() && points.get(ladderOrder) == TRUE) - return right; + if (canMoveRight(ladderOrder)) { + return ++ladderOrder; + } - int left = ladderOrder - 1; - if (ladderOrder != 0 && points.get(left) == TRUE) - return left; + if (canMoveLeft(ladderOrder)) { + return --ladderOrder; + } return ladderOrder; } + private boolean canMoveRight(int ladderOrder) { + return (ladderOrder < points.size()) && (points.get(ladderOrder) == TRUE); + } + + private boolean canMoveLeft(int ladderOrder) { + return (ladderOrder != 0) && (points.get(ladderOrder - 1) == TRUE); + } + public List getLine() { return points; } From 67fcc5a6818570fa8ef0577fa395e011e7dd87f0 Mon Sep 17 00:00:00 2001 From: SANGHEEJEONG <147232817+SANGHEEJEONG@users.noreply.github.com> Date: Tue, 29 Oct 2024 16:58:20 +0900 Subject: [PATCH 17/53] =?UTF-8?q?[REFACTOR]=20Player=20=EA=B0=9D=EC=B2=B4?= =?UTF-8?q?=20=EB=B6=84=EB=A6=AC=20(5=EB=8B=A8=EA=B3=84)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/{test => main}/java/Main.java | 21 +++++----- src/{test => main}/java/domain/Ladder.java | 0 src/main/java/domain/LadderGame.java | 41 +++++++++++++++++++ .../java/domain/LadderGenerator.java | 0 src/{test => main}/java/domain/Line.java | 16 +------- src/main/java/domain/Player.java | 29 +++++++++++++ src/main/java/domain/Players.java | 19 +++++++++ src/{test => main}/java/view/InputView.java | 5 --- src/{test => main}/java/view/OutputView.java | 28 +++++++++---- src/test/java/domain/GameResult.java | 20 --------- src/test/java/domain/LadderGame.java | 25 ----------- 11 files changed, 122 insertions(+), 82 deletions(-) rename src/{test => main}/java/Main.java (63%) rename src/{test => main}/java/domain/Ladder.java (100%) create mode 100644 src/main/java/domain/LadderGame.java rename src/{test => main}/java/domain/LadderGenerator.java (100%) rename src/{test => main}/java/domain/Line.java (56%) create mode 100644 src/main/java/domain/Player.java create mode 100644 src/main/java/domain/Players.java rename src/{test => main}/java/view/InputView.java (87%) rename src/{test => main}/java/view/OutputView.java (58%) delete mode 100644 src/test/java/domain/GameResult.java delete mode 100644 src/test/java/domain/LadderGame.java diff --git a/src/test/java/Main.java b/src/main/java/Main.java similarity index 63% rename from src/test/java/Main.java rename to src/main/java/Main.java index 2653b916..0ff91e2b 100644 --- a/src/test/java/Main.java +++ b/src/main/java/Main.java @@ -1,4 +1,3 @@ -import domain.GameResult; import domain.Ladder; import domain.LadderGame; import domain.LadderGenerator; @@ -14,24 +13,26 @@ public static void main(String[] args) { final List playerNames = InputView.splitString(InputView.inputNames()); final List kindOfResults = InputView.splitString(InputView.inputLadderResults()); - final Players players = new Players(playerNames); + // 플레이어 생성 + final LadderGame ladderGame = new LadderGame(); + final Players players = new Players(ladderGame.createPlayer(playerNames)); final int width = players.getPlayersSize(); final int height = InputView.inputHeight(); + // 사다리 생성 final LadderGenerator ladderGenerator = new LadderGenerator(); final Ladder ladder = ladderGenerator.createLadder(width,height); - final LadderGame ladderGame = new LadderGame(); - final List resultList = ladderGame.runGame(ladder,width); - final GameResult gameResult = new GameResult(); - gameResult.makeMap(playerNames,kindOfResults,resultList); - - OutputView.printPlayers(players.getPlayersNames()); + // 사다리 그리기 + OutputView.printPlayers(playerNames); OutputView.drawLadder(ladder); OutputView.printKindOfResults(kindOfResults); - final String viewerPlayer = InputView.inputViewerName(); - OutputView.printResult(gameResult.getResultMap(),viewerPlayer); + // 사다리 게임 시작 + ladderGame.runGame(ladder,players); + + // 결과 출력 + OutputView.printResult(players,kindOfResults); } } diff --git a/src/test/java/domain/Ladder.java b/src/main/java/domain/Ladder.java similarity index 100% rename from src/test/java/domain/Ladder.java rename to src/main/java/domain/Ladder.java diff --git a/src/main/java/domain/LadderGame.java b/src/main/java/domain/LadderGame.java new file mode 100644 index 00000000..fbe19ef8 --- /dev/null +++ b/src/main/java/domain/LadderGame.java @@ -0,0 +1,41 @@ +package domain; + +import java.util.ArrayList; +import java.util.List; + +public class LadderGame { + + public List createPlayer(List playerNames){ + List players = new ArrayList<>(); + + for (int i = 0; i < playerNames.size(); i++) { + players.add(new Player(playerNames.get(i), i)); + } + + return players; + } + + public void movePlayer(Line line, Player player) { + if (line.canMoveRight(player.getPosition())) { + player.moveRight(); + return; + } + + if (line.canMoveLeft(player.getPosition())) { + player.moveLeft(); + } + } + + private void moveEachPlayer(Ladder ladder, Player player) { + for (Line line : ladder.getLadder()) { + movePlayer(line,player); + } + } + + public void runGame(Ladder ladder, Players players) { + for (Player player: players.getPlayers()) { + moveEachPlayer(ladder, player); + } + } + +} diff --git a/src/test/java/domain/LadderGenerator.java b/src/main/java/domain/LadderGenerator.java similarity index 100% rename from src/test/java/domain/LadderGenerator.java rename to src/main/java/domain/LadderGenerator.java diff --git a/src/test/java/domain/Line.java b/src/main/java/domain/Line.java similarity index 56% rename from src/test/java/domain/Line.java rename to src/main/java/domain/Line.java index 0952d260..e010e701 100644 --- a/src/test/java/domain/Line.java +++ b/src/main/java/domain/Line.java @@ -11,23 +11,11 @@ public Line(List points) { this.points = points; } - public int checkWhereToGo(int ladderOrder) { - if (canMoveRight(ladderOrder)) { - return ++ladderOrder; - } - - if (canMoveLeft(ladderOrder)) { - return --ladderOrder; - } - - return ladderOrder; - } - - private boolean canMoveRight(int ladderOrder) { + public boolean canMoveRight(int ladderOrder) { return (ladderOrder < points.size()) && (points.get(ladderOrder) == TRUE); } - private boolean canMoveLeft(int ladderOrder) { + public boolean canMoveLeft(int ladderOrder) { return (ladderOrder != 0) && (points.get(ladderOrder - 1) == TRUE); } diff --git a/src/main/java/domain/Player.java b/src/main/java/domain/Player.java new file mode 100644 index 00000000..9cbd74e3 --- /dev/null +++ b/src/main/java/domain/Player.java @@ -0,0 +1,29 @@ +package domain; + +public class Player { + private final String name; + private int position; + + public Player(String name,int position) { + this.name = name; + this.position = position; + } + + public void moveLeft(){ + position--; + System.out.println(getName()+getPosition()); + } + + public void moveRight(){ + position++; + System.out.println(getName()+getPosition()); + } + + public String getName(){ + return name; + } + + public int getPosition(){ + return position; + } +} diff --git a/src/main/java/domain/Players.java b/src/main/java/domain/Players.java new file mode 100644 index 00000000..463832b6 --- /dev/null +++ b/src/main/java/domain/Players.java @@ -0,0 +1,19 @@ +package domain; + +import java.util.List; + +public class Players { + private final List players; + + public Players(List players) { + this.players = players; + } + + public List getPlayers(){ + return players; + } + + public int getPlayersSize(){ + return players.size(); + } +} diff --git a/src/test/java/view/InputView.java b/src/main/java/view/InputView.java similarity index 87% rename from src/test/java/view/InputView.java rename to src/main/java/view/InputView.java index a680a218..3ded0803 100644 --- a/src/test/java/view/InputView.java +++ b/src/main/java/view/InputView.java @@ -21,11 +21,6 @@ public static String inputLadderResults(){ return input.nextLine(); } - public static int inputWidth(){ - System.out.println("사다리의 넓이는 몇 개인가요?"); - return input.nextInt(); - } - public static int inputHeight(){ System.out.println("최대 사다리 높이는 몇 개인가요?"); int height = input.nextInt(); diff --git a/src/test/java/view/OutputView.java b/src/main/java/view/OutputView.java similarity index 58% rename from src/test/java/view/OutputView.java rename to src/main/java/view/OutputView.java index d0d53e4a..6938f4fd 100644 --- a/src/test/java/view/OutputView.java +++ b/src/main/java/view/OutputView.java @@ -2,9 +2,10 @@ import domain.Ladder; import domain.Line; +import domain.Player; +import domain.Players; import java.util.List; -import java.util.Map; import static java.lang.Boolean.TRUE; @@ -46,21 +47,32 @@ public static void drawLadder(Ladder Ladder) { } } - public static void printSelectedResult(String viewerName, Map resultMap) { - System.out.println("\n실행결과"); - System.out.println(resultMap.get(viewerName)); + private static void printAllResult(Players players, List kindOfResults) { + for (Player player : players.getPlayers()) { + System.out.println(player.getName() + " :" + kindOfResults.get(player.getPosition())); + } } - public static void printResult(Map resultMap, String viewerName) { + private static int findViewerPosition(Players players, String viewerName){ + return players.getPlayers().stream() + .filter(player -> player.getName().equals(viewerName)) + .map(Player::getPosition) + .findFirst() + .orElse(-1); + } + + public static void printResult(Players players, List kindOfResults) { + final String viewerName = InputView.inputViewerName(); + System.out.println("\n실행결과"); if ("all".equals(viewerName)) { - resultMap.forEach((player, result) -> System.out.println(player + " -> " + result)); + printAllResult(players, kindOfResults); return; } - String result = resultMap.getOrDefault(viewerName, "존재하지 않는 플레이어입니다."); - System.out.println(result); + int result = findViewerPosition(players,viewerName); + System.out.println(kindOfResults.get(result)); } } diff --git a/src/test/java/domain/GameResult.java b/src/test/java/domain/GameResult.java deleted file mode 100644 index ac0dde61..00000000 --- a/src/test/java/domain/GameResult.java +++ /dev/null @@ -1,20 +0,0 @@ -package domain; - -import java.util.HashMap; -import java.util.List; -import java.util.Map; - -public class GameResult { - private final Map resultMap = new HashMap<>(); - - public void makeMap(List names, List kindOfResults, List result){ - for(int i = 0; i getResultMap(){ - return resultMap; - } - -} diff --git a/src/test/java/domain/LadderGame.java b/src/test/java/domain/LadderGame.java deleted file mode 100644 index e555000d..00000000 --- a/src/test/java/domain/LadderGame.java +++ /dev/null @@ -1,25 +0,0 @@ -package domain; - -import java.util.ArrayList; -import java.util.Arrays; -import java.util.List; - -public class LadderGame { - - private int moveEachLadder(Ladder ladder, int ladderOrder) { - int result = ladderOrder; - for (Line line : ladder.getLadder()) { - result = line.checkWhereToGo(result); - } - return result; - } - - public List runGame(Ladder ladder, int width) { - List result = new ArrayList<>(width); - for (int i = 0; i < width; i++) { - result.add(moveEachLadder(ladder, i)); - } - return result; - } - -} From 74f098df25844ea46be69b997f509bce33e84e0d Mon Sep 17 00:00:00 2001 From: SANGHEEJEONG <147232817+SANGHEEJEONG@users.noreply.github.com> Date: Wed, 30 Oct 2024 02:28:59 +0900 Subject: [PATCH 18/53] =?UTF-8?q?[REFACTOR]=20LadderGenerator=20=EB=A9=94?= =?UTF-8?q?=EC=84=9C=EB=93=9C=20=EC=88=98=EC=A0=95=20(5=EB=8B=A8=EA=B3=84)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/domain/LadderGenerator.java | 26 +++++++++++++++++------ 1 file changed, 19 insertions(+), 7 deletions(-) diff --git a/src/main/java/domain/LadderGenerator.java b/src/main/java/domain/LadderGenerator.java index ec634621..f562da09 100644 --- a/src/main/java/domain/LadderGenerator.java +++ b/src/main/java/domain/LadderGenerator.java @@ -2,6 +2,8 @@ import java.util.ArrayList; import java.util.List; +import java.util.stream.Collectors; +import java.util.stream.Stream; import static java.lang.Boolean.TRUE; @@ -12,31 +14,41 @@ private boolean randomTrueOrFalse() { } private boolean createValue(List line, int index) { - if (index == 0) // index가 0이면 랜덤값 반환 - return randomTrueOrFalse(); - if (line.get(index - 1) == TRUE) // 이전 값이 True면 false 반환 + if (index != 0 && line.get(index - 1) == TRUE) // 이전 값이 True면 false 반환 return false; return randomTrueOrFalse(); } private Line createLine(int width) { - List points = new ArrayList<>(4); - + List points = new ArrayList<>(); for (int i = 0; i < width - 1; i++) { points.add(createValue(points, i)); } + // 스트림 변환. 이 메서드에서는 for 문이 더 적합한 것 같아서 주석 처리. + /* + List points = IntStream.range(0, width - 1) + .mapToObj(i -> createValue(points, i)) + .collect(Collectors.toList()); + */ + return new Line(points); } public Ladder createLadder(int width, int height) { - List lines = new ArrayList<>(height); - + List lines = new ArrayList<>(); for (int i = 0; i < height; i++) { lines.add(createLine(width)); } + // 스트림 변환. 이 메서드에서는 for 문이 더 적합한 것 같아서 주석 처리. + /* + List lines = IntStream.range(0, height) + .mapToObj(i -> createLine(width)) + .collect(Collectors.toList()); + */ + return new Ladder(lines); } } From 97637541fa6401c3108272fa0f46bc0511962401 Mon Sep 17 00:00:00 2001 From: SANGHEEJEONG <147232817+SANGHEEJEONG@users.noreply.github.com> Date: Wed, 30 Oct 2024 02:35:15 +0900 Subject: [PATCH 19/53] =?UTF-8?q?[REFACTOR]=20LadderGame=20forEach=20?= =?UTF-8?q?=EB=9E=8C=EB=8B=A4=20=ED=98=95=EC=8B=9D=EC=9C=BC=EB=A1=9C=20?= =?UTF-8?q?=EB=B0=94=EA=BF=94=EB=B3=B4=EA=B8=B0(5=EB=8B=A8=EA=B3=84)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/domain/LadderGame.java | 10 +++------- 1 file changed, 3 insertions(+), 7 deletions(-) diff --git a/src/main/java/domain/LadderGame.java b/src/main/java/domain/LadderGame.java index fbe19ef8..82841f0d 100644 --- a/src/main/java/domain/LadderGame.java +++ b/src/main/java/domain/LadderGame.java @@ -5,7 +5,7 @@ public class LadderGame { - public List createPlayer(List playerNames){ + public List createPlayer(List playerNames) { List players = new ArrayList<>(); for (int i = 0; i < playerNames.size(); i++) { @@ -27,15 +27,11 @@ public void movePlayer(Line line, Player player) { } private void moveEachPlayer(Ladder ladder, Player player) { - for (Line line : ladder.getLadder()) { - movePlayer(line,player); - } + ladder.getLadder().forEach(line -> movePlayer(line, player)); } public void runGame(Ladder ladder, Players players) { - for (Player player: players.getPlayers()) { - moveEachPlayer(ladder, player); - } + players.getPlayers().forEach(player -> moveEachPlayer(ladder,player)); } } From a16726ad4dbd2aca54b5c1c557eebbf9155bb9ab Mon Sep 17 00:00:00 2001 From: SANGHEEJEONG <147232817+SANGHEEJEONG@users.noreply.github.com> Date: Wed, 30 Oct 2024 03:15:49 +0900 Subject: [PATCH 20/53] =?UTF-8?q?[REFACTOR]=20OutputView=20=EB=A9=94?= =?UTF-8?q?=EC=84=9C=EB=93=9C=20=EC=88=9C=EC=84=9C=20=EC=88=98=EC=A0=95(5?= =?UTF-8?q?=EB=8B=A8=EA=B3=84)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/domain/LadderGame.java | 1 - src/main/java/domain/LadderGenerator.java | 2 +- src/main/java/domain/Player.java | 2 -- src/main/java/view/InputView.java | 2 +- src/main/java/view/OutputView.java | 26 +++++++++++------------ 5 files changed, 14 insertions(+), 19 deletions(-) diff --git a/src/main/java/domain/LadderGame.java b/src/main/java/domain/LadderGame.java index 82841f0d..caacb6cb 100644 --- a/src/main/java/domain/LadderGame.java +++ b/src/main/java/domain/LadderGame.java @@ -7,7 +7,6 @@ public class LadderGame { public List createPlayer(List playerNames) { List players = new ArrayList<>(); - for (int i = 0; i < playerNames.size(); i++) { players.add(new Player(playerNames.get(i), i)); } diff --git a/src/main/java/domain/LadderGenerator.java b/src/main/java/domain/LadderGenerator.java index f562da09..ecd2b1fc 100644 --- a/src/main/java/domain/LadderGenerator.java +++ b/src/main/java/domain/LadderGenerator.java @@ -14,7 +14,7 @@ private boolean randomTrueOrFalse() { } private boolean createValue(List line, int index) { - if (index != 0 && line.get(index - 1) == TRUE) // 이전 값이 True면 false 반환 + if (index != 0 && line.get(index - 1) == TRUE) // 이전 값이 true 면 false 반환 return false; return randomTrueOrFalse(); diff --git a/src/main/java/domain/Player.java b/src/main/java/domain/Player.java index 9cbd74e3..916e0e7b 100644 --- a/src/main/java/domain/Player.java +++ b/src/main/java/domain/Player.java @@ -11,12 +11,10 @@ public Player(String name,int position) { public void moveLeft(){ position--; - System.out.println(getName()+getPosition()); } public void moveRight(){ position++; - System.out.println(getName()+getPosition()); } public String getName(){ diff --git a/src/main/java/view/InputView.java b/src/main/java/view/InputView.java index 3ded0803..c04add12 100644 --- a/src/main/java/view/InputView.java +++ b/src/main/java/view/InputView.java @@ -29,7 +29,7 @@ public static int inputHeight(){ } public static String inputViewerName(){ - System.out.println("결과를 보고 싶은 사람은?"); + System.out.println("\n결과를 보고 싶은 사람은?"); return input.nextLine(); } } diff --git a/src/main/java/view/OutputView.java b/src/main/java/view/OutputView.java index 6938f4fd..a13fa246 100644 --- a/src/main/java/view/OutputView.java +++ b/src/main/java/view/OutputView.java @@ -10,6 +10,13 @@ import static java.lang.Boolean.TRUE; public class OutputView { + + public static void printPlayers(List names) { + System.out.println("\n사다리 결과\n"); + names.forEach(System.out::print); + System.out.println(); + } + private static String changeValueToView(Boolean point) { if (point == TRUE) return "-----"; @@ -25,13 +32,10 @@ private static void drawLine(Line line) { System.out.println("|"); } - public static void printPlayers(List names) { - System.out.println("\n사다리 결과\n"); - System.out.println(); - for (String name : names) { - System.out.print(name); + public static void drawLadder(Ladder Ladder) { + for (Line lines : Ladder.getLadder()) { + drawLine(lines); } - System.out.println(); } public static void printKindOfResults(List kindOfResults) { @@ -41,15 +45,9 @@ public static void printKindOfResults(List kindOfResults) { System.out.println(); } - public static void drawLadder(Ladder Ladder) { - for (Line lines : Ladder.getLadder()) { - drawLine(lines); - } - } - - private static void printAllResult(Players players, List kindOfResults) { + public static void printAllResult(Players players, List kindOfResults) { for (Player player : players.getPlayers()) { - System.out.println(player.getName() + " :" + kindOfResults.get(player.getPosition())); + System.out.println(player.getName() + " : " + kindOfResults.get(player.getPosition())); } } From 69871ca471df8caebf3067612b6295f183a2fdf7 Mon Sep 17 00:00:00 2001 From: SANGHEEJEONG <147232817+SANGHEEJEONG@users.noreply.github.com> Date: Wed, 30 Oct 2024 13:12:16 +0900 Subject: [PATCH 21/53] =?UTF-8?q?[REFACTOR]=20findPlayerByName=20=EB=A9=94?= =?UTF-8?q?=EC=84=9C=EB=93=9C=EB=A5=BC=20Players=EB=A1=9C=20=EC=B1=85?= =?UTF-8?q?=EC=9E=84=20=EB=B6=84=EB=A6=AC(5=EB=8B=A8=EA=B3=84)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/domain/LadderGenerator.java | 16 ---------------- src/main/java/domain/Players.java | 8 ++++++++ src/main/java/view/OutputView.java | 14 +++----------- 3 files changed, 11 insertions(+), 27 deletions(-) diff --git a/src/main/java/domain/LadderGenerator.java b/src/main/java/domain/LadderGenerator.java index ecd2b1fc..72af9f7c 100644 --- a/src/main/java/domain/LadderGenerator.java +++ b/src/main/java/domain/LadderGenerator.java @@ -2,8 +2,6 @@ import java.util.ArrayList; import java.util.List; -import java.util.stream.Collectors; -import java.util.stream.Stream; import static java.lang.Boolean.TRUE; @@ -26,13 +24,6 @@ private Line createLine(int width) { points.add(createValue(points, i)); } - // 스트림 변환. 이 메서드에서는 for 문이 더 적합한 것 같아서 주석 처리. - /* - List points = IntStream.range(0, width - 1) - .mapToObj(i -> createValue(points, i)) - .collect(Collectors.toList()); - */ - return new Line(points); } @@ -42,13 +33,6 @@ public Ladder createLadder(int width, int height) { lines.add(createLine(width)); } - // 스트림 변환. 이 메서드에서는 for 문이 더 적합한 것 같아서 주석 처리. - /* - List lines = IntStream.range(0, height) - .mapToObj(i -> createLine(width)) - .collect(Collectors.toList()); - */ - return new Ladder(lines); } } diff --git a/src/main/java/domain/Players.java b/src/main/java/domain/Players.java index 463832b6..ff95b0cb 100644 --- a/src/main/java/domain/Players.java +++ b/src/main/java/domain/Players.java @@ -1,6 +1,7 @@ package domain; import java.util.List; +import java.util.NoSuchElementException; public class Players { private final List players; @@ -9,6 +10,13 @@ public Players(List players) { this.players = players; } + public Player findByName(String viewerName) { + return players.stream() + .filter(player -> player.getName().equals(viewerName)) + .findFirst() + .orElseThrow(() -> new NoSuchElementException("플레이어 이름 '" + viewerName + "' 이 존재하지 않습니다.")); + } + public List getPlayers(){ return players; } diff --git a/src/main/java/view/OutputView.java b/src/main/java/view/OutputView.java index a13fa246..07a3ce5c 100644 --- a/src/main/java/view/OutputView.java +++ b/src/main/java/view/OutputView.java @@ -51,16 +51,8 @@ public static void printAllResult(Players players, List kindOfResults) { } } - private static int findViewerPosition(Players players, String viewerName){ - return players.getPlayers().stream() - .filter(player -> player.getName().equals(viewerName)) - .map(Player::getPosition) - .findFirst() - .orElse(-1); - } - public static void printResult(Players players, List kindOfResults) { - final String viewerName = InputView.inputViewerName(); + String viewerName = InputView.inputViewerName(); System.out.println("\n실행결과"); @@ -69,8 +61,8 @@ public static void printResult(Players players, List kindOfResults) { return; } - int result = findViewerPosition(players,viewerName); - System.out.println(kindOfResults.get(result)); + Player player = players.findByName(viewerName); + System.out.println(kindOfResults.get(player.getPosition())); } } From 169ec00516f83c49c721b547c57bcf81fdd8cca1 Mon Sep 17 00:00:00 2001 From: SANGHEEJEONG <147232817+SANGHEEJEONG@users.noreply.github.com> Date: Wed, 30 Oct 2024 13:28:18 +0900 Subject: [PATCH 22/53] =?UTF-8?q?[REFACTOR]=20OutputView=20=EC=A3=BC?= =?UTF-8?q?=EC=84=9D=20=EB=B0=8F=20=EC=88=98=EC=A0=95=20(5=EB=8B=A8?= =?UTF-8?q?=EA=B3=84)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/domain/Ladder.java | 3 ++- src/main/java/domain/LadderGame.java | 2 +- src/main/java/domain/Player.java | 10 +++++----- src/main/java/domain/Players.java | 4 ++-- src/main/java/view/InputView.java | 8 ++++---- src/main/java/view/OutputView.java | 19 ++++++++----------- 6 files changed, 22 insertions(+), 24 deletions(-) diff --git a/src/main/java/domain/Ladder.java b/src/main/java/domain/Ladder.java index 671bf763..61c491a6 100644 --- a/src/main/java/domain/Ladder.java +++ b/src/main/java/domain/Ladder.java @@ -4,11 +4,12 @@ public class Ladder { private final List lines; + public Ladder(List lines) { this.lines = lines; } - public List getLadder(){ + public List getLadder() { return lines; } } diff --git a/src/main/java/domain/LadderGame.java b/src/main/java/domain/LadderGame.java index caacb6cb..0fc2e422 100644 --- a/src/main/java/domain/LadderGame.java +++ b/src/main/java/domain/LadderGame.java @@ -30,7 +30,7 @@ private void moveEachPlayer(Ladder ladder, Player player) { } public void runGame(Ladder ladder, Players players) { - players.getPlayers().forEach(player -> moveEachPlayer(ladder,player)); + players.getPlayers().forEach(player -> moveEachPlayer(ladder, player)); } } diff --git a/src/main/java/domain/Player.java b/src/main/java/domain/Player.java index 916e0e7b..1a8c2b1e 100644 --- a/src/main/java/domain/Player.java +++ b/src/main/java/domain/Player.java @@ -4,24 +4,24 @@ public class Player { private final String name; private int position; - public Player(String name,int position) { + public Player(String name, int position) { this.name = name; this.position = position; } - public void moveLeft(){ + public void moveLeft() { position--; } - public void moveRight(){ + public void moveRight() { position++; } - public String getName(){ + public String getName() { return name; } - public int getPosition(){ + public int getPosition() { return position; } } diff --git a/src/main/java/domain/Players.java b/src/main/java/domain/Players.java index ff95b0cb..2890214d 100644 --- a/src/main/java/domain/Players.java +++ b/src/main/java/domain/Players.java @@ -17,11 +17,11 @@ public Player findByName(String viewerName) { .orElseThrow(() -> new NoSuchElementException("플레이어 이름 '" + viewerName + "' 이 존재하지 않습니다.")); } - public List getPlayers(){ + public List getPlayers() { return players; } - public int getPlayersSize(){ + public int getPlayersSize() { return players.size(); } } diff --git a/src/main/java/view/InputView.java b/src/main/java/view/InputView.java index c04add12..d5a37389 100644 --- a/src/main/java/view/InputView.java +++ b/src/main/java/view/InputView.java @@ -11,24 +11,24 @@ public static List splitString(String string) { return Arrays.asList(string.split(",")); } - public static String inputNames(){ + public static String inputNames() { System.out.println("참여할 사람 이름을 입력하세요. (이름은 쉼표(,)로 구분하세요)"); return input.nextLine(); } - public static String inputLadderResults(){ + public static String inputLadderResults() { System.out.println("실행 결과를 입력하세요. (결과는 쉼표(,)로 구분하세요)"); return input.nextLine(); } - public static int inputHeight(){ + public static int inputHeight() { System.out.println("최대 사다리 높이는 몇 개인가요?"); int height = input.nextInt(); input.nextLine(); return height; } - public static String inputViewerName(){ + public static String inputViewerName() { System.out.println("\n결과를 보고 싶은 사람은?"); return input.nextLine(); } diff --git a/src/main/java/view/OutputView.java b/src/main/java/view/OutputView.java index 07a3ce5c..e08c37dc 100644 --- a/src/main/java/view/OutputView.java +++ b/src/main/java/view/OutputView.java @@ -11,6 +11,7 @@ public class OutputView { + // 플레이어 이름 출력 public static void printPlayers(List names) { System.out.println("\n사다리 결과\n"); names.forEach(System.out::print); @@ -25,23 +26,18 @@ private static String changeValueToView(Boolean point) { } private static void drawLine(Line line) { - for (Boolean point : line.getLine()) { - System.out.print("|"); - System.out.print(changeValueToView(point)); - } + line.getLine().forEach(point -> System.out.print("|" + changeValueToView(point))); System.out.println("|"); } - public static void drawLadder(Ladder Ladder) { - for (Line lines : Ladder.getLadder()) { - drawLine(lines); - } + // 사다리 출력 + public static void drawLadder(Ladder ladder) { + ladder.getLadder().forEach(OutputView::drawLine); } + // 결과 종류 출력 public static void printKindOfResults(List kindOfResults) { - for (String kind : kindOfResults) { - System.out.print(kind); - } + kindOfResults.forEach(System.out::print); System.out.println(); } @@ -51,6 +47,7 @@ public static void printAllResult(Players players, List kindOfResults) { } } + // 보고 싶은 사다리 결과 출력 public static void printResult(Players players, List kindOfResults) { String viewerName = InputView.inputViewerName(); From ea543eb32bff2a85007d7c3fd293cae3da55e8e0 Mon Sep 17 00:00:00 2001 From: SANGHEEJEONG <147232817+SANGHEEJEONG@users.noreply.github.com> Date: Wed, 30 Oct 2024 13:53:02 +0900 Subject: [PATCH 23/53] =?UTF-8?q?[REFACTOR]=20Name,=20Position=20=EC=9B=90?= =?UTF-8?q?=EC=8B=9C=EA=B0=92=20=ED=8F=AC=EC=9E=A5=20(5=EB=8B=A8=EA=B3=84)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/domain/LadderGame.java | 2 +- src/main/java/domain/Name.java | 14 ++++++++++++++ src/main/java/domain/Player.java | 15 ++++++++------- src/main/java/domain/Position.java | 23 +++++++++++++++++++++++ 4 files changed, 46 insertions(+), 8 deletions(-) create mode 100644 src/main/java/domain/Name.java create mode 100644 src/main/java/domain/Position.java diff --git a/src/main/java/domain/LadderGame.java b/src/main/java/domain/LadderGame.java index 0fc2e422..184f555c 100644 --- a/src/main/java/domain/LadderGame.java +++ b/src/main/java/domain/LadderGame.java @@ -8,7 +8,7 @@ public class LadderGame { public List createPlayer(List playerNames) { List players = new ArrayList<>(); for (int i = 0; i < playerNames.size(); i++) { - players.add(new Player(playerNames.get(i), i)); + players.add(new Player(new Name(playerNames.get(i)), new Position(i))); } return players; diff --git a/src/main/java/domain/Name.java b/src/main/java/domain/Name.java new file mode 100644 index 00000000..3a550b88 --- /dev/null +++ b/src/main/java/domain/Name.java @@ -0,0 +1,14 @@ +package domain; + +public class Name { + + private final String name; + + public Name(String name) { + this.name = name; + } + + public String getName(){ + return name; + } +} diff --git a/src/main/java/domain/Player.java b/src/main/java/domain/Player.java index 1a8c2b1e..f72277ef 100644 --- a/src/main/java/domain/Player.java +++ b/src/main/java/domain/Player.java @@ -1,27 +1,28 @@ package domain; public class Player { - private final String name; - private int position; - public Player(String name, int position) { + private final Name name; + private final Position position; + + public Player(Name name, Position position) { this.name = name; this.position = position; } public void moveLeft() { - position--; + position.movePositionLeft(); } public void moveRight() { - position++; + position.movePositionRight(); } public String getName() { - return name; + return name.getName(); } public int getPosition() { - return position; + return position.getPosition(); } } diff --git a/src/main/java/domain/Position.java b/src/main/java/domain/Position.java new file mode 100644 index 00000000..4d8b197c --- /dev/null +++ b/src/main/java/domain/Position.java @@ -0,0 +1,23 @@ +package domain; + +public class Position { + + private int position; + + public Position(int position) { + this.position = position; + } + + public int getPosition(){ + return position; + } + + public void movePositionLeft() { + position--; + } + + public void movePositionRight() { + position++; + } + +} From e81fa34753a439cfe782173cfce2cd40b82ffa66 Mon Sep 17 00:00:00 2001 From: SANGHEEJEONG <147232817+SANGHEEJEONG@users.noreply.github.com> Date: Wed, 30 Oct 2024 14:54:10 +0900 Subject: [PATCH 24/53] =?UTF-8?q?[REFACTOR]=20Name=20=EC=98=88=EC=99=B8?= =?UTF-8?q?=EC=B2=98=EB=A6=AC=20(5=EB=8B=A8=EA=B3=84)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/domain/Name.java | 29 ++++++++++++++++++++++++++++- 1 file changed, 28 insertions(+), 1 deletion(-) diff --git a/src/main/java/domain/Name.java b/src/main/java/domain/Name.java index 3a550b88..f79918e0 100644 --- a/src/main/java/domain/Name.java +++ b/src/main/java/domain/Name.java @@ -3,12 +3,39 @@ public class Name { private final String name; + private final static int MAX_LENGTH = 5; + private final static String INVALID_NAME = "all"; public Name(String name) { + validateName(name); this.name = name; } - public String getName(){ + private void validateName(String name) { + validateMaxLength(name); + validateNotBlank(name); + validateNotEqualAll(name); + } + + private void validateNotBlank(String name) { + if (name.isBlank()) { + throw new IllegalArgumentException("이름은 공백일 수 없습니다."); + } + } + + private void validateMaxLength(String name) { + if (name.length() > MAX_LENGTH) { + throw new IllegalArgumentException("이름은 5자를 초과할 수 없습니다."); + } + } + + private void validateNotEqualAll(String name) { + if (name.equals(INVALID_NAME)) { + throw new IllegalArgumentException("이름은 all일 수 없습니다."); + } + } + + public String getName() { return name; } } From 047d4831dbd35bc8a227bb819d4f0890a84c3309 Mon Sep 17 00:00:00 2001 From: SANGHEEJEONG <147232817+SANGHEEJEONG@users.noreply.github.com> Date: Wed, 30 Oct 2024 15:36:31 +0900 Subject: [PATCH 25/53] =?UTF-8?q?[REFACTOR]=20ResultTypes=20=EC=98=88?= =?UTF-8?q?=EC=99=B8=EC=B2=98=EB=A6=AC=20(5=EB=8B=A8=EA=B3=84)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/Main.java | 17 +++++++++----- src/main/java/domain/ResultTypes.java | 34 +++++++++++++++++++++++++++ src/main/java/view/OutputView.java | 15 ++++++------ 3 files changed, 53 insertions(+), 13 deletions(-) create mode 100644 src/main/java/domain/ResultTypes.java diff --git a/src/main/java/Main.java b/src/main/java/Main.java index 0ff91e2b..e331a23e 100644 --- a/src/main/java/Main.java +++ b/src/main/java/Main.java @@ -2,6 +2,7 @@ import domain.LadderGame; import domain.LadderGenerator; import domain.Players; +import domain.ResultTypes; import view.OutputView; import view.InputView; @@ -10,29 +11,33 @@ public class Main { public static void main(String[] args) { - final List playerNames = InputView.splitString(InputView.inputNames()); - final List kindOfResults = InputView.splitString(InputView.inputLadderResults()); + // 사다리 게임 시작 + final LadderGame ladderGame = new LadderGame(); // 플레이어 생성 - final LadderGame ladderGame = new LadderGame(); + final List playerNames = InputView.splitString(InputView.inputNames()); final Players players = new Players(ladderGame.createPlayer(playerNames)); + // 실행결과 생성 + final List kindOfResults = InputView.splitString(InputView.inputLadderResults()); + final ResultTypes resultTypes = new ResultTypes(kindOfResults,players.getPlayersSize()); + + // 사다리 생성 final int width = players.getPlayersSize(); final int height = InputView.inputHeight(); - // 사다리 생성 final LadderGenerator ladderGenerator = new LadderGenerator(); final Ladder ladder = ladderGenerator.createLadder(width,height); // 사다리 그리기 OutputView.printPlayers(playerNames); OutputView.drawLadder(ladder); - OutputView.printKindOfResults(kindOfResults); + OutputView.printResultTypes(resultTypes.getResultTypes()); // 사다리 게임 시작 ladderGame.runGame(ladder,players); // 결과 출력 - OutputView.printResult(players,kindOfResults); + OutputView.printResult(players,resultTypes.getResultTypes()); } } diff --git a/src/main/java/domain/ResultTypes.java b/src/main/java/domain/ResultTypes.java new file mode 100644 index 00000000..278d1776 --- /dev/null +++ b/src/main/java/domain/ResultTypes.java @@ -0,0 +1,34 @@ +package domain; + +import java.util.List; + +public class ResultTypes { + + private final List resultTypes; + + public ResultTypes(List resultTypes, int width) { + validate(resultTypes, width); + this.resultTypes = resultTypes; + } + + private void validate(List resultTypes, int width) { + resultTypes.forEach(this::validateNotBlank); + validateSize(resultTypes, width); + } + + private void validateNotBlank(String resultType) { + if (resultType.isBlank()) { + throw new IllegalArgumentException("실행 결과는 공백일 수 없습니다."); + } + } + + private void validateSize(List resultTypes, int width) { + if (resultTypes.size() != width) { + throw new IllegalArgumentException("실행 결과는 사다리의 개수와 일치해야 합니다."); + } + } + + public List getResultTypes() { + return resultTypes; + } +} diff --git a/src/main/java/view/OutputView.java b/src/main/java/view/OutputView.java index e08c37dc..e635e07b 100644 --- a/src/main/java/view/OutputView.java +++ b/src/main/java/view/OutputView.java @@ -4,6 +4,7 @@ import domain.Line; import domain.Player; import domain.Players; +import domain.ResultTypes; import java.util.List; @@ -36,30 +37,30 @@ public static void drawLadder(Ladder ladder) { } // 결과 종류 출력 - public static void printKindOfResults(List kindOfResults) { - kindOfResults.forEach(System.out::print); + public static void printResultTypes(List resultTypes) { + resultTypes.forEach(System.out::print); System.out.println(); } - public static void printAllResult(Players players, List kindOfResults) { + public static void printAllResult(Players players, List resultTypes) { for (Player player : players.getPlayers()) { - System.out.println(player.getName() + " : " + kindOfResults.get(player.getPosition())); + System.out.println(player.getName() + " : " + resultTypes.get(player.getPosition())); } } // 보고 싶은 사다리 결과 출력 - public static void printResult(Players players, List kindOfResults) { + public static void printResult(Players players, List resultTypes) { String viewerName = InputView.inputViewerName(); System.out.println("\n실행결과"); if ("all".equals(viewerName)) { - printAllResult(players, kindOfResults); + printAllResult(players, resultTypes); return; } Player player = players.findByName(viewerName); - System.out.println(kindOfResults.get(player.getPosition())); + System.out.println(resultTypes.get(player.getPosition())); } } From 2dfe464fe5501458a00a8fbc688ae392e6365d2e Mon Sep 17 00:00:00 2001 From: SANGHEEJEONG <147232817+SANGHEEJEONG@users.noreply.github.com> Date: Wed, 30 Oct 2024 16:07:11 +0900 Subject: [PATCH 26/53] =?UTF-8?q?[REFACTOR]=20Players=20=EC=98=88=EC=99=B8?= =?UTF-8?q?=EC=B2=98=EB=A6=AC=20(5=EB=8B=A8=EA=B3=84)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/Main.java | 2 +- src/main/java/domain/LadderGame.java | 12 ------------ src/main/java/domain/Players.java | 23 +++++++++++++++++++++-- 3 files changed, 22 insertions(+), 15 deletions(-) diff --git a/src/main/java/Main.java b/src/main/java/Main.java index e331a23e..9ce4a707 100644 --- a/src/main/java/Main.java +++ b/src/main/java/Main.java @@ -16,7 +16,7 @@ public static void main(String[] args) { // 플레이어 생성 final List playerNames = InputView.splitString(InputView.inputNames()); - final Players players = new Players(ladderGame.createPlayer(playerNames)); + final Players players = new Players(playerNames); // 실행결과 생성 final List kindOfResults = InputView.splitString(InputView.inputLadderResults()); diff --git a/src/main/java/domain/LadderGame.java b/src/main/java/domain/LadderGame.java index 184f555c..3bcb2311 100644 --- a/src/main/java/domain/LadderGame.java +++ b/src/main/java/domain/LadderGame.java @@ -1,19 +1,7 @@ package domain; -import java.util.ArrayList; -import java.util.List; - public class LadderGame { - public List createPlayer(List playerNames) { - List players = new ArrayList<>(); - for (int i = 0; i < playerNames.size(); i++) { - players.add(new Player(new Name(playerNames.get(i)), new Position(i))); - } - - return players; - } - public void movePlayer(Line line, Player player) { if (line.canMoveRight(player.getPosition())) { player.moveRight(); diff --git a/src/main/java/domain/Players.java b/src/main/java/domain/Players.java index 2890214d..41957ac9 100644 --- a/src/main/java/domain/Players.java +++ b/src/main/java/domain/Players.java @@ -1,13 +1,32 @@ package domain; +import java.util.ArrayList; import java.util.List; import java.util.NoSuchElementException; public class Players { + private final List players; + private final static int MIN_PLAYER_SIZE = 2; + + public Players(List playerNames) { + validateSize(playerNames); + this.players = createPlayer(playerNames); + } - public Players(List players) { - this.players = players; + private void validateSize(List playerNames) { + if (playerNames.size() < MIN_PLAYER_SIZE) { + throw new IllegalArgumentException("플레이어 수는 2명 이상이어야 합니다."); + } + } + + public List createPlayer(List playerNames) { + List players = new ArrayList<>(); + for (int i = 0; i < playerNames.size(); i++) { + players.add(new Player(new Name(playerNames.get(i)), new Position(i))); + } + + return players; } public Player findByName(String viewerName) { From 42cdbd638a01f66e6a4650fa800ebba196cef44c Mon Sep 17 00:00:00 2001 From: SANGHEEJEONG <147232817+SANGHEEJEONG@users.noreply.github.com> Date: Wed, 30 Oct 2024 16:59:22 +0900 Subject: [PATCH 27/53] =?UTF-8?q?[REFACTOR]=20=EC=9E=85=EB=A0=A5=20?= =?UTF-8?q?=EC=98=88=EC=99=B8=EC=B2=98=EB=A6=AC=20(5=EB=8B=A8=EA=B3=84)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/domain/Players.java | 2 +- src/main/java/view/InputException.java | 16 ++++++++++++++++ src/main/java/view/InputView.java | 5 ++++- 3 files changed, 21 insertions(+), 2 deletions(-) create mode 100644 src/main/java/view/InputException.java diff --git a/src/main/java/domain/Players.java b/src/main/java/domain/Players.java index 41957ac9..2e4b7835 100644 --- a/src/main/java/domain/Players.java +++ b/src/main/java/domain/Players.java @@ -20,7 +20,7 @@ private void validateSize(List playerNames) { } } - public List createPlayer(List playerNames) { + private List createPlayer(List playerNames) { List players = new ArrayList<>(); for (int i = 0; i < playerNames.size(); i++) { players.add(new Player(new Name(playerNames.get(i)), new Position(i))); diff --git a/src/main/java/view/InputException.java b/src/main/java/view/InputException.java new file mode 100644 index 00000000..e3e4eafc --- /dev/null +++ b/src/main/java/view/InputException.java @@ -0,0 +1,16 @@ +package view; + +public class InputException { + + public static void validateHeightSize(int height){ + if (height < 1) { + throw new IllegalArgumentException("사다리 높이는 1 이상이어야 합니다."); + } + } + + public static void validateViewerNameNotBlank(String viewerName){ + if (viewerName.isBlank()) { + throw new IllegalArgumentException("이름은 공백일 수 없습니다."); + } + } +} diff --git a/src/main/java/view/InputView.java b/src/main/java/view/InputView.java index d5a37389..0b530e69 100644 --- a/src/main/java/view/InputView.java +++ b/src/main/java/view/InputView.java @@ -24,12 +24,15 @@ public static String inputLadderResults() { public static int inputHeight() { System.out.println("최대 사다리 높이는 몇 개인가요?"); int height = input.nextInt(); + InputException.validateHeightSize(height); input.nextLine(); return height; } public static String inputViewerName() { System.out.println("\n결과를 보고 싶은 사람은?"); - return input.nextLine(); + String viewerName = input.nextLine(); + InputException.validateViewerNameNotBlank(viewerName); + return viewerName; } } From 62f451d10a51499b8a4768fa142d8aa85da10d24 Mon Sep 17 00:00:00 2001 From: SANGHEEJEONG <147232817+SANGHEEJEONG@users.noreply.github.com> Date: Wed, 30 Oct 2024 17:25:25 +0900 Subject: [PATCH 28/53] =?UTF-8?q?[REFACTOR]=20=EB=B6=88=EB=B3=80=EA=B0=9D?= =?UTF-8?q?=EC=B2=B4=20=EC=A0=81=EC=9A=A9=20(5=EB=8B=A8=EA=B3=84)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/domain/Ladder.java | 3 ++- src/main/java/domain/Line.java | 3 ++- src/main/java/domain/Players.java | 3 ++- src/main/java/domain/Position.java | 8 ++++---- 4 files changed, 10 insertions(+), 7 deletions(-) diff --git a/src/main/java/domain/Ladder.java b/src/main/java/domain/Ladder.java index 61c491a6..f255c6de 100644 --- a/src/main/java/domain/Ladder.java +++ b/src/main/java/domain/Ladder.java @@ -1,5 +1,6 @@ package domain; +import java.util.Collections; import java.util.List; public class Ladder { @@ -10,6 +11,6 @@ public Ladder(List lines) { } public List getLadder() { - return lines; + return Collections.unmodifiableList(lines); } } diff --git a/src/main/java/domain/Line.java b/src/main/java/domain/Line.java index e010e701..5d195b65 100644 --- a/src/main/java/domain/Line.java +++ b/src/main/java/domain/Line.java @@ -1,5 +1,6 @@ package domain; +import java.util.Collections; import java.util.List; import static java.lang.Boolean.TRUE; @@ -20,6 +21,6 @@ public boolean canMoveLeft(int ladderOrder) { } public List getLine() { - return points; + return Collections.unmodifiableList(points); } } diff --git a/src/main/java/domain/Players.java b/src/main/java/domain/Players.java index 2e4b7835..aaf2d629 100644 --- a/src/main/java/domain/Players.java +++ b/src/main/java/domain/Players.java @@ -1,6 +1,7 @@ package domain; import java.util.ArrayList; +import java.util.Collections; import java.util.List; import java.util.NoSuchElementException; @@ -37,7 +38,7 @@ public Player findByName(String viewerName) { } public List getPlayers() { - return players; + return Collections.unmodifiableList(players); } public int getPlayersSize() { diff --git a/src/main/java/domain/Position.java b/src/main/java/domain/Position.java index 4d8b197c..1c981f90 100644 --- a/src/main/java/domain/Position.java +++ b/src/main/java/domain/Position.java @@ -8,10 +8,6 @@ public Position(int position) { this.position = position; } - public int getPosition(){ - return position; - } - public void movePositionLeft() { position--; } @@ -20,4 +16,8 @@ public void movePositionRight() { position++; } + public int getPosition(){ + return position; + } + } From 422af42feaa307924acd8386c73fee9602de13cc Mon Sep 17 00:00:00 2001 From: SANGHEEJEONG <147232817+SANGHEEJEONG@users.noreply.github.com> Date: Wed, 30 Oct 2024 23:03:55 +0900 Subject: [PATCH 29/53] =?UTF-8?q?[REFACTOR]=20=EB=8B=A8=EC=9C=84=ED=85=8C?= =?UTF-8?q?=EC=8A=A4=ED=8A=B8=20=EC=9E=91=EC=84=B1=20(5=EB=8B=A8=EA=B3=84)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/domain/LadderGame.java | 2 +- src/main/java/domain/LadderGenerator.java | 6 +- src/test/java/domain/LadderGameTest.java | 80 +++++++++++++++++++ src/test/java/domain/LadderGeneratorTest.java | 70 ++++++++++++++++ src/test/java/domain/LineTest.java | 42 ++++++++++ src/test/java/domain/NameTest.java | 42 ++++++++++ src/test/java/domain/PlayerTest.java | 39 +++++++++ src/test/java/domain/PlayersTest.java | 50 ++++++++++++ src/test/java/domain/ResultTypesTest.java | 45 +++++++++++ 9 files changed, 372 insertions(+), 4 deletions(-) create mode 100644 src/test/java/domain/LadderGameTest.java create mode 100644 src/test/java/domain/LadderGeneratorTest.java create mode 100644 src/test/java/domain/LineTest.java create mode 100644 src/test/java/domain/NameTest.java create mode 100644 src/test/java/domain/PlayerTest.java create mode 100644 src/test/java/domain/PlayersTest.java create mode 100644 src/test/java/domain/ResultTypesTest.java diff --git a/src/main/java/domain/LadderGame.java b/src/main/java/domain/LadderGame.java index 3bcb2311..300c386c 100644 --- a/src/main/java/domain/LadderGame.java +++ b/src/main/java/domain/LadderGame.java @@ -13,7 +13,7 @@ public void movePlayer(Line line, Player player) { } } - private void moveEachPlayer(Ladder ladder, Player player) { + public void moveEachPlayer(Ladder ladder, Player player) { ladder.getLadder().forEach(line -> movePlayer(line, player)); } diff --git a/src/main/java/domain/LadderGenerator.java b/src/main/java/domain/LadderGenerator.java index 72af9f7c..b1eb710e 100644 --- a/src/main/java/domain/LadderGenerator.java +++ b/src/main/java/domain/LadderGenerator.java @@ -7,18 +7,18 @@ public class LadderGenerator { - private boolean randomTrueOrFalse() { + public boolean randomTrueOrFalse() { return Math.random() < 0.5; // 0.0(포함) - 1.0(미포함) 사이의 랜덤한 실수 반환 } - private boolean createValue(List line, int index) { + public boolean createValue(List line, int index) { if (index != 0 && line.get(index - 1) == TRUE) // 이전 값이 true 면 false 반환 return false; return randomTrueOrFalse(); } - private Line createLine(int width) { + public Line createLine(int width) { List points = new ArrayList<>(); for (int i = 0; i < width - 1; i++) { points.add(createValue(points, i)); diff --git a/src/test/java/domain/LadderGameTest.java b/src/test/java/domain/LadderGameTest.java new file mode 100644 index 00000000..e87d17e4 --- /dev/null +++ b/src/test/java/domain/LadderGameTest.java @@ -0,0 +1,80 @@ +package domain; + +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; + +import java.util.List; + +import static org.assertj.core.api.Assertions.assertThat; + +public class LadderGameTest { + + private LadderGame ladderGame; + private Player player; + private Ladder ladder; + private Line lineRight; + private Line lineLeft; + private Line lineNone; + + @BeforeEach + public void setUp() { + ladderGame = new LadderGame(); + + // test 사다리 생성 + lineRight = new Line(List.of(true, false, false)); // 첫 번째 사람 오른쪽 이동 + lineLeft = new Line(List.of(true, false, false)); // 두 번째 사람 왼쪽 이동 + lineNone = new Line(List.of(false, false, false)); // 세 번째 사람 그대로 + + ladder = new Ladder(List.of(lineRight, lineLeft, lineNone)); + } + + @Test + public void 플레이어는_오른쪽으로_이동할_수_있다() { + player = new Player(new Name("Test"), new Position(0)); + + ladderGame.movePlayer(lineRight, player); // 첫 번째 줄에서 오른쪽으로 이동 + + assertThat(player.getPosition()).isEqualTo(1); + } + + @Test + public void 플레이어는_왼쪽으로_이동할_수_있다() { + player = new Player(new Name("Test"), new Position(1)); + + ladderGame.movePlayer(lineLeft, player); // 두 번째 줄에서 왼쪽으로 이동 + + assertThat(player.getPosition()).isEqualTo(0); + } + + @Test + public void 플레이어는_이동하지_않을_수_있다() { + player = new Player(new Name("Test"), new Position(2)); + + ladderGame.movePlayer(lineNone, player); // 이동 불가능한 줄에서 시도 + + assertThat(player.getPosition()).isEqualTo(2); + } + + @Test + public void 플레이어는_각_라인을_타고_최종_위치에_도달한다() { + player = new Player(new Name("Test"), new Position(0)); + + ladderGame.moveEachPlayer(ladder, player); // 각 라인에 대해 이동 + + assertThat(player.getPosition()).isEqualTo(0); // 첫 번째 사람은 결국 첫 번째 결과에 도달 + } + + @Test + public void testRunGame() { + Players players = new Players(List.of("Test1", "Test2", "Test3")); + Player player1 = players.getPlayers().get(0); + Player player2 = players.getPlayers().get(1); + Player player3 = players.getPlayers().get(2); + + ladderGame.runGame(ladder, players); + + assertThat(player1.getPosition()).isEqualTo(0); + assertThat(player2.getPosition()).isEqualTo(1); + assertThat(player3.getPosition()).isEqualTo(2); + } +} diff --git a/src/test/java/domain/LadderGeneratorTest.java b/src/test/java/domain/LadderGeneratorTest.java new file mode 100644 index 00000000..16912e44 --- /dev/null +++ b/src/test/java/domain/LadderGeneratorTest.java @@ -0,0 +1,70 @@ +package domain; + +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; + +import java.util.ArrayList; +import java.util.List; + +import static org.assertj.core.api.Assertions.assertThat; + +public class LadderGeneratorTest { + + private LadderGenerator ladderGenerator; + + @BeforeEach + public void setUp() { + ladderGenerator = new LadderGenerator(); + } + + @Test + public void true와_false를_랜덤으로_반환한다() { + boolean hasTrue = false; + boolean hasFalse = false; + + for (int i = 0; i < 100; i++) { + boolean result = ladderGenerator.randomTrueOrFalse(); + if (result) { + hasTrue = true; + } else { + hasFalse = true; + } + + // 두 값이 모두 나오면 테스트 종료 + if (hasTrue && hasFalse) { + break; + } + } + + assertThat(hasTrue).isTrue(); + assertThat(hasFalse).isTrue(); + } + + @Test + public void 이전_값이_true면_false를_반환한다() { + List line = new ArrayList<>(List.of(true, false, false)); + boolean result = ladderGenerator.createValue(line, 1); + + assertThat(result).isFalse(); + } + + @Test + public void 원하는_크기의_라인을_생성한다() { + int width = 4; + Line line = ladderGenerator.createLine(width); + + assertThat(line.getLine()).hasSize(width - 1); + for (Boolean point : line.getLine()) { + assertThat(point).isNotNull(); + } + } + + @Test + public void 원하는_크기의_사다리를_생성한다() { + int width = 4; + int height = 3; + Ladder ladder = ladderGenerator.createLadder(width, height); + + assertThat(ladder.getLadder()).hasSize(height); + } +} diff --git a/src/test/java/domain/LineTest.java b/src/test/java/domain/LineTest.java new file mode 100644 index 00000000..d9e106c1 --- /dev/null +++ b/src/test/java/domain/LineTest.java @@ -0,0 +1,42 @@ +package domain; + +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; + +import java.util.List; + +import static org.assertj.core.api.Assertions.assertThat; + +public class LineTest { + + private Line line; + + @BeforeEach + public void setUp() { + line = new Line(List.of(true, false, true)); + } + + @Test + public void 특정_위치에서_오른쪽으로_이동할_수_있다() { + // 0번째 위치에서 오른쪽으로 이동 가능 여부 확인 + assertThat(line.canMoveRight(0)).isTrue(); + } + + @Test + public void 특정_위치에서_오른쪽으로_이동할_수_없다() { + // 3번째 위치에서 오른쪽으로 이동 불가능 여부 확인 + assertThat(line.canMoveRight(3)).isFalse(); + } + + @Test + public void 특정_위치에서_왼쪽으로_이동할_수_있다() { + // 3번째 위치에서 왼쪽으로 이동 가능 여부 확인 + assertThat(line.canMoveLeft(3)).isTrue(); + } + + @Test + public void 특정_위치에서_왼쪽으로_이동할_수_없다() { + // 0번째 위치에서 왼쪽으로 이동 불가능 여부 확인 + assertThat(line.canMoveLeft(0)).isFalse(); + } +} diff --git a/src/test/java/domain/NameTest.java b/src/test/java/domain/NameTest.java new file mode 100644 index 00000000..65c29d39 --- /dev/null +++ b/src/test/java/domain/NameTest.java @@ -0,0 +1,42 @@ +package domain; + +import org.junit.jupiter.api.Test; + +import static org.assertj.core.api.Assertions.assertThat; +import static org.assertj.core.api.Assertions.assertThatExceptionOfType; + +public class NameTest { + + @Test + public void 유효한_이름으로_생성된다() { + Name name = new Name("Test"); + assertThat(name.getName()).isEqualTo("Test"); + } + + @Test + public void 이름이_공백이면_예외를_던진다() { + assertThatExceptionOfType(IllegalArgumentException.class) + .isThrownBy(() -> new Name(" ")) + .withMessage("이름은 공백일 수 없습니다."); + } + + @Test + public void 이름이_5자를_초과하면_예외를_던진다() { + assertThatExceptionOfType(IllegalArgumentException.class) + .isThrownBy(() -> new Name("TestTest")) + .withMessage("이름은 5자를 초과할 수 없습니다."); + } + + @Test + public void 이름이_all이면_예외를_던진다() { + assertThatExceptionOfType(IllegalArgumentException.class) + .isThrownBy(() -> new Name("all")) + .withMessage("이름은 all일 수 없습니다."); + } + + @Test + public void 이름이_5자_이하의_경우_정상_생성된다() { + Name name = new Name("Test"); + assertThat(name.getName()).isEqualTo("Test"); + } +} diff --git a/src/test/java/domain/PlayerTest.java b/src/test/java/domain/PlayerTest.java new file mode 100644 index 00000000..4628670e --- /dev/null +++ b/src/test/java/domain/PlayerTest.java @@ -0,0 +1,39 @@ +package domain; + +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; + +import static org.assertj.core.api.Assertions.assertThat; + +public class PlayerTest { + + private Player player; + private Name name; + private Position position; + + @BeforeEach + public void setUp() { + name = new Name("Test"); + position = new Position(0); + player = new Player(name, position); + } + + @Test + public void 플레이어는_정상적으로_생성된다() { + assertThat(player.getName()).isEqualTo("Test"); + assertThat(player.getPosition()).isEqualTo(0); + } + + @Test + public void 플레이어는_왼쪽으로_이동할_수_있다() { + position.movePositionRight(); // 오른쪽으로 이동 + player.moveLeft(); // 왼쪽으로 이동 + assertThat(player.getPosition()).isEqualTo(0); + } + + @Test + public void 플레이어는_오른쪽으로_이동할_수_있다() { + player.moveRight(); + assertThat(player.getPosition()).isEqualTo(1); + } +} diff --git a/src/test/java/domain/PlayersTest.java b/src/test/java/domain/PlayersTest.java new file mode 100644 index 00000000..9958ef4b --- /dev/null +++ b/src/test/java/domain/PlayersTest.java @@ -0,0 +1,50 @@ +package domain; + +import org.junit.jupiter.api.Test; + +import java.util.List; +import java.util.NoSuchElementException; + +import static org.assertj.core.api.Assertions.assertThat; +import static org.assertj.core.api.Assertions.assertThatThrownBy; + +public class PlayersTest { + + @Test + public void 플레이어가_정상적으로_생성된다() { + List playerNames = List.of("Test1", "Test2"); + Players players = new Players(playerNames); + + assertThat(players.getPlayersSize()).isEqualTo(2); + assertThat(players.getPlayers().get(0).getName()).isEqualTo("Test1"); + assertThat(players.getPlayers().get(1).getName()).isEqualTo("Test2"); + } + + @Test + public void 플레이어수가_2명_미만일_때_예외를_던진다() { + List playerNames = List.of("Test"); + + assertThatThrownBy(() -> new Players(playerNames)) + .isInstanceOf(IllegalArgumentException.class) + .hasMessage("플레이어 수는 2명 이상이어야 합니다."); + } + + @Test + public void 존재하지_않는_플레이어를_찾을_때_예외를_던진다() { + List playerNames = List.of("Test1", "Test2"); + Players players = new Players(playerNames); + + assertThatThrownBy(() -> players.findByName("테스트")) + .isInstanceOf(NoSuchElementException.class) + .hasMessage("플레이어 이름 '테스트' 이 존재하지 않습니다."); + } + + @Test + public void 존재하는_플레이어를_정상적으로_찾는다() { + List playerNames = List.of("Test", "Test"); + Players players = new Players(playerNames); + + Player foundPlayer = players.findByName("Test"); + assertThat(foundPlayer.getName()).isEqualTo("Test"); + } +} diff --git a/src/test/java/domain/ResultTypesTest.java b/src/test/java/domain/ResultTypesTest.java new file mode 100644 index 00000000..e73dca64 --- /dev/null +++ b/src/test/java/domain/ResultTypesTest.java @@ -0,0 +1,45 @@ +package domain; + +import org.junit.jupiter.api.Test; + +import java.util.List; + +import static org.assertj.core.api.Assertions.assertThat; +import static org.assertj.core.api.Assertions.assertThatThrownBy; + +public class ResultTypesTest { + + @Test + public void 유효한_결과타입으로_생성된다() { + List resultTypes = List.of("Result1", "Result2", "Result3"); + ResultTypes resultTypesObject = new ResultTypes(resultTypes, 3); + + assertThat(resultTypesObject.getResultTypes()).containsExactly("Result1", "Result2", "Result3"); + } + + @Test + public void 결과타입이_공백이면_예외를_던진다() { + List resultTypes = List.of("Result1", " ", "Result3"); + + assertThatThrownBy(() -> new ResultTypes(resultTypes, 3)) + .isInstanceOf(IllegalArgumentException.class) + .hasMessage("실행 결과는 공백일 수 없습니다."); + } + + @Test + public void 결과타입의_개수가_사다리의_개수와_다르면_예외를_던진다() { + List resultTypes = List.of("Result1", "Result2"); + + assertThatThrownBy(() -> new ResultTypes(resultTypes, 3)) + .isInstanceOf(IllegalArgumentException.class) + .hasMessage("실행 결과는 사다리의 개수와 일치해야 합니다."); + } + + @Test + public void 결과타입의_개수가_사다리의_개수와_일치해야_정상생성된다() { + List resultTypes = List.of("Result1", "Result2", "Result3"); + ResultTypes resultTypesObject = new ResultTypes(resultTypes, 3); + + assertThat(resultTypesObject.getResultTypes()).hasSize(3); + } +} From 494e2d9225804529976aa9c1cb25cbfc73c5e534 Mon Sep 17 00:00:00 2001 From: SANGHEEJEONG <147232817+SANGHEEJEONG@users.noreply.github.com> Date: Wed, 30 Oct 2024 23:08:07 +0900 Subject: [PATCH 30/53] =?UTF-8?q?[REFACTOR]=20=EC=BD=94=EB=93=9C=20?= =?UTF-8?q?=EC=A0=95=EB=A0=AC=20(5=EB=8B=A8=EA=B3=84)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/Main.java | 8 ++++---- src/main/java/domain/Position.java | 2 +- src/main/java/view/InputException.java | 4 ++-- src/main/java/view/InputView.java | 2 +- 4 files changed, 8 insertions(+), 8 deletions(-) diff --git a/src/main/java/Main.java b/src/main/java/Main.java index 9ce4a707..72aa7b24 100644 --- a/src/main/java/Main.java +++ b/src/main/java/Main.java @@ -20,14 +20,14 @@ public static void main(String[] args) { // 실행결과 생성 final List kindOfResults = InputView.splitString(InputView.inputLadderResults()); - final ResultTypes resultTypes = new ResultTypes(kindOfResults,players.getPlayersSize()); + final ResultTypes resultTypes = new ResultTypes(kindOfResults, players.getPlayersSize()); // 사다리 생성 final int width = players.getPlayersSize(); final int height = InputView.inputHeight(); final LadderGenerator ladderGenerator = new LadderGenerator(); - final Ladder ladder = ladderGenerator.createLadder(width,height); + final Ladder ladder = ladderGenerator.createLadder(width, height); // 사다리 그리기 OutputView.printPlayers(playerNames); @@ -35,9 +35,9 @@ public static void main(String[] args) { OutputView.printResultTypes(resultTypes.getResultTypes()); // 사다리 게임 시작 - ladderGame.runGame(ladder,players); + ladderGame.runGame(ladder, players); // 결과 출력 - OutputView.printResult(players,resultTypes.getResultTypes()); + OutputView.printResult(players, resultTypes.getResultTypes()); } } diff --git a/src/main/java/domain/Position.java b/src/main/java/domain/Position.java index 1c981f90..3c86d5de 100644 --- a/src/main/java/domain/Position.java +++ b/src/main/java/domain/Position.java @@ -16,7 +16,7 @@ public void movePositionRight() { position++; } - public int getPosition(){ + public int getPosition() { return position; } diff --git a/src/main/java/view/InputException.java b/src/main/java/view/InputException.java index e3e4eafc..caf26fad 100644 --- a/src/main/java/view/InputException.java +++ b/src/main/java/view/InputException.java @@ -2,13 +2,13 @@ public class InputException { - public static void validateHeightSize(int height){ + public static void validateHeightSize(int height) { if (height < 1) { throw new IllegalArgumentException("사다리 높이는 1 이상이어야 합니다."); } } - public static void validateViewerNameNotBlank(String viewerName){ + public static void validateViewerNameNotBlank(String viewerName) { if (viewerName.isBlank()) { throw new IllegalArgumentException("이름은 공백일 수 없습니다."); } diff --git a/src/main/java/view/InputView.java b/src/main/java/view/InputView.java index 0b530e69..73e8164e 100644 --- a/src/main/java/view/InputView.java +++ b/src/main/java/view/InputView.java @@ -31,7 +31,7 @@ public static int inputHeight() { public static String inputViewerName() { System.out.println("\n결과를 보고 싶은 사람은?"); - String viewerName = input.nextLine(); + String viewerName = input.nextLine(); InputException.validateViewerNameNotBlank(viewerName); return viewerName; } From b2b122042d52dcc10098c0a9e71336236e3c7589 Mon Sep 17 00:00:00 2001 From: SANGHEEJEONG <147232817+SANGHEEJEONG@users.noreply.github.com> Date: Sun, 3 Nov 2024 00:38:13 +0900 Subject: [PATCH 31/53] Create README.md --- README.md | 33 +++++++++++++++++++++++++++++++++ 1 file changed, 33 insertions(+) create mode 100644 README.md diff --git a/README.md b/README.md new file mode 100644 index 00000000..df9be104 --- /dev/null +++ b/README.md @@ -0,0 +1,33 @@ +# 기능 구현 + +사다리의 연결은 Boolean을 통해 표현 ++ true면 "-----" 연결되었다는 뜻 ++ false면 연결되지 않았다는 뜻 + +## **controller** ++ LadderController + +## **domain** ++ Ladder + * List<Line> 사다리 전체를 표현하는 객체 ++ LadderGame + * 사다리 게임 실행과 관련된 메서드를 담은 클래스 ++ LadderGenerator + * 사다리 생성과 관련된 메서드를 담은 클래스 ++ Line + * List<Boolean> 사다리 한 줄을 표현하는 객체 ++ PlayerName + * 플레이어 이름을 원시값 포장한 객체 ++ Player + * 플레이어 객체 ++ Players + * 플레이어 리스트 일급 컬렉션 ++ Positon + * 플레이어 위치를 원시값 포장한 객체 ++ ResultTypes + * 결과 리스트 일급 컬렉션 + +## **View** ++ InputException ++ InputView ++ OutputView From 7dbb8cd3d8628fbd8a9156cb7429850d9b4078eb Mon Sep 17 00:00:00 2001 From: SANGHEEJEONG <147232817+SANGHEEJEONG@users.noreply.github.com> Date: Sun, 3 Nov 2024 00:38:48 +0900 Subject: [PATCH 32/53] =?UTF-8?q?[REFACTOR]=20=EB=A6=AC=EB=B7=B0=20?= =?UTF-8?q?=EB=B0=98=EC=98=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/Application.java | 18 ++++++++ src/main/java/Main.java | 43 ------------------- .../java/controller/LadderController.java | 43 +++++++++++++++++++ src/main/java/domain/Ladder.java | 1 + src/main/java/domain/LadderGame.java | 1 - src/main/java/domain/LadderGenerator.java | 4 +- src/main/java/domain/Player.java | 10 ++--- .../domain/{Name.java => PlayerName.java} | 4 +- src/main/java/domain/Players.java | 4 +- src/main/java/domain/Position.java | 1 - src/main/java/view/OutputView.java | 4 +- src/test/java/domain/LadderGameTest.java | 8 ++-- .../{NameTest.java => PlayerNameTest.java} | 12 +++--- src/test/java/domain/PlayerTest.java | 8 ++-- src/test/java/domain/PlayersTest.java | 6 +-- 15 files changed, 91 insertions(+), 76 deletions(-) create mode 100644 src/main/java/Application.java delete mode 100644 src/main/java/Main.java create mode 100644 src/main/java/controller/LadderController.java rename src/main/java/domain/{Name.java => PlayerName.java} (94%) rename src/test/java/domain/{NameTest.java => PlayerNameTest.java} (78%) diff --git a/src/main/java/Application.java b/src/main/java/Application.java new file mode 100644 index 00000000..c81ecf7f --- /dev/null +++ b/src/main/java/Application.java @@ -0,0 +1,18 @@ +import controller.LadderController; +import domain.Ladder; +import domain.LadderGame; +import domain.LadderGenerator; +import domain.Players; +import domain.ResultTypes; +import view.OutputView; +import view.InputView; + +import java.util.List; + + +public class Application { + public static void main(String[] args) { + LadderController ladderController = new LadderController(); + ladderController.run(); + } +} diff --git a/src/main/java/Main.java b/src/main/java/Main.java deleted file mode 100644 index 72aa7b24..00000000 --- a/src/main/java/Main.java +++ /dev/null @@ -1,43 +0,0 @@ -import domain.Ladder; -import domain.LadderGame; -import domain.LadderGenerator; -import domain.Players; -import domain.ResultTypes; -import view.OutputView; -import view.InputView; - -import java.util.List; - - -public class Main { - public static void main(String[] args) { - // 사다리 게임 시작 - final LadderGame ladderGame = new LadderGame(); - - // 플레이어 생성 - final List playerNames = InputView.splitString(InputView.inputNames()); - final Players players = new Players(playerNames); - - // 실행결과 생성 - final List kindOfResults = InputView.splitString(InputView.inputLadderResults()); - final ResultTypes resultTypes = new ResultTypes(kindOfResults, players.getPlayersSize()); - - // 사다리 생성 - final int width = players.getPlayersSize(); - final int height = InputView.inputHeight(); - - final LadderGenerator ladderGenerator = new LadderGenerator(); - final Ladder ladder = ladderGenerator.createLadder(width, height); - - // 사다리 그리기 - OutputView.printPlayers(playerNames); - OutputView.drawLadder(ladder); - OutputView.printResultTypes(resultTypes.getResultTypes()); - - // 사다리 게임 시작 - ladderGame.runGame(ladder, players); - - // 결과 출력 - OutputView.printResult(players, resultTypes.getResultTypes()); - } -} diff --git a/src/main/java/controller/LadderController.java b/src/main/java/controller/LadderController.java new file mode 100644 index 00000000..88b91124 --- /dev/null +++ b/src/main/java/controller/LadderController.java @@ -0,0 +1,43 @@ +package controller; + +import domain.Ladder; +import domain.LadderGame; +import domain.LadderGenerator; +import domain.Players; +import domain.ResultTypes; +import view.InputView; +import view.OutputView; + +import java.util.List; + +public class LadderController { + public void run() { + // 게임 로직 시작 + LadderGame ladderGame = new LadderGame(); + + // 플레이어 생성 + List playerNames = InputView.splitString(InputView.inputNames()); + Players players = new Players(playerNames); + + // 결과 생성 + List kindOfResults = InputView.splitString(InputView.inputLadderResults()); + ResultTypes resultTypes = new ResultTypes(kindOfResults, players.getPlayersSize()); + + // 사다리 생성 + int width = players.getPlayersSize(); + int height = InputView.inputHeight(); + + LadderGenerator ladderGenerator = new LadderGenerator(); + Ladder ladder = ladderGenerator.createLadder(width, height); + + // 사다리 출력 + OutputView.printPlayers(playerNames); + OutputView.drawLadder(ladder); + OutputView.printResultTypes(resultTypes.getResultTypes()); + + // 게임 시작 및 결과 출력 + ladderGame.runGame(ladder, players); + OutputView.printResult(players, resultTypes.getResultTypes()); + } + +} diff --git a/src/main/java/domain/Ladder.java b/src/main/java/domain/Ladder.java index f255c6de..a6fb93a8 100644 --- a/src/main/java/domain/Ladder.java +++ b/src/main/java/domain/Ladder.java @@ -4,6 +4,7 @@ import java.util.List; public class Ladder { + private final List lines; public Ladder(List lines) { diff --git a/src/main/java/domain/LadderGame.java b/src/main/java/domain/LadderGame.java index 300c386c..fcb8e096 100644 --- a/src/main/java/domain/LadderGame.java +++ b/src/main/java/domain/LadderGame.java @@ -20,5 +20,4 @@ public void moveEachPlayer(Ladder ladder, Player player) { public void runGame(Ladder ladder, Players players) { players.getPlayers().forEach(player -> moveEachPlayer(ladder, player)); } - } diff --git a/src/main/java/domain/LadderGenerator.java b/src/main/java/domain/LadderGenerator.java index b1eb710e..408a12eb 100644 --- a/src/main/java/domain/LadderGenerator.java +++ b/src/main/java/domain/LadderGenerator.java @@ -11,8 +11,8 @@ public boolean randomTrueOrFalse() { return Math.random() < 0.5; // 0.0(포함) - 1.0(미포함) 사이의 랜덤한 실수 반환 } - public boolean createValue(List line, int index) { - if (index != 0 && line.get(index - 1) == TRUE) // 이전 값이 true 면 false 반환 + public boolean createValue(List line, int lineIndex) { + if (lineIndex != 0 && line.get(lineIndex - 1) == TRUE) // 이전 값이 true 면 false 반환 return false; return randomTrueOrFalse(); diff --git a/src/main/java/domain/Player.java b/src/main/java/domain/Player.java index f72277ef..91c19e6a 100644 --- a/src/main/java/domain/Player.java +++ b/src/main/java/domain/Player.java @@ -2,11 +2,11 @@ public class Player { - private final Name name; + private final PlayerName playerName; private final Position position; - public Player(Name name, Position position) { - this.name = name; + public Player(PlayerName name, Position position) { + this.playerName = name; this.position = position; } @@ -18,8 +18,8 @@ public void moveRight() { position.movePositionRight(); } - public String getName() { - return name.getName(); + public String getPlayerName() { + return playerName.getName(); } public int getPosition() { diff --git a/src/main/java/domain/Name.java b/src/main/java/domain/PlayerName.java similarity index 94% rename from src/main/java/domain/Name.java rename to src/main/java/domain/PlayerName.java index f79918e0..e0ad770b 100644 --- a/src/main/java/domain/Name.java +++ b/src/main/java/domain/PlayerName.java @@ -1,12 +1,12 @@ package domain; -public class Name { +public class PlayerName { private final String name; private final static int MAX_LENGTH = 5; private final static String INVALID_NAME = "all"; - public Name(String name) { + public PlayerName(String name) { validateName(name); this.name = name; } diff --git a/src/main/java/domain/Players.java b/src/main/java/domain/Players.java index aaf2d629..f73f31e4 100644 --- a/src/main/java/domain/Players.java +++ b/src/main/java/domain/Players.java @@ -24,7 +24,7 @@ private void validateSize(List playerNames) { private List createPlayer(List playerNames) { List players = new ArrayList<>(); for (int i = 0; i < playerNames.size(); i++) { - players.add(new Player(new Name(playerNames.get(i)), new Position(i))); + players.add(new Player(new PlayerName(playerNames.get(i)), new Position(i))); } return players; @@ -32,7 +32,7 @@ private List createPlayer(List playerNames) { public Player findByName(String viewerName) { return players.stream() - .filter(player -> player.getName().equals(viewerName)) + .filter(player -> player.getPlayerName().equals(viewerName)) .findFirst() .orElseThrow(() -> new NoSuchElementException("플레이어 이름 '" + viewerName + "' 이 존재하지 않습니다.")); } diff --git a/src/main/java/domain/Position.java b/src/main/java/domain/Position.java index 3c86d5de..9a288e5d 100644 --- a/src/main/java/domain/Position.java +++ b/src/main/java/domain/Position.java @@ -19,5 +19,4 @@ public void movePositionRight() { public int getPosition() { return position; } - } diff --git a/src/main/java/view/OutputView.java b/src/main/java/view/OutputView.java index e635e07b..dbb65ebc 100644 --- a/src/main/java/view/OutputView.java +++ b/src/main/java/view/OutputView.java @@ -4,7 +4,6 @@ import domain.Line; import domain.Player; import domain.Players; -import domain.ResultTypes; import java.util.List; @@ -44,7 +43,7 @@ public static void printResultTypes(List resultTypes) { public static void printAllResult(Players players, List resultTypes) { for (Player player : players.getPlayers()) { - System.out.println(player.getName() + " : " + resultTypes.get(player.getPosition())); + System.out.println(player.getPlayerName() + " : " + resultTypes.get(player.getPosition())); } } @@ -62,5 +61,4 @@ public static void printResult(Players players, List resultTypes) { Player player = players.findByName(viewerName); System.out.println(resultTypes.get(player.getPosition())); } - } diff --git a/src/test/java/domain/LadderGameTest.java b/src/test/java/domain/LadderGameTest.java index e87d17e4..5319bcfe 100644 --- a/src/test/java/domain/LadderGameTest.java +++ b/src/test/java/domain/LadderGameTest.java @@ -30,7 +30,7 @@ public void setUp() { @Test public void 플레이어는_오른쪽으로_이동할_수_있다() { - player = new Player(new Name("Test"), new Position(0)); + player = new Player(new PlayerName("Test"), new Position(0)); ladderGame.movePlayer(lineRight, player); // 첫 번째 줄에서 오른쪽으로 이동 @@ -39,7 +39,7 @@ public void setUp() { @Test public void 플레이어는_왼쪽으로_이동할_수_있다() { - player = new Player(new Name("Test"), new Position(1)); + player = new Player(new PlayerName("Test"), new Position(1)); ladderGame.movePlayer(lineLeft, player); // 두 번째 줄에서 왼쪽으로 이동 @@ -48,7 +48,7 @@ public void setUp() { @Test public void 플레이어는_이동하지_않을_수_있다() { - player = new Player(new Name("Test"), new Position(2)); + player = new Player(new PlayerName("Test"), new Position(2)); ladderGame.movePlayer(lineNone, player); // 이동 불가능한 줄에서 시도 @@ -57,7 +57,7 @@ public void setUp() { @Test public void 플레이어는_각_라인을_타고_최종_위치에_도달한다() { - player = new Player(new Name("Test"), new Position(0)); + player = new Player(new PlayerName("Test"), new Position(0)); ladderGame.moveEachPlayer(ladder, player); // 각 라인에 대해 이동 diff --git a/src/test/java/domain/NameTest.java b/src/test/java/domain/PlayerNameTest.java similarity index 78% rename from src/test/java/domain/NameTest.java rename to src/test/java/domain/PlayerNameTest.java index 65c29d39..e4674ace 100644 --- a/src/test/java/domain/NameTest.java +++ b/src/test/java/domain/PlayerNameTest.java @@ -5,38 +5,38 @@ import static org.assertj.core.api.Assertions.assertThat; import static org.assertj.core.api.Assertions.assertThatExceptionOfType; -public class NameTest { +public class PlayerNameTest { @Test public void 유효한_이름으로_생성된다() { - Name name = new Name("Test"); + PlayerName name = new PlayerName("Test"); assertThat(name.getName()).isEqualTo("Test"); } @Test public void 이름이_공백이면_예외를_던진다() { assertThatExceptionOfType(IllegalArgumentException.class) - .isThrownBy(() -> new Name(" ")) + .isThrownBy(() -> new PlayerName(" ")) .withMessage("이름은 공백일 수 없습니다."); } @Test public void 이름이_5자를_초과하면_예외를_던진다() { assertThatExceptionOfType(IllegalArgumentException.class) - .isThrownBy(() -> new Name("TestTest")) + .isThrownBy(() -> new PlayerName("TestTest")) .withMessage("이름은 5자를 초과할 수 없습니다."); } @Test public void 이름이_all이면_예외를_던진다() { assertThatExceptionOfType(IllegalArgumentException.class) - .isThrownBy(() -> new Name("all")) + .isThrownBy(() -> new PlayerName("all")) .withMessage("이름은 all일 수 없습니다."); } @Test public void 이름이_5자_이하의_경우_정상_생성된다() { - Name name = new Name("Test"); + PlayerName name = new PlayerName("Test"); assertThat(name.getName()).isEqualTo("Test"); } } diff --git a/src/test/java/domain/PlayerTest.java b/src/test/java/domain/PlayerTest.java index 4628670e..ec94a315 100644 --- a/src/test/java/domain/PlayerTest.java +++ b/src/test/java/domain/PlayerTest.java @@ -8,19 +8,19 @@ public class PlayerTest { private Player player; - private Name name; + private PlayerName playerName; private Position position; @BeforeEach public void setUp() { - name = new Name("Test"); + playerName = new PlayerName("Test"); position = new Position(0); - player = new Player(name, position); + player = new Player(playerName, position); } @Test public void 플레이어는_정상적으로_생성된다() { - assertThat(player.getName()).isEqualTo("Test"); + assertThat(player.getPlayerName()).isEqualTo("Test"); assertThat(player.getPosition()).isEqualTo(0); } diff --git a/src/test/java/domain/PlayersTest.java b/src/test/java/domain/PlayersTest.java index 9958ef4b..80998051 100644 --- a/src/test/java/domain/PlayersTest.java +++ b/src/test/java/domain/PlayersTest.java @@ -16,8 +16,8 @@ public class PlayersTest { Players players = new Players(playerNames); assertThat(players.getPlayersSize()).isEqualTo(2); - assertThat(players.getPlayers().get(0).getName()).isEqualTo("Test1"); - assertThat(players.getPlayers().get(1).getName()).isEqualTo("Test2"); + assertThat(players.getPlayers().get(0).getPlayerName()).isEqualTo("Test1"); + assertThat(players.getPlayers().get(1).getPlayerName()).isEqualTo("Test2"); } @Test @@ -45,6 +45,6 @@ public class PlayersTest { Players players = new Players(playerNames); Player foundPlayer = players.findByName("Test"); - assertThat(foundPlayer.getName()).isEqualTo("Test"); + assertThat(foundPlayer.getPlayerName()).isEqualTo("Test"); } } From 5c280c4aeaa59e92d5e1e15e0b175f0cb72f2746 Mon Sep 17 00:00:00 2001 From: SANGHEEJEONG <147232817+SANGHEEJEONG@users.noreply.github.com> Date: Thu, 7 Nov 2024 03:29:45 +0900 Subject: [PATCH 33/53] =?UTF-8?q?[REFACTOR]=20README=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 53 ++++++++++++++++++++++------------------------------- 1 file changed, 22 insertions(+), 31 deletions(-) diff --git a/README.md b/README.md index df9be104..d45e6462 100644 --- a/README.md +++ b/README.md @@ -1,33 +1,24 @@ -# 기능 구현 +# 기능 목록 -사다리의 연결은 Boolean을 통해 표현 -+ true면 "-----" 연결되었다는 뜻 -+ false면 연결되지 않았다는 뜻 +### 1. 플레이어 및 사다리 정보 입력 기능 ++ 플레이어 이름과 결과 종류를 입력한다. ++ 사다리 넓이 : (플레이어 수 - 1) ++ 사다리 높이 : 사용자 입력 +### 2. 사다리 실행 기능 ++ |-----|-----| 가로 라인이 겹치지 않게 사다리를 생성한다. +=> 즉, 앞 라인이 true면 다음 라인은 무조건 false이다. +### 3. 사다리 출력 기능 ++ 플레이어 이름 입력 순으로 출력 ++ 생성된 사다리 출력 ++ 결과 종류 입력 순으로 출력 ++ 보고 싶은 실행 결과 출력 ("all"일 때는 모두 출력) -## **controller** -+ LadderController - -## **domain** -+ Ladder - * List<Line> 사다리 전체를 표현하는 객체 -+ LadderGame - * 사다리 게임 실행과 관련된 메서드를 담은 클래스 -+ LadderGenerator - * 사다리 생성과 관련된 메서드를 담은 클래스 -+ Line - * List<Boolean> 사다리 한 줄을 표현하는 객체 -+ PlayerName - * 플레이어 이름을 원시값 포장한 객체 -+ Player - * 플레이어 객체 -+ Players - * 플레이어 리스트 일급 컬렉션 -+ Positon - * 플레이어 위치를 원시값 포장한 객체 -+ ResultTypes - * 결과 리스트 일급 컬렉션 - -## **View** -+ InputException -+ InputView -+ OutputView +### <사다리 구현> ++ Boolean (다리) + + ture : 연결 + + false : 연결 X ++ List<Boolean> (한 층의 다리 모음) + + 사다리의 넒이만큼 + + 다리가 연결되어 있으면(=true) 수평 방향으로 이동이 가능하다. ++ List<Line> (모든 층의 다리 모음) + + 사다리의 높이만큼 From 8eac61b004a8bfa3055b13ce031fd89fd5fa7467 Mon Sep 17 00:00:00 2001 From: SANGHEEJEONG <147232817+SANGHEEJEONG@users.noreply.github.com> Date: Thu, 7 Nov 2024 04:11:32 +0900 Subject: [PATCH 34/53] =?UTF-8?q?[REFACTOR]=20Controller=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 --- .../java/controller/LadderController.java | 35 ++++++++++++------- 1 file changed, 22 insertions(+), 13 deletions(-) diff --git a/src/main/java/controller/LadderController.java b/src/main/java/controller/LadderController.java index 88b91124..dba90c75 100644 --- a/src/main/java/controller/LadderController.java +++ b/src/main/java/controller/LadderController.java @@ -11,33 +11,42 @@ import java.util.List; public class LadderController { - public void run() { - // 게임 로직 시작 - LadderGame ladderGame = new LadderGame(); - // 플레이어 생성 - List playerNames = InputView.splitString(InputView.inputNames()); - Players players = new Players(playerNames); + private Players players; + private Ladder ladder; - // 결과 생성 + public void run() { + List playerNames = InputView.splitString(InputView.inputNames()); List kindOfResults = InputView.splitString(InputView.inputLadderResults()); + + // 플레이어 생성 + players = new Players(playerNames); + // 결과 종류 생성 ResultTypes resultTypes = new ResultTypes(kindOfResults, players.getPlayersSize()); + // 사다리 초기화 + initializeLadder(); - // 사다리 생성 + // 사다리 및 결과 출력 + displayLadder(resultTypes,playerNames); + playGameAndDisplayResults(resultTypes); + } + + private void initializeLadder() { int width = players.getPlayersSize(); int height = InputView.inputHeight(); - LadderGenerator ladderGenerator = new LadderGenerator(); - Ladder ladder = ladderGenerator.createLadder(width, height); + ladder = ladderGenerator.createLadder(width, height); + } - // 사다리 출력 + private void displayLadder(ResultTypes resultTypes,List playerNames) { OutputView.printPlayers(playerNames); OutputView.drawLadder(ladder); OutputView.printResultTypes(resultTypes.getResultTypes()); + } - // 게임 시작 및 결과 출력 + private void playGameAndDisplayResults(ResultTypes resultTypes) { + LadderGame ladderGame = new LadderGame(); ladderGame.runGame(ladder, players); OutputView.printResult(players, resultTypes.getResultTypes()); } - } From beeb626c5278cac9a65cc61d0196bcbd0926b565 Mon Sep 17 00:00:00 2001 From: SANGHEEJEONG <147232817+SANGHEEJEONG@users.noreply.github.com> Date: Thu, 7 Nov 2024 04:12:25 +0900 Subject: [PATCH 35/53] =?UTF-8?q?[REFACTOR]=20=EB=AF=B8=EC=82=AC=EC=9A=A9?= =?UTF-8?q?=20import=20=EC=A0=95=EB=A6=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/Application.java | 10 ---------- 1 file changed, 10 deletions(-) diff --git a/src/main/java/Application.java b/src/main/java/Application.java index c81ecf7f..f3ce0ed8 100644 --- a/src/main/java/Application.java +++ b/src/main/java/Application.java @@ -1,14 +1,4 @@ import controller.LadderController; -import domain.Ladder; -import domain.LadderGame; -import domain.LadderGenerator; -import domain.Players; -import domain.ResultTypes; -import view.OutputView; -import view.InputView; - -import java.util.List; - public class Application { public static void main(String[] args) { From 570c4d798b5dabd78ae43c0ae8f35ff656b15e78 Mon Sep 17 00:00:00 2001 From: SANGHEEJEONG <147232817+SANGHEEJEONG@users.noreply.github.com> Date: Thu, 7 Nov 2024 13:52:03 +0900 Subject: [PATCH 36/53] =?UTF-8?q?[REFACTOR]=20LadderGame=20=EB=A9=94?= =?UTF-8?q?=EC=84=9C=EB=93=9C=20=EC=B1=85=EC=9E=84=EC=97=90=20=EB=94=B0?= =?UTF-8?q?=EB=A5=B8=20=ED=81=B4=EB=9E=98=EC=8A=A4=20=EB=B6=84=EB=A6=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/controller/LadderController.java | 4 +- src/main/java/domain/LadderGame.java | 23 ------ src/main/java/domain/Player.java | 10 +-- src/main/java/domain/Players.java | 4 + src/main/java/domain/Position.java | 15 +++- src/test/java/domain/LadderGameTest.java | 80 ------------------- src/test/java/domain/PlayerTest.java | 13 --- 7 files changed, 22 insertions(+), 127 deletions(-) delete mode 100644 src/main/java/domain/LadderGame.java delete mode 100644 src/test/java/domain/LadderGameTest.java diff --git a/src/main/java/controller/LadderController.java b/src/main/java/controller/LadderController.java index dba90c75..b74e9870 100644 --- a/src/main/java/controller/LadderController.java +++ b/src/main/java/controller/LadderController.java @@ -1,7 +1,6 @@ package controller; import domain.Ladder; -import domain.LadderGame; import domain.LadderGenerator; import domain.Players; import domain.ResultTypes; @@ -45,8 +44,7 @@ private void displayLadder(ResultTypes resultTypes,List playerNames) { } private void playGameAndDisplayResults(ResultTypes resultTypes) { - LadderGame ladderGame = new LadderGame(); - ladderGame.runGame(ladder, players); + players.moveAllPlayers(ladder); OutputView.printResult(players, resultTypes.getResultTypes()); } } diff --git a/src/main/java/domain/LadderGame.java b/src/main/java/domain/LadderGame.java deleted file mode 100644 index fcb8e096..00000000 --- a/src/main/java/domain/LadderGame.java +++ /dev/null @@ -1,23 +0,0 @@ -package domain; - -public class LadderGame { - - public void movePlayer(Line line, Player player) { - if (line.canMoveRight(player.getPosition())) { - player.moveRight(); - return; - } - - if (line.canMoveLeft(player.getPosition())) { - player.moveLeft(); - } - } - - public void moveEachPlayer(Ladder ladder, Player player) { - ladder.getLadder().forEach(line -> movePlayer(line, player)); - } - - public void runGame(Ladder ladder, Players players) { - players.getPlayers().forEach(player -> moveEachPlayer(ladder, player)); - } -} diff --git a/src/main/java/domain/Player.java b/src/main/java/domain/Player.java index 91c19e6a..d26af4cf 100644 --- a/src/main/java/domain/Player.java +++ b/src/main/java/domain/Player.java @@ -1,5 +1,7 @@ package domain; +import java.util.List; + public class Player { private final PlayerName playerName; @@ -10,12 +12,8 @@ public Player(PlayerName name, Position position) { this.position = position; } - public void moveLeft() { - position.movePositionLeft(); - } - - public void moveRight() { - position.movePositionRight(); + public void moveAlongLadder(List ladder) { + ladder.forEach(this.position::moveAlongLine); } public String getPlayerName() { diff --git a/src/main/java/domain/Players.java b/src/main/java/domain/Players.java index f73f31e4..6234f1a8 100644 --- a/src/main/java/domain/Players.java +++ b/src/main/java/domain/Players.java @@ -30,6 +30,10 @@ private List createPlayer(List playerNames) { return players; } + public void moveAllPlayers(Ladder ladder) { + players.forEach(player -> player.moveAlongLadder(ladder.getLadder())); + } + public Player findByName(String viewerName) { return players.stream() .filter(player -> player.getPlayerName().equals(viewerName)) diff --git a/src/main/java/domain/Position.java b/src/main/java/domain/Position.java index 9a288e5d..b5dd8aba 100644 --- a/src/main/java/domain/Position.java +++ b/src/main/java/domain/Position.java @@ -8,11 +8,22 @@ public Position(int position) { this.position = position; } - public void movePositionLeft() { + public void moveAlongLine(Line line) { + if (line.canMoveRight(position)){ + moveRight(); + return; + } + + if (line.canMoveLeft(position)) { + moveLeft(); + } + } + + public void moveLeft() { position--; } - public void movePositionRight() { + public void moveRight() { position++; } diff --git a/src/test/java/domain/LadderGameTest.java b/src/test/java/domain/LadderGameTest.java deleted file mode 100644 index 5319bcfe..00000000 --- a/src/test/java/domain/LadderGameTest.java +++ /dev/null @@ -1,80 +0,0 @@ -package domain; - -import org.junit.jupiter.api.BeforeEach; -import org.junit.jupiter.api.Test; - -import java.util.List; - -import static org.assertj.core.api.Assertions.assertThat; - -public class LadderGameTest { - - private LadderGame ladderGame; - private Player player; - private Ladder ladder; - private Line lineRight; - private Line lineLeft; - private Line lineNone; - - @BeforeEach - public void setUp() { - ladderGame = new LadderGame(); - - // test 사다리 생성 - lineRight = new Line(List.of(true, false, false)); // 첫 번째 사람 오른쪽 이동 - lineLeft = new Line(List.of(true, false, false)); // 두 번째 사람 왼쪽 이동 - lineNone = new Line(List.of(false, false, false)); // 세 번째 사람 그대로 - - ladder = new Ladder(List.of(lineRight, lineLeft, lineNone)); - } - - @Test - public void 플레이어는_오른쪽으로_이동할_수_있다() { - player = new Player(new PlayerName("Test"), new Position(0)); - - ladderGame.movePlayer(lineRight, player); // 첫 번째 줄에서 오른쪽으로 이동 - - assertThat(player.getPosition()).isEqualTo(1); - } - - @Test - public void 플레이어는_왼쪽으로_이동할_수_있다() { - player = new Player(new PlayerName("Test"), new Position(1)); - - ladderGame.movePlayer(lineLeft, player); // 두 번째 줄에서 왼쪽으로 이동 - - assertThat(player.getPosition()).isEqualTo(0); - } - - @Test - public void 플레이어는_이동하지_않을_수_있다() { - player = new Player(new PlayerName("Test"), new Position(2)); - - ladderGame.movePlayer(lineNone, player); // 이동 불가능한 줄에서 시도 - - assertThat(player.getPosition()).isEqualTo(2); - } - - @Test - public void 플레이어는_각_라인을_타고_최종_위치에_도달한다() { - player = new Player(new PlayerName("Test"), new Position(0)); - - ladderGame.moveEachPlayer(ladder, player); // 각 라인에 대해 이동 - - assertThat(player.getPosition()).isEqualTo(0); // 첫 번째 사람은 결국 첫 번째 결과에 도달 - } - - @Test - public void testRunGame() { - Players players = new Players(List.of("Test1", "Test2", "Test3")); - Player player1 = players.getPlayers().get(0); - Player player2 = players.getPlayers().get(1); - Player player3 = players.getPlayers().get(2); - - ladderGame.runGame(ladder, players); - - assertThat(player1.getPosition()).isEqualTo(0); - assertThat(player2.getPosition()).isEqualTo(1); - assertThat(player3.getPosition()).isEqualTo(2); - } -} diff --git a/src/test/java/domain/PlayerTest.java b/src/test/java/domain/PlayerTest.java index ec94a315..2f357349 100644 --- a/src/test/java/domain/PlayerTest.java +++ b/src/test/java/domain/PlayerTest.java @@ -23,17 +23,4 @@ public void setUp() { assertThat(player.getPlayerName()).isEqualTo("Test"); assertThat(player.getPosition()).isEqualTo(0); } - - @Test - public void 플레이어는_왼쪽으로_이동할_수_있다() { - position.movePositionRight(); // 오른쪽으로 이동 - player.moveLeft(); // 왼쪽으로 이동 - assertThat(player.getPosition()).isEqualTo(0); - } - - @Test - public void 플레이어는_오른쪽으로_이동할_수_있다() { - player.moveRight(); - assertThat(player.getPosition()).isEqualTo(1); - } } From 6f6b09a1f21188cd4dff9daf656eb730673901cf Mon Sep 17 00:00:00 2001 From: SANGHEEJEONG <147232817+SANGHEEJEONG@users.noreply.github.com> Date: Thu, 7 Nov 2024 14:05:40 +0900 Subject: [PATCH 37/53] =?UTF-8?q?[REFACTOR]=20=EC=A0=91=EA=B7=BC=EC=A7=80?= =?UTF-8?q?=EC=A0=95=EC=9E=90=20=EC=88=98=EC=A0=95=20public=20->=20private?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/domain/LadderGenerator.java | 7 ++-- src/main/java/domain/Player.java | 2 +- src/main/java/domain/Position.java | 2 +- src/test/java/domain/LadderGeneratorTest.java | 34 ------------------- 4 files changed, 6 insertions(+), 39 deletions(-) diff --git a/src/main/java/domain/LadderGenerator.java b/src/main/java/domain/LadderGenerator.java index 408a12eb..208c7f05 100644 --- a/src/main/java/domain/LadderGenerator.java +++ b/src/main/java/domain/LadderGenerator.java @@ -7,13 +7,14 @@ public class LadderGenerator { - public boolean randomTrueOrFalse() { + private boolean randomTrueOrFalse() { return Math.random() < 0.5; // 0.0(포함) - 1.0(미포함) 사이의 랜덤한 실수 반환 } - public boolean createValue(List line, int lineIndex) { - if (lineIndex != 0 && line.get(lineIndex - 1) == TRUE) // 이전 값이 true 면 false 반환 + private boolean createValue(List line, int lineIndex) { + if (lineIndex != 0 && line.get(lineIndex - 1) == TRUE) { // 이전 값이 true 면 false 반환 return false; + } return randomTrueOrFalse(); } diff --git a/src/main/java/domain/Player.java b/src/main/java/domain/Player.java index d26af4cf..b34dee2c 100644 --- a/src/main/java/domain/Player.java +++ b/src/main/java/domain/Player.java @@ -13,7 +13,7 @@ public Player(PlayerName name, Position position) { } public void moveAlongLadder(List ladder) { - ladder.forEach(this.position::moveAlongLine); + ladder.forEach(this.position::decideWhereToGo); } public String getPlayerName() { diff --git a/src/main/java/domain/Position.java b/src/main/java/domain/Position.java index b5dd8aba..379fb9a2 100644 --- a/src/main/java/domain/Position.java +++ b/src/main/java/domain/Position.java @@ -8,7 +8,7 @@ public Position(int position) { this.position = position; } - public void moveAlongLine(Line line) { + public void decideWhereToGo(Line line) { if (line.canMoveRight(position)){ moveRight(); return; diff --git a/src/test/java/domain/LadderGeneratorTest.java b/src/test/java/domain/LadderGeneratorTest.java index 16912e44..5cc2ae18 100644 --- a/src/test/java/domain/LadderGeneratorTest.java +++ b/src/test/java/domain/LadderGeneratorTest.java @@ -3,9 +3,6 @@ import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; -import java.util.ArrayList; -import java.util.List; - import static org.assertj.core.api.Assertions.assertThat; public class LadderGeneratorTest { @@ -17,37 +14,6 @@ public void setUp() { ladderGenerator = new LadderGenerator(); } - @Test - public void true와_false를_랜덤으로_반환한다() { - boolean hasTrue = false; - boolean hasFalse = false; - - for (int i = 0; i < 100; i++) { - boolean result = ladderGenerator.randomTrueOrFalse(); - if (result) { - hasTrue = true; - } else { - hasFalse = true; - } - - // 두 값이 모두 나오면 테스트 종료 - if (hasTrue && hasFalse) { - break; - } - } - - assertThat(hasTrue).isTrue(); - assertThat(hasFalse).isTrue(); - } - - @Test - public void 이전_값이_true면_false를_반환한다() { - List line = new ArrayList<>(List.of(true, false, false)); - boolean result = ladderGenerator.createValue(line, 1); - - assertThat(result).isFalse(); - } - @Test public void 원하는_크기의_라인을_생성한다() { int width = 4; From 95f8ec199f7891d61d85684fa9dcbed5b658f4dd Mon Sep 17 00:00:00 2001 From: SANGHEEJEONG <147232817+SANGHEEJEONG@users.noreply.github.com> Date: Fri, 8 Nov 2024 15:52:44 +0900 Subject: [PATCH 38/53] =?UTF-8?q?[REFACTOR]=20Boolaen=20->=20Point=20ENUM?= =?UTF-8?q?=20=EC=82=AC=EC=9A=A9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/domain/LadderGenerator.java | 12 ++++----- src/main/java/domain/Line.java | 12 ++++----- src/main/java/domain/PlayerName.java | 4 +-- src/main/java/domain/Point.java | 26 +++++++++++++++++++ src/main/java/view/OutputView.java | 7 +++-- src/test/java/domain/LadderGeneratorTest.java | 2 +- src/test/java/domain/LineTest.java | 2 +- 7 files changed, 43 insertions(+), 22 deletions(-) create mode 100644 src/main/java/domain/Point.java diff --git a/src/main/java/domain/LadderGenerator.java b/src/main/java/domain/LadderGenerator.java index 208c7f05..db86fb7d 100644 --- a/src/main/java/domain/LadderGenerator.java +++ b/src/main/java/domain/LadderGenerator.java @@ -3,24 +3,22 @@ import java.util.ArrayList; import java.util.List; -import static java.lang.Boolean.TRUE; - public class LadderGenerator { private boolean randomTrueOrFalse() { return Math.random() < 0.5; // 0.0(포함) - 1.0(미포함) 사이의 랜덤한 실수 반환 } - private boolean createValue(List line, int lineIndex) { - if (lineIndex != 0 && line.get(lineIndex - 1) == TRUE) { // 이전 값이 true 면 false 반환 - return false; + private Point createValue(List line, int lineIndex) { + if (lineIndex != 0 && line.get(lineIndex - 1).isEnabled()) { // 이전 값이 true 면 false 반환 + return Point.DISABLED; } - return randomTrueOrFalse(); + return Point.FROM_BOOLEAN.apply(randomTrueOrFalse()); } public Line createLine(int width) { - List points = new ArrayList<>(); + List points = new ArrayList<>(); for (int i = 0; i < width - 1; i++) { points.add(createValue(points, i)); } diff --git a/src/main/java/domain/Line.java b/src/main/java/domain/Line.java index 5d195b65..27f214ba 100644 --- a/src/main/java/domain/Line.java +++ b/src/main/java/domain/Line.java @@ -3,24 +3,22 @@ import java.util.Collections; import java.util.List; -import static java.lang.Boolean.TRUE; - public class Line { - private final List points; + private final List points; - public Line(List points) { + public Line(List points) { this.points = points; } public boolean canMoveRight(int ladderOrder) { - return (ladderOrder < points.size()) && (points.get(ladderOrder) == TRUE); + return (ladderOrder < points.size()) && (points.get(ladderOrder).isEnabled()); } public boolean canMoveLeft(int ladderOrder) { - return (ladderOrder != 0) && (points.get(ladderOrder - 1) == TRUE); + return (ladderOrder != 0) && (points.get(ladderOrder - 1).isEnabled()); } - public List getLine() { + public List getLine() { return Collections.unmodifiableList(points); } } diff --git a/src/main/java/domain/PlayerName.java b/src/main/java/domain/PlayerName.java index e0ad770b..7d760c43 100644 --- a/src/main/java/domain/PlayerName.java +++ b/src/main/java/domain/PlayerName.java @@ -25,13 +25,13 @@ private void validateNotBlank(String name) { private void validateMaxLength(String name) { if (name.length() > MAX_LENGTH) { - throw new IllegalArgumentException("이름은 5자를 초과할 수 없습니다."); + throw new IllegalArgumentException("이름은 " + MAX_LENGTH + "자를 초과할 수 없습니다."); } } private void validateNotEqualAll(String name) { if (name.equals(INVALID_NAME)) { - throw new IllegalArgumentException("이름은 all일 수 없습니다."); + throw new IllegalArgumentException("이름은 " + INVALID_NAME + "일 수 없습니다."); } } diff --git a/src/main/java/domain/Point.java b/src/main/java/domain/Point.java new file mode 100644 index 00000000..547da098 --- /dev/null +++ b/src/main/java/domain/Point.java @@ -0,0 +1,26 @@ +package domain; + +import java.util.function.Function; + +public enum Point { + ENABLED(true), + DISABLED(false); + + private final boolean enabled; + + // 생성자를 통해 상태를 설정 + Point(boolean enabled) { + this.enabled = enabled; + } + + public boolean isEnabled() { + return enabled; + } + + public static final Function FROM_BOOLEAN = value -> { + if (value) { + return ENABLED; + } + return DISABLED; + }; +} diff --git a/src/main/java/view/OutputView.java b/src/main/java/view/OutputView.java index dbb65ebc..98844a55 100644 --- a/src/main/java/view/OutputView.java +++ b/src/main/java/view/OutputView.java @@ -4,11 +4,10 @@ import domain.Line; import domain.Player; import domain.Players; +import domain.Point; import java.util.List; -import static java.lang.Boolean.TRUE; - public class OutputView { // 플레이어 이름 출력 @@ -18,8 +17,8 @@ public static void printPlayers(List names) { System.out.println(); } - private static String changeValueToView(Boolean point) { - if (point == TRUE) + private static String changeValueToView(Point point) { + if (point.isEnabled()) return "-----"; return " "; diff --git a/src/test/java/domain/LadderGeneratorTest.java b/src/test/java/domain/LadderGeneratorTest.java index 5cc2ae18..8b3fe27f 100644 --- a/src/test/java/domain/LadderGeneratorTest.java +++ b/src/test/java/domain/LadderGeneratorTest.java @@ -20,7 +20,7 @@ public void setUp() { Line line = ladderGenerator.createLine(width); assertThat(line.getLine()).hasSize(width - 1); - for (Boolean point : line.getLine()) { + for (Point point : line.getLine()) { assertThat(point).isNotNull(); } } diff --git a/src/test/java/domain/LineTest.java b/src/test/java/domain/LineTest.java index d9e106c1..922f6e94 100644 --- a/src/test/java/domain/LineTest.java +++ b/src/test/java/domain/LineTest.java @@ -13,7 +13,7 @@ public class LineTest { @BeforeEach public void setUp() { - line = new Line(List.of(true, false, true)); + line = new Line(List.of(Point.ENABLED, Point.DISABLED, Point.ENABLED)); } @Test From f31cacc66f1f6410b4b5e8fbd7a0bf4b8b580407 Mon Sep 17 00:00:00 2001 From: SANGHEEJEONG <147232817+SANGHEEJEONG@users.noreply.github.com> Date: Fri, 8 Nov 2024 15:59:47 +0900 Subject: [PATCH 39/53] =?UTF-8?q?[REFACTOR]=20position=20=EB=A9=94?= =?UTF-8?q?=EC=84=9C=EB=93=9C=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/domain/Line.java | 4 ++++ src/main/java/domain/Position.java | 14 +++++++++----- 2 files changed, 13 insertions(+), 5 deletions(-) diff --git a/src/main/java/domain/Line.java b/src/main/java/domain/Line.java index 27f214ba..1704d3a7 100644 --- a/src/main/java/domain/Line.java +++ b/src/main/java/domain/Line.java @@ -21,4 +21,8 @@ public boolean canMoveLeft(int ladderOrder) { public List getLine() { return Collections.unmodifiableList(points); } + + public int getSize() { + return points.size(); + } } diff --git a/src/main/java/domain/Position.java b/src/main/java/domain/Position.java index 379fb9a2..0a9cc393 100644 --- a/src/main/java/domain/Position.java +++ b/src/main/java/domain/Position.java @@ -9,8 +9,8 @@ public Position(int position) { } public void decideWhereToGo(Line line) { - if (line.canMoveRight(position)){ - moveRight(); + if (line.canMoveRight(position)) { + moveRight(line.getSize()); return; } @@ -20,11 +20,15 @@ public void decideWhereToGo(Line line) { } public void moveLeft() { - position--; + if (position != 0) { + position--; + } } - public void moveRight() { - position++; + public void moveRight(int maxPosition) { + if (position != maxPosition) { + position++; + } } public int getPosition() { From e43ee2d580c5042d3aff03800f727b5c5436a003 Mon Sep 17 00:00:00 2001 From: SANGHEEJEONG <147232817+SANGHEEJEONG@users.noreply.github.com> Date: Fri, 8 Nov 2024 16:16:34 +0900 Subject: [PATCH 40/53] =?UTF-8?q?[REFACTOR]=20=EC=9E=85=EB=A0=A5=20?= =?UTF-8?q?=EB=A9=94=EC=84=9C=EB=93=9C=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/controller/LadderController.java | 4 +-- src/main/java/view/InputException.java | 16 ----------- src/main/java/view/InputView.java | 28 ++++++++++++++++--- 3 files changed, 26 insertions(+), 22 deletions(-) delete mode 100644 src/main/java/view/InputException.java diff --git a/src/main/java/controller/LadderController.java b/src/main/java/controller/LadderController.java index b74e9870..21308762 100644 --- a/src/main/java/controller/LadderController.java +++ b/src/main/java/controller/LadderController.java @@ -26,7 +26,7 @@ public void run() { initializeLadder(); // 사다리 및 결과 출력 - displayLadder(resultTypes,playerNames); + displayLadder(resultTypes, playerNames); playGameAndDisplayResults(resultTypes); } @@ -37,7 +37,7 @@ private void initializeLadder() { ladder = ladderGenerator.createLadder(width, height); } - private void displayLadder(ResultTypes resultTypes,List playerNames) { + private void displayLadder(ResultTypes resultTypes, List playerNames) { OutputView.printPlayers(playerNames); OutputView.drawLadder(ladder); OutputView.printResultTypes(resultTypes.getResultTypes()); diff --git a/src/main/java/view/InputException.java b/src/main/java/view/InputException.java deleted file mode 100644 index caf26fad..00000000 --- a/src/main/java/view/InputException.java +++ /dev/null @@ -1,16 +0,0 @@ -package view; - -public class InputException { - - public static void validateHeightSize(int height) { - if (height < 1) { - throw new IllegalArgumentException("사다리 높이는 1 이상이어야 합니다."); - } - } - - public static void validateViewerNameNotBlank(String viewerName) { - if (viewerName.isBlank()) { - throw new IllegalArgumentException("이름은 공백일 수 없습니다."); - } - } -} diff --git a/src/main/java/view/InputView.java b/src/main/java/view/InputView.java index 73e8164e..21132482 100644 --- a/src/main/java/view/InputView.java +++ b/src/main/java/view/InputView.java @@ -24,15 +24,35 @@ public static String inputLadderResults() { public static int inputHeight() { System.out.println("최대 사다리 높이는 몇 개인가요?"); int height = input.nextInt(); - InputException.validateHeightSize(height); + validateHeightSize(height); input.nextLine(); return height; } + public static void validateHeightSize(int height) { + if (height < 1) { + throw new IllegalArgumentException("사다리 높이는 1 이상이어야 합니다."); + } + } + public static String inputViewerName() { - System.out.println("\n결과를 보고 싶은 사람은?"); - String viewerName = input.nextLine(); - InputException.validateViewerNameNotBlank(viewerName); + String viewerName; + while (true) { + System.out.println("\n결과를 보고 싶은 사람은?"); + viewerName = input.nextLine(); + try { + validateViewerNameNotBlank(viewerName); + break; + } catch (IllegalArgumentException e) { + System.out.println("입력 값이 공백일 수 없습니다. 다시 입력해 주세요."); + } + } return viewerName; } + + public static void validateViewerNameNotBlank(String viewerName) { + if (viewerName.isBlank()) { + throw new IllegalArgumentException("이름은 공백일 수 없습니다."); + } + } } From 7e4cd52399e9bd12293d0e6d8fbf3d14ee01997b Mon Sep 17 00:00:00 2001 From: SANGHEEJEONG <147232817+SANGHEEJEONG@users.noreply.github.com> Date: Sat, 9 Nov 2024 13:26:04 +0900 Subject: [PATCH 41/53] =?UTF-8?q?[REFACTOR]=20LadderController=20=EC=88=98?= =?UTF-8?q?=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/controller/LadderController.java | 22 +++++++++---------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/src/main/java/controller/LadderController.java b/src/main/java/controller/LadderController.java index 21308762..81f273a4 100644 --- a/src/main/java/controller/LadderController.java +++ b/src/main/java/controller/LadderController.java @@ -11,39 +11,39 @@ public class LadderController { - private Players players; - private Ladder ladder; - public void run() { List playerNames = InputView.splitString(InputView.inputNames()); List kindOfResults = InputView.splitString(InputView.inputLadderResults()); // 플레이어 생성 - players = new Players(playerNames); + Players players = new Players(playerNames); // 결과 종류 생성 ResultTypes resultTypes = new ResultTypes(kindOfResults, players.getPlayersSize()); // 사다리 초기화 - initializeLadder(); + Ladder ladder = initializeLadder(players); // 사다리 및 결과 출력 - displayLadder(resultTypes, playerNames); - playGameAndDisplayResults(resultTypes); + displayLadder(resultTypes, playerNames, ladder); + playGameAndDisplayResults(resultTypes, players, ladder); } - private void initializeLadder() { + private Ladder initializeLadder(Players players) { int width = players.getPlayersSize(); int height = InputView.inputHeight(); + LadderGenerator ladderGenerator = new LadderGenerator(); - ladder = ladderGenerator.createLadder(width, height); + Ladder ladder = ladderGenerator.createLadder(width, height); + + return ladder; } - private void displayLadder(ResultTypes resultTypes, List playerNames) { + private void displayLadder(ResultTypes resultTypes, List playerNames, Ladder ladder) { OutputView.printPlayers(playerNames); OutputView.drawLadder(ladder); OutputView.printResultTypes(resultTypes.getResultTypes()); } - private void playGameAndDisplayResults(ResultTypes resultTypes) { + private void playGameAndDisplayResults(ResultTypes resultTypes, Players players, Ladder ladder) { players.moveAllPlayers(ladder); OutputView.printResult(players, resultTypes.getResultTypes()); } From f8dce70dd19b7a2aa386f266babedefd567daa66 Mon Sep 17 00:00:00 2001 From: SANGHEEJEONG <147232817+SANGHEEJEONG@users.noreply.github.com> Date: Sun, 17 Nov 2024 00:25:20 +0900 Subject: [PATCH 42/53] =?UTF-8?q?[REFACTOR]=20LadderGenerator=20=EC=82=AD?= =?UTF-8?q?=EC=A0=9C=20=EB=B0=8F=20Controller=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/controller/LadderController.java | 49 +++++++++++-------- src/main/java/domain/Ladder.java | 12 ++++- src/main/java/domain/LadderGenerator.java | 37 -------------- src/main/java/domain/Line.java | 12 ++++- src/main/java/domain/Point.java | 13 +++++ src/main/java/view/OutputView.java | 4 +- src/test/java/domain/LadderGeneratorTest.java | 36 -------------- src/test/java/domain/LineTest.java | 4 +- 8 files changed, 65 insertions(+), 102 deletions(-) delete mode 100644 src/main/java/domain/LadderGenerator.java delete mode 100644 src/test/java/domain/LadderGeneratorTest.java diff --git a/src/main/java/controller/LadderController.java b/src/main/java/controller/LadderController.java index 81f273a4..2f472649 100644 --- a/src/main/java/controller/LadderController.java +++ b/src/main/java/controller/LadderController.java @@ -1,7 +1,6 @@ package controller; import domain.Ladder; -import domain.LadderGenerator; import domain.Players; import domain.ResultTypes; import view.InputView; @@ -12,39 +11,49 @@ public class LadderController { public void run() { + Players players = initializePlayers(); + ResultTypes resultTypes = initializeResults(players.getPlayersSize()); + Ladder ladder = initializeLadder(players.getPlayersSize()); + + playGame(players, ladder); + + displayAllOutput(players, resultTypes, ladder); + } + + private Players initializePlayers() { List playerNames = InputView.splitString(InputView.inputNames()); - List kindOfResults = InputView.splitString(InputView.inputLadderResults()); - // 플레이어 생성 - Players players = new Players(playerNames); - // 결과 종류 생성 - ResultTypes resultTypes = new ResultTypes(kindOfResults, players.getPlayersSize()); - // 사다리 초기화 - Ladder ladder = initializeLadder(players); + return new Players(playerNames); + } - // 사다리 및 결과 출력 - displayLadder(resultTypes, playerNames, ladder); - playGameAndDisplayResults(resultTypes, players, ladder); + private ResultTypes initializeResults(int resultsSize) { + List kindOfResults = InputView.splitString(InputView.inputLadderResults()); + + return new ResultTypes(kindOfResults, resultsSize); } - private Ladder initializeLadder(Players players) { - int width = players.getPlayersSize(); + private Ladder initializeLadder(int width) { int height = InputView.inputHeight(); - LadderGenerator ladderGenerator = new LadderGenerator(); - Ladder ladder = ladderGenerator.createLadder(width, height); + return new Ladder(width, height); + } + + private void playGame(Players players, Ladder ladder) { + players.moveAllPlayers(ladder); + } - return ladder; + public void displayAllOutput(Players players, ResultTypes resultTypes, Ladder ladder){ + displayLadder(players, resultTypes, ladder); + displayResults(resultTypes, players); } - private void displayLadder(ResultTypes resultTypes, List playerNames, Ladder ladder) { - OutputView.printPlayers(playerNames); + private void displayLadder(Players players, ResultTypes resultTypes, Ladder ladder) { + OutputView.printPlayers(players); OutputView.drawLadder(ladder); OutputView.printResultTypes(resultTypes.getResultTypes()); } - private void playGameAndDisplayResults(ResultTypes resultTypes, Players players, Ladder ladder) { - players.moveAllPlayers(ladder); + private void displayResults(ResultTypes resultTypes, Players players) { OutputView.printResult(players, resultTypes.getResultTypes()); } } diff --git a/src/main/java/domain/Ladder.java b/src/main/java/domain/Ladder.java index a6fb93a8..1ed60223 100644 --- a/src/main/java/domain/Ladder.java +++ b/src/main/java/domain/Ladder.java @@ -1,5 +1,6 @@ package domain; +import java.util.ArrayList; import java.util.Collections; import java.util.List; @@ -7,8 +8,15 @@ public class Ladder { private final List lines; - public Ladder(List lines) { - this.lines = lines; + public Ladder(int width, int height) { + this.lines = new ArrayList<>(); + createLadder(width, height); + } + + public void createLadder(int width, int height) { + for (int i = 0; i < height; i++) { + lines.add(new Line(width)); + } } public List getLadder() { diff --git a/src/main/java/domain/LadderGenerator.java b/src/main/java/domain/LadderGenerator.java deleted file mode 100644 index db86fb7d..00000000 --- a/src/main/java/domain/LadderGenerator.java +++ /dev/null @@ -1,37 +0,0 @@ -package domain; - -import java.util.ArrayList; -import java.util.List; - -public class LadderGenerator { - - private boolean randomTrueOrFalse() { - return Math.random() < 0.5; // 0.0(포함) - 1.0(미포함) 사이의 랜덤한 실수 반환 - } - - private Point createValue(List line, int lineIndex) { - if (lineIndex != 0 && line.get(lineIndex - 1).isEnabled()) { // 이전 값이 true 면 false 반환 - return Point.DISABLED; - } - - return Point.FROM_BOOLEAN.apply(randomTrueOrFalse()); - } - - public Line createLine(int width) { - List points = new ArrayList<>(); - for (int i = 0; i < width - 1; i++) { - points.add(createValue(points, i)); - } - - return new Line(points); - } - - public Ladder createLadder(int width, int height) { - List lines = new ArrayList<>(); - for (int i = 0; i < height; i++) { - lines.add(createLine(width)); - } - - return new Ladder(lines); - } -} diff --git a/src/main/java/domain/Line.java b/src/main/java/domain/Line.java index 1704d3a7..99e3d519 100644 --- a/src/main/java/domain/Line.java +++ b/src/main/java/domain/Line.java @@ -1,13 +1,21 @@ package domain; +import java.util.ArrayList; import java.util.Collections; import java.util.List; public class Line { private final List points; - public Line(List points) { - this.points = points; + public Line(int width) { + this.points = new ArrayList<>(); + createLine(width); + } + + public void createLine(int width) { + for (int i = 0; i < width - 1; i++) { + points.add(Point.createPoint(points, i)); + } } public boolean canMoveRight(int ladderOrder) { diff --git a/src/main/java/domain/Point.java b/src/main/java/domain/Point.java index 547da098..604ea6fd 100644 --- a/src/main/java/domain/Point.java +++ b/src/main/java/domain/Point.java @@ -1,5 +1,6 @@ package domain; +import java.util.List; import java.util.function.Function; public enum Point { @@ -17,6 +18,18 @@ public boolean isEnabled() { return enabled; } + private static boolean randomTrueOrFalse() { + return Math.random() < 0.5; // 0.0(포함) - 1.0(미포함) 사이의 랜덤한 실수 반환 + } + + public static Point createPoint(List line, int lineIndex) { + if (lineIndex != 0 && line.get(lineIndex - 1).isEnabled()) { // 이전 값이 true 면 false 반환 + return Point.DISABLED; + } + + return Point.FROM_BOOLEAN.apply(randomTrueOrFalse()); + } + public static final Function FROM_BOOLEAN = value -> { if (value) { return ENABLED; diff --git a/src/main/java/view/OutputView.java b/src/main/java/view/OutputView.java index 98844a55..87537daa 100644 --- a/src/main/java/view/OutputView.java +++ b/src/main/java/view/OutputView.java @@ -11,9 +11,9 @@ public class OutputView { // 플레이어 이름 출력 - public static void printPlayers(List names) { + public static void printPlayers(Players players) { System.out.println("\n사다리 결과\n"); - names.forEach(System.out::print); + players.getPlayers().forEach(Player::getPlayerName); System.out.println(); } diff --git a/src/test/java/domain/LadderGeneratorTest.java b/src/test/java/domain/LadderGeneratorTest.java deleted file mode 100644 index 8b3fe27f..00000000 --- a/src/test/java/domain/LadderGeneratorTest.java +++ /dev/null @@ -1,36 +0,0 @@ -package domain; - -import org.junit.jupiter.api.BeforeEach; -import org.junit.jupiter.api.Test; - -import static org.assertj.core.api.Assertions.assertThat; - -public class LadderGeneratorTest { - - private LadderGenerator ladderGenerator; - - @BeforeEach - public void setUp() { - ladderGenerator = new LadderGenerator(); - } - - @Test - public void 원하는_크기의_라인을_생성한다() { - int width = 4; - Line line = ladderGenerator.createLine(width); - - assertThat(line.getLine()).hasSize(width - 1); - for (Point point : line.getLine()) { - assertThat(point).isNotNull(); - } - } - - @Test - public void 원하는_크기의_사다리를_생성한다() { - int width = 4; - int height = 3; - Ladder ladder = ladderGenerator.createLadder(width, height); - - assertThat(ladder.getLadder()).hasSize(height); - } -} diff --git a/src/test/java/domain/LineTest.java b/src/test/java/domain/LineTest.java index 922f6e94..c7bf809d 100644 --- a/src/test/java/domain/LineTest.java +++ b/src/test/java/domain/LineTest.java @@ -3,8 +3,6 @@ import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; -import java.util.List; - import static org.assertj.core.api.Assertions.assertThat; public class LineTest { @@ -13,7 +11,7 @@ public class LineTest { @BeforeEach public void setUp() { - line = new Line(List.of(Point.ENABLED, Point.DISABLED, Point.ENABLED)); + // line = new Line(List.of(Point.ENABLED, Point.DISABLED, Point.ENABLED)); } @Test From ac02d9c4f80f41f3ad292168f0d8b31f47ebf2dc Mon Sep 17 00:00:00 2001 From: SANGHEEJEONG <147232817+SANGHEEJEONG@users.noreply.github.com> Date: Sun, 17 Nov 2024 00:43:47 +0900 Subject: [PATCH 43/53] =?UTF-8?q?[REFACTOR]=20moveLeft=20&=20moveRight=20?= =?UTF-8?q?=EC=98=88=EC=99=B8=20=EC=B2=98=EB=A6=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/domain/Position.java | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/src/main/java/domain/Position.java b/src/main/java/domain/Position.java index 0a9cc393..e975f96a 100644 --- a/src/main/java/domain/Position.java +++ b/src/main/java/domain/Position.java @@ -20,15 +20,17 @@ public void decideWhereToGo(Line line) { } public void moveLeft() { - if (position != 0) { - position--; + if (position == 0){ + throw new IllegalStateException("가장 왼쪽 사다리이므로 왼쪽으로 이동이 불가합니다."); } + position--; } public void moveRight(int maxPosition) { - if (position != maxPosition) { - position++; + if (position == maxPosition){ + throw new IllegalStateException("가장 오른쪽 사다리이므로 오른쪽으로 이동이 불가합니다."); } + position++; } public int getPosition() { From d48bce2aec899fd76d541191b0e682468f17dcd5 Mon Sep 17 00:00:00 2001 From: SANGHEEJEONG <147232817+SANGHEEJEONG@users.noreply.github.com> Date: Tue, 19 Nov 2024 02:53:39 +0900 Subject: [PATCH 44/53] =?UTF-8?q?[REFACTOR]=20Controller=20=EC=99=80=20App?= =?UTF-8?q?lication=20=EC=B1=85=EC=9E=84=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/Application.java | 16 +++++++++++++++- src/main/java/controller/LadderController.java | 18 ++++-------------- 2 files changed, 19 insertions(+), 15 deletions(-) diff --git a/src/main/java/Application.java b/src/main/java/Application.java index f3ce0ed8..2020bd6c 100644 --- a/src/main/java/Application.java +++ b/src/main/java/Application.java @@ -1,8 +1,22 @@ import controller.LadderController; +import domain.Ladder; +import domain.Players; +import domain.ResultTypes; public class Application { public static void main(String[] args) { + runLadderGame(); + } + + private static void runLadderGame() { LadderController ladderController = new LadderController(); - ladderController.run(); + + Players players = ladderController.initializePlayers(); + ResultTypes resultTypes = ladderController.initializeResults(players.getPlayersSize()); + Ladder ladder = ladderController.initializeLadder(players.getPlayersSize()); + + ladderController.playGame(players, ladder); + + ladderController.displayAllOutput(players, resultTypes, ladder); } } diff --git a/src/main/java/controller/LadderController.java b/src/main/java/controller/LadderController.java index 2f472649..08f4afb9 100644 --- a/src/main/java/controller/LadderController.java +++ b/src/main/java/controller/LadderController.java @@ -10,35 +10,25 @@ public class LadderController { - public void run() { - Players players = initializePlayers(); - ResultTypes resultTypes = initializeResults(players.getPlayersSize()); - Ladder ladder = initializeLadder(players.getPlayersSize()); - - playGame(players, ladder); - - displayAllOutput(players, resultTypes, ladder); - } - - private Players initializePlayers() { + public Players initializePlayers() { List playerNames = InputView.splitString(InputView.inputNames()); return new Players(playerNames); } - private ResultTypes initializeResults(int resultsSize) { + public ResultTypes initializeResults(int resultsSize) { List kindOfResults = InputView.splitString(InputView.inputLadderResults()); return new ResultTypes(kindOfResults, resultsSize); } - private Ladder initializeLadder(int width) { + public Ladder initializeLadder(int width) { int height = InputView.inputHeight(); return new Ladder(width, height); } - private void playGame(Players players, Ladder ladder) { + public void playGame(Players players, Ladder ladder) { players.moveAllPlayers(ladder); } From ea12de39ebfc385f70856d952274278cad3213ec Mon Sep 17 00:00:00 2001 From: SANGHEEJEONG <147232817+SANGHEEJEONG@users.noreply.github.com> Date: Tue, 19 Nov 2024 03:04:16 +0900 Subject: [PATCH 45/53] =?UTF-8?q?[REFACTOR]=20Ladder=20=ED=81=B4=EB=9E=98?= =?UTF-8?q?=EC=8A=A4=20=EC=B1=85=EC=9E=84=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/controller/LadderController.java | 2 +- src/main/java/domain/Ladder.java | 4 ++++ src/main/java/domain/Players.java | 4 ---- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/src/main/java/controller/LadderController.java b/src/main/java/controller/LadderController.java index 08f4afb9..1828426c 100644 --- a/src/main/java/controller/LadderController.java +++ b/src/main/java/controller/LadderController.java @@ -29,7 +29,7 @@ public Ladder initializeLadder(int width) { } public void playGame(Players players, Ladder ladder) { - players.moveAllPlayers(ladder); + ladder.determineLadderResults(players); } public void displayAllOutput(Players players, ResultTypes resultTypes, Ladder ladder){ diff --git a/src/main/java/domain/Ladder.java b/src/main/java/domain/Ladder.java index 1ed60223..ca718112 100644 --- a/src/main/java/domain/Ladder.java +++ b/src/main/java/domain/Ladder.java @@ -19,6 +19,10 @@ public void createLadder(int width, int height) { } } + public void determineLadderResults(Players players) { + players.getPlayers().forEach(player -> player.moveAlongLadder(lines)); + } + public List getLadder() { return Collections.unmodifiableList(lines); } diff --git a/src/main/java/domain/Players.java b/src/main/java/domain/Players.java index 6234f1a8..f73f31e4 100644 --- a/src/main/java/domain/Players.java +++ b/src/main/java/domain/Players.java @@ -30,10 +30,6 @@ private List createPlayer(List playerNames) { return players; } - public void moveAllPlayers(Ladder ladder) { - players.forEach(player -> player.moveAlongLadder(ladder.getLadder())); - } - public Player findByName(String viewerName) { return players.stream() .filter(player -> player.getPlayerName().equals(viewerName)) From 01b8efec1cdcaf993b139099c8b3e5e3a7ab0a05 Mon Sep 17 00:00:00 2001 From: SANGHEEJEONG <147232817+SANGHEEJEONG@users.noreply.github.com> Date: Tue, 19 Nov 2024 03:14:24 +0900 Subject: [PATCH 46/53] =?UTF-8?q?[REFACTOR]=20decideWhereToGo=20=EB=A9=94?= =?UTF-8?q?=EC=84=9C=EB=93=9C=20line=20=ED=81=B4=EB=9E=98=EC=8A=A4=20?= =?UTF-8?q?=EC=9D=B4=EB=8F=99?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/domain/Line.java | 19 ++++++------ src/main/java/domain/Player.java | 2 +- src/main/java/domain/Position.java | 11 ------- src/test/java/domain/LineTest.java | 49 ++++++++++++++---------------- 4 files changed, 34 insertions(+), 47 deletions(-) diff --git a/src/main/java/domain/Line.java b/src/main/java/domain/Line.java index 99e3d519..110e62d0 100644 --- a/src/main/java/domain/Line.java +++ b/src/main/java/domain/Line.java @@ -18,19 +18,20 @@ public void createLine(int width) { } } - public boolean canMoveRight(int ladderOrder) { - return (ladderOrder < points.size()) && (points.get(ladderOrder).isEnabled()); - } + public void decideWhereToGo(Position position) { + int ladderOrder = position.getPosition(); + + if ((ladderOrder < points.size()) && (points.get(ladderOrder).isEnabled())) { + position.moveRight(points.size()); + return; + } - public boolean canMoveLeft(int ladderOrder) { - return (ladderOrder != 0) && (points.get(ladderOrder - 1).isEnabled()); + if ((ladderOrder != 0) && (points.get(ladderOrder - 1).isEnabled())) { + position.moveLeft(); + } } public List getLine() { return Collections.unmodifiableList(points); } - - public int getSize() { - return points.size(); - } } diff --git a/src/main/java/domain/Player.java b/src/main/java/domain/Player.java index b34dee2c..cd8d262a 100644 --- a/src/main/java/domain/Player.java +++ b/src/main/java/domain/Player.java @@ -13,7 +13,7 @@ public Player(PlayerName name, Position position) { } public void moveAlongLadder(List ladder) { - ladder.forEach(this.position::decideWhereToGo); + ladder.forEach(line -> line.decideWhereToGo(this.position)); } public String getPlayerName() { diff --git a/src/main/java/domain/Position.java b/src/main/java/domain/Position.java index e975f96a..beb01d0b 100644 --- a/src/main/java/domain/Position.java +++ b/src/main/java/domain/Position.java @@ -8,17 +8,6 @@ public Position(int position) { this.position = position; } - public void decideWhereToGo(Line line) { - if (line.canMoveRight(position)) { - moveRight(line.getSize()); - return; - } - - if (line.canMoveLeft(position)) { - moveLeft(); - } - } - public void moveLeft() { if (position == 0){ throw new IllegalStateException("가장 왼쪽 사다리이므로 왼쪽으로 이동이 불가합니다."); diff --git a/src/test/java/domain/LineTest.java b/src/test/java/domain/LineTest.java index c7bf809d..3c76f50f 100644 --- a/src/test/java/domain/LineTest.java +++ b/src/test/java/domain/LineTest.java @@ -1,9 +1,6 @@ package domain; import org.junit.jupiter.api.BeforeEach; -import org.junit.jupiter.api.Test; - -import static org.assertj.core.api.Assertions.assertThat; public class LineTest { @@ -14,27 +11,27 @@ public void setUp() { // line = new Line(List.of(Point.ENABLED, Point.DISABLED, Point.ENABLED)); } - @Test - public void 특정_위치에서_오른쪽으로_이동할_수_있다() { - // 0번째 위치에서 오른쪽으로 이동 가능 여부 확인 - assertThat(line.canMoveRight(0)).isTrue(); - } - - @Test - public void 특정_위치에서_오른쪽으로_이동할_수_없다() { - // 3번째 위치에서 오른쪽으로 이동 불가능 여부 확인 - assertThat(line.canMoveRight(3)).isFalse(); - } - - @Test - public void 특정_위치에서_왼쪽으로_이동할_수_있다() { - // 3번째 위치에서 왼쪽으로 이동 가능 여부 확인 - assertThat(line.canMoveLeft(3)).isTrue(); - } - - @Test - public void 특정_위치에서_왼쪽으로_이동할_수_없다() { - // 0번째 위치에서 왼쪽으로 이동 불가능 여부 확인 - assertThat(line.canMoveLeft(0)).isFalse(); - } +// @Test +// public void 특정_위치에서_오른쪽으로_이동할_수_있다() { +// // 0번째 위치에서 오른쪽으로 이동 가능 여부 확인 +// assertThat(line.canMoveRight(0)).isTrue(); +// } +// +// @Test +// public void 특정_위치에서_오른쪽으로_이동할_수_없다() { +// // 3번째 위치에서 오른쪽으로 이동 불가능 여부 확인 +// assertThat(line.canMoveRight(3)).isFalse(); +// } +// +// @Test +// public void 특정_위치에서_왼쪽으로_이동할_수_있다() { +// // 3번째 위치에서 왼쪽으로 이동 가능 여부 확인 +// assertThat(line.canMoveLeft(3)).isTrue(); +// } +// +// @Test +// public void 특정_위치에서_왼쪽으로_이동할_수_없다() { +// // 0번째 위치에서 왼쪽으로 이동 불가능 여부 확인 +// assertThat(line.canMoveLeft(0)).isFalse(); +// } } From 7cf78a697664f2c0f453205ff866ec52d75bf2f4 Mon Sep 17 00:00:00 2001 From: SANGHEEJEONG <147232817+SANGHEEJEONG@users.noreply.github.com> Date: Tue, 19 Nov 2024 04:22:28 +0900 Subject: [PATCH 47/53] =?UTF-8?q?[REFACTOR]=20Point=20->=20LadderStep=20?= =?UTF-8?q?=EC=9D=B4=EB=A6=84=20=EB=B3=80=EA=B2=BD=20=EB=B0=8F=20=ED=95=99?= =?UTF-8?q?=EC=8A=B5=ED=85=8C=EC=8A=A4=ED=8A=B8(=EC=9D=B5=EB=AA=85=20?= =?UTF-8?q?=ED=81=B4=EB=9E=98=EC=8A=A4=20&=20=EC=9D=B8=ED=84=B0=ED=8E=98?= =?UTF-8?q?=EC=9D=B4=EC=8A=A4)=20=EC=A0=81=EC=9A=A9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/domain/LadderStep.java | 43 ++++++++++++++++++++++++++++ src/main/java/domain/Line.java | 22 ++++++++------ src/main/java/domain/Point.java | 39 ------------------------- src/main/java/view/OutputView.java | 8 +++--- 4 files changed, 60 insertions(+), 52 deletions(-) create mode 100644 src/main/java/domain/LadderStep.java delete mode 100644 src/main/java/domain/Point.java diff --git a/src/main/java/domain/LadderStep.java b/src/main/java/domain/LadderStep.java new file mode 100644 index 00000000..e88c5231 --- /dev/null +++ b/src/main/java/domain/LadderStep.java @@ -0,0 +1,43 @@ +package domain; + +import java.util.List; +import java.util.function.Function; + +public enum LadderStep { + CONNECTED { + @Override + public boolean canMove() { + return true; + } + + @Override + public LadderStep nextStep(List line, int lineIndex) { + return NOT_CONNECTED; + } + }, + NOT_CONNECTED { + @Override + public boolean canMove() { + return false; + } + + @Override + public LadderStep nextStep(List line, int lineIndex) { + return FROM_BOOLEAN.apply(randomTrueOrFalse()); + } + }; + + public abstract boolean canMove(); + public abstract LadderStep nextStep(List line, int lineIndex); + + public static final Function FROM_BOOLEAN = value -> { + if (value) { + return CONNECTED; + } + return NOT_CONNECTED; + }; + + static boolean randomTrueOrFalse() { + return Math.random() < 0.5; + } +} diff --git a/src/main/java/domain/Line.java b/src/main/java/domain/Line.java index 110e62d0..9a79731b 100644 --- a/src/main/java/domain/Line.java +++ b/src/main/java/domain/Line.java @@ -4,34 +4,38 @@ import java.util.Collections; import java.util.List; +import static domain.LadderStep.randomTrueOrFalse; + public class Line { - private final List points; + private final List ladderSteps; public Line(int width) { - this.points = new ArrayList<>(); + this.ladderSteps = new ArrayList<>(); createLine(width); } public void createLine(int width) { - for (int i = 0; i < width - 1; i++) { - points.add(Point.createPoint(points, i)); + ladderSteps.add(LadderStep.FROM_BOOLEAN.apply(randomTrueOrFalse())); + + for (int i = 1; i < width - 1; i++) { + ladderSteps.add(ladderSteps.get(i - 1).nextStep(ladderSteps, i)); } } public void decideWhereToGo(Position position) { int ladderOrder = position.getPosition(); - if ((ladderOrder < points.size()) && (points.get(ladderOrder).isEnabled())) { - position.moveRight(points.size()); + if ((ladderOrder < ladderSteps.size()) && (ladderSteps.get(ladderOrder).canMove())) { + position.moveRight(ladderSteps.size()); return; } - if ((ladderOrder != 0) && (points.get(ladderOrder - 1).isEnabled())) { + if ((ladderOrder != 0) && (ladderSteps.get(ladderOrder - 1).canMove())) { position.moveLeft(); } } - public List getLine() { - return Collections.unmodifiableList(points); + public List getLine() { + return Collections.unmodifiableList(ladderSteps); } } diff --git a/src/main/java/domain/Point.java b/src/main/java/domain/Point.java deleted file mode 100644 index 604ea6fd..00000000 --- a/src/main/java/domain/Point.java +++ /dev/null @@ -1,39 +0,0 @@ -package domain; - -import java.util.List; -import java.util.function.Function; - -public enum Point { - ENABLED(true), - DISABLED(false); - - private final boolean enabled; - - // 생성자를 통해 상태를 설정 - Point(boolean enabled) { - this.enabled = enabled; - } - - public boolean isEnabled() { - return enabled; - } - - private static boolean randomTrueOrFalse() { - return Math.random() < 0.5; // 0.0(포함) - 1.0(미포함) 사이의 랜덤한 실수 반환 - } - - public static Point createPoint(List line, int lineIndex) { - if (lineIndex != 0 && line.get(lineIndex - 1).isEnabled()) { // 이전 값이 true 면 false 반환 - return Point.DISABLED; - } - - return Point.FROM_BOOLEAN.apply(randomTrueOrFalse()); - } - - public static final Function FROM_BOOLEAN = value -> { - if (value) { - return ENABLED; - } - return DISABLED; - }; -} diff --git a/src/main/java/view/OutputView.java b/src/main/java/view/OutputView.java index 87537daa..076a5da5 100644 --- a/src/main/java/view/OutputView.java +++ b/src/main/java/view/OutputView.java @@ -1,10 +1,10 @@ package view; import domain.Ladder; +import domain.LadderStep; import domain.Line; import domain.Player; import domain.Players; -import domain.Point; import java.util.List; @@ -17,15 +17,15 @@ public static void printPlayers(Players players) { System.out.println(); } - private static String changeValueToView(Point point) { - if (point.isEnabled()) + private static String changeValueToView(LadderStep ladderStep) { + if (ladderStep.canMove()) return "-----"; return " "; } private static void drawLine(Line line) { - line.getLine().forEach(point -> System.out.print("|" + changeValueToView(point))); + line.getLine().forEach(ladderStep -> System.out.print("|" + changeValueToView(ladderStep))); System.out.println("|"); } From 174ff32831ff39cd887a1e9044d3e5e46135bd29 Mon Sep 17 00:00:00 2001 From: SANGHEEJEONG <147232817+SANGHEEJEONG@users.noreply.github.com> Date: Tue, 19 Nov 2024 15:13:43 +0900 Subject: [PATCH 48/53] =?UTF-8?q?[REFACTOR]=20nextStep=20=EB=AF=B8?= =?UTF-8?q?=EC=82=AC=EC=9A=A9=20=EC=9D=B8=EC=9E=90=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/domain/LadderStep.java | 7 +++---- src/main/java/domain/Line.java | 2 +- 2 files changed, 4 insertions(+), 5 deletions(-) diff --git a/src/main/java/domain/LadderStep.java b/src/main/java/domain/LadderStep.java index e88c5231..44b04db6 100644 --- a/src/main/java/domain/LadderStep.java +++ b/src/main/java/domain/LadderStep.java @@ -1,6 +1,5 @@ package domain; -import java.util.List; import java.util.function.Function; public enum LadderStep { @@ -11,7 +10,7 @@ public boolean canMove() { } @Override - public LadderStep nextStep(List line, int lineIndex) { + public LadderStep nextStep() { return NOT_CONNECTED; } }, @@ -22,13 +21,13 @@ public boolean canMove() { } @Override - public LadderStep nextStep(List line, int lineIndex) { + public LadderStep nextStep() { return FROM_BOOLEAN.apply(randomTrueOrFalse()); } }; public abstract boolean canMove(); - public abstract LadderStep nextStep(List line, int lineIndex); + public abstract LadderStep nextStep(); public static final Function FROM_BOOLEAN = value -> { if (value) { diff --git a/src/main/java/domain/Line.java b/src/main/java/domain/Line.java index 9a79731b..cf7ac1a6 100644 --- a/src/main/java/domain/Line.java +++ b/src/main/java/domain/Line.java @@ -18,7 +18,7 @@ public void createLine(int width) { ladderSteps.add(LadderStep.FROM_BOOLEAN.apply(randomTrueOrFalse())); for (int i = 1; i < width - 1; i++) { - ladderSteps.add(ladderSteps.get(i - 1).nextStep(ladderSteps, i)); + ladderSteps.add(ladderSteps.get(i - 1).nextStep()); } } From 6b260304ee2c7e2950b08dc73fd699e6b61ca101 Mon Sep 17 00:00:00 2001 From: SANGHEEJEONG <147232817+SANGHEEJEONG@users.noreply.github.com> Date: Wed, 20 Nov 2024 02:39:50 +0900 Subject: [PATCH 49/53] =?UTF-8?q?[REFACTOR]=20=EB=8F=99=EB=AA=85=EC=9D=B4?= =?UTF-8?q?=EC=9D=B8=20=EC=98=88=EC=99=B8=20=EC=B2=98=EB=A6=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/domain/Players.java | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/src/main/java/domain/Players.java b/src/main/java/domain/Players.java index f73f31e4..c2af407f 100644 --- a/src/main/java/domain/Players.java +++ b/src/main/java/domain/Players.java @@ -2,8 +2,10 @@ import java.util.ArrayList; import java.util.Collections; +import java.util.HashSet; import java.util.List; import java.util.NoSuchElementException; +import java.util.Set; public class Players { @@ -12,6 +14,7 @@ public class Players { public Players(List playerNames) { validateSize(playerNames); + validateDuplicateName(playerNames); this.players = createPlayer(playerNames); } @@ -21,6 +24,14 @@ private void validateSize(List playerNames) { } } + private void validateDuplicateName(List playerNames) { + Set playerNamesSet = new HashSet<>(playerNames); + + if (playerNames.size() != playerNamesSet.size()) { + throw new IllegalArgumentException("동명이인인 플레이어가 존재합니다."); + } + } + private List createPlayer(List playerNames) { List players = new ArrayList<>(); for (int i = 0; i < playerNames.size(); i++) { From 1d96fb1100f10c38553de3ea5d3bc045d9a69773 Mon Sep 17 00:00:00 2001 From: SANGHEEJEONG <147232817+SANGHEEJEONG@users.noreply.github.com> Date: Wed, 20 Nov 2024 14:28:14 +0900 Subject: [PATCH 50/53] =?UTF-8?q?[REFACTOR]=20PlayerName=20VO=EB=A1=9C=20?= =?UTF-8?q?=EB=A7=8C=EB=93=A4=EA=B8=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/domain/Player.java | 2 +- src/main/java/domain/PlayerName.java | 20 +++++++++++++++++++- src/main/java/domain/Players.java | 4 +++- 3 files changed, 23 insertions(+), 3 deletions(-) diff --git a/src/main/java/domain/Player.java b/src/main/java/domain/Player.java index cd8d262a..d47a4d46 100644 --- a/src/main/java/domain/Player.java +++ b/src/main/java/domain/Player.java @@ -16,7 +16,7 @@ public void moveAlongLadder(List ladder) { ladder.forEach(line -> line.decideWhereToGo(this.position)); } - public String getPlayerName() { + public PlayerName getPlayerName() { return playerName.getName(); } diff --git a/src/main/java/domain/PlayerName.java b/src/main/java/domain/PlayerName.java index 7d760c43..b1e69602 100644 --- a/src/main/java/domain/PlayerName.java +++ b/src/main/java/domain/PlayerName.java @@ -35,7 +35,25 @@ private void validateNotEqualAll(String name) { } } - public String getName() { + @Override + public boolean equals(Object o) { + if (this == o) return true; // 메모리 주소 비교 + if (o == null || getClass() != o.getClass()) return false; + PlayerName that = (PlayerName) o; + return name.equals(that.name); + } + + @Override + public int hashCode() { + return name.hashCode(); + } + + @Override + public String toString() { return name; } + + public PlayerName getName() { + return this; + } } diff --git a/src/main/java/domain/Players.java b/src/main/java/domain/Players.java index c2af407f..7c72bf70 100644 --- a/src/main/java/domain/Players.java +++ b/src/main/java/domain/Players.java @@ -42,8 +42,10 @@ private List createPlayer(List playerNames) { } public Player findByName(String viewerName) { + PlayerName playerName = new PlayerName(viewerName); + return players.stream() - .filter(player -> player.getPlayerName().equals(viewerName)) + .filter(player -> player.getPlayerName().equals(playerName)) .findFirst() .orElseThrow(() -> new NoSuchElementException("플레이어 이름 '" + viewerName + "' 이 존재하지 않습니다.")); } From 0bd19288094e7b489df7a9a6da6e7993d4107d75 Mon Sep 17 00:00:00 2001 From: SANGHEEJEONG <147232817+SANGHEEJEONG@users.noreply.github.com> Date: Wed, 20 Nov 2024 18:28:50 +0900 Subject: [PATCH 51/53] =?UTF-8?q?[REFACTOR]=20test=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/domain/LadderStep.java | 2 +- src/main/java/domain/PlayerName.java | 2 +- src/test/java/domain/LadderStepTest.java | 66 ++++++++++++++++++++++++ src/test/java/domain/LineTest.java | 37 ------------- src/test/java/domain/PlayerNameTest.java | 22 ++++++-- 5 files changed, 87 insertions(+), 42 deletions(-) create mode 100644 src/test/java/domain/LadderStepTest.java delete mode 100644 src/test/java/domain/LineTest.java diff --git a/src/main/java/domain/LadderStep.java b/src/main/java/domain/LadderStep.java index 44b04db6..c2d21b40 100644 --- a/src/main/java/domain/LadderStep.java +++ b/src/main/java/domain/LadderStep.java @@ -36,7 +36,7 @@ public LadderStep nextStep() { return NOT_CONNECTED; }; - static boolean randomTrueOrFalse() { + public static boolean randomTrueOrFalse() { return Math.random() < 0.5; } } diff --git a/src/main/java/domain/PlayerName.java b/src/main/java/domain/PlayerName.java index b1e69602..1f678ba4 100644 --- a/src/main/java/domain/PlayerName.java +++ b/src/main/java/domain/PlayerName.java @@ -12,8 +12,8 @@ public PlayerName(String name) { } private void validateName(String name) { - validateMaxLength(name); validateNotBlank(name); + validateMaxLength(name); validateNotEqualAll(name); } diff --git a/src/test/java/domain/LadderStepTest.java b/src/test/java/domain/LadderStepTest.java new file mode 100644 index 00000000..8181224b --- /dev/null +++ b/src/test/java/domain/LadderStepTest.java @@ -0,0 +1,66 @@ +package domain; + +import org.junit.jupiter.api.Test; + +import static org.assertj.core.api.Assertions.assertThat; + +public class LadderStepTest { + + @Test + public void CONNECTED는_이동_가능하다() { + LadderStep step = LadderStep.CONNECTED; + + boolean canMove = step.canMove(); + + assertThat(canMove).isTrue(); + } + + @Test + public void NOT_CONNECTED는_이동_불가능하다() { + LadderStep step = LadderStep.NOT_CONNECTED; + + boolean canMove = step.canMove(); + + assertThat(canMove).isFalse(); + } + + @Test + public void CONNECTED에서_nextStep은_NOT_CONNECTED으로_변경된다() { + LadderStep step = LadderStep.CONNECTED; + + LadderStep nextStep = step.nextStep(); + + assertThat(nextStep).isEqualTo(LadderStep.NOT_CONNECTED); + } + + @Test + public void NOT_CONNECTED에서_nextStep은_랜덤값에_따라_결정된다() { + LadderStep step = LadderStep.NOT_CONNECTED; + + LadderStep nextStep = step.nextStep(); + + assertThat(nextStep).isIn(LadderStep.CONNECTED, LadderStep.NOT_CONNECTED); + } + + @Test + public void randomTrueOrFalse는_true를_반환할_수_있다() { + boolean hasReturnedTrue; + + do { + hasReturnedTrue = LadderStep.randomTrueOrFalse(); + } while (!hasReturnedTrue); + + assertThat(hasReturnedTrue).isTrue(); + } + + @Test + public void randomTrueOrFalse는_false를_반환할_수_있다() { + boolean hasReturnedTrue; + + do { + hasReturnedTrue = LadderStep.randomTrueOrFalse(); + } while (hasReturnedTrue); + + assertThat(hasReturnedTrue).isFalse(); + } +} diff --git a/src/test/java/domain/LineTest.java b/src/test/java/domain/LineTest.java deleted file mode 100644 index 3c76f50f..00000000 --- a/src/test/java/domain/LineTest.java +++ /dev/null @@ -1,37 +0,0 @@ -package domain; - -import org.junit.jupiter.api.BeforeEach; - -public class LineTest { - - private Line line; - - @BeforeEach - public void setUp() { - // line = new Line(List.of(Point.ENABLED, Point.DISABLED, Point.ENABLED)); - } - -// @Test -// public void 특정_위치에서_오른쪽으로_이동할_수_있다() { -// // 0번째 위치에서 오른쪽으로 이동 가능 여부 확인 -// assertThat(line.canMoveRight(0)).isTrue(); -// } -// -// @Test -// public void 특정_위치에서_오른쪽으로_이동할_수_없다() { -// // 3번째 위치에서 오른쪽으로 이동 불가능 여부 확인 -// assertThat(line.canMoveRight(3)).isFalse(); -// } -// -// @Test -// public void 특정_위치에서_왼쪽으로_이동할_수_있다() { -// // 3번째 위치에서 왼쪽으로 이동 가능 여부 확인 -// assertThat(line.canMoveLeft(3)).isTrue(); -// } -// -// @Test -// public void 특정_위치에서_왼쪽으로_이동할_수_없다() { -// // 0번째 위치에서 왼쪽으로 이동 불가능 여부 확인 -// assertThat(line.canMoveLeft(0)).isFalse(); -// } -} diff --git a/src/test/java/domain/PlayerNameTest.java b/src/test/java/domain/PlayerNameTest.java index e4674ace..922172d3 100644 --- a/src/test/java/domain/PlayerNameTest.java +++ b/src/test/java/domain/PlayerNameTest.java @@ -10,13 +10,13 @@ public class PlayerNameTest { @Test public void 유효한_이름으로_생성된다() { PlayerName name = new PlayerName("Test"); - assertThat(name.getName()).isEqualTo("Test"); + assertThat(name.toString()).isEqualTo("Test"); } @Test public void 이름이_공백이면_예외를_던진다() { assertThatExceptionOfType(IllegalArgumentException.class) - .isThrownBy(() -> new PlayerName(" ")) + .isThrownBy(() -> new PlayerName(" ")) .withMessage("이름은 공백일 수 없습니다."); } @@ -37,6 +37,22 @@ public class PlayerNameTest { @Test public void 이름이_5자_이하의_경우_정상_생성된다() { PlayerName name = new PlayerName("Test"); - assertThat(name.getName()).isEqualTo("Test"); + assertThat(name.toString()).isEqualTo("Test"); + } + + @Test + public void 같은_이름은_같은_객체로_취급된다() { + PlayerName name1 = new PlayerName("Test"); + PlayerName name2 = new PlayerName("Test"); + + assertThat(name1).isEqualTo(name2); + } + + @Test + public void 다른_이름은_다른_객체로_취급된다() { + PlayerName name1 = new PlayerName("Test1"); + PlayerName name2 = new PlayerName("Test2"); + + assertThat(name1).isNotEqualTo(name2); } } From 76e1d31b7a7b7268f219f1134e047047e3d94d71 Mon Sep 17 00:00:00 2001 From: SANGHEEJEONG <147232817+SANGHEEJEONG@users.noreply.github.com> Date: Thu, 21 Nov 2024 00:40:51 +0900 Subject: [PATCH 52/53] =?UTF-8?q?[REFACTOR]=20test=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/domain/Line.java | 12 ++++++-- src/test/java/domain/LineTest.java | 44 +++++++++++++++++++++++++++ src/test/java/domain/PlayersTest.java | 15 +++++---- 3 files changed, 63 insertions(+), 8 deletions(-) create mode 100644 src/test/java/domain/LineTest.java diff --git a/src/main/java/domain/Line.java b/src/main/java/domain/Line.java index cf7ac1a6..d47132a7 100644 --- a/src/main/java/domain/Line.java +++ b/src/main/java/domain/Line.java @@ -25,16 +25,24 @@ public void createLine(int width) { public void decideWhereToGo(Position position) { int ladderOrder = position.getPosition(); - if ((ladderOrder < ladderSteps.size()) && (ladderSteps.get(ladderOrder).canMove())) { + if (canMoveRight(ladderOrder)) { position.moveRight(ladderSteps.size()); return; } - if ((ladderOrder != 0) && (ladderSteps.get(ladderOrder - 1).canMove())) { + if (canMoveLeft(ladderOrder)) { position.moveLeft(); } } + private boolean canMoveRight(int ladderOrder) { + return ladderOrder < ladderSteps.size() && ladderSteps.get(ladderOrder).canMove(); + } + + private boolean canMoveLeft(int ladderOrder) { + return ladderOrder != 0 && ladderSteps.get(ladderOrder - 1).canMove(); + } + public List getLine() { return Collections.unmodifiableList(ladderSteps); } diff --git a/src/test/java/domain/LineTest.java b/src/test/java/domain/LineTest.java new file mode 100644 index 00000000..979886a4 --- /dev/null +++ b/src/test/java/domain/LineTest.java @@ -0,0 +1,44 @@ +package domain; + +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; + +import java.lang.reflect.Field; +import java.util.Arrays; +import java.util.List; + +import static org.junit.jupiter.api.Assertions.assertEquals; + +class LineTest { + + private Line line; + + @BeforeEach + void 설정() throws Exception { + line = new Line(3); + + Field ladderStepsField = Line.class.getDeclaredField("ladderSteps"); + ladderStepsField.setAccessible(true); + + List fixedSteps = Arrays.asList( + LadderStep.CONNECTED, + LadderStep.NOT_CONNECTED, + LadderStep.CONNECTED + ); + ladderStepsField.set(line, fixedSteps); + } + + @Test + void 오른쪽으로_이동_테스트() { + Position position = new Position(0); + line.decideWhereToGo(position); + assertEquals(1, position.getPosition()); + } + + @Test + void 왼쪽으로_이동_테스트() { + Position position = new Position(3); + line.decideWhereToGo(position); + assertEquals(2, position.getPosition()); + } +} diff --git a/src/test/java/domain/PlayersTest.java b/src/test/java/domain/PlayersTest.java index 80998051..fc4ddee5 100644 --- a/src/test/java/domain/PlayersTest.java +++ b/src/test/java/domain/PlayersTest.java @@ -7,6 +7,7 @@ import static org.assertj.core.api.Assertions.assertThat; import static org.assertj.core.api.Assertions.assertThatThrownBy; +import static org.junit.jupiter.api.Assertions.assertAll; public class PlayersTest { @@ -15,9 +16,11 @@ public class PlayersTest { List playerNames = List.of("Test1", "Test2"); Players players = new Players(playerNames); - assertThat(players.getPlayersSize()).isEqualTo(2); - assertThat(players.getPlayers().get(0).getPlayerName()).isEqualTo("Test1"); - assertThat(players.getPlayers().get(1).getPlayerName()).isEqualTo("Test2"); + assertAll( + () -> assertThat(players.getPlayersSize()).isEqualTo(2), + () -> assertThat(players.getPlayers().get(0).getPlayerName().toString()).isEqualTo("Test1"), + () -> assertThat(players.getPlayers().get(1).getPlayerName().toString()).isEqualTo("Test2") + ); } @Test @@ -41,10 +44,10 @@ public class PlayersTest { @Test public void 존재하는_플레이어를_정상적으로_찾는다() { - List playerNames = List.of("Test", "Test"); + List playerNames = List.of("Test1", "Test2"); Players players = new Players(playerNames); - Player foundPlayer = players.findByName("Test"); - assertThat(foundPlayer.getPlayerName()).isEqualTo("Test"); + Player foundPlayer = players.findByName("Test1"); + assertThat(foundPlayer.getPlayerName().toString()).isEqualTo("Test1"); } } From 6473ccaa1666ab1b7c9934c91bd721f54749f0c8 Mon Sep 17 00:00:00 2001 From: SANGHEEJEONG <147232817+SANGHEEJEONG@users.noreply.github.com> Date: Thu, 21 Nov 2024 00:42:43 +0900 Subject: [PATCH 53/53] =?UTF-8?q?[REFACTOR]=20=EC=BD=94=EB=93=9C=20?= =?UTF-8?q?=EC=A0=95=EB=A0=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/controller/LadderController.java | 2 +- src/main/java/domain/LadderStep.java | 1 + src/main/java/domain/Position.java | 4 +- src/test/java/domain/LadderTest.java | 39 +++++++++++++++++++ 4 files changed, 43 insertions(+), 3 deletions(-) create mode 100644 src/test/java/domain/LadderTest.java diff --git a/src/main/java/controller/LadderController.java b/src/main/java/controller/LadderController.java index 1828426c..a13eb5ed 100644 --- a/src/main/java/controller/LadderController.java +++ b/src/main/java/controller/LadderController.java @@ -32,7 +32,7 @@ public void playGame(Players players, Ladder ladder) { ladder.determineLadderResults(players); } - public void displayAllOutput(Players players, ResultTypes resultTypes, Ladder ladder){ + public void displayAllOutput(Players players, ResultTypes resultTypes, Ladder ladder) { displayLadder(players, resultTypes, ladder); displayResults(resultTypes, players); } diff --git a/src/main/java/domain/LadderStep.java b/src/main/java/domain/LadderStep.java index c2d21b40..c4d6a526 100644 --- a/src/main/java/domain/LadderStep.java +++ b/src/main/java/domain/LadderStep.java @@ -27,6 +27,7 @@ public LadderStep nextStep() { }; public abstract boolean canMove(); + public abstract LadderStep nextStep(); public static final Function FROM_BOOLEAN = value -> { diff --git a/src/main/java/domain/Position.java b/src/main/java/domain/Position.java index beb01d0b..d1c0e408 100644 --- a/src/main/java/domain/Position.java +++ b/src/main/java/domain/Position.java @@ -9,14 +9,14 @@ public Position(int position) { } public void moveLeft() { - if (position == 0){ + if (position == 0) { throw new IllegalStateException("가장 왼쪽 사다리이므로 왼쪽으로 이동이 불가합니다."); } position--; } public void moveRight(int maxPosition) { - if (position == maxPosition){ + if (position == maxPosition) { throw new IllegalStateException("가장 오른쪽 사다리이므로 오른쪽으로 이동이 불가합니다."); } position++; diff --git a/src/test/java/domain/LadderTest.java b/src/test/java/domain/LadderTest.java new file mode 100644 index 00000000..06457f58 --- /dev/null +++ b/src/test/java/domain/LadderTest.java @@ -0,0 +1,39 @@ +package domain; + +import org.junit.jupiter.api.Test; + +import java.util.List; + +import static org.assertj.core.api.Assertions.assertThat; + +public class LadderTest { + + @Test + public void 사다리_생성_테스트() { + int playerSize = 5; + int width = 4; + int height = 3; + + Ladder ladder = new Ladder(playerSize, height); + List lines = ladder.getLadder(); + + assertThat(lines).hasSize(height); + lines.forEach(line -> assertThat(line.getLine()).hasSize(width)); + } + + + @Test + public void 사다리_결과가_사다리_범위_안에_존재해야_한다() { + int width = 5; + int height = 3; + + Ladder ladder = new Ladder(width, height); + Players players = new Players(List.of("A", "B")); + + ladder.determineLadderResults(players); + + players.getPlayers().forEach(player -> + assertThat(player.getPosition()).isGreaterThanOrEqualTo(0).isLessThan(width) + ); + } +}