From 022c735d485a24b324d543ec561216caa7eeb595 Mon Sep 17 00:00:00 2001 From: mjung1798 Date: Sat, 27 Apr 2019 21:34:48 +0900 Subject: [PATCH 01/14] init --- src/test/java/BridgeTest.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/test/java/BridgeTest.java b/src/test/java/BridgeTest.java index a5dcb6a..a603301 100644 --- a/src/test/java/BridgeTest.java +++ b/src/test/java/BridgeTest.java @@ -17,7 +17,7 @@ public class BridgeTest { Bridge firstBridge = new Bridge(height, Arrays.asList(leftPoint,rightPoint)); //when //then - assertEquals(firstBridge.nextPoint(currentColumn),rightPoint); +// assertEquals(firstBridge.nextPoint(currentColumn),rightPoint); assertEquals(firstBridge.nextPoint(1),leftPoint); } From b8d504200678c150238300926d368d3e6c1cec77 Mon Sep 17 00:00:00 2001 From: mjung1798 Date: Sat, 27 Apr 2019 23:49:28 +0900 Subject: [PATCH 02/14] setting initial design --- src/main/java/Bridge.java | 46 ++++++++++++++++++++--------------- src/main/java/Ladder.java | 2 ++ src/main/java/Pillar.java | 18 ++++++++++++++ src/main/java/Point.java | 30 ----------------------- src/test/java/BridgeTest.java | 27 +++++++------------- src/test/java/PointTest.java | 21 ---------------- 6 files changed, 55 insertions(+), 89 deletions(-) create mode 100644 src/main/java/Ladder.java create mode 100644 src/main/java/Pillar.java delete mode 100644 src/main/java/Point.java delete mode 100644 src/test/java/PointTest.java diff --git a/src/main/java/Bridge.java b/src/main/java/Bridge.java index 1c7e4a2..72616f8 100644 --- a/src/main/java/Bridge.java +++ b/src/main/java/Bridge.java @@ -1,26 +1,32 @@ -import java.util.List; +public class Bridge { + private Integer location; + private LinkedType linkPillarDirection; -public class -Bridge { - private Integer height; - private List points; - - public Bridge(Integer height, List points) { - this.height = height; - this.points = points; + public Bridge(Integer location, LinkedType linkPillarDirection) { + this.location = location; + this.linkPillarDirection = linkPillarDirection; } - public Point nextPoint(int currentColumn) { - Point point = points.get(currentColumn); - if (point.getLinkedType() == LinkedType.RIGHT) { - Point nextPoint = points.get(currentColumn + 1); - return nextPoint; - } - if (point.getLinkedType() == LinkedType.LEFT) { - Point nextPoint = points.get(currentColumn-1); - return nextPoint; - } - return point; + public Integer getLocation() { + return location; + } + + public LinkedType getLinkPillarDirection() { + return linkPillarDirection; } + +// public Point nextPoint(int currentColumn) { +// Point point = points.get(currentColumn); +// if (point.getLinkedType() == LinkedType.RIGHT) { +// Point nextPoint = points.get(currentColumn + 1); +// return nextPoint; +// } +// if (point.getLinkedType() == LinkedType.LEFT) { +// Point nextPoint = points.get(currentColumn-1); +// return nextPoint; +// } +// +// return point; +// } } diff --git a/src/main/java/Ladder.java b/src/main/java/Ladder.java new file mode 100644 index 0000000..d5dfdb0 --- /dev/null +++ b/src/main/java/Ladder.java @@ -0,0 +1,2 @@ +public class Ladder { +} diff --git a/src/main/java/Pillar.java b/src/main/java/Pillar.java new file mode 100644 index 0000000..c10093f --- /dev/null +++ b/src/main/java/Pillar.java @@ -0,0 +1,18 @@ +import java.util.List; + +public class Pillar { + private List bridges; + private Integer pillarNum; + + public Pillar(Integer pillarNum){ + + } + + private void createOneRightBridege(Integer location){ + Bridge bridge = new Bridge(location, LinkedType.RIGHT); + } + + private void createOneLeftBridege(Integer location){ + Bridge bridge = new Bridge(location, LinkedType.LEFT); + } +} \ No newline at end of file diff --git a/src/main/java/Point.java b/src/main/java/Point.java deleted file mode 100644 index d5cc9b7..0000000 --- a/src/main/java/Point.java +++ /dev/null @@ -1,30 +0,0 @@ -public class Point { - private Integer column; - private LinkedType linkedType; - - private Point(Integer column,LinkedType linkedType) { - this.column = column; - this.linkedType = linkedType; - } - - public LinkedType getLinkedType() { - return linkedType; - } - - public int getColumn() { - return column; - } - - public static Point createRightLinkedPoint(Integer column){ - return new Point(column,LinkedType.RIGHT); - } - - public static Point createLeftLinkedPoint(Integer column){ - return new Point(column,LinkedType.LEFT); - } - - public static Point createNotLinkedPoint(Integer column){ - return new Point(column,LinkedType.NONE); - } - -} diff --git a/src/test/java/BridgeTest.java b/src/test/java/BridgeTest.java index a603301..53d77d5 100644 --- a/src/test/java/BridgeTest.java +++ b/src/test/java/BridgeTest.java @@ -1,30 +1,21 @@ import org.junit.Test; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.List; - import static org.junit.Assert.*; public class BridgeTest { @Test - public void 첫번째_브릿지_생성하기() { - //given - Integer height = 1; - Point leftPoint = Point.createRightLinkedPoint(1); - Point rightPoint = Point.createLeftLinkedPoint(2); - Bridge firstBridge = new Bridge(height, Arrays.asList(leftPoint,rightPoint)); - //when - //then -// assertEquals(firstBridge.nextPoint(currentColumn),rightPoint); - assertEquals(firstBridge.nextPoint(1),leftPoint); + public void 오른쪽_기둥_연결_bridge_생성하기() { + Bridge bridge = new Bridge(1, LinkedType.RIGHT); + assertEquals(LinkedType.RIGHT, bridge.getLinkPillarDirection()); } @Test - public void 첫번쨰_브릿지_연결안된거() { - //given - //when - //then + public void 왼쪽_기둥_연결_bridge_생성하기() { + Bridge bridge = new Bridge(1, LinkedType.LEFT); + assertEquals(LinkedType.LEFT, bridge.getLinkPillarDirection()); } + + + } \ No newline at end of file diff --git a/src/test/java/PointTest.java b/src/test/java/PointTest.java deleted file mode 100644 index 3a83228..0000000 --- a/src/test/java/PointTest.java +++ /dev/null @@ -1,21 +0,0 @@ -import org.junit.Test; - -import static org.junit.Assert.*; - -public class PointTest { - - @Test - public void 오른쪽_연결된_포인트_생성하기() { - assertEquals(Point.createRightLinkedPoint(1).getLinkedType(),LinkedType.RIGHT); - } - - @Test - public void 왼쪽_연결된_포인트_생성하기() { - assertEquals(Point.createLeftLinkedPoint(2).getLinkedType(),LinkedType.LEFT); - } - - @Test - public void 연결안된_포인트_생성하기() { - assertEquals(Point.createNotLinkedPoint(1).getLinkedType(),LinkedType.NONE); - } -} \ No newline at end of file From 7d627680277439a4639f0065683dda571c1f8bee Mon Sep 17 00:00:00 2001 From: mjung1798 Date: Tue, 30 Apr 2019 22:40:11 +0900 Subject: [PATCH 03/14] ladder game first --- src/main/java/Ladder.java | 2 - src/main/java/Pillar.java | 18 ------ src/main/java/data/InputDatas.java | 20 ++++++ src/main/java/{ => domain}/Bridge.java | 2 + src/main/java/domain/Ladder.java | 32 +++++++++ src/main/java/{ => domain}/LadderGame.java | 2 + src/main/java/{ => domain}/LinkedType.java | 2 + src/main/java/domain/Pillar.java | 75 ++++++++++++++++++++++ src/main/java/util/Util.java | 18 ++++++ src/main/java/view/InputView.java | 4 ++ src/main/java/view/OutputView.java | 4 ++ src/test/java/BridgeTest.java | 2 + src/test/java/LadderTest.java | 22 +++++++ src/test/java/PillarTest.java | 56 ++++++++++++++++ src/test/java/UtilTest.java | 14 ++++ 15 files changed, 253 insertions(+), 20 deletions(-) delete mode 100644 src/main/java/Ladder.java delete mode 100644 src/main/java/Pillar.java create mode 100644 src/main/java/data/InputDatas.java rename src/main/java/{ => domain}/Bridge.java (98%) create mode 100644 src/main/java/domain/Ladder.java rename src/main/java/{ => domain}/LadderGame.java (63%) rename src/main/java/{ => domain}/LinkedType.java (73%) create mode 100644 src/main/java/domain/Pillar.java create mode 100644 src/main/java/util/Util.java create mode 100644 src/main/java/view/InputView.java create mode 100644 src/main/java/view/OutputView.java create mode 100644 src/test/java/LadderTest.java create mode 100644 src/test/java/PillarTest.java create mode 100644 src/test/java/UtilTest.java diff --git a/src/main/java/Ladder.java b/src/main/java/Ladder.java deleted file mode 100644 index d5dfdb0..0000000 --- a/src/main/java/Ladder.java +++ /dev/null @@ -1,2 +0,0 @@ -public class Ladder { -} diff --git a/src/main/java/Pillar.java b/src/main/java/Pillar.java deleted file mode 100644 index c10093f..0000000 --- a/src/main/java/Pillar.java +++ /dev/null @@ -1,18 +0,0 @@ -import java.util.List; - -public class Pillar { - private List bridges; - private Integer pillarNum; - - public Pillar(Integer pillarNum){ - - } - - private void createOneRightBridege(Integer location){ - Bridge bridge = new Bridge(location, LinkedType.RIGHT); - } - - private void createOneLeftBridege(Integer location){ - Bridge bridge = new Bridge(location, LinkedType.LEFT); - } -} \ No newline at end of file diff --git a/src/main/java/data/InputDatas.java b/src/main/java/data/InputDatas.java new file mode 100644 index 0000000..3e849e7 --- /dev/null +++ b/src/main/java/data/InputDatas.java @@ -0,0 +1,20 @@ +package data; + +public class InputDatas { + + private int pillarCount; + private int ladderHeight; + + public InputDatas(int pillarCount, int ladderHeight) { + this.pillarCount = pillarCount; + this.ladderHeight = ladderHeight; + } + + public int getPillarCount() { + return pillarCount; + } + + public int getLadderHeight() { + return ladderHeight; + } +} diff --git a/src/main/java/Bridge.java b/src/main/java/domain/Bridge.java similarity index 98% rename from src/main/java/Bridge.java rename to src/main/java/domain/Bridge.java index 72616f8..326f2a4 100644 --- a/src/main/java/Bridge.java +++ b/src/main/java/domain/Bridge.java @@ -1,3 +1,5 @@ +package domain; + public class Bridge { private Integer location; private LinkedType linkPillarDirection; diff --git a/src/main/java/domain/Ladder.java b/src/main/java/domain/Ladder.java new file mode 100644 index 0000000..29096d6 --- /dev/null +++ b/src/main/java/domain/Ladder.java @@ -0,0 +1,32 @@ +package domain; + +import java.util.List; + +public class Ladder { + + private List pillars; + private Integer size; + + public static final int MINIMUM_PILLAR_NUM = 1; + + public List getPillars() { + return pillars; + } + + public Integer getCountOfPillars(){ + return pillars.size(); + } + + public Integer getSize() { + return size; + } + + public Pillar getPreviousPillar(int pillarNum){ +// if(MINIMUM_PILLAR_NUM > pillarNum) +// return ; + return null; + } + + + +} diff --git a/src/main/java/LadderGame.java b/src/main/java/domain/LadderGame.java similarity index 63% rename from src/main/java/LadderGame.java rename to src/main/java/domain/LadderGame.java index c8265a2..64bcce9 100644 --- a/src/main/java/LadderGame.java +++ b/src/main/java/domain/LadderGame.java @@ -1,3 +1,5 @@ +package domain; + public class LadderGame { diff --git a/src/main/java/LinkedType.java b/src/main/java/domain/LinkedType.java similarity index 73% rename from src/main/java/LinkedType.java rename to src/main/java/domain/LinkedType.java index 60af498..689b218 100644 --- a/src/main/java/LinkedType.java +++ b/src/main/java/domain/LinkedType.java @@ -1,3 +1,5 @@ +package domain; + public enum LinkedType { RIGHT,LEFT,NONE } diff --git a/src/main/java/domain/Pillar.java b/src/main/java/domain/Pillar.java new file mode 100644 index 0000000..923527a --- /dev/null +++ b/src/main/java/domain/Pillar.java @@ -0,0 +1,75 @@ +package domain; + +import data.InputDatas; +import util.Util; + +import java.util.ArrayList; +import java.util.List; + +public class Pillar { + private List bridges; + private Integer pillarNum; + + public Pillar(InputDatas inputDatas, Pillar previousPillar) { //자동으로 다리생성 + pillarNum = myPillarNum(previousPillar); + bridges = createRightBridge(Util.createRandomBooleans(inputDatas.getLadderHeight())); + } + + public Pillar(List presenceBridges, Pillar previousPillar) { //수동으로 다리생성 + pillarNum = myPillarNum(previousPillar); + bridges = createRightBridge(presenceBridges); + } + + public Integer getPillarNum() { + return pillarNum; + } + + public List getBridges() { + return bridges; + } + + private Integer myPillarNum(Pillar previousPillar) { + if (previousPillar == null) + return Ladder.MINIMUM_PILLAR_NUM; + return previousPillar.getPillarNum() + 1; + } + +// private List LinkBrigedWithPreviousPillars (domain.Pillar previousPillar){ +// previousPillar.getBridges(); +// } + +// public List getRightLinkingBrideges(){ +// +// } +// +// public List getLeftLinkingBrdiges(){ +// +// } + +// private List createRightBridge(){ +// +// } + + private List createRightBridge(List locationsOfBridge) { + int ladderHeight = locationsOfBridge.size(); + List bridges = new ArrayList<>(); + for (int i = 0; i < ladderHeight; i++) { + if (locationsOfBridge.get(i) == true) + bridges.add(createOneRightBridge(i)); + } + return bridges; +// return locationsOfBridge.stream() +// .map(location -> locationsOfBridge.indexOf(location)) +// .map(intLocation -> createOneRightBridge(intLocation)) +// .collect(Collectors.toList()); + } + + + private Bridge createOneRightBridge(Integer location) { + return (new Bridge(location, LinkedType.RIGHT)); + } + + private Bridge createOneLeftBridge(Integer location) { + return (new Bridge(location, LinkedType.LEFT)); + } +} \ No newline at end of file diff --git a/src/main/java/util/Util.java b/src/main/java/util/Util.java new file mode 100644 index 0000000..1804fd3 --- /dev/null +++ b/src/main/java/util/Util.java @@ -0,0 +1,18 @@ +package util; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; +import java.util.Random; +import java.util.stream.Collectors; + +public class Util { +// public + public static List createRandomBooleans(Integer heights){ + Random random = new Random(); + List booleans = Arrays.asList(new Boolean[heights]); + return booleans.stream() + .map(bool -> random.nextBoolean()) + .collect(Collectors.toList()); + } +} diff --git a/src/main/java/view/InputView.java b/src/main/java/view/InputView.java new file mode 100644 index 0000000..ae2791f --- /dev/null +++ b/src/main/java/view/InputView.java @@ -0,0 +1,4 @@ +package view; + +public class InputView { +} diff --git a/src/main/java/view/OutputView.java b/src/main/java/view/OutputView.java new file mode 100644 index 0000000..d8f9743 --- /dev/null +++ b/src/main/java/view/OutputView.java @@ -0,0 +1,4 @@ +package view; + +public class OutputView { +} diff --git a/src/test/java/BridgeTest.java b/src/test/java/BridgeTest.java index 53d77d5..7d95e51 100644 --- a/src/test/java/BridgeTest.java +++ b/src/test/java/BridgeTest.java @@ -1,3 +1,5 @@ +import domain.Bridge; +import domain.LinkedType; import org.junit.Test; import static org.junit.Assert.*; diff --git a/src/test/java/LadderTest.java b/src/test/java/LadderTest.java new file mode 100644 index 0000000..c18b16a --- /dev/null +++ b/src/test/java/LadderTest.java @@ -0,0 +1,22 @@ +import org.junit.Test; + +import static org.junit.Assert.*; + +public class LadderTest { + +// @Test +// public void 이전기둥불러오기_left_pillar() { +//// Pillar pillar = new Pillar(2); +//// Pillar previous = pillar.getPreviousPillar(); +// assertEquals((Integer)1, previous.getPillarNum()); +// } +// +// @Test +// public void 이전기둥이_유효하지_않을때_체크하기() { +// Pillar pillar = new Pillar(1); +//// Pillar previous = pillar.getPreviousPillar(); +// assertEquals(null, previous); +// +// } + +} \ No newline at end of file diff --git a/src/test/java/PillarTest.java b/src/test/java/PillarTest.java new file mode 100644 index 0000000..7016501 --- /dev/null +++ b/src/test/java/PillarTest.java @@ -0,0 +1,56 @@ +import data.InputDatas; +import domain.Pillar; +import org.junit.Test; + +import java.util.Arrays; + +import static org.junit.Assert.*; + +public class PillarTest { + @Test + public void 오른쪽_기둥_연결_bridge_생성하기() { + } + + @Test + public void 왼쪽_기둥_연결_bridge_생성하기() { + } + + @Test + public void 첫번째기둥_넘버만들기() { + InputDatas inputDatas = new InputDatas(4,3); + Pillar p = new Pillar(inputDatas, null); + assertEquals((Integer)1, p.getPillarNum()); + } + + @Test + public void 이전기둥확인해서_넘버만들기() { + InputDatas inputDatas = new InputDatas(4,3); + Pillar p = new Pillar(inputDatas, null); + Pillar p2 = new Pillar(inputDatas, p); + assertEquals((Integer)2, p2.getPillarNum()); + } + + @Test + public void 오른쪽_기둥과_연결된_다리_리스트_출력하기() { +// domain.Pillar p = new domain.Pillar() + } + + @Test + public void 랜덤확률로_오른쪽_기둥과_연결된_다리리스트_만들기() { + + } + + @Test + public void 수동으로_오른쪽_기둥과_연결된_다리리스트_만들기() { + Pillar p = new Pillar(Arrays.asList(true,false,true,false), null); + assertEquals((Integer)0,p.getBridges().get(0).getLocation()); + assertEquals((Integer)2,p.getBridges().get(1).getLocation()); + } + + @Test + public void 자동으로_오른쪽_기둥과_연결된_다리리스트_만들기() { + InputDatas inputDatas = new InputDatas(4,3); + Pillar p = new Pillar(inputDatas, null); + assertEquals(true,p.getBridges().size()<3); + } +} \ No newline at end of file diff --git a/src/test/java/UtilTest.java b/src/test/java/UtilTest.java new file mode 100644 index 0000000..c232663 --- /dev/null +++ b/src/test/java/UtilTest.java @@ -0,0 +1,14 @@ +import org.junit.Test; + +import java.util.List; + +import static org.junit.Assert.*; + +public class UtilTest { + + @Test + public void 랜덤_불린_리스트_생성() { + List b = Util.createRandomBooleans(3); + assertEquals(3, b.size()); + } +} \ No newline at end of file From 407d2bc837245cf7f9bd2571edad00844f70adb3 Mon Sep 17 00:00:00 2001 From: mjung1798 Date: Wed, 1 May 2019 01:58:13 +0900 Subject: [PATCH 04/14] get pillar's bridge location list --- .../data/{InputDatas.java => InputData.java} | 4 +- src/main/java/domain/Pillar.java | 53 ++++++++----------- src/main/java/util/Util.java | 21 ++++---- src/test/java/PillarTest.java | 51 +++++++++--------- src/test/java/UtilTest.java | 7 +-- 5 files changed, 66 insertions(+), 70 deletions(-) rename src/main/java/data/{InputDatas.java => InputData.java} (78%) diff --git a/src/main/java/data/InputDatas.java b/src/main/java/data/InputData.java similarity index 78% rename from src/main/java/data/InputDatas.java rename to src/main/java/data/InputData.java index 3e849e7..7c5c6c3 100644 --- a/src/main/java/data/InputDatas.java +++ b/src/main/java/data/InputData.java @@ -1,11 +1,11 @@ package data; -public class InputDatas { +public class InputData { private int pillarCount; private int ladderHeight; - public InputDatas(int pillarCount, int ladderHeight) { + public InputData(int pillarCount, int ladderHeight) { this.pillarCount = pillarCount; this.ladderHeight = ladderHeight; } diff --git a/src/main/java/domain/Pillar.java b/src/main/java/domain/Pillar.java index 923527a..9e16efa 100644 --- a/src/main/java/domain/Pillar.java +++ b/src/main/java/domain/Pillar.java @@ -1,23 +1,19 @@ package domain; -import data.InputDatas; +import data.InputData; import util.Util; import java.util.ArrayList; import java.util.List; +import java.util.stream.Collectors; public class Pillar { private List bridges; private Integer pillarNum; - public Pillar(InputDatas inputDatas, Pillar previousPillar) { //자동으로 다리생성 + public Pillar(InputData inputData, Pillar previousPillar) { //자동으로 다리생성 pillarNum = myPillarNum(previousPillar); - bridges = createRightBridge(Util.createRandomBooleans(inputDatas.getLadderHeight())); - } - - public Pillar(List presenceBridges, Pillar previousPillar) { //수동으로 다리생성 - pillarNum = myPillarNum(previousPillar); - bridges = createRightBridge(presenceBridges); + bridges = createRightBridge(Util.createRandomIntegers(inputData.getLadderHeight())); } public Integer getPillarNum() { @@ -34,37 +30,30 @@ private Integer myPillarNum(Pillar previousPillar) { return previousPillar.getPillarNum() + 1; } -// private List LinkBrigedWithPreviousPillars (domain.Pillar previousPillar){ -// previousPillar.getBridges(); -// } + public List getBridgesLocations(){ + return bridges.stream() + .map(b->b.getLocation()) + .collect(Collectors.toList()); + } -// public List getRightLinkingBrideges(){ -// -// } -// -// public List getLeftLinkingBrdiges(){ -// -// } + public List getBridgesDirectionLocation(LinkedType linkedType){ + return bridges.stream() + .filter(b->b.getLinkPillarDirection() == linkedType) + .map(bridge->bridge.getLocation()) + .collect(Collectors.toList()); + } -// private List createRightBridge(){ +// private List createBridges(){ +// // // } - private List createRightBridge(List locationsOfBridge) { - int ladderHeight = locationsOfBridge.size(); - List bridges = new ArrayList<>(); - for (int i = 0; i < ladderHeight; i++) { - if (locationsOfBridge.get(i) == true) - bridges.add(createOneRightBridge(i)); - } - return bridges; -// return locationsOfBridge.stream() -// .map(location -> locationsOfBridge.indexOf(location)) -// .map(intLocation -> createOneRightBridge(intLocation)) -// .collect(Collectors.toList()); + private List createRightBridge(List locationsOfBridge) { + return locationsOfBridge.stream() + .map(b -> createOneRightBridge(b)) + .collect(Collectors.toList()); } - private Bridge createOneRightBridge(Integer location) { return (new Bridge(location, LinkedType.RIGHT)); } diff --git a/src/main/java/util/Util.java b/src/main/java/util/Util.java index 1804fd3..b4746d7 100644 --- a/src/main/java/util/Util.java +++ b/src/main/java/util/Util.java @@ -1,18 +1,21 @@ package util; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.List; -import java.util.Random; +import java.util.*; import java.util.stream.Collectors; +import java.util.stream.IntStream; public class Util { // public - public static List createRandomBooleans(Integer heights){ - Random random = new Random(); - List booleans = Arrays.asList(new Boolean[heights]); - return booleans.stream() - .map(bool -> random.nextBoolean()) + public static final int MIN_HEIGHT_INDEX = 0; + + public static List createRandomIntegers(Integer heights){ + List randoms = IntStream.range(MIN_HEIGHT_INDEX, heights) + .mapToObj(Integer::new) + .collect(Collectors.toList()); + Collections.shuffle(randoms); + + return randoms.stream() + .limit(new Random().nextInt(heights+1)) .collect(Collectors.toList()); } } diff --git a/src/test/java/PillarTest.java b/src/test/java/PillarTest.java index 7016501..816e3ad 100644 --- a/src/test/java/PillarTest.java +++ b/src/test/java/PillarTest.java @@ -1,10 +1,11 @@ -import data.InputDatas; +import data.InputData; +import domain.LinkedType; import domain.Pillar; import org.junit.Test; -import java.util.Arrays; +import java.util.List; -import static org.junit.Assert.*; +import static org.junit.Assert.assertEquals; public class PillarTest { @Test @@ -17,40 +18,42 @@ public class PillarTest { @Test public void 첫번째기둥_넘버만들기() { - InputDatas inputDatas = new InputDatas(4,3); - Pillar p = new Pillar(inputDatas, null); - assertEquals((Integer)1, p.getPillarNum()); + InputData inputData = new InputData(4, 3); + Pillar p = new Pillar(inputData, null); + assertEquals((Integer) 1, p.getPillarNum()); } @Test public void 이전기둥확인해서_넘버만들기() { - InputDatas inputDatas = new InputDatas(4,3); - Pillar p = new Pillar(inputDatas, null); - Pillar p2 = new Pillar(inputDatas, p); - assertEquals((Integer)2, p2.getPillarNum()); + InputData inputData = new InputData(4, 3); + Pillar p = new Pillar(inputData, null); + Pillar p2 = new Pillar(inputData, p); + assertEquals((Integer) 2, p2.getPillarNum()); } @Test - public void 오른쪽_기둥과_연결된_다리_리스트_출력하기() { -// domain.Pillar p = new domain.Pillar() + public void 자동으로_오른쪽_기둥과_연결된_다리리스트_만들기() { + InputData inputData = new InputData(4, 3); + Pillar p = new Pillar(inputData, null); + assertEquals(true, p.getBridges().size() <= 3); } @Test - public void 랜덤확률로_오른쪽_기둥과_연결된_다리리스트_만들기() { - + public void 기둥에_연결된_다리의_location_값_리스트_가져오기() { + InputData inputData = new InputData(4, 3); + Pillar p = new Pillar(inputData, null); + List bridgesLocations = p.getBridgesLocations(); + System.out.println(bridgesLocations); + assertEquals(true, bridgesLocations.size() <= 3 && bridgesLocations.size() >= 0); } @Test - public void 수동으로_오른쪽_기둥과_연결된_다리리스트_만들기() { - Pillar p = new Pillar(Arrays.asList(true,false,true,false), null); - assertEquals((Integer)0,p.getBridges().get(0).getLocation()); - assertEquals((Integer)2,p.getBridges().get(1).getLocation()); + public void 기둥에_연결된_특정_방향의_다리의_location_값_리스트_가져오기() { + InputData inputData = new InputData(4, 3); + Pillar p = new Pillar(inputData, null); + List bridgesLocations = p.getBridgesDirectionLocation(LinkedType.LEFT); + assertEquals(0, bridgesLocations.size()); } - @Test - public void 자동으로_오른쪽_기둥과_연결된_다리리스트_만들기() { - InputDatas inputDatas = new InputDatas(4,3); - Pillar p = new Pillar(inputDatas, null); - assertEquals(true,p.getBridges().size()<3); - } + } \ No newline at end of file diff --git a/src/test/java/UtilTest.java b/src/test/java/UtilTest.java index c232663..3587aae 100644 --- a/src/test/java/UtilTest.java +++ b/src/test/java/UtilTest.java @@ -1,4 +1,5 @@ import org.junit.Test; +import util.Util; import java.util.List; @@ -7,8 +8,8 @@ public class UtilTest { @Test - public void 랜덤_불린_리스트_생성() { - List b = Util.createRandomBooleans(3); - assertEquals(3, b.size()); + public void 랜덤_정수_리스트_생성() { + List b = Util.createRandomIntegers(3); + assertEquals(true, b.size()<=3 && b.size()>=0); } } \ No newline at end of file From 71416cd9ea3069ee50263811dd967514d5027dbf Mon Sep 17 00:00:00 2001 From: mjung1798 Date: Wed, 1 May 2019 16:03:27 +0900 Subject: [PATCH 05/14] create all bridges of pillars --- src/main/java/domain/Bridge.java | 14 ----- src/main/java/domain/Ladder.java | 10 ++-- src/main/java/domain/LinkedType.java | 2 +- src/main/java/domain/Pillar.java | 59 ++++++++++++++++----- src/main/java/util/Util.java | 20 +++++-- src/test/java/PillarTest.java | 78 ++++++++++++++++++++++++++-- 6 files changed, 140 insertions(+), 43 deletions(-) diff --git a/src/main/java/domain/Bridge.java b/src/main/java/domain/Bridge.java index 326f2a4..1b6e8d6 100644 --- a/src/main/java/domain/Bridge.java +++ b/src/main/java/domain/Bridge.java @@ -9,7 +9,6 @@ public Bridge(Integer location, LinkedType linkPillarDirection) { this.linkPillarDirection = linkPillarDirection; } - public Integer getLocation() { return location; } @@ -18,17 +17,4 @@ public LinkedType getLinkPillarDirection() { return linkPillarDirection; } -// public Point nextPoint(int currentColumn) { -// Point point = points.get(currentColumn); -// if (point.getLinkedType() == LinkedType.RIGHT) { -// Point nextPoint = points.get(currentColumn + 1); -// return nextPoint; -// } -// if (point.getLinkedType() == LinkedType.LEFT) { -// Point nextPoint = points.get(currentColumn-1); -// return nextPoint; -// } -// -// return point; -// } } diff --git a/src/main/java/domain/Ladder.java b/src/main/java/domain/Ladder.java index 29096d6..6cf4968 100644 --- a/src/main/java/domain/Ladder.java +++ b/src/main/java/domain/Ladder.java @@ -2,18 +2,17 @@ import java.util.List; -public class Ladder { +public class Ladder { + public static final int MINIMUM_PILLAR_NUM = 1; private List pillars; private Integer size; - public static final int MINIMUM_PILLAR_NUM = 1; - public List getPillars() { return pillars; } - public Integer getCountOfPillars(){ + public Integer getCountOfPillars() { return pillars.size(); } @@ -21,12 +20,11 @@ public Integer getSize() { return size; } - public Pillar getPreviousPillar(int pillarNum){ + public Pillar getPreviousPillar(int pillarNum) { // if(MINIMUM_PILLAR_NUM > pillarNum) // return ; return null; } - } diff --git a/src/main/java/domain/LinkedType.java b/src/main/java/domain/LinkedType.java index 689b218..48c0302 100644 --- a/src/main/java/domain/LinkedType.java +++ b/src/main/java/domain/LinkedType.java @@ -1,5 +1,5 @@ package domain; public enum LinkedType { - RIGHT,LEFT,NONE + RIGHT, LEFT } diff --git a/src/main/java/domain/Pillar.java b/src/main/java/domain/Pillar.java index 9e16efa..7f45fde 100644 --- a/src/main/java/domain/Pillar.java +++ b/src/main/java/domain/Pillar.java @@ -3,7 +3,6 @@ import data.InputData; import util.Util; -import java.util.ArrayList; import java.util.List; import java.util.stream.Collectors; @@ -12,8 +11,8 @@ public class Pillar { private Integer pillarNum; public Pillar(InputData inputData, Pillar previousPillar) { //자동으로 다리생성 - pillarNum = myPillarNum(previousPillar); - bridges = createRightBridge(Util.createRandomIntegers(inputData.getLadderHeight())); + pillarNum = nowPillarNum(previousPillar); + bridges = createBridges(inputData, previousPillar); } public Integer getPillarNum() { @@ -24,36 +23,68 @@ public List getBridges() { return bridges; } - private Integer myPillarNum(Pillar previousPillar) { + private Integer nowPillarNum(Pillar previousPillar) { if (previousPillar == null) return Ladder.MINIMUM_PILLAR_NUM; return previousPillar.getPillarNum() + 1; } - public List getBridgesLocations(){ + public List getBridgesLocations() { return bridges.stream() - .map(b->b.getLocation()) + .map(b -> b.getLocation()) .collect(Collectors.toList()); } - public List getBridgesDirectionLocation(LinkedType linkedType){ + public List getBridgesDirectionLocation(LinkedType linkedType) { return bridges.stream() - .filter(b->b.getLinkPillarDirection() == linkedType) - .map(bridge->bridge.getLocation()) + .filter(b -> b.getLinkPillarDirection() == linkedType) + .map(bridge -> bridge.getLocation()) .collect(Collectors.toList()); } -// private List createBridges(){ -// -// -// } + private List createBridges(InputData inputData, Pillar previousPillar) { + if (isFirstPillar(previousPillar)) + return createRightBridges(Util.createRandomIntegers(inputData.getLadderHeight())); + if (isLastPillar(inputData, previousPillar)) + return createLeftBridges(previousPillar); + return createLeftRightBridges(previousPillar, inputData.getLadderHeight()); + } + + + private boolean isLastPillar(InputData inputData, Pillar previousPillar) { + if (inputData.getPillarCount() - previousPillar.getPillarNum() == 1) + return true; + return false; + } + + private boolean isFirstPillar(Pillar previousPillar) { + if (previousPillar == null) + return true; + return false; + } - private List createRightBridge(List locationsOfBridge) { + private List createLeftRightBridges(Pillar previous, Integer height) { + List previousLocations = previous.getBridgesDirectionLocation(LinkedType.RIGHT); + List nowPillarsBridges = createLeftBridges(previous); + List rightBridgeNumbers = Util.createRandomIntegersWithRestriction(height, previousLocations); + nowPillarsBridges.addAll(createRightBridges(rightBridgeNumbers)); + return nowPillarsBridges; + } + + private List createRightBridges(List locationsOfBridge) { return locationsOfBridge.stream() .map(b -> createOneRightBridge(b)) .collect(Collectors.toList()); } + + private List createLeftBridges(Pillar previous) { + List locationsOfBridge = previous.getBridgesDirectionLocation(LinkedType.RIGHT); + return locationsOfBridge.stream() + .map(b -> createOneLeftBridge(b)) + .collect(Collectors.toList()); + } + private Bridge createOneRightBridge(Integer location) { return (new Bridge(location, LinkedType.RIGHT)); } diff --git a/src/main/java/util/Util.java b/src/main/java/util/Util.java index b4746d7..bcb91a4 100644 --- a/src/main/java/util/Util.java +++ b/src/main/java/util/Util.java @@ -1,21 +1,33 @@ package util; -import java.util.*; +import java.util.Collections; +import java.util.List; import java.util.stream.Collectors; import java.util.stream.IntStream; public class Util { -// public + // public public static final int MIN_HEIGHT_INDEX = 0; - public static List createRandomIntegers(Integer heights){ + public static List createRandomIntegers(Integer heights) { List randoms = IntStream.range(MIN_HEIGHT_INDEX, heights) .mapToObj(Integer::new) .collect(Collectors.toList()); Collections.shuffle(randoms); return randoms.stream() - .limit(new Random().nextInt(heights+1)) + .limit(randInt(heights)) .collect(Collectors.toList()); } + + public static List createRandomIntegersWithRestriction(Integer heights, List restrictions) { + List randoms = createRandomIntegers(heights); + return randoms.stream() + .filter(i -> !restrictions.contains(i)) + .collect(Collectors.toList()); + } + + public static Integer randInt(int bound) { + return (int) (Math.random() * bound + 1); + } } diff --git a/src/test/java/PillarTest.java b/src/test/java/PillarTest.java index 816e3ad..e0f5f80 100644 --- a/src/test/java/PillarTest.java +++ b/src/test/java/PillarTest.java @@ -8,19 +8,81 @@ import static org.junit.Assert.assertEquals; public class PillarTest { + @Test - public void 오른쪽_기둥_연결_bridge_생성하기() { + public void 첫번째기둥_넘버만들기() { + InputData inputData = new InputData(4, 3); + Pillar p = new Pillar(inputData, null); + assertEquals((Integer) 1, p.getPillarNum()); } @Test - public void 왼쪽_기둥_연결_bridge_생성하기() { + public void 가운데기둥_넘버만들기() { + InputData inputData = new InputData(4, 3); + Pillar p = new Pillar(inputData, null); + Pillar p1 = new Pillar(inputData, p); + + assertEquals((Integer) 2, p1.getPillarNum()); } @Test - public void 첫번째기둥_넘버만들기() { + public void 마지막기둥_넘버만들기() { InputData inputData = new InputData(4, 3); Pillar p = new Pillar(inputData, null); - assertEquals((Integer) 1, p.getPillarNum()); + Pillar p1 = new Pillar(inputData, p); + Pillar p2 = new Pillar(inputData, p1); + Pillar p3 = new Pillar(inputData, p2); + + assertEquals((Integer) 4, p3.getPillarNum()); + } + + @Test + public void 첫번째_기둥_bridge_리스트_만들기() { + InputData inputData = new InputData(4, 3); + Pillar p = new Pillar(inputData, null); + + System.out.println(p.getBridgesLocations()); + + assertEquals(p.getBridgesDirectionLocation(LinkedType.RIGHT), p.getBridgesLocations()); + assertEquals(0, p.getBridgesDirectionLocation(LinkedType.LEFT).size()); + } + + @Test + public void 두번째_기둥_bridge_리스트_만들기() { + InputData inputData = new InputData(4, 10); + Pillar p = new Pillar(inputData, null); + Pillar p1 = new Pillar(inputData, p); + + List p1LeftBridgesLocation = p1.getBridgesDirectionLocation(LinkedType.LEFT); + List p1RightBridgesLocation = p1.getBridgesDirectionLocation(LinkedType.RIGHT); + List pRightBridgesLocation = p.getBridgesDirectionLocation(LinkedType.RIGHT); + +// System.out.println("P RIGHT" + pRightBridgesLocation); +// System.out.println("p1 LEFT" + p1LeftBridgesLocation); +// System.out.println("p1 RIGHT" + p1RightBridgesLocation); + + assertEquals(p.getBridgesLocations(), p1LeftBridgesLocation); + assertEquals(pRightBridgesLocation, p1LeftBridgesLocation); + assertEquals(false, p1RightBridgesLocation.contains(p1LeftBridgesLocation)); + } + + @Test + public void 마지막_기둥_bridge_리스트_만들기() { + InputData inputData = new InputData(4, 10); + Pillar p = new Pillar(inputData, null); + Pillar p1 = new Pillar(inputData, p); + Pillar p2 = new Pillar(inputData, p1); + Pillar p3 = new Pillar(inputData, p2); + +// System.out.println("P RIGHT" + p.getBridgesDirectionLocation(LinkedType.RIGHT)); +// System.out.println("p1 LEFT" + p1.getBridgesDirectionLocation(LinkedType.LEFT)); +// System.out.println("p1 RIGHT" + p1.getBridgesDirectionLocation(LinkedType.RIGHT)); +// System.out.println("p2 LEFT" + p2.getBridgesDirectionLocation(LinkedType.LEFT)); +// System.out.println("p2 RIGHT" + p2.getBridgesDirectionLocation(LinkedType.RIGHT)); +// System.out.println("p3 LEFT" + p3.getBridgesDirectionLocation(LinkedType.LEFT)); + + assertEquals(p3.getBridgesLocations(), p3.getBridgesDirectionLocation(LinkedType.LEFT)); + assertEquals(0, p3.getBridgesDirectionLocation(LinkedType.RIGHT).size()); } @Test @@ -55,5 +117,13 @@ public class PillarTest { assertEquals(0, bridgesLocations.size()); } + @Test + public void 오른쪽_기둥_연결_bridge_생성하기() { + } + + @Test + public void 왼쪽_기둥_연결_bridge_생성하기() { + } + } \ No newline at end of file From 7247e959ac07bb3d3a138cd2187aaf9c744a3cc3 Mon Sep 17 00:00:00 2001 From: mjung1798 Date: Wed, 1 May 2019 16:22:51 +0900 Subject: [PATCH 06/14] create ladder --- src/main/java/domain/Ladder.java | 46 ++++++++++++++++++++++++-------- src/main/java/domain/Pillar.java | 1 + src/test/java/LadderTest.java | 13 ++++++++- 3 files changed, 48 insertions(+), 12 deletions(-) diff --git a/src/main/java/domain/Ladder.java b/src/main/java/domain/Ladder.java index 6cf4968..f4aa24d 100644 --- a/src/main/java/domain/Ladder.java +++ b/src/main/java/domain/Ladder.java @@ -1,30 +1,54 @@ package domain; +import data.InputData; + +import java.util.ArrayList; import java.util.List; -public class Ladder { +public class Ladder { public static final int MINIMUM_PILLAR_NUM = 1; private List pillars; - private Integer size; + private Integer width; + private Integer height; - public List getPillars() { + public Ladder(InputData inputData) { + this.width = inputData.getPillarCount(); + this.height = inputData.getLadderHeight(); + this.pillars = createLadder(inputData); + } + + private List createLadder(InputData inputData) { + List pillars = new ArrayList<>(); + Pillar previous = new Pillar(inputData, null); + pillars.add(previous); + for (int i = MINIMUM_PILLAR_NUM; i <= width - 1; i++) { + Pillar now = new Pillar(inputData, previous); + pillars.add(now); + previous = now; + } return pillars; } - public Integer getCountOfPillars() { - return pillars.size(); + public List getPillars() { + return pillars; } - public Integer getSize() { - return size; + public Integer getWidth() { + return width; } - public Pillar getPreviousPillar(int pillarNum) { -// if(MINIMUM_PILLAR_NUM > pillarNum) -// return ; - return null; + public Integer getHeight() { + return height; } + public Pillar getPreviousPillar(Pillar pillar) { + if (MINIMUM_PILLAR_NUM <= pillar.getPillarNum()) + return null; + return pillars.stream() + .filter(p -> p.getPillarNum() == pillar.getPillarNum() - 1) + .findAny() + .orElse(null); + } } diff --git a/src/main/java/domain/Pillar.java b/src/main/java/domain/Pillar.java index 7f45fde..1fac495 100644 --- a/src/main/java/domain/Pillar.java +++ b/src/main/java/domain/Pillar.java @@ -35,6 +35,7 @@ public List getBridgesLocations() { .collect(Collectors.toList()); } + public List getBridgesDirectionLocation(LinkedType linkedType) { return bridges.stream() .filter(b -> b.getLinkPillarDirection() == linkedType) diff --git a/src/test/java/LadderTest.java b/src/test/java/LadderTest.java index c18b16a..978bcb0 100644 --- a/src/test/java/LadderTest.java +++ b/src/test/java/LadderTest.java @@ -1,10 +1,21 @@ +import data.InputData; +import domain.Ladder; import org.junit.Test; import static org.junit.Assert.*; public class LadderTest { -// @Test + @Test + public void Ladder_생성하기_Pillar_리스트_생성하기 () { + InputData inputData = new InputData(3,4); + Ladder ladder = new Ladder(inputData); + + assertEquals((int) ladder.getWidth() ,ladder.getPillars().size()); + } + + + // @Test // public void 이전기둥불러오기_left_pillar() { //// Pillar pillar = new Pillar(2); //// Pillar previous = pillar.getPreviousPillar(); From 99f90d1af88dbb8c6afd020bd39c0b484e49d4ef Mon Sep 17 00:00:00 2001 From: mjung1798 Date: Fri, 3 May 2019 21:46:47 +0900 Subject: [PATCH 07/14] ladder Game --- src/main/java/LadderGame.java | 16 ++++++++ src/main/java/data/InputData.java | 23 ++++++++--- src/main/java/domain/LadderGame.java | 6 --- src/main/java/domain/{ => ladder}/Bridge.java | 2 +- src/main/java/domain/{ => ladder}/Ladder.java | 29 +++++++++----- .../java/domain/{ => ladder}/LinkedType.java | 2 +- src/main/java/domain/{ => ladder}/Pillar.java | 13 ++++--- src/main/java/domain/user/User.java | 22 +++++++++++ src/main/java/domain/user/UserManage.java | 33 ++++++++++++++++ src/main/java/util/Util.java | 8 ++++ src/main/java/view/InputView.java | 19 ++++++++++ src/test/java/LadderGameTest.java | 17 --------- src/test/java/LadderTest.java | 33 ---------------- .../java/{ => domain/ladder}/BridgeTest.java | 7 ++-- src/test/java/domain/ladder/LadderTest.java | 38 +++++++++++++++++++ .../java/{ => domain/ladder}/PillarTest.java | 26 +++++++------ src/test/java/domain/user/UserManageTest.java | 18 +++++++++ src/test/java/domain/user/UserTest.java | 17 +++++++++ src/test/java/{ => util}/UtilTest.java | 11 ++++++ src/test/java/view/InputViewTest.java | 26 +++++++++++++ 20 files changed, 271 insertions(+), 95 deletions(-) create mode 100644 src/main/java/LadderGame.java delete mode 100644 src/main/java/domain/LadderGame.java rename src/main/java/domain/{ => ladder}/Bridge.java (94%) rename src/main/java/domain/{ => ladder}/Ladder.java (58%) rename src/main/java/domain/{ => ladder}/LinkedType.java (65%) rename src/main/java/domain/{ => ladder}/Pillar.java (88%) create mode 100644 src/main/java/domain/user/User.java create mode 100644 src/main/java/domain/user/UserManage.java delete mode 100644 src/test/java/LadderGameTest.java delete mode 100644 src/test/java/LadderTest.java rename src/test/java/{ => domain/ladder}/BridgeTest.java (85%) create mode 100644 src/test/java/domain/ladder/LadderTest.java rename src/test/java/{ => domain/ladder}/PillarTest.java (84%) create mode 100644 src/test/java/domain/user/UserManageTest.java create mode 100644 src/test/java/domain/user/UserTest.java rename src/test/java/{ => util}/UtilTest.java (51%) create mode 100644 src/test/java/view/InputViewTest.java diff --git a/src/main/java/LadderGame.java b/src/main/java/LadderGame.java new file mode 100644 index 0000000..68c964c --- /dev/null +++ b/src/main/java/LadderGame.java @@ -0,0 +1,16 @@ +import data.InputData; +import domain.ladder.Ladder; +import domain.user.UserManage; +import view.InputView; + +public class LadderGame { + + public static void main(String args[]) { + InputView inputView = new InputView(System.in); + InputData inputData = new InputData(inputView.participants(), inputView.ladderHeight()); + Ladder ladder = new Ladder(inputData); + UserManage userManage = new UserManage(inputData, ladder); + + } + +} diff --git a/src/main/java/data/InputData.java b/src/main/java/data/InputData.java index 7c5c6c3..b6abc2a 100644 --- a/src/main/java/data/InputData.java +++ b/src/main/java/data/InputData.java @@ -2,16 +2,29 @@ public class InputData { - private int pillarCount; + public static final String DELIMETER = ","; + + private int ladderWidth; private int ladderHeight; + private String participants; - public InputData(int pillarCount, int ladderHeight) { - this.pillarCount = pillarCount; + public InputData(String participants, int ladderHeight) { + this.ladderWidth = ladderWidth(participants); this.ladderHeight = ladderHeight; + this.participants = participants; + } + + private int ladderWidth(String participants) { + String[] parts = participants.split(DELIMETER); + return parts.length; + } + + public String getParticipants() { + return participants; } - public int getPillarCount() { - return pillarCount; + public int getLadderWidth() { + return ladderWidth; } public int getLadderHeight() { diff --git a/src/main/java/domain/LadderGame.java b/src/main/java/domain/LadderGame.java deleted file mode 100644 index 64bcce9..0000000 --- a/src/main/java/domain/LadderGame.java +++ /dev/null @@ -1,6 +0,0 @@ -package domain; - -public class LadderGame { - - -} diff --git a/src/main/java/domain/Bridge.java b/src/main/java/domain/ladder/Bridge.java similarity index 94% rename from src/main/java/domain/Bridge.java rename to src/main/java/domain/ladder/Bridge.java index 1b6e8d6..04c44db 100644 --- a/src/main/java/domain/Bridge.java +++ b/src/main/java/domain/ladder/Bridge.java @@ -1,4 +1,4 @@ -package domain; +package domain.ladder; public class Bridge { private Integer location; diff --git a/src/main/java/domain/Ladder.java b/src/main/java/domain/ladder/Ladder.java similarity index 58% rename from src/main/java/domain/Ladder.java rename to src/main/java/domain/ladder/Ladder.java index f4aa24d..8bc9af5 100644 --- a/src/main/java/domain/Ladder.java +++ b/src/main/java/domain/ladder/Ladder.java @@ -1,4 +1,4 @@ -package domain; +package domain.ladder; import data.InputData; @@ -13,7 +13,7 @@ public class Ladder { private Integer height; public Ladder(InputData inputData) { - this.width = inputData.getPillarCount(); + this.width = inputData.getLadderWidth(); this.height = inputData.getLadderHeight(); this.pillars = createLadder(inputData); } @@ -42,13 +42,22 @@ public Integer getHeight() { return height; } - public Pillar getPreviousPillar(Pillar pillar) { - if (MINIMUM_PILLAR_NUM <= pillar.getPillarNum()) - return null; - return pillars.stream() - .filter(p -> p.getPillarNum() == pillar.getPillarNum() - 1) - .findAny() - .orElse(null); - } +// public Pillar getPreviousPillar(Pillar pillar) { +// if (MINIMUM_PILLAR_NUM <= pillar.getPillarNum()) +// return null; +// return pillars.stream() +// .filter(p -> p.getPillarNum() == pillar.getPillarNum() - 1) +// .findFirst() +// .orElse(null); +// } +// +// public Pillar getNextPillar(Pillar pillar) { +// if (MINIMUM_PILLAR_NUM <= pillar.getPillarNum()) +// return null; +// return pillars.stream() +// .filter(p -> p.getPillarNum() == pillar.getPillarNum() + 1) +// .findFirst() +// .orElse(null); +// } } diff --git a/src/main/java/domain/LinkedType.java b/src/main/java/domain/ladder/LinkedType.java similarity index 65% rename from src/main/java/domain/LinkedType.java rename to src/main/java/domain/ladder/LinkedType.java index 48c0302..3fc8afc 100644 --- a/src/main/java/domain/LinkedType.java +++ b/src/main/java/domain/ladder/LinkedType.java @@ -1,4 +1,4 @@ -package domain; +package domain.ladder; public enum LinkedType { RIGHT, LEFT diff --git a/src/main/java/domain/Pillar.java b/src/main/java/domain/ladder/Pillar.java similarity index 88% rename from src/main/java/domain/Pillar.java rename to src/main/java/domain/ladder/Pillar.java index 1fac495..8d99afe 100644 --- a/src/main/java/domain/Pillar.java +++ b/src/main/java/domain/ladder/Pillar.java @@ -1,11 +1,13 @@ -package domain; +package domain.ladder; import data.InputData; -import util.Util; import java.util.List; import java.util.stream.Collectors; +import static util.Util.createRandomIntegers; +import static util.Util.createRandomIntegersWithRestriction; + public class Pillar { private List bridges; private Integer pillarNum; @@ -35,7 +37,6 @@ public List getBridgesLocations() { .collect(Collectors.toList()); } - public List getBridgesDirectionLocation(LinkedType linkedType) { return bridges.stream() .filter(b -> b.getLinkPillarDirection() == linkedType) @@ -45,7 +46,7 @@ public List getBridgesDirectionLocation(LinkedType linkedType) { private List createBridges(InputData inputData, Pillar previousPillar) { if (isFirstPillar(previousPillar)) - return createRightBridges(Util.createRandomIntegers(inputData.getLadderHeight())); + return createRightBridges(createRandomIntegers(inputData.getLadderHeight())); if (isLastPillar(inputData, previousPillar)) return createLeftBridges(previousPillar); return createLeftRightBridges(previousPillar, inputData.getLadderHeight()); @@ -53,7 +54,7 @@ private List createBridges(InputData inputData, Pillar previousPillar) { private boolean isLastPillar(InputData inputData, Pillar previousPillar) { - if (inputData.getPillarCount() - previousPillar.getPillarNum() == 1) + if (inputData.getLadderWidth() - previousPillar.getPillarNum() == 1) return true; return false; } @@ -67,7 +68,7 @@ private boolean isFirstPillar(Pillar previousPillar) { private List createLeftRightBridges(Pillar previous, Integer height) { List previousLocations = previous.getBridgesDirectionLocation(LinkedType.RIGHT); List nowPillarsBridges = createLeftBridges(previous); - List rightBridgeNumbers = Util.createRandomIntegersWithRestriction(height, previousLocations); + List rightBridgeNumbers = createRandomIntegersWithRestriction(height, previousLocations); nowPillarsBridges.addAll(createRightBridges(rightBridgeNumbers)); return nowPillarsBridges; } diff --git a/src/main/java/domain/user/User.java b/src/main/java/domain/user/User.java new file mode 100644 index 0000000..a245759 --- /dev/null +++ b/src/main/java/domain/user/User.java @@ -0,0 +1,22 @@ +package domain.user; + +import domain.ladder.Pillar; + +public class User { + + private String name; + private Pillar startPillar; + + public User(String name, Pillar pillar) { + this.name = name; + this.startPillar = pillar; + } + + public String getName() { + return name; + } + + public Pillar getStartPillar() { + return startPillar; + } +} diff --git a/src/main/java/domain/user/UserManage.java b/src/main/java/domain/user/UserManage.java new file mode 100644 index 0000000..b1fcd4e --- /dev/null +++ b/src/main/java/domain/user/UserManage.java @@ -0,0 +1,33 @@ +package domain.user; + +import data.InputData; +import domain.ladder.Ladder; +import domain.ladder.Pillar; + +import java.util.ArrayList; +import java.util.List; + +import static util.Util.separateUserName; + +public class UserManage { + private List users; + + public UserManage(InputData inputData, Ladder ladder) { + if (inputData.getLadderWidth() == ladder.getWidth()) { + this.users = createUser(separateUserName(inputData.getParticipants()), ladder.getPillars()); + } + } + + public List getUsers() { + return users; + } + + private List createUser(List userNames, List pillars) { + List users = new ArrayList<>(); + for (int i = 0; i < userNames.size(); i++) { + users.add(new User(userNames.get(i), pillars.get(i))); + } + return users; + } + +} diff --git a/src/main/java/util/Util.java b/src/main/java/util/Util.java index bcb91a4..793c7ec 100644 --- a/src/main/java/util/Util.java +++ b/src/main/java/util/Util.java @@ -1,10 +1,13 @@ package util; +import java.util.Arrays; import java.util.Collections; import java.util.List; import java.util.stream.Collectors; import java.util.stream.IntStream; +import static data.InputData.DELIMETER; + public class Util { // public public static final int MIN_HEIGHT_INDEX = 0; @@ -27,6 +30,11 @@ public static List createRandomIntegersWithRestriction(Integer heights, .collect(Collectors.toList()); } + public static List separateUserName(String participants){ + String[] users = participants.split(DELIMETER); + return Arrays.asList(users); + } + public static Integer randInt(int bound) { return (int) (Math.random() * bound + 1); } diff --git a/src/main/java/view/InputView.java b/src/main/java/view/InputView.java index ae2791f..7927e46 100644 --- a/src/main/java/view/InputView.java +++ b/src/main/java/view/InputView.java @@ -1,4 +1,23 @@ package view; +import java.io.InputStream; +import java.util.Scanner; + public class InputView { + public static Scanner sc; + + public InputView(InputStream inputStream) { + sc = new Scanner(inputStream); + } + + public String participants() { + System.out.println("참여할 사람 이름을 입력하세요. (이름은 쉼표(,)로 구분하세요)"); + return sc.next(); + } + + public int ladderHeight(){ + System.out.println("최대 사다리 높이는 몇 개인가요?"); + return sc.nextInt(); + } + } diff --git a/src/test/java/LadderGameTest.java b/src/test/java/LadderGameTest.java deleted file mode 100644 index 5d88e75..0000000 --- a/src/test/java/LadderGameTest.java +++ /dev/null @@ -1,17 +0,0 @@ -//import org.junit.Test; -// -//import static org.junit.Assert.*; -// -//public class LadderGameTest { -// -// @Test -// public void 사다리_만들기() { -// //given -// int playerNumber = 5; -// LadderGame ladderGame = new LadderGame(); -// //when -// = ladderGame.makeBridge(5); -// //then -// -// } -//} \ No newline at end of file diff --git a/src/test/java/LadderTest.java b/src/test/java/LadderTest.java deleted file mode 100644 index 978bcb0..0000000 --- a/src/test/java/LadderTest.java +++ /dev/null @@ -1,33 +0,0 @@ -import data.InputData; -import domain.Ladder; -import org.junit.Test; - -import static org.junit.Assert.*; - -public class LadderTest { - - @Test - public void Ladder_생성하기_Pillar_리스트_생성하기 () { - InputData inputData = new InputData(3,4); - Ladder ladder = new Ladder(inputData); - - assertEquals((int) ladder.getWidth() ,ladder.getPillars().size()); - } - - - // @Test -// public void 이전기둥불러오기_left_pillar() { -//// Pillar pillar = new Pillar(2); -//// Pillar previous = pillar.getPreviousPillar(); -// assertEquals((Integer)1, previous.getPillarNum()); -// } -// -// @Test -// public void 이전기둥이_유효하지_않을때_체크하기() { -// Pillar pillar = new Pillar(1); -//// Pillar previous = pillar.getPreviousPillar(); -// assertEquals(null, previous); -// -// } - -} \ No newline at end of file diff --git a/src/test/java/BridgeTest.java b/src/test/java/domain/ladder/BridgeTest.java similarity index 85% rename from src/test/java/BridgeTest.java rename to src/test/java/domain/ladder/BridgeTest.java index 7d95e51..88be584 100644 --- a/src/test/java/BridgeTest.java +++ b/src/test/java/domain/ladder/BridgeTest.java @@ -1,8 +1,8 @@ -import domain.Bridge; -import domain.LinkedType; +package domain.ladder; + import org.junit.Test; -import static org.junit.Assert.*; +import static org.junit.Assert.assertEquals; public class BridgeTest { @@ -19,5 +19,4 @@ public class BridgeTest { } - } \ No newline at end of file diff --git a/src/test/java/domain/ladder/LadderTest.java b/src/test/java/domain/ladder/LadderTest.java new file mode 100644 index 0000000..b7fe43a --- /dev/null +++ b/src/test/java/domain/ladder/LadderTest.java @@ -0,0 +1,38 @@ +package domain.ladder; + +import data.InputData; +import domain.ladder.Ladder; +import org.junit.Test; + +import static org.junit.Assert.assertEquals; + +public class LadderTest { + + @Test + public void Ladder_생성하기_Pillar_리스트_생성하기() { + InputData inputData = new InputData("pobi,honux,crong,jk", 4); + Ladder ladder = new Ladder(inputData); + + assertEquals((int) ladder.getWidth(), ladder.getPillars().size()); + } + + +// @Test +// public void 이전기둥불러오기_left_pillar() { +// InputData inputData = new InputData(3,4); +// Ladder ladder = new Ladder(inputData); +// Pillar now = ladder.getPillars().get(2); +// System.out.println(now.getPillarNum()); +// assertEquals(0, ladder.getPreviousPillar(now)); +// assertEquals(2, ladder.getNextPillar(now)); +// } + +// @Test +// public void 이전기둥이_유효하지_않을때_체크하기() { +// Pillar pillar = new Pillar(1); +//// Pillar previous = pillar.getPreviousPillar(); +// assertEquals(null, previous); +// +// } + +} \ No newline at end of file diff --git a/src/test/java/PillarTest.java b/src/test/java/domain/ladder/PillarTest.java similarity index 84% rename from src/test/java/PillarTest.java rename to src/test/java/domain/ladder/PillarTest.java index e0f5f80..75b88d0 100644 --- a/src/test/java/PillarTest.java +++ b/src/test/java/domain/ladder/PillarTest.java @@ -1,6 +1,8 @@ +package domain.ladder; + import data.InputData; -import domain.LinkedType; -import domain.Pillar; +import domain.ladder.LinkedType; +import domain.ladder.Pillar; import org.junit.Test; import java.util.List; @@ -11,14 +13,14 @@ public class PillarTest { @Test public void 첫번째기둥_넘버만들기() { - InputData inputData = new InputData(4, 3); + InputData inputData = new InputData("pobi,honux,crong,jk", 3); Pillar p = new Pillar(inputData, null); assertEquals((Integer) 1, p.getPillarNum()); } @Test public void 가운데기둥_넘버만들기() { - InputData inputData = new InputData(4, 3); + InputData inputData = new InputData("pobi,honux,crong,jk", 3); Pillar p = new Pillar(inputData, null); Pillar p1 = new Pillar(inputData, p); @@ -27,7 +29,7 @@ public class PillarTest { @Test public void 마지막기둥_넘버만들기() { - InputData inputData = new InputData(4, 3); + InputData inputData = new InputData("pobi,honux,crong,jk", 3); Pillar p = new Pillar(inputData, null); Pillar p1 = new Pillar(inputData, p); Pillar p2 = new Pillar(inputData, p1); @@ -38,7 +40,7 @@ public class PillarTest { @Test public void 첫번째_기둥_bridge_리스트_만들기() { - InputData inputData = new InputData(4, 3); + InputData inputData = new InputData("pobi,honux,crong,jk", 3); Pillar p = new Pillar(inputData, null); System.out.println(p.getBridgesLocations()); @@ -49,7 +51,7 @@ public class PillarTest { @Test public void 두번째_기둥_bridge_리스트_만들기() { - InputData inputData = new InputData(4, 10); + InputData inputData = new InputData("pobi,honux,crong,jk", 10); Pillar p = new Pillar(inputData, null); Pillar p1 = new Pillar(inputData, p); @@ -68,7 +70,7 @@ public class PillarTest { @Test public void 마지막_기둥_bridge_리스트_만들기() { - InputData inputData = new InputData(4, 10); + InputData inputData = new InputData("pobi,honux,crong,jk", 10); Pillar p = new Pillar(inputData, null); Pillar p1 = new Pillar(inputData, p); Pillar p2 = new Pillar(inputData, p1); @@ -87,7 +89,7 @@ public class PillarTest { @Test public void 이전기둥확인해서_넘버만들기() { - InputData inputData = new InputData(4, 3); + InputData inputData = new InputData("pobi,honux,crong,jk", 3); Pillar p = new Pillar(inputData, null); Pillar p2 = new Pillar(inputData, p); assertEquals((Integer) 2, p2.getPillarNum()); @@ -95,14 +97,14 @@ public class PillarTest { @Test public void 자동으로_오른쪽_기둥과_연결된_다리리스트_만들기() { - InputData inputData = new InputData(4, 3); + InputData inputData = new InputData("pobi,honux,crong,jk", 3); Pillar p = new Pillar(inputData, null); assertEquals(true, p.getBridges().size() <= 3); } @Test public void 기둥에_연결된_다리의_location_값_리스트_가져오기() { - InputData inputData = new InputData(4, 3); + InputData inputData = new InputData("pobi,honux,crong,jk", 3); Pillar p = new Pillar(inputData, null); List bridgesLocations = p.getBridgesLocations(); System.out.println(bridgesLocations); @@ -111,7 +113,7 @@ public class PillarTest { @Test public void 기둥에_연결된_특정_방향의_다리의_location_값_리스트_가져오기() { - InputData inputData = new InputData(4, 3); + InputData inputData = new InputData("pobi,honux,crong,jk", 3); Pillar p = new Pillar(inputData, null); List bridgesLocations = p.getBridgesDirectionLocation(LinkedType.LEFT); assertEquals(0, bridgesLocations.size()); diff --git a/src/test/java/domain/user/UserManageTest.java b/src/test/java/domain/user/UserManageTest.java new file mode 100644 index 0000000..e17e90e --- /dev/null +++ b/src/test/java/domain/user/UserManageTest.java @@ -0,0 +1,18 @@ +package domain.user; + +import data.InputData; +import domain.ladder.Ladder; +import org.junit.Test; + +import static org.junit.Assert.assertEquals; + +public class UserManageTest { + + @Test + public void 유저_리스트_관리하는_유저_관리자_생성하기() { + InputData inputData = new InputData("pobi,honux,crong,jk", 4); + Ladder ladder = new Ladder(inputData); + UserManage userManage = new UserManage(inputData, ladder); + assertEquals(4, userManage.getUsers().size()); + } +} \ No newline at end of file diff --git a/src/test/java/domain/user/UserTest.java b/src/test/java/domain/user/UserTest.java new file mode 100644 index 0000000..7558ac5 --- /dev/null +++ b/src/test/java/domain/user/UserTest.java @@ -0,0 +1,17 @@ +package domain.user; + +import data.InputData; +import domain.ladder.Pillar; +import org.junit.Test; + +import static org.junit.Assert.*; + +public class UserTest { + @Test + public void 유저생성() { + InputData inputData = new InputData("hello", 4); + Pillar pillar = new Pillar(inputData, null); + User user = new User("hello", pillar); + assertEquals("hello", user.getName()); + } +} \ No newline at end of file diff --git a/src/test/java/UtilTest.java b/src/test/java/util/UtilTest.java similarity index 51% rename from src/test/java/UtilTest.java rename to src/test/java/util/UtilTest.java index 3587aae..55ac664 100644 --- a/src/test/java/UtilTest.java +++ b/src/test/java/util/UtilTest.java @@ -1,3 +1,6 @@ +package util; + +import domain.user.UserManage; import org.junit.Test; import util.Util; @@ -12,4 +15,12 @@ public class UtilTest { List b = Util.createRandomIntegers(3); assertEquals(true, b.size()<=3 && b.size()>=0); } + + + @Test + public void UserName_여러개로_분리하기() { + String users = "pobi,honux,crong,jk"; + List separateUserName = Util.separateUserName(users); + assertEquals("pobi", separateUserName.get(0)); + } } \ No newline at end of file diff --git a/src/test/java/view/InputViewTest.java b/src/test/java/view/InputViewTest.java new file mode 100644 index 0000000..066fd36 --- /dev/null +++ b/src/test/java/view/InputViewTest.java @@ -0,0 +1,26 @@ +package view; + +import org.junit.Test; + +import java.io.ByteArrayInputStream; +import java.io.InputStream; + +import static org.junit.Assert.*; + +public class InputViewTest { + @Test + public void 참가자_입력() { + String purchase = "pobi,honux,crong,jk"; + InputStream purchaseInputStream = new ByteArrayInputStream(purchase.getBytes()); + InputView inputView = new InputView(purchaseInputStream); + assertEquals("pobi,honux,crong,jk", inputView.participants()); + } + + @Test + public void 사다리_높이_입력() { + String ladderHeight = "1"; + InputStream inputCorrectStringStream = new ByteArrayInputStream(ladderHeight.getBytes()); + InputView inputView = new InputView(inputCorrectStringStream); + assertEquals(1, inputView.ladderHeight()); + } +} \ No newline at end of file From 2f3982b803f062fdd597b404b64645dc98951a4f Mon Sep 17 00:00:00 2001 From: mjung1798 Date: Sat, 4 May 2019 01:42:41 +0900 Subject: [PATCH 08/14] ladder game complete --- src/main/java/LadderGame.java | 6 +- src/main/java/domain/ladder/Ladder.java | 28 ++--- src/main/java/domain/ladder/LinkedType.java | 13 ++- src/main/java/domain/ladder/Pillar.java | 5 +- src/main/java/domain/user/User.java | 9 +- src/main/java/domain/user/UserManage.java | 29 ++--- src/main/java/util/Util.java | 2 +- src/main/java/view/InputView.java | 2 +- src/main/java/view/OutputView.java | 104 ++++++++++++++++++ src/test/java/domain/ladder/LadderTest.java | 9 +- src/test/java/domain/ladder/PillarTest.java | 12 +- src/test/java/domain/user/UserManageTest.java | 4 +- src/test/java/domain/user/UserTest.java | 8 +- src/test/java/util/UtilTest.java | 6 +- src/test/java/view/InputViewTest.java | 2 +- 15 files changed, 169 insertions(+), 70 deletions(-) diff --git a/src/main/java/LadderGame.java b/src/main/java/LadderGame.java index 68c964c..ce22ae9 100644 --- a/src/main/java/LadderGame.java +++ b/src/main/java/LadderGame.java @@ -2,6 +2,7 @@ import domain.ladder.Ladder; import domain.user.UserManage; import view.InputView; +import view.OutputView; public class LadderGame { @@ -9,8 +10,9 @@ public static void main(String args[]) { InputView inputView = new InputView(System.in); InputData inputData = new InputData(inputView.participants(), inputView.ladderHeight()); Ladder ladder = new Ladder(inputData); - UserManage userManage = new UserManage(inputData, ladder); - + UserManage userManage = new UserManage(inputData); + OutputView outputView = new OutputView(userManage, ladder); + outputView.printLadder(); } } diff --git a/src/main/java/domain/ladder/Ladder.java b/src/main/java/domain/ladder/Ladder.java index 8bc9af5..c0d4b6d 100644 --- a/src/main/java/domain/ladder/Ladder.java +++ b/src/main/java/domain/ladder/Ladder.java @@ -7,7 +7,6 @@ public class Ladder { - public static final int MINIMUM_PILLAR_NUM = 1; private List pillars; private Integer width; private Integer height; @@ -22,7 +21,7 @@ private List createLadder(InputData inputData) { List pillars = new ArrayList<>(); Pillar previous = new Pillar(inputData, null); pillars.add(previous); - for (int i = MINIMUM_PILLAR_NUM; i <= width - 1; i++) { + for (int i = 1; i < width; i++) { Pillar now = new Pillar(inputData, previous); pillars.add(now); previous = now; @@ -30,6 +29,13 @@ private List createLadder(InputData inputData) { return pillars; } + public Pillar getPillarByNum(Integer pillarNum) { + return pillars.stream() + .filter(p -> p.getPillarNum() == pillarNum) + .findFirst() + .orElse(null); + } + public List getPillars() { return pillars; } @@ -42,22 +48,4 @@ public Integer getHeight() { return height; } -// public Pillar getPreviousPillar(Pillar pillar) { -// if (MINIMUM_PILLAR_NUM <= pillar.getPillarNum()) -// return null; -// return pillars.stream() -// .filter(p -> p.getPillarNum() == pillar.getPillarNum() - 1) -// .findFirst() -// .orElse(null); -// } -// -// public Pillar getNextPillar(Pillar pillar) { -// if (MINIMUM_PILLAR_NUM <= pillar.getPillarNum()) -// return null; -// return pillars.stream() -// .filter(p -> p.getPillarNum() == pillar.getPillarNum() + 1) -// .findFirst() -// .orElse(null); -// } - } diff --git a/src/main/java/domain/ladder/LinkedType.java b/src/main/java/domain/ladder/LinkedType.java index 3fc8afc..44df629 100644 --- a/src/main/java/domain/ladder/LinkedType.java +++ b/src/main/java/domain/ladder/LinkedType.java @@ -1,5 +1,16 @@ package domain.ladder; public enum LinkedType { - RIGHT, LEFT + RIGHT('├'), + LEFT('┤'); + + private char drawLink; + + LinkedType(char drawLink) { + this.drawLink = drawLink; + } + + public char getDrawLink() { + return drawLink; + } } diff --git a/src/main/java/domain/ladder/Pillar.java b/src/main/java/domain/ladder/Pillar.java index 8d99afe..b48577e 100644 --- a/src/main/java/domain/ladder/Pillar.java +++ b/src/main/java/domain/ladder/Pillar.java @@ -9,6 +9,7 @@ import static util.Util.createRandomIntegersWithRestriction; public class Pillar { + public static final int MINIMUM_PILLAR_NUM = 0; private List bridges; private Integer pillarNum; @@ -27,7 +28,7 @@ public List getBridges() { private Integer nowPillarNum(Pillar previousPillar) { if (previousPillar == null) - return Ladder.MINIMUM_PILLAR_NUM; + return MINIMUM_PILLAR_NUM; return previousPillar.getPillarNum() + 1; } @@ -54,7 +55,7 @@ private List createBridges(InputData inputData, Pillar previousPillar) { private boolean isLastPillar(InputData inputData, Pillar previousPillar) { - if (inputData.getLadderWidth() - previousPillar.getPillarNum() == 1) + if (inputData.getLadderWidth() - previousPillar.getPillarNum() == 2) return true; return false; } diff --git a/src/main/java/domain/user/User.java b/src/main/java/domain/user/User.java index a245759..704278e 100644 --- a/src/main/java/domain/user/User.java +++ b/src/main/java/domain/user/User.java @@ -1,22 +1,15 @@ package domain.user; -import domain.ladder.Pillar; - public class User { private String name; - private Pillar startPillar; - public User(String name, Pillar pillar) { + public User(String name) { this.name = name; - this.startPillar = pillar; } public String getName() { return name; } - public Pillar getStartPillar() { - return startPillar; - } } diff --git a/src/main/java/domain/user/UserManage.java b/src/main/java/domain/user/UserManage.java index b1fcd4e..e1f6561 100644 --- a/src/main/java/domain/user/UserManage.java +++ b/src/main/java/domain/user/UserManage.java @@ -1,33 +1,36 @@ package domain.user; import data.InputData; -import domain.ladder.Ladder; -import domain.ladder.Pillar; -import java.util.ArrayList; +import java.util.Collections; import java.util.List; +import java.util.stream.Collectors; import static util.Util.separateUserName; public class UserManage { private List users; - public UserManage(InputData inputData, Ladder ladder) { - if (inputData.getLadderWidth() == ladder.getWidth()) { - this.users = createUser(separateUserName(inputData.getParticipants()), ladder.getPillars()); - } + public UserManage(InputData inputData) { + this.users = createUser(inputData.getParticipants()); } public List getUsers() { return users; } - private List createUser(List userNames, List pillars) { - List users = new ArrayList<>(); - for (int i = 0; i < userNames.size(); i++) { - users.add(new User(userNames.get(i), pillars.get(i))); - } - return users; + private List createUser(String users) { + return separateUserName(users).stream() + .map(u -> new User(u)) + .collect(Collectors.toList()); + } + + public int getUserCharMaxNum() { + List lengths = users.stream() + .map(u -> u.getName().length()) + .collect(Collectors.toList()); + return Collections.max(lengths); } + } diff --git a/src/main/java/util/Util.java b/src/main/java/util/Util.java index 793c7ec..0ee762c 100644 --- a/src/main/java/util/Util.java +++ b/src/main/java/util/Util.java @@ -30,7 +30,7 @@ public static List createRandomIntegersWithRestriction(Integer heights, .collect(Collectors.toList()); } - public static List separateUserName(String participants){ + public static List separateUserName(String participants) { String[] users = participants.split(DELIMETER); return Arrays.asList(users); } diff --git a/src/main/java/view/InputView.java b/src/main/java/view/InputView.java index 7927e46..57b0994 100644 --- a/src/main/java/view/InputView.java +++ b/src/main/java/view/InputView.java @@ -15,7 +15,7 @@ public String participants() { return sc.next(); } - public int ladderHeight(){ + public int ladderHeight() { System.out.println("최대 사다리 높이는 몇 개인가요?"); return sc.nextInt(); } diff --git a/src/main/java/view/OutputView.java b/src/main/java/view/OutputView.java index d8f9743..3407283 100644 --- a/src/main/java/view/OutputView.java +++ b/src/main/java/view/OutputView.java @@ -1,4 +1,108 @@ package view; +import domain.ladder.Ladder; +import domain.ladder.LinkedType; +import domain.ladder.Pillar; +import domain.user.User; +import domain.user.UserManage; + +import java.util.Arrays; +import java.util.stream.IntStream; + public class OutputView { + + + public static final int PILLAR_WIDTH_SURPLUS = 1; + private static final char DOWN = '│'; + private static final char HORIZON = '─'; + private static final char BLANK = ' '; + + private char[][] ladderDrawing; + private int basicNum; + private int ladderHeight; + private UserManage userManage; + + public OutputView(UserManage userManage, Ladder ladder) { + this.basicNum = calculateBasicsNum(userManage); + this.ladderHeight = ladder.getHeight(); + this.ladderDrawing = drawAllLadder(ladder); + this.userManage = userManage; + } + + public void printLadder() { + System.out.println(makeUserNames()); + System.out.println(makeStringLadder()); + } + + private String makeStringLadder() { + StringBuilder sb = new StringBuilder(); + for (int i = 0; i < ladderHeight; i++) { + sb.append(new String(ladderDrawing[i]) + "\n"); + } + return sb.toString(); + } + + private String makeUserNames() { + StringBuilder sb = new StringBuilder(); + for (User user : userManage.getUsers()) { + sb.append(user.getName()); + sb.append(nameBlank(user)); + } + return sb.toString(); + } + + + private String nameBlank(User user) { + int width = basicNum - user.getName().length() + PILLAR_WIDTH_SURPLUS; + StringBuilder sb = new StringBuilder(); + IntStream.range(0, width) + .forEach(each -> sb.append(BLANK)); + return sb.toString(); + } + + private char[][] drawAllLadder(Ladder ladder) { + char[][] charLadder = drawLadderInit(ladder); + for (int i = 0; i < ladder.getWidth(); i++) { + drawPillar(charLadder, ladder.getPillarByNum(i)); + } + return charLadder; + } + + private char[][] drawLadderInit(Ladder ladder) { + char[][] charLadder = new char[ladderHeight][calculateDrawingWidth(ladder)]; + for (int i = 0; i < ladderHeight; i++) { + Arrays.fill(charLadder[i], BLANK); + } + return charLadder; + } + + private void drawPillar(char[][] charLadder, Pillar pillar) { + for (int i = 0; i < ladderHeight; i++) { + int mainPillarIdx = pillar.getPillarNum() * (basicNum + PILLAR_WIDTH_SURPLUS); + charLadder[i][mainPillarIdx] = DOWN; + } + for (Integer location : pillar.getBridgesDirectionLocation(LinkedType.RIGHT)) { + drawPillarWithRIGHTLink(charLadder[location], pillar.getPillarNum()); + } + for (Integer location : pillar.getBridgesDirectionLocation(LinkedType.LEFT)) { + charLadder[location][pillar.getPillarNum() * (basicNum + PILLAR_WIDTH_SURPLUS)] = LinkedType.LEFT.getDrawLink(); + } + } + + private void drawPillarWithRIGHTLink(char[] ladderRow, Integer pillarNum) { + int mainPillarIdx = pillarNum * (basicNum + PILLAR_WIDTH_SURPLUS); + ladderRow[mainPillarIdx] = LinkedType.RIGHT.getDrawLink(); + for (int i = mainPillarIdx + PILLAR_WIDTH_SURPLUS; i <= mainPillarIdx + basicNum; i++) { + ladderRow[i] = HORIZON; + } + } + + private int calculateDrawingWidth(Ladder ladder) { + return ladder.getWidth() * basicNum; + } + + private int calculateBasicsNum(UserManage userManage) { + return userManage.getUserCharMaxNum(); + } + } diff --git a/src/test/java/domain/ladder/LadderTest.java b/src/test/java/domain/ladder/LadderTest.java index b7fe43a..e2757f3 100644 --- a/src/test/java/domain/ladder/LadderTest.java +++ b/src/test/java/domain/ladder/LadderTest.java @@ -1,7 +1,6 @@ package domain.ladder; import data.InputData; -import domain.ladder.Ladder; import org.junit.Test; import static org.junit.Assert.assertEquals; @@ -16,6 +15,14 @@ public class LadderTest { assertEquals((int) ladder.getWidth(), ladder.getPillars().size()); } + @Test + public void Pillar_NUM_에따라_찾기() { + InputData inputData = new InputData("pobi,honux,crong,jk", 4); + Ladder ladder = new Ladder(inputData); + + Pillar p = ladder.getPillarByNum(1); + assertEquals((Integer) 1, p.getPillarNum()); + } // @Test // public void 이전기둥불러오기_left_pillar() { diff --git a/src/test/java/domain/ladder/PillarTest.java b/src/test/java/domain/ladder/PillarTest.java index 75b88d0..dedaf6d 100644 --- a/src/test/java/domain/ladder/PillarTest.java +++ b/src/test/java/domain/ladder/PillarTest.java @@ -1,8 +1,6 @@ package domain.ladder; import data.InputData; -import domain.ladder.LinkedType; -import domain.ladder.Pillar; import org.junit.Test; import java.util.List; @@ -15,7 +13,7 @@ public class PillarTest { public void 첫번째기둥_넘버만들기() { InputData inputData = new InputData("pobi,honux,crong,jk", 3); Pillar p = new Pillar(inputData, null); - assertEquals((Integer) 1, p.getPillarNum()); + assertEquals((Integer) 0, p.getPillarNum()); } @Test @@ -24,7 +22,7 @@ public class PillarTest { Pillar p = new Pillar(inputData, null); Pillar p1 = new Pillar(inputData, p); - assertEquals((Integer) 2, p1.getPillarNum()); + assertEquals((Integer) 1, p1.getPillarNum()); } @Test @@ -35,7 +33,7 @@ public class PillarTest { Pillar p2 = new Pillar(inputData, p1); Pillar p3 = new Pillar(inputData, p2); - assertEquals((Integer) 4, p3.getPillarNum()); + assertEquals((Integer) 3, p3.getPillarNum()); } @Test @@ -91,8 +89,8 @@ public class PillarTest { public void 이전기둥확인해서_넘버만들기() { InputData inputData = new InputData("pobi,honux,crong,jk", 3); Pillar p = new Pillar(inputData, null); - Pillar p2 = new Pillar(inputData, p); - assertEquals((Integer) 2, p2.getPillarNum()); + Pillar p1 = new Pillar(inputData, p); + assertEquals((Integer) 1, p1.getPillarNum()); } @Test diff --git a/src/test/java/domain/user/UserManageTest.java b/src/test/java/domain/user/UserManageTest.java index e17e90e..72f2583 100644 --- a/src/test/java/domain/user/UserManageTest.java +++ b/src/test/java/domain/user/UserManageTest.java @@ -1,7 +1,6 @@ package domain.user; import data.InputData; -import domain.ladder.Ladder; import org.junit.Test; import static org.junit.Assert.assertEquals; @@ -11,8 +10,7 @@ public class UserManageTest { @Test public void 유저_리스트_관리하는_유저_관리자_생성하기() { InputData inputData = new InputData("pobi,honux,crong,jk", 4); - Ladder ladder = new Ladder(inputData); - UserManage userManage = new UserManage(inputData, ladder); + UserManage userManage = new UserManage(inputData); assertEquals(4, userManage.getUsers().size()); } } \ No newline at end of file diff --git a/src/test/java/domain/user/UserTest.java b/src/test/java/domain/user/UserTest.java index 7558ac5..4eef335 100644 --- a/src/test/java/domain/user/UserTest.java +++ b/src/test/java/domain/user/UserTest.java @@ -1,17 +1,13 @@ package domain.user; -import data.InputData; -import domain.ladder.Pillar; import org.junit.Test; -import static org.junit.Assert.*; +import static org.junit.Assert.assertEquals; public class UserTest { @Test public void 유저생성() { - InputData inputData = new InputData("hello", 4); - Pillar pillar = new Pillar(inputData, null); - User user = new User("hello", pillar); + User user = new User("hello"); assertEquals("hello", user.getName()); } } \ No newline at end of file diff --git a/src/test/java/util/UtilTest.java b/src/test/java/util/UtilTest.java index 55ac664..f1d2dab 100644 --- a/src/test/java/util/UtilTest.java +++ b/src/test/java/util/UtilTest.java @@ -1,19 +1,17 @@ package util; -import domain.user.UserManage; import org.junit.Test; -import util.Util; import java.util.List; -import static org.junit.Assert.*; +import static org.junit.Assert.assertEquals; public class UtilTest { @Test public void 랜덤_정수_리스트_생성() { List b = Util.createRandomIntegers(3); - assertEquals(true, b.size()<=3 && b.size()>=0); + assertEquals(true, b.size() <= 3 && b.size() >= 0); } diff --git a/src/test/java/view/InputViewTest.java b/src/test/java/view/InputViewTest.java index 066fd36..71a337d 100644 --- a/src/test/java/view/InputViewTest.java +++ b/src/test/java/view/InputViewTest.java @@ -5,7 +5,7 @@ import java.io.ByteArrayInputStream; import java.io.InputStream; -import static org.junit.Assert.*; +import static org.junit.Assert.assertEquals; public class InputViewTest { @Test From 4231c633ebdec09e2e3e9ec48b539f31abfde901 Mon Sep 17 00:00:00 2001 From: mjung1798 Date: Sat, 4 May 2019 15:01:52 +0900 Subject: [PATCH 09/14] after advise --- src/main/java/domain/ladder/Bridge.java | 8 +++ src/main/java/domain/ladder/Ladder.java | 18 +++--- src/main/java/domain/ladder/LinkedType.java | 13 +--- src/main/java/domain/ladder/Pillar.java | 36 +++++------ ...{UserManage.java => ParticipantUsers.java} | 10 +-- src/main/java/domain/user/User.java | 3 + .../GameStartOption.java} | 6 +- .../{Util.java => RandomIntegerMaker.java} | 10 ++- src/main/java/view/OutputView.java | 32 +++++++--- src/test/java/domain/ladder/LadderTest.java | 10 +-- src/test/java/domain/ladder/PillarTest.java | 61 ++++++++++--------- .../domain/user/ParticipantUsersTest.java | 16 +++++ src/test/java/domain/user/UserManageTest.java | 16 ----- src/test/java/util/UtilTest.java | 4 +- 14 files changed, 127 insertions(+), 116 deletions(-) rename src/main/java/domain/user/{UserManage.java => ParticipantUsers.java} (72%) rename src/main/java/{data/InputData.java => dto/GameStartOption.java} (85%) rename src/main/java/util/{Util.java => RandomIntegerMaker.java} (90%) create mode 100644 src/test/java/domain/user/ParticipantUsersTest.java delete mode 100644 src/test/java/domain/user/UserManageTest.java diff --git a/src/main/java/domain/ladder/Bridge.java b/src/main/java/domain/ladder/Bridge.java index 04c44db..edcc47f 100644 --- a/src/main/java/domain/ladder/Bridge.java +++ b/src/main/java/domain/ladder/Bridge.java @@ -17,4 +17,12 @@ public LinkedType getLinkPillarDirection() { return linkPillarDirection; } + public static Bridge createOneRightBridge(Integer location) { + return (new Bridge(location, LinkedType.RIGHT)); + } + + public static Bridge createOneLeftBridge(Integer location) { + return (new Bridge(location, LinkedType.LEFT)); + } + } diff --git a/src/main/java/domain/ladder/Ladder.java b/src/main/java/domain/ladder/Ladder.java index c0d4b6d..63dd93e 100644 --- a/src/main/java/domain/ladder/Ladder.java +++ b/src/main/java/domain/ladder/Ladder.java @@ -1,6 +1,6 @@ package domain.ladder; -import data.InputData; +import dto.GameStartOption; import java.util.ArrayList; import java.util.List; @@ -11,18 +11,18 @@ public class Ladder { private Integer width; private Integer height; - public Ladder(InputData inputData) { - this.width = inputData.getLadderWidth(); - this.height = inputData.getLadderHeight(); - this.pillars = createLadder(inputData); + public Ladder(GameStartOption gameStartOption) { + this.width = gameStartOption.getLadderWidth(); + this.height = gameStartOption.getLadderHeight(); + this.pillars = createLadder(gameStartOption); } - private List createLadder(InputData inputData) { + private List createLadder(GameStartOption gameStartOption) { List pillars = new ArrayList<>(); - Pillar previous = new Pillar(inputData, null); + Pillar previous = new Pillar(gameStartOption, null); //팩토리 메소드 패턴 or construction 1개 pillars.add(previous); for (int i = 1; i < width; i++) { - Pillar now = new Pillar(inputData, previous); + Pillar now = new Pillar(gameStartOption, previous); pillars.add(now); previous = now; } @@ -33,7 +33,7 @@ public Pillar getPillarByNum(Integer pillarNum) { return pillars.stream() .filter(p -> p.getPillarNum() == pillarNum) .findFirst() - .orElse(null); + .orElseThrow(IllegalArgumentException :: new); // optional orElse에 null 던지지 말기 throw Exception } public List getPillars() { diff --git a/src/main/java/domain/ladder/LinkedType.java b/src/main/java/domain/ladder/LinkedType.java index 44df629..3fc8afc 100644 --- a/src/main/java/domain/ladder/LinkedType.java +++ b/src/main/java/domain/ladder/LinkedType.java @@ -1,16 +1,5 @@ package domain.ladder; public enum LinkedType { - RIGHT('├'), - LEFT('┤'); - - private char drawLink; - - LinkedType(char drawLink) { - this.drawLink = drawLink; - } - - public char getDrawLink() { - return drawLink; - } + RIGHT, LEFT } diff --git a/src/main/java/domain/ladder/Pillar.java b/src/main/java/domain/ladder/Pillar.java index b48577e..4f52d75 100644 --- a/src/main/java/domain/ladder/Pillar.java +++ b/src/main/java/domain/ladder/Pillar.java @@ -1,21 +1,23 @@ package domain.ladder; -import data.InputData; + +import dto.GameStartOption; import java.util.List; import java.util.stream.Collectors; -import static util.Util.createRandomIntegers; -import static util.Util.createRandomIntegersWithRestriction; +import static util.RandomIntegerMaker.createRandomIntegers; +import static util.RandomIntegerMaker.createRandomIntegersWithRestriction; + public class Pillar { public static final int MINIMUM_PILLAR_NUM = 0; private List bridges; private Integer pillarNum; - public Pillar(InputData inputData, Pillar previousPillar) { //자동으로 다리생성 + public Pillar(GameStartOption gameStartOption, Pillar previousPillar) { //자동으로 다리생성 pillarNum = nowPillarNum(previousPillar); - bridges = createBridges(inputData, previousPillar); + bridges = createBridges(gameStartOption, previousPillar); } public Integer getPillarNum() { @@ -45,17 +47,17 @@ public List getBridgesDirectionLocation(LinkedType linkedType) { .collect(Collectors.toList()); } - private List createBridges(InputData inputData, Pillar previousPillar) { + private List createBridges(GameStartOption gameStartOption, Pillar previousPillar) { if (isFirstPillar(previousPillar)) - return createRightBridges(createRandomIntegers(inputData.getLadderHeight())); - if (isLastPillar(inputData, previousPillar)) + return createRightBridges(createRandomIntegers(gameStartOption.getLadderHeight())); + if (isLastPillar(gameStartOption, previousPillar)) return createLeftBridges(previousPillar); - return createLeftRightBridges(previousPillar, inputData.getLadderHeight()); + return createLeftRightBridges(previousPillar, gameStartOption.getLadderHeight()); } - private boolean isLastPillar(InputData inputData, Pillar previousPillar) { - if (inputData.getLadderWidth() - previousPillar.getPillarNum() == 2) + private boolean isLastPillar(GameStartOption gameStartOption, Pillar previousPillar) { + if (gameStartOption.getLadderWidth() - previousPillar.getPillarNum() == 2) return true; return false; } @@ -76,7 +78,7 @@ private List createLeftRightBridges(Pillar previous, Integer height) { private List createRightBridges(List locationsOfBridge) { return locationsOfBridge.stream() - .map(b -> createOneRightBridge(b)) + .map(b -> Bridge.createOneRightBridge(b)) .collect(Collectors.toList()); } @@ -84,15 +86,7 @@ private List createRightBridges(List locationsOfBridge) { private List createLeftBridges(Pillar previous) { List locationsOfBridge = previous.getBridgesDirectionLocation(LinkedType.RIGHT); return locationsOfBridge.stream() - .map(b -> createOneLeftBridge(b)) + .map(b -> Bridge.createOneLeftBridge(b)) .collect(Collectors.toList()); } - - private Bridge createOneRightBridge(Integer location) { - return (new Bridge(location, LinkedType.RIGHT)); - } - - private Bridge createOneLeftBridge(Integer location) { - return (new Bridge(location, LinkedType.LEFT)); - } } \ No newline at end of file diff --git a/src/main/java/domain/user/UserManage.java b/src/main/java/domain/user/ParticipantUsers.java similarity index 72% rename from src/main/java/domain/user/UserManage.java rename to src/main/java/domain/user/ParticipantUsers.java index e1f6561..d84f31b 100644 --- a/src/main/java/domain/user/UserManage.java +++ b/src/main/java/domain/user/ParticipantUsers.java @@ -1,18 +1,18 @@ package domain.user; -import data.InputData; +import dto.GameStartOption; import java.util.Collections; import java.util.List; import java.util.stream.Collectors; -import static util.Util.separateUserName; +import static util.RandomIntegerMaker.separateUserName; -public class UserManage { +public class ParticipantUsers { private List users; - public UserManage(InputData inputData) { - this.users = createUser(inputData.getParticipants()); + public ParticipantUsers(GameStartOption gameStartOption) { + this.users = createUser(gameStartOption.getParticipants()); } public List getUsers() { diff --git a/src/main/java/domain/user/User.java b/src/main/java/domain/user/User.java index 704278e..efe026a 100644 --- a/src/main/java/domain/user/User.java +++ b/src/main/java/domain/user/User.java @@ -2,6 +2,9 @@ public class User { + //user's PillarNum 갖고있게 하기, + //결과 반환하는것 만들기 + private String name; public User(String name) { diff --git a/src/main/java/data/InputData.java b/src/main/java/dto/GameStartOption.java similarity index 85% rename from src/main/java/data/InputData.java rename to src/main/java/dto/GameStartOption.java index b6abc2a..57fb832 100644 --- a/src/main/java/data/InputData.java +++ b/src/main/java/dto/GameStartOption.java @@ -1,6 +1,6 @@ -package data; +package dto; -public class InputData { +public class GameStartOption { public static final String DELIMETER = ","; @@ -8,7 +8,7 @@ public class InputData { private int ladderHeight; private String participants; - public InputData(String participants, int ladderHeight) { + public GameStartOption(String participants, int ladderHeight) { this.ladderWidth = ladderWidth(participants); this.ladderHeight = ladderHeight; this.participants = participants; diff --git a/src/main/java/util/Util.java b/src/main/java/util/RandomIntegerMaker.java similarity index 90% rename from src/main/java/util/Util.java rename to src/main/java/util/RandomIntegerMaker.java index 0ee762c..df54b49 100644 --- a/src/main/java/util/Util.java +++ b/src/main/java/util/RandomIntegerMaker.java @@ -6,10 +6,14 @@ import java.util.stream.Collectors; import java.util.stream.IntStream; -import static data.InputData.DELIMETER; +import static dto.GameStartOption.DELIMETER; + +public class RandomIntegerMaker { + + private RandomIntegerMaker() { + + } -public class Util { - // public public static final int MIN_HEIGHT_INDEX = 0; public static List createRandomIntegers(Integer heights) { diff --git a/src/main/java/view/OutputView.java b/src/main/java/view/OutputView.java index 3407283..d4342fb 100644 --- a/src/main/java/view/OutputView.java +++ b/src/main/java/view/OutputView.java @@ -3,30 +3,42 @@ import domain.ladder.Ladder; import domain.ladder.LinkedType; import domain.ladder.Pillar; +import domain.user.ParticipantUsers; import domain.user.User; -import domain.user.UserManage; import java.util.Arrays; import java.util.stream.IntStream; public class OutputView { +// 가로로 찍을 수 있게 변환해서 +// dto로 bridge와 그 높이 들고있는 dto만들어서 가로로 변환해서 +// 찍기 편한 형태로 변환하기 +// flatMap으로 쭉 적으면서 +// bridge 1개랑 level 들고있으면 (Converter class 만들기) + + + /* + 높이만큼 돌고 높이 1일 때 + */ public static final int PILLAR_WIDTH_SURPLUS = 1; private static final char DOWN = '│'; private static final char HORIZON = '─'; + private static final char RIGHT = '├'; + private static final char LEFT = '┤'; private static final char BLANK = ' '; private char[][] ladderDrawing; private int basicNum; private int ladderHeight; - private UserManage userManage; + private ParticipantUsers participantUsers; - public OutputView(UserManage userManage, Ladder ladder) { - this.basicNum = calculateBasicsNum(userManage); + public OutputView(ParticipantUsers participantUsers, Ladder ladder) { + this.basicNum = calculateBasicsNum(participantUsers); this.ladderHeight = ladder.getHeight(); this.ladderDrawing = drawAllLadder(ladder); - this.userManage = userManage; + this.participantUsers = participantUsers; } public void printLadder() { @@ -44,7 +56,7 @@ private String makeStringLadder() { private String makeUserNames() { StringBuilder sb = new StringBuilder(); - for (User user : userManage.getUsers()) { + for (User user : participantUsers.getUsers()) { sb.append(user.getName()); sb.append(nameBlank(user)); } @@ -85,13 +97,13 @@ private void drawPillar(char[][] charLadder, Pillar pillar) { drawPillarWithRIGHTLink(charLadder[location], pillar.getPillarNum()); } for (Integer location : pillar.getBridgesDirectionLocation(LinkedType.LEFT)) { - charLadder[location][pillar.getPillarNum() * (basicNum + PILLAR_WIDTH_SURPLUS)] = LinkedType.LEFT.getDrawLink(); + charLadder[location][pillar.getPillarNum() * (basicNum + PILLAR_WIDTH_SURPLUS)] = LEFT; } } private void drawPillarWithRIGHTLink(char[] ladderRow, Integer pillarNum) { int mainPillarIdx = pillarNum * (basicNum + PILLAR_WIDTH_SURPLUS); - ladderRow[mainPillarIdx] = LinkedType.RIGHT.getDrawLink(); + ladderRow[mainPillarIdx] = RIGHT; for (int i = mainPillarIdx + PILLAR_WIDTH_SURPLUS; i <= mainPillarIdx + basicNum; i++) { ladderRow[i] = HORIZON; } @@ -101,8 +113,8 @@ private int calculateDrawingWidth(Ladder ladder) { return ladder.getWidth() * basicNum; } - private int calculateBasicsNum(UserManage userManage) { - return userManage.getUserCharMaxNum(); + private int calculateBasicsNum(ParticipantUsers participantUsers) { + return participantUsers.getUserCharMaxNum(); } } diff --git a/src/test/java/domain/ladder/LadderTest.java b/src/test/java/domain/ladder/LadderTest.java index e2757f3..506015d 100644 --- a/src/test/java/domain/ladder/LadderTest.java +++ b/src/test/java/domain/ladder/LadderTest.java @@ -1,6 +1,6 @@ package domain.ladder; -import data.InputData; +import dto.GameStartOption; import org.junit.Test; import static org.junit.Assert.assertEquals; @@ -9,16 +9,16 @@ public class LadderTest { @Test public void Ladder_생성하기_Pillar_리스트_생성하기() { - InputData inputData = new InputData("pobi,honux,crong,jk", 4); - Ladder ladder = new Ladder(inputData); + GameStartOption gameStartOption = new GameStartOption("pobi,honux,crong,jk", 4); + Ladder ladder = new Ladder(gameStartOption); assertEquals((int) ladder.getWidth(), ladder.getPillars().size()); } @Test public void Pillar_NUM_에따라_찾기() { - InputData inputData = new InputData("pobi,honux,crong,jk", 4); - Ladder ladder = new Ladder(inputData); + GameStartOption gameStartOption = new GameStartOption("pobi,honux,crong,jk", 4); + Ladder ladder = new Ladder(gameStartOption); Pillar p = ladder.getPillarByNum(1); assertEquals((Integer) 1, p.getPillarNum()); diff --git a/src/test/java/domain/ladder/PillarTest.java b/src/test/java/domain/ladder/PillarTest.java index dedaf6d..0e857bf 100644 --- a/src/test/java/domain/ladder/PillarTest.java +++ b/src/test/java/domain/ladder/PillarTest.java @@ -1,6 +1,7 @@ package domain.ladder; -import data.InputData; + +import dto.GameStartOption; import org.junit.Test; import java.util.List; @@ -11,35 +12,35 @@ public class PillarTest { @Test public void 첫번째기둥_넘버만들기() { - InputData inputData = new InputData("pobi,honux,crong,jk", 3); - Pillar p = new Pillar(inputData, null); + GameStartOption gameStartOption = new GameStartOption("pobi,honux,crong,jk", 3); + Pillar p = new Pillar(gameStartOption, null); assertEquals((Integer) 0, p.getPillarNum()); } @Test public void 가운데기둥_넘버만들기() { - InputData inputData = new InputData("pobi,honux,crong,jk", 3); - Pillar p = new Pillar(inputData, null); - Pillar p1 = new Pillar(inputData, p); + GameStartOption gameStartOption = new GameStartOption("pobi,honux,crong,jk", 3); + Pillar p = new Pillar(gameStartOption, null); + Pillar p1 = new Pillar(gameStartOption, p); assertEquals((Integer) 1, p1.getPillarNum()); } @Test public void 마지막기둥_넘버만들기() { - InputData inputData = new InputData("pobi,honux,crong,jk", 3); - Pillar p = new Pillar(inputData, null); - Pillar p1 = new Pillar(inputData, p); - Pillar p2 = new Pillar(inputData, p1); - Pillar p3 = new Pillar(inputData, p2); + GameStartOption gameStartOption = new GameStartOption("pobi,honux,crong,jk", 3); + Pillar p = new Pillar(gameStartOption, null); + Pillar p1 = new Pillar(gameStartOption, p); + Pillar p2 = new Pillar(gameStartOption, p1); + Pillar p3 = new Pillar(gameStartOption, p2); assertEquals((Integer) 3, p3.getPillarNum()); } @Test public void 첫번째_기둥_bridge_리스트_만들기() { - InputData inputData = new InputData("pobi,honux,crong,jk", 3); - Pillar p = new Pillar(inputData, null); + GameStartOption gameStartOption = new GameStartOption("pobi,honux,crong,jk", 3); + Pillar p = new Pillar(gameStartOption, null); System.out.println(p.getBridgesLocations()); @@ -49,9 +50,9 @@ public class PillarTest { @Test public void 두번째_기둥_bridge_리스트_만들기() { - InputData inputData = new InputData("pobi,honux,crong,jk", 10); - Pillar p = new Pillar(inputData, null); - Pillar p1 = new Pillar(inputData, p); + GameStartOption gameStartOption = new GameStartOption("pobi,honux,crong,jk", 10); + Pillar p = new Pillar(gameStartOption, null); + Pillar p1 = new Pillar(gameStartOption, p); List p1LeftBridgesLocation = p1.getBridgesDirectionLocation(LinkedType.LEFT); List p1RightBridgesLocation = p1.getBridgesDirectionLocation(LinkedType.RIGHT); @@ -68,11 +69,11 @@ public class PillarTest { @Test public void 마지막_기둥_bridge_리스트_만들기() { - InputData inputData = new InputData("pobi,honux,crong,jk", 10); - Pillar p = new Pillar(inputData, null); - Pillar p1 = new Pillar(inputData, p); - Pillar p2 = new Pillar(inputData, p1); - Pillar p3 = new Pillar(inputData, p2); + GameStartOption GameStartOption = new GameStartOption("pobi,honux,crong,jk", 10); + Pillar p = new Pillar(GameStartOption, null); + Pillar p1 = new Pillar(GameStartOption, p); + Pillar p2 = new Pillar(GameStartOption, p1); + Pillar p3 = new Pillar(GameStartOption, p2); // System.out.println("P RIGHT" + p.getBridgesDirectionLocation(LinkedType.RIGHT)); // System.out.println("p1 LEFT" + p1.getBridgesDirectionLocation(LinkedType.LEFT)); @@ -87,23 +88,23 @@ public class PillarTest { @Test public void 이전기둥확인해서_넘버만들기() { - InputData inputData = new InputData("pobi,honux,crong,jk", 3); - Pillar p = new Pillar(inputData, null); - Pillar p1 = new Pillar(inputData, p); + GameStartOption GameStartOption = new GameStartOption("pobi,honux,crong,jk", 3); + Pillar p = new Pillar(GameStartOption, null); + Pillar p1 = new Pillar(GameStartOption, p); assertEquals((Integer) 1, p1.getPillarNum()); } @Test public void 자동으로_오른쪽_기둥과_연결된_다리리스트_만들기() { - InputData inputData = new InputData("pobi,honux,crong,jk", 3); - Pillar p = new Pillar(inputData, null); + GameStartOption GameStartOption = new GameStartOption("pobi,honux,crong,jk", 3); + Pillar p = new Pillar(GameStartOption, null); assertEquals(true, p.getBridges().size() <= 3); } @Test public void 기둥에_연결된_다리의_location_값_리스트_가져오기() { - InputData inputData = new InputData("pobi,honux,crong,jk", 3); - Pillar p = new Pillar(inputData, null); + GameStartOption GameStartOption = new GameStartOption("pobi,honux,crong,jk", 3); + Pillar p = new Pillar(GameStartOption, null); List bridgesLocations = p.getBridgesLocations(); System.out.println(bridgesLocations); assertEquals(true, bridgesLocations.size() <= 3 && bridgesLocations.size() >= 0); @@ -111,8 +112,8 @@ public class PillarTest { @Test public void 기둥에_연결된_특정_방향의_다리의_location_값_리스트_가져오기() { - InputData inputData = new InputData("pobi,honux,crong,jk", 3); - Pillar p = new Pillar(inputData, null); + GameStartOption GameStartOption = new GameStartOption("pobi,honux,crong,jk", 3); + Pillar p = new Pillar(GameStartOption, null); List bridgesLocations = p.getBridgesDirectionLocation(LinkedType.LEFT); assertEquals(0, bridgesLocations.size()); } diff --git a/src/test/java/domain/user/ParticipantUsersTest.java b/src/test/java/domain/user/ParticipantUsersTest.java new file mode 100644 index 0000000..d35c5da --- /dev/null +++ b/src/test/java/domain/user/ParticipantUsersTest.java @@ -0,0 +1,16 @@ +package domain.user; + +import dto.GameStartOption; +import org.junit.Test; + +import static org.junit.Assert.assertEquals; + +public class ParticipantUsersTest { + + @Test + public void 유저_리스트_관리하는_유저_관리자_생성하기() { + GameStartOption gameStartOption = new GameStartOption("pobi,honux,crong,jk", 4); + ParticipantUsers participantUsers = new ParticipantUsers(gameStartOption); + assertEquals(4, participantUsers.getUsers().size()); + } +} \ No newline at end of file diff --git a/src/test/java/domain/user/UserManageTest.java b/src/test/java/domain/user/UserManageTest.java deleted file mode 100644 index 72f2583..0000000 --- a/src/test/java/domain/user/UserManageTest.java +++ /dev/null @@ -1,16 +0,0 @@ -package domain.user; - -import data.InputData; -import org.junit.Test; - -import static org.junit.Assert.assertEquals; - -public class UserManageTest { - - @Test - public void 유저_리스트_관리하는_유저_관리자_생성하기() { - InputData inputData = new InputData("pobi,honux,crong,jk", 4); - UserManage userManage = new UserManage(inputData); - assertEquals(4, userManage.getUsers().size()); - } -} \ No newline at end of file diff --git a/src/test/java/util/UtilTest.java b/src/test/java/util/UtilTest.java index f1d2dab..b2b5721 100644 --- a/src/test/java/util/UtilTest.java +++ b/src/test/java/util/UtilTest.java @@ -10,7 +10,7 @@ public class UtilTest { @Test public void 랜덤_정수_리스트_생성() { - List b = Util.createRandomIntegers(3); + List b = RandomIntegerMaker.createRandomIntegers(3); assertEquals(true, b.size() <= 3 && b.size() >= 0); } @@ -18,7 +18,7 @@ public class UtilTest { @Test public void UserName_여러개로_분리하기() { String users = "pobi,honux,crong,jk"; - List separateUserName = Util.separateUserName(users); + List separateUserName = RandomIntegerMaker.separateUserName(users); assertEquals("pobi", separateUserName.get(0)); } } \ No newline at end of file From af5586cf508f47c27ff7c08ddd3cb073e7d5480b Mon Sep 17 00:00:00 2001 From: mjung1798 Date: Thu, 16 May 2019 17:25:47 +0900 Subject: [PATCH 10/14] constructor edit --- src/main/java/LadderGame.java | 16 +++ src/main/java/domain/converter/Level.java | 10 ++ .../domain/converter/OutputConverter.java | 12 ++ .../java/domain/factory/PillarFactory.java | 35 +++++ src/main/java/domain/ladder/Bridge.java | 28 ++++ src/main/java/domain/ladder/Ladder.java | 42 ++++++ src/main/java/domain/ladder/LinkedType.java | 5 + src/main/java/domain/ladder/Pillar.java | 36 +++++ src/main/java/domain/maker/LadderMaker.java | 25 ++++ src/main/java/domain/maker/PillarMaker.java | 53 ++++++++ .../java/domain/user/ParticipantUsers.java | 40 ++++++ src/main/java/domain/user/User.java | 18 +++ src/main/java/dto/GameStartOption.java | 42 ++++++ src/main/java/util/RandomIntegerMaker.java | 41 ++++++ src/main/java/view/InputView.java | 36 +++++ src/main/java/view/OutputView.java | 123 ++++++++++++++++++ src/test/java/domain/converter/LevelTest.java | 12 ++ .../domain/converter/OutputConverterTest.java | 7 + .../domain/factory/PillarFactoryTest.java | 52 ++++++++ src/test/java/domain/ladder/BridgeTest.java | 22 ++++ src/test/java/domain/ladder/LadderTest.java | 45 +++++++ src/test/java/domain/ladder/PillarTest.java | 32 +++++ .../java/domain/maker/LadderMakerTest.java | 20 +++ .../java/domain/maker/PillarMakerTest.java | 86 ++++++++++++ .../domain/user/ParticipantUsersTest.java | 16 +++ src/test/java/domain/user/UserTest.java | 13 ++ src/test/java/util/UtilTest.java | 24 ++++ src/test/java/view/InputViewTest.java | 26 ++++ 28 files changed, 917 insertions(+) create mode 100644 src/main/java/LadderGame.java create mode 100644 src/main/java/domain/converter/Level.java create mode 100644 src/main/java/domain/converter/OutputConverter.java create mode 100644 src/main/java/domain/factory/PillarFactory.java create mode 100644 src/main/java/domain/ladder/Bridge.java create mode 100644 src/main/java/domain/ladder/Ladder.java create mode 100644 src/main/java/domain/ladder/LinkedType.java create mode 100644 src/main/java/domain/ladder/Pillar.java create mode 100644 src/main/java/domain/maker/LadderMaker.java create mode 100644 src/main/java/domain/maker/PillarMaker.java create mode 100644 src/main/java/domain/user/ParticipantUsers.java create mode 100644 src/main/java/domain/user/User.java create mode 100644 src/main/java/dto/GameStartOption.java create mode 100644 src/main/java/util/RandomIntegerMaker.java create mode 100644 src/main/java/view/InputView.java create mode 100644 src/main/java/view/OutputView.java create mode 100644 src/test/java/domain/converter/LevelTest.java create mode 100644 src/test/java/domain/converter/OutputConverterTest.java create mode 100644 src/test/java/domain/factory/PillarFactoryTest.java create mode 100644 src/test/java/domain/ladder/BridgeTest.java create mode 100644 src/test/java/domain/ladder/LadderTest.java create mode 100644 src/test/java/domain/ladder/PillarTest.java create mode 100644 src/test/java/domain/maker/LadderMakerTest.java create mode 100644 src/test/java/domain/maker/PillarMakerTest.java create mode 100644 src/test/java/domain/user/ParticipantUsersTest.java create mode 100644 src/test/java/domain/user/UserTest.java create mode 100644 src/test/java/util/UtilTest.java create mode 100644 src/test/java/view/InputViewTest.java diff --git a/src/main/java/LadderGame.java b/src/main/java/LadderGame.java new file mode 100644 index 0000000..4c74ffc --- /dev/null +++ b/src/main/java/LadderGame.java @@ -0,0 +1,16 @@ +import domain.ladder.Ladder; +import domain.user.ParticipantUsers; +import dto.GameStartOption; +import view.InputView; +import view.OutputView; + +public class LadderGame { + + public static void main(String args[]) { + GameStartOption gameStartOption = InputView.of(System.in).initGameStartOption(); + Ladder ladder = Ladder.of(gameStartOption); + ParticipantUsers userManage = ParticipantUsers.of(gameStartOption); + OutputView outputView = OutputView.of(userManage, ladder); + outputView.printLadder(); + } +} diff --git a/src/main/java/domain/converter/Level.java b/src/main/java/domain/converter/Level.java new file mode 100644 index 0000000..041503f --- /dev/null +++ b/src/main/java/domain/converter/Level.java @@ -0,0 +1,10 @@ +package domain.converter; + +import domain.ladder.Bridge; + +import java.util.List; + +public class Level { + private Integer number; + private List bridges; +} \ No newline at end of file diff --git a/src/main/java/domain/converter/OutputConverter.java b/src/main/java/domain/converter/OutputConverter.java new file mode 100644 index 0000000..6d0a313 --- /dev/null +++ b/src/main/java/domain/converter/OutputConverter.java @@ -0,0 +1,12 @@ +package domain.converter; + +import domain.ladder.Ladder; + +import java.util.List; + +public class OutputConverter { + private List levels; + + + +} diff --git a/src/main/java/domain/factory/PillarFactory.java b/src/main/java/domain/factory/PillarFactory.java new file mode 100644 index 0000000..f070db1 --- /dev/null +++ b/src/main/java/domain/factory/PillarFactory.java @@ -0,0 +1,35 @@ +package domain.factory; + +import domain.ladder.Bridge; +import domain.ladder.Pillar; +import domain.maker.PillarMaker; +import dto.GameStartOption; + +import java.util.List; + +public class PillarFactory { + + public static final int MINIMUM_PILLAR_NUM = 0; + + public Pillar createFirstPillar (GameStartOption gameStartOption) { + + List bridges = new PillarMaker().createBridgesInThisPillar(gameStartOption); + Integer pillarNum = MINIMUM_PILLAR_NUM; + + return new Pillar(bridges, pillarNum); + } + + public Pillar createNotFirstPillar (GameStartOption gameStartOption, Pillar previousPillar) { + + List bridges = new PillarMaker().createBridgesInThisPillar(gameStartOption, previousPillar); + Integer pillarNum = nowPillarNum(previousPillar); + + return new Pillar(bridges, pillarNum); + + } + + private Integer nowPillarNum(Pillar previousPillar) { + return previousPillar.getPillarNum() + 1; + } + +} diff --git a/src/main/java/domain/ladder/Bridge.java b/src/main/java/domain/ladder/Bridge.java new file mode 100644 index 0000000..6fb04c9 --- /dev/null +++ b/src/main/java/domain/ladder/Bridge.java @@ -0,0 +1,28 @@ +package domain.ladder; + +public class Bridge { + private Integer location; + private LinkedType linkPillarDirection; + + private Bridge(Integer location, LinkedType linkPillarDirection) { + this.location = location; + this.linkPillarDirection = linkPillarDirection; + } + + public Integer getLocation() { + return location; + } + + public LinkedType getLinkPillarDirection() { + return linkPillarDirection; + } + + public static Bridge createOneRightBridge(Integer location) { + return (new Bridge(location, LinkedType.RIGHT)); + } + + public static Bridge createOneLeftBridge(Integer location) { + return (new Bridge(location, LinkedType.LEFT)); + } + +} diff --git a/src/main/java/domain/ladder/Ladder.java b/src/main/java/domain/ladder/Ladder.java new file mode 100644 index 0000000..ea7c50e --- /dev/null +++ b/src/main/java/domain/ladder/Ladder.java @@ -0,0 +1,42 @@ +package domain.ladder; + +import domain.maker.LadderMaker; +import dto.GameStartOption; +import java.util.List; + +public class Ladder { + + private List pillars; + private Integer width; + private Integer height; + + private Ladder(GameStartOption gameStartOption) { + this.width = gameStartOption.getLadderWidth(); + this.height = gameStartOption.getLadderHeight(); + this.pillars = new LadderMaker().createLadder(gameStartOption); + } + + public static Ladder of(GameStartOption gameStartOption){ + return new Ladder(gameStartOption); + } + + public Pillar getPillarByNum(Integer pillarNum) { + return pillars.stream() + .filter(p -> p.getPillarNum() == pillarNum) + .findFirst() + .orElseThrow(IllegalArgumentException::new); // optional orElse에 null 던지지 말기 throw Exception + } + + public List getPillars() { + return pillars; + } + + public Integer getWidth() { + return width; + } + + public Integer getHeight() { + return height; + } + +} diff --git a/src/main/java/domain/ladder/LinkedType.java b/src/main/java/domain/ladder/LinkedType.java new file mode 100644 index 0000000..3fc8afc --- /dev/null +++ b/src/main/java/domain/ladder/LinkedType.java @@ -0,0 +1,5 @@ +package domain.ladder; + +public enum LinkedType { + RIGHT, LEFT +} diff --git a/src/main/java/domain/ladder/Pillar.java b/src/main/java/domain/ladder/Pillar.java new file mode 100644 index 0000000..e706159 --- /dev/null +++ b/src/main/java/domain/ladder/Pillar.java @@ -0,0 +1,36 @@ +package domain.ladder; + +import java.util.List; +import java.util.stream.Collectors; + +public class Pillar { + + private List bridges; + private Integer pillarNum; + + private Pillar(List bridges, Integer pillarNum) { + this.bridges = bridges; + this.pillarNum = pillarNum; + } + + public Integer getPillarNum() { + return pillarNum; + } + + public List getBridges() { + return bridges; + } + + public List getBridgesLocations() { + return bridges.stream() + .map(b -> b.getLocation()) + .collect(Collectors.toList()); + } + + public List getBridgesDirectionLocation(LinkedType linkedType) { + return bridges.stream() + .filter(b -> b.getLinkPillarDirection() == linkedType) + .map(bridge -> bridge.getLocation()) + .collect(Collectors.toList()); + } +} \ No newline at end of file diff --git a/src/main/java/domain/maker/LadderMaker.java b/src/main/java/domain/maker/LadderMaker.java new file mode 100644 index 0000000..dbb0232 --- /dev/null +++ b/src/main/java/domain/maker/LadderMaker.java @@ -0,0 +1,25 @@ +package domain.maker; + +import domain.factory.PillarFactory; +import domain.ladder.Pillar; +import dto.GameStartOption; + +import java.util.ArrayList; +import java.util.List; + +public class LadderMaker { + + private List pillars = new ArrayList<>(); + private PillarFactory pillarFactory = new PillarFactory(); + + public List createLadder(GameStartOption gameStartOption) { + Pillar previous = pillarFactory.createFirstPillar(gameStartOption); + pillars.add(previous); + for (int i = 1; i < gameStartOption.getLadderWidth(); i++) { + Pillar now = pillarFactory.createNotFirstPillar(gameStartOption, previous); + pillars.add(now); + previous = now; + } + return new ArrayList<>(pillars); + } +} diff --git a/src/main/java/domain/maker/PillarMaker.java b/src/main/java/domain/maker/PillarMaker.java new file mode 100644 index 0000000..e9ec294 --- /dev/null +++ b/src/main/java/domain/maker/PillarMaker.java @@ -0,0 +1,53 @@ +package domain.maker; + +import domain.ladder.Bridge; +import domain.ladder.LinkedType; +import domain.ladder.Pillar; +import dto.GameStartOption; + +import java.util.ArrayList; +import java.util.List; + +import static util.RandomIntegerMaker.createRandomIntegers; +import static util.RandomIntegerMaker.createRandomIntegersWithRestriction; + +public class PillarMaker { + + private static final Integer LAST_PILLAR_CHECKING_NUM = 2; + private List bridges = new ArrayList<>(); + + private PillarMaker(){}; + + public List createBridgesInThisPillar(GameStartOption gameStartOption, Pillar previousPillar) { + createLeftOnlyBridges(previousPillar); + if (!isLastPillar(gameStartOption, previousPillar)) + createRightOnlyBridges(gameStartOption.getLadderHeight(), previousPillar); + return new ArrayList<>(bridges); + } + + public List createBridgesInThisPillar(GameStartOption gameStartOption) { + createRightOnlyBridges(gameStartOption.getLadderHeight()); + return new ArrayList<>(bridges); + } + + private void createRightOnlyBridges(Integer ladderHeight) { + createRandomIntegers(ladderHeight).stream() + .forEach(b -> bridges.add(Bridge.createOneRightBridge(b))); + } + + private void createRightOnlyBridges(Integer ladderHeight, Pillar previous) { + List previousLocations = previous.getBridgesDirectionLocation(LinkedType.RIGHT); + createRandomIntegersWithRestriction(ladderHeight, previousLocations).stream() + .forEach(b -> bridges.add(Bridge.createOneRightBridge(b))); + } + + private void createLeftOnlyBridges(Pillar previous) { + previous.getBridgesDirectionLocation(LinkedType.RIGHT).stream() + .forEach(b -> bridges.add(Bridge.createOneLeftBridge(b))); + } + + private boolean isLastPillar(GameStartOption gameStartOption, Pillar previousPillar) { + return gameStartOption.getLadderWidth() - previousPillar.getPillarNum() == LAST_PILLAR_CHECKING_NUM; + } + +} diff --git a/src/main/java/domain/user/ParticipantUsers.java b/src/main/java/domain/user/ParticipantUsers.java new file mode 100644 index 0000000..56de831 --- /dev/null +++ b/src/main/java/domain/user/ParticipantUsers.java @@ -0,0 +1,40 @@ +package domain.user; + +import dto.GameStartOption; + +import java.util.Collections; +import java.util.List; +import java.util.stream.Collectors; + +import static util.RandomIntegerMaker.separateUserName; + +public class ParticipantUsers { + private List users; + + private ParticipantUsers(GameStartOption gameStartOption) { + this.users = createUser(gameStartOption.getParticipants()); + } + + public static ParticipantUsers of(GameStartOption gameStartOption){ + return new ParticipantUsers(gameStartOption); + } + + public List getUsers() { + return users; + } + + private List createUser(String users) { + return separateUserName(users).stream() + .map(u -> new User(u)) + .collect(Collectors.toList()); + } + + public int getUserCharMaxNum() { + List lengths = users.stream() + .map(u -> u.getName().length()) + .collect(Collectors.toList()); + return Collections.max(lengths); + } + + +} diff --git a/src/main/java/domain/user/User.java b/src/main/java/domain/user/User.java new file mode 100644 index 0000000..efe026a --- /dev/null +++ b/src/main/java/domain/user/User.java @@ -0,0 +1,18 @@ +package domain.user; + +public class User { + + //user's PillarNum 갖고있게 하기, + //결과 반환하는것 만들기 + + private String name; + + public User(String name) { + this.name = name; + } + + public String getName() { + return name; + } + +} diff --git a/src/main/java/dto/GameStartOption.java b/src/main/java/dto/GameStartOption.java new file mode 100644 index 0000000..e71c7a2 --- /dev/null +++ b/src/main/java/dto/GameStartOption.java @@ -0,0 +1,42 @@ +package dto; + +public class GameStartOption { + + public static final String DELIMITER = ","; + public static final int MINIMUM_LADDER_HEIGHT = 1; + public static final int MINIMUM_PARTICIPANTS_COUNT = 2; + + + private int ladderHeight; + private String participants; + + public GameStartOption(String participants, int ladderHeight) { + this.ladderHeight = ladderHeight; + this.participants = participants; + validate(); + } + + private int getLadderWidth(String participants) { + String[] parts = participants.split(DELIMITER); + return parts.length; + } + + public String getParticipants() { + return participants; + } + + public int getLadderWidth() { + return getLadderWidth(participants); + } + + public int getLadderHeight() { + return ladderHeight; + } + + private void validate(){ + if(ladderHeight < MINIMUM_LADDER_HEIGHT) + throw new IllegalArgumentException("올바른 사다리 높이를 입력해주세요."); + if(getLadderWidth() < MINIMUM_PARTICIPANTS_COUNT ) + throw new IllegalArgumentException(("참가자 수를 2명이상 입력해주세요.")); + } +} diff --git a/src/main/java/util/RandomIntegerMaker.java b/src/main/java/util/RandomIntegerMaker.java new file mode 100644 index 0000000..801da44 --- /dev/null +++ b/src/main/java/util/RandomIntegerMaker.java @@ -0,0 +1,41 @@ +package util; + +import java.util.Arrays; +import java.util.Collections; +import java.util.List; +import java.util.stream.Collectors; +import java.util.stream.IntStream; + +import static dto.GameStartOption.DELIMITER; + +public class RandomIntegerMaker { + + public static final int MIN_HEIGHT_INDEX = 0; + + public static List createRandomIntegers(Integer heights) { + List randoms = IntStream.range(MIN_HEIGHT_INDEX, heights) + .mapToObj(Integer::new) + .collect(Collectors.toList()); + Collections.shuffle(randoms); + + return randoms.stream() + .limit(randInt(heights)) + .collect(Collectors.toList()); + } + + public static List createRandomIntegersWithRestriction(Integer ladderHeight, List restrictions) { + List randoms = createRandomIntegers(ladderHeight); + return randoms.stream() + .filter(i -> !restrictions.contains(i)) + .collect(Collectors.toList()); + } + + public static List separateUserName(String participants) { + String[] users = participants.split(DELIMITER); + return Arrays.asList(users); + } + + public static Integer randInt(int bound) { + return (int) (Math.random() * bound + 1); + } +} diff --git a/src/main/java/view/InputView.java b/src/main/java/view/InputView.java new file mode 100644 index 0000000..689bfef --- /dev/null +++ b/src/main/java/view/InputView.java @@ -0,0 +1,36 @@ +package view; + +import dto.GameStartOption; + +import java.io.InputStream; +import java.util.Scanner; + +public class InputView { + public static Scanner sc; + + private InputView(InputStream inputStream) { + sc = new Scanner(inputStream); + } + + public static InputView of(InputStream inputStream){ + return new InputView(inputStream); + } + + public String participants() { + System.out.println("참여할 사람 이름을 입력하세요. (이름은 쉼표(,)로 구분하세요)"); + return sc.next(); + } + + public int ladderHeight() { + System.out.println("최대 사다리 높이는 몇 개인가요?"); + return sc.nextInt(); + } + + public GameStartOption initGameStartOption(){ + String participants = participants(); + int ladderHeight = ladderHeight(); + + return new GameStartOption(participants, ladderHeight); + } + +} diff --git a/src/main/java/view/OutputView.java b/src/main/java/view/OutputView.java new file mode 100644 index 0000000..0ac963f --- /dev/null +++ b/src/main/java/view/OutputView.java @@ -0,0 +1,123 @@ +package view; + +import domain.ladder.Ladder; +import domain.ladder.LinkedType; +import domain.ladder.Pillar; +import domain.user.ParticipantUsers; +import domain.user.User; + +import java.util.Arrays; +import java.util.stream.IntStream; + +public class OutputView { + +// 가로로 찍을 수 있게 변환해서 +// dto로 bridge와 그 높이 들고있는 dto만들어서 가로로 변환해서 +// 찍기 편한 형태로 변환하기 +// flatMap으로 쭉 적으면서 +// bridge 1개랑 level 들고있으면 (Converter class 만들기) + + /* + 높이만큼 돌고 높이 1일 때 + */ + + public static final int PILLAR_WIDTH_SURPLUS = 1; + private static final char DOWN = '│'; + private static final char HORIZON = '─'; + private static final char RIGHT = '├'; + private static final char LEFT = '┤'; + private static final char BLANK = ' '; + + private char[][] ladderDrawing; + private int basicNum; + private int ladderHeight; + private ParticipantUsers participantUsers; + + private OutputView(ParticipantUsers participantUsers, Ladder ladder) { + this.basicNum = calculateBasicsNum(participantUsers); + this.ladderHeight = ladder.getHeight(); + this.ladderDrawing = drawAllLadder(ladder); + this.participantUsers = participantUsers; + } + + public static OutputView of(ParticipantUsers participantUsers, Ladder ladder){ + return new OutputView(participantUsers, ladder); + } + + public void printLadder() { + System.out.println(makeUserNames()); + System.out.println(makeStringLadder()); + } + + private String makeStringLadder() { + StringBuilder sb = new StringBuilder(); + for (int i = 0; i < ladderHeight; i++) { + sb.append(new String(ladderDrawing[i]) + "\n"); + } + return sb.toString(); + } + + private String makeUserNames() { + StringBuilder sb = new StringBuilder(); + for (User user : participantUsers.getUsers()) { + sb.append(user.getName()); + sb.append(nameBlank(user)); + } + return sb.toString(); + } + + + private String nameBlank(User user) { + int width = basicNum - user.getName().length() + PILLAR_WIDTH_SURPLUS; + StringBuilder sb = new StringBuilder(); + IntStream.range(0, width) + .forEach(each -> sb.append(BLANK)); + return sb.toString(); + } + + private char[][] drawAllLadder(Ladder ladder) { + char[][] charLadder = drawLadderInit(ladder); + for (int i = 0; i < ladder.getWidth(); i++) { + drawPillar(charLadder, ladder.getPillarByNum(i)); + } + return charLadder; + } + + private char[][] drawLadderInit(Ladder ladder) { + char[][] charLadder = new char[ladderHeight][calculateDrawingWidth(ladder)]; + for (int i = 0; i < ladderHeight; i++) { + Arrays.fill(charLadder[i], BLANK); + } + return charLadder; + } + + private void drawPillar(char[][] charLadder, Pillar pillar) { + for (int i = 0; i < ladderHeight; i++) { + int mainPillarIdx = pillar.getPillarNum() * (basicNum + PILLAR_WIDTH_SURPLUS); + charLadder[i][mainPillarIdx] = DOWN; + } + for (Integer location : pillar.getBridgesDirectionLocation(LinkedType.RIGHT)) { + drawPillarWithRIGHTLink(charLadder[location], pillar.getPillarNum()); + } + for (Integer location : pillar.getBridgesDirectionLocation(LinkedType.LEFT)) { + charLadder[location][pillar.getPillarNum() * (basicNum + PILLAR_WIDTH_SURPLUS)] = LEFT; + } + } + + private void drawPillarWithRIGHTLink(char[] ladderRow, Integer pillarNum) { + int mainPillarIdx = pillarNum * (basicNum + PILLAR_WIDTH_SURPLUS); + ladderRow[mainPillarIdx] = RIGHT; + for (int i = mainPillarIdx + PILLAR_WIDTH_SURPLUS; i <= mainPillarIdx + basicNum; i++) { + ladderRow[i] = HORIZON; + } + } + + private int calculateDrawingWidth(Ladder ladder) { + return ladder.getWidth() * basicNum; + } + + private int calculateBasicsNum(ParticipantUsers participantUsers) { + return participantUsers.getUserCharMaxNum(); + } + +} diff --git a/src/test/java/domain/converter/LevelTest.java b/src/test/java/domain/converter/LevelTest.java new file mode 100644 index 0000000..071c45d --- /dev/null +++ b/src/test/java/domain/converter/LevelTest.java @@ -0,0 +1,12 @@ +package domain.converter; + +import org.junit.Test; + +import static org.junit.Assert.*; + +public class LevelTest { + + @Test + public void name() { + } +} diff --git a/src/test/java/domain/converter/OutputConverterTest.java b/src/test/java/domain/converter/OutputConverterTest.java new file mode 100644 index 0000000..00df020 --- /dev/null +++ b/src/test/java/domain/converter/OutputConverterTest.java @@ -0,0 +1,7 @@ +package domain.converter; + +import static org.junit.Assert.*; + +public class OutputConverterTest { + +} \ No newline at end of file diff --git a/src/test/java/domain/factory/PillarFactoryTest.java b/src/test/java/domain/factory/PillarFactoryTest.java new file mode 100644 index 0000000..14b89c6 --- /dev/null +++ b/src/test/java/domain/factory/PillarFactoryTest.java @@ -0,0 +1,52 @@ +package domain.factory; + +import domain.ladder.Pillar; +import dto.GameStartOption; +import org.junit.Test; + +import static org.junit.Assert.*; + +public class PillarFactoryTest { + + + @Test + public void 첫번째기둥_넘버만들기() { + GameStartOption gameStartOption = new GameStartOption("pobi,honux,crong,jk", 3); + PillarFactory pillarFactory = new PillarFactory(); + Pillar p = pillarFactory.createFirstPillar(gameStartOption); + assertEquals((Integer) 0, p.getPillarNum()); + } + + @Test + public void 가운데기둥_넘버만들기() { + GameStartOption gameStartOption = new GameStartOption("pobi,honux,crong,jk", 3); + PillarFactory pillarFactory = new PillarFactory(); + Pillar p = pillarFactory.createFirstPillar(gameStartOption); + Pillar p1 = pillarFactory.createNotFirstPillar(gameStartOption, p); + + assertEquals((Integer) 1, p1.getPillarNum()); + } + + @Test + public void 마지막기둥_넘버만들기() { + GameStartOption gameStartOption = new GameStartOption("pobi,honux,crong,jk", 3); + PillarFactory pillarFactory = new PillarFactory(); + Pillar p = pillarFactory.createFirstPillar(gameStartOption); + Pillar p1 = pillarFactory.createNotFirstPillar(gameStartOption, p); + Pillar p2 = pillarFactory.createNotFirstPillar(gameStartOption, p1); + Pillar p3 = pillarFactory.createNotFirstPillar(gameStartOption, p2); + + assertEquals((Integer) 3, p3.getPillarNum()); + } + + @Test + public void 이전기둥확인해서_넘버만들기() { + GameStartOption gameStartOption = new GameStartOption("pobi,honux,crong,jk", 3); + PillarFactory pillarFactory = new PillarFactory(); + Pillar p = pillarFactory.createFirstPillar(gameStartOption); + Pillar p1 = pillarFactory.createNotFirstPillar(gameStartOption, p); + + assertEquals((Integer) 1, p1.getPillarNum()); + } + +} \ No newline at end of file diff --git a/src/test/java/domain/ladder/BridgeTest.java b/src/test/java/domain/ladder/BridgeTest.java new file mode 100644 index 0000000..88be584 --- /dev/null +++ b/src/test/java/domain/ladder/BridgeTest.java @@ -0,0 +1,22 @@ +package domain.ladder; + +import org.junit.Test; + +import static org.junit.Assert.assertEquals; + +public class BridgeTest { + + @Test + public void 오른쪽_기둥_연결_bridge_생성하기() { + Bridge bridge = new Bridge(1, LinkedType.RIGHT); + assertEquals(LinkedType.RIGHT, bridge.getLinkPillarDirection()); + } + + @Test + public void 왼쪽_기둥_연결_bridge_생성하기() { + Bridge bridge = new Bridge(1, LinkedType.LEFT); + assertEquals(LinkedType.LEFT, bridge.getLinkPillarDirection()); + } + + +} \ No newline at end of file diff --git a/src/test/java/domain/ladder/LadderTest.java b/src/test/java/domain/ladder/LadderTest.java new file mode 100644 index 0000000..506015d --- /dev/null +++ b/src/test/java/domain/ladder/LadderTest.java @@ -0,0 +1,45 @@ +package domain.ladder; + +import dto.GameStartOption; +import org.junit.Test; + +import static org.junit.Assert.assertEquals; + +public class LadderTest { + + @Test + public void Ladder_생성하기_Pillar_리스트_생성하기() { + GameStartOption gameStartOption = new GameStartOption("pobi,honux,crong,jk", 4); + Ladder ladder = new Ladder(gameStartOption); + + assertEquals((int) ladder.getWidth(), ladder.getPillars().size()); + } + + @Test + public void Pillar_NUM_에따라_찾기() { + GameStartOption gameStartOption = new GameStartOption("pobi,honux,crong,jk", 4); + Ladder ladder = new Ladder(gameStartOption); + + Pillar p = ladder.getPillarByNum(1); + assertEquals((Integer) 1, p.getPillarNum()); + } + +// @Test +// public void 이전기둥불러오기_left_pillar() { +// InputData inputData = new InputData(3,4); +// Ladder ladder = new Ladder(inputData); +// Pillar now = ladder.getPillars().get(2); +// System.out.println(now.getPillarNum()); +// assertEquals(0, ladder.getPreviousPillar(now)); +// assertEquals(2, ladder.getNextPillar(now)); +// } + +// @Test +// public void 이전기둥이_유효하지_않을때_체크하기() { +// Pillar pillar = new Pillar(1); +//// Pillar previous = pillar.getPreviousPillar(); +// assertEquals(null, previous); +// +// } + +} \ No newline at end of file diff --git a/src/test/java/domain/ladder/PillarTest.java b/src/test/java/domain/ladder/PillarTest.java new file mode 100644 index 0000000..357eb9d --- /dev/null +++ b/src/test/java/domain/ladder/PillarTest.java @@ -0,0 +1,32 @@ +package domain.ladder; + + +import domain.maker.PillarMaker; +import dto.GameStartOption; +import org.junit.Test; + +import java.util.List; + +import static org.junit.Assert.assertEquals; + +public class PillarTest { + + @Test + public void 기둥에_연결된_다리의_location_값_리스트_가져오기() { + GameStartOption GameStartOption = new GameStartOption("pobi,honux,crong,jk", 3); + Pillar p = new Pillar(new PillarMaker().createBridgesInThisPillar(GameStartOption), 1); + List bridgesLocations = p.getBridgesLocations(); + System.out.println(bridgesLocations); + assertEquals(true, bridgesLocations.size() <= 3 && bridgesLocations.size() >= 0); + } + + @Test + public void 기둥에_연결된_특정_방향의_다리의_location_값_리스트_가져오기() { + GameStartOption GameStartOption = new GameStartOption("pobi,honux,crong,jk", 3); + Pillar p = new Pillar(new PillarMaker().createBridgesInThisPillar(GameStartOption), 1); + List bridgesLocations = p.getBridgesDirectionLocation(LinkedType.LEFT); + assertEquals(0, bridgesLocations.size()); + } + + +} \ No newline at end of file diff --git a/src/test/java/domain/maker/LadderMakerTest.java b/src/test/java/domain/maker/LadderMakerTest.java new file mode 100644 index 0000000..06a0f41 --- /dev/null +++ b/src/test/java/domain/maker/LadderMakerTest.java @@ -0,0 +1,20 @@ +package domain.maker; + +import domain.ladder.Pillar; +import dto.GameStartOption; +import org.junit.Test; + +import java.util.List; + +import static org.junit.Assert.assertEquals; + +public class LadderMakerTest { + + @Test + public void LadderMaker로_Ladder안에있는_PillarList_만들기() { + GameStartOption gameStartOption = new GameStartOption("pobi,honux,crong,jk", 3); + LadderMaker ladderMaker = new LadderMaker(); + List pillarList = ladderMaker.createLadder(gameStartOption); + assertEquals(4, pillarList.size()); + } +} \ No newline at end of file diff --git a/src/test/java/domain/maker/PillarMakerTest.java b/src/test/java/domain/maker/PillarMakerTest.java new file mode 100644 index 0000000..716376b --- /dev/null +++ b/src/test/java/domain/maker/PillarMakerTest.java @@ -0,0 +1,86 @@ +package domain.maker; + +import domain.ladder.Bridge; +import domain.ladder.LinkedType; +import domain.ladder.Pillar; +import dto.GameStartOption; +import org.junit.Test; + +import java.util.List; + +import static org.junit.Assert.assertEquals; + +public class PillarMakerTest { + + @Test + public void 자동으로_오른쪽_기둥과_연결된_다리리스트_만들기() { + GameStartOption gameStartOption = new GameStartOption("pobi,honux,crong,jk", 3); + List bridges = new PillarMaker().createBridgesInThisPillar(gameStartOption); + assertEquals(true, bridges.size() <= 3); + } + + @Test + public void 첫번째_기둥_bridge_리스트_만들기() { + GameStartOption gameStartOption = new GameStartOption("pobi,honux,crong,jk", 3); + List bridges = new PillarMaker().createBridgesInThisPillar(gameStartOption); + + Pillar p = new Pillar(bridges, 0); + + System.out.println(p.getBridgesLocations()); + + assertEquals(p.getBridgesDirectionLocation(LinkedType.RIGHT), p.getBridgesLocations()); + assertEquals(0, p.getBridgesDirectionLocation(LinkedType.LEFT).size()); + } + + @Test + public void 두번째_기둥_bridge_리스트_만들기() { + GameStartOption gameStartOption = new GameStartOption("pobi,honux,crong,jk", 10); + + List bridges = new PillarMaker().createBridgesInThisPillar(gameStartOption); + Pillar p = new Pillar(bridges, 0); + + List bridges1 = new PillarMaker().createBridgesInThisPillar(gameStartOption, p); + Pillar p1 = new Pillar(bridges1, 1); + + List p1LeftBridgesLocation = p1.getBridgesDirectionLocation(LinkedType.LEFT); + List p1RightBridgesLocation = p1.getBridgesDirectionLocation(LinkedType.RIGHT); + List pRightBridgesLocation = p.getBridgesDirectionLocation(LinkedType.RIGHT); + + System.out.println("P RIGHT" + pRightBridgesLocation); + System.out.println("p1 LEFT" + p1LeftBridgesLocation); + System.out.println("p1 RIGHT" + p1RightBridgesLocation); + + assertEquals(p.getBridgesLocations(), p1LeftBridgesLocation); + assertEquals(pRightBridgesLocation, p1LeftBridgesLocation); + assertEquals(false, p1RightBridgesLocation.contains(p1LeftBridgesLocation)); + } + + @Test + public void 마지막_기둥_bridge_리스트_만들기() { + GameStartOption gameStartOption = new GameStartOption("pobi,honux,crong,jk", 10); + + List bridges = new PillarMaker().createBridgesInThisPillar(gameStartOption); + Pillar p = new Pillar(bridges, 0); + + List bridges1 = new PillarMaker().createBridgesInThisPillar(gameStartOption, p); + Pillar p1 = new Pillar(bridges1, 1); + + + List bridges2 = new PillarMaker().createBridgesInThisPillar(gameStartOption, p1); + Pillar p2 = new Pillar(bridges2, 2); + + List bridges3 = new PillarMaker().createBridgesInThisPillar(gameStartOption, p2); + Pillar p3 = new Pillar(bridges3, 3); + + + System.out.println("P RIGHT" + p.getBridgesDirectionLocation(LinkedType.RIGHT)); + System.out.println("p1 LEFT" + p1.getBridgesDirectionLocation(LinkedType.LEFT)); + System.out.println("p1 RIGHT" + p1.getBridgesDirectionLocation(LinkedType.RIGHT)); + System.out.println("p2 LEFT" + p2.getBridgesDirectionLocation(LinkedType.LEFT)); + System.out.println("p2 RIGHT" + p2.getBridgesDirectionLocation(LinkedType.RIGHT)); + System.out.println("p3 LEFT" + p3.getBridgesDirectionLocation(LinkedType.LEFT)); + + assertEquals(p3.getBridgesLocations(), p3.getBridgesDirectionLocation(LinkedType.LEFT)); + assertEquals(0, p3.getBridgesDirectionLocation(LinkedType.RIGHT).size()); + } +} \ No newline at end of file diff --git a/src/test/java/domain/user/ParticipantUsersTest.java b/src/test/java/domain/user/ParticipantUsersTest.java new file mode 100644 index 0000000..d35c5da --- /dev/null +++ b/src/test/java/domain/user/ParticipantUsersTest.java @@ -0,0 +1,16 @@ +package domain.user; + +import dto.GameStartOption; +import org.junit.Test; + +import static org.junit.Assert.assertEquals; + +public class ParticipantUsersTest { + + @Test + public void 유저_리스트_관리하는_유저_관리자_생성하기() { + GameStartOption gameStartOption = new GameStartOption("pobi,honux,crong,jk", 4); + ParticipantUsers participantUsers = new ParticipantUsers(gameStartOption); + assertEquals(4, participantUsers.getUsers().size()); + } +} \ No newline at end of file diff --git a/src/test/java/domain/user/UserTest.java b/src/test/java/domain/user/UserTest.java new file mode 100644 index 0000000..4eef335 --- /dev/null +++ b/src/test/java/domain/user/UserTest.java @@ -0,0 +1,13 @@ +package domain.user; + +import org.junit.Test; + +import static org.junit.Assert.assertEquals; + +public class UserTest { + @Test + public void 유저생성() { + User user = new User("hello"); + assertEquals("hello", user.getName()); + } +} \ No newline at end of file diff --git a/src/test/java/util/UtilTest.java b/src/test/java/util/UtilTest.java new file mode 100644 index 0000000..b2b5721 --- /dev/null +++ b/src/test/java/util/UtilTest.java @@ -0,0 +1,24 @@ +package util; + +import org.junit.Test; + +import java.util.List; + +import static org.junit.Assert.assertEquals; + +public class UtilTest { + + @Test + public void 랜덤_정수_리스트_생성() { + List b = RandomIntegerMaker.createRandomIntegers(3); + assertEquals(true, b.size() <= 3 && b.size() >= 0); + } + + + @Test + public void UserName_여러개로_분리하기() { + String users = "pobi,honux,crong,jk"; + List separateUserName = RandomIntegerMaker.separateUserName(users); + assertEquals("pobi", separateUserName.get(0)); + } +} \ No newline at end of file diff --git a/src/test/java/view/InputViewTest.java b/src/test/java/view/InputViewTest.java new file mode 100644 index 0000000..71a337d --- /dev/null +++ b/src/test/java/view/InputViewTest.java @@ -0,0 +1,26 @@ +package view; + +import org.junit.Test; + +import java.io.ByteArrayInputStream; +import java.io.InputStream; + +import static org.junit.Assert.assertEquals; + +public class InputViewTest { + @Test + public void 참가자_입력() { + String purchase = "pobi,honux,crong,jk"; + InputStream purchaseInputStream = new ByteArrayInputStream(purchase.getBytes()); + InputView inputView = new InputView(purchaseInputStream); + assertEquals("pobi,honux,crong,jk", inputView.participants()); + } + + @Test + public void 사다리_높이_입력() { + String ladderHeight = "1"; + InputStream inputCorrectStringStream = new ByteArrayInputStream(ladderHeight.getBytes()); + InputView inputView = new InputView(inputCorrectStringStream); + assertEquals(1, inputView.ladderHeight()); + } +} \ No newline at end of file From c91e1f0993ddfa3303d0adb666db896f51ae247e Mon Sep 17 00:00:00 2001 From: mjung1798 Date: Thu, 16 May 2019 17:47:03 +0900 Subject: [PATCH 11/14] constructor refactoring --- src/main/java/TestObj.java | 2 -- .../java/domain/factory/PillarFactory.java | 8 ++--- src/main/java/domain/ladder/Bridge.java | 4 +++ src/main/java/domain/ladder/Ladder.java | 2 +- src/main/java/domain/ladder/Pillar.java | 4 +++ src/main/java/domain/maker/LadderMaker.java | 7 +++++ src/main/java/domain/maker/PillarMaker.java | 8 +++-- src/main/java/dto/GameStartOption.java | 4 +++ src/test/java/TestObjTest.java | 2 -- src/test/java/domain/ladder/BridgeTest.java | 4 +-- src/test/java/domain/ladder/LadderTest.java | 4 +-- src/test/java/domain/ladder/PillarTest.java | 4 +-- .../java/domain/maker/LadderMakerTest.java | 2 +- .../java/domain/maker/PillarMakerTest.java | 31 ++++++++++--------- .../domain/user/ParticipantUsersTest.java | 4 +-- src/test/java/view/InputViewTest.java | 4 +-- 16 files changed, 57 insertions(+), 37 deletions(-) delete mode 100644 src/main/java/TestObj.java delete mode 100644 src/test/java/TestObjTest.java diff --git a/src/main/java/TestObj.java b/src/main/java/TestObj.java deleted file mode 100644 index 94156aa..0000000 --- a/src/main/java/TestObj.java +++ /dev/null @@ -1,2 +0,0 @@ -public class TestObj { -} diff --git a/src/main/java/domain/factory/PillarFactory.java b/src/main/java/domain/factory/PillarFactory.java index f070db1..5819ec3 100644 --- a/src/main/java/domain/factory/PillarFactory.java +++ b/src/main/java/domain/factory/PillarFactory.java @@ -13,18 +13,18 @@ public class PillarFactory { public Pillar createFirstPillar (GameStartOption gameStartOption) { - List bridges = new PillarMaker().createBridgesInThisPillar(gameStartOption); + List bridges = PillarMaker.of().createBridgesInThisPillar(gameStartOption); Integer pillarNum = MINIMUM_PILLAR_NUM; - return new Pillar(bridges, pillarNum); + return Pillar.of(bridges, pillarNum); } public Pillar createNotFirstPillar (GameStartOption gameStartOption, Pillar previousPillar) { - List bridges = new PillarMaker().createBridgesInThisPillar(gameStartOption, previousPillar); + List bridges = PillarMaker.of().createBridgesInThisPillar(gameStartOption, previousPillar); Integer pillarNum = nowPillarNum(previousPillar); - return new Pillar(bridges, pillarNum); + return Pillar.of(bridges, pillarNum); } diff --git a/src/main/java/domain/ladder/Bridge.java b/src/main/java/domain/ladder/Bridge.java index 6fb04c9..fffa9d2 100644 --- a/src/main/java/domain/ladder/Bridge.java +++ b/src/main/java/domain/ladder/Bridge.java @@ -9,6 +9,10 @@ private Bridge(Integer location, LinkedType linkPillarDirection) { this.linkPillarDirection = linkPillarDirection; } + public static Bridge of(Integer location , LinkedType linkPillarDirection){ + return new Bridge(location, linkPillarDirection); + } + public Integer getLocation() { return location; } diff --git a/src/main/java/domain/ladder/Ladder.java b/src/main/java/domain/ladder/Ladder.java index ea7c50e..4b687a2 100644 --- a/src/main/java/domain/ladder/Ladder.java +++ b/src/main/java/domain/ladder/Ladder.java @@ -13,7 +13,7 @@ public class Ladder { private Ladder(GameStartOption gameStartOption) { this.width = gameStartOption.getLadderWidth(); this.height = gameStartOption.getLadderHeight(); - this.pillars = new LadderMaker().createLadder(gameStartOption); + this.pillars = LadderMaker.of().createLadder(gameStartOption); } public static Ladder of(GameStartOption gameStartOption){ diff --git a/src/main/java/domain/ladder/Pillar.java b/src/main/java/domain/ladder/Pillar.java index e706159..2346d9e 100644 --- a/src/main/java/domain/ladder/Pillar.java +++ b/src/main/java/domain/ladder/Pillar.java @@ -13,6 +13,10 @@ private Pillar(List bridges, Integer pillarNum) { this.pillarNum = pillarNum; } + public static Pillar of(List bridges, Integer pillarNum) { + return new Pillar(bridges, pillarNum); + } + public Integer getPillarNum() { return pillarNum; } diff --git a/src/main/java/domain/maker/LadderMaker.java b/src/main/java/domain/maker/LadderMaker.java index dbb0232..7ef3fa6 100644 --- a/src/main/java/domain/maker/LadderMaker.java +++ b/src/main/java/domain/maker/LadderMaker.java @@ -1,6 +1,7 @@ package domain.maker; import domain.factory.PillarFactory; +import domain.ladder.Ladder; import domain.ladder.Pillar; import dto.GameStartOption; @@ -12,6 +13,12 @@ public class LadderMaker { private List pillars = new ArrayList<>(); private PillarFactory pillarFactory = new PillarFactory(); + private LadderMaker(){}; + + public static LadderMaker of(){ + return new LadderMaker(); + } + public List createLadder(GameStartOption gameStartOption) { Pillar previous = pillarFactory.createFirstPillar(gameStartOption); pillars.add(previous); diff --git a/src/main/java/domain/maker/PillarMaker.java b/src/main/java/domain/maker/PillarMaker.java index e9ec294..9b7927f 100644 --- a/src/main/java/domain/maker/PillarMaker.java +++ b/src/main/java/domain/maker/PillarMaker.java @@ -13,11 +13,15 @@ public class PillarMaker { + private PillarMaker(){} + + public static PillarMaker of(){ + return new PillarMaker(); + } + private static final Integer LAST_PILLAR_CHECKING_NUM = 2; private List bridges = new ArrayList<>(); - private PillarMaker(){}; - public List createBridgesInThisPillar(GameStartOption gameStartOption, Pillar previousPillar) { createLeftOnlyBridges(previousPillar); if (!isLastPillar(gameStartOption, previousPillar)) diff --git a/src/main/java/dto/GameStartOption.java b/src/main/java/dto/GameStartOption.java index e71c7a2..db57da9 100644 --- a/src/main/java/dto/GameStartOption.java +++ b/src/main/java/dto/GameStartOption.java @@ -16,6 +16,10 @@ public GameStartOption(String participants, int ladderHeight) { validate(); } + public static GameStartOption of(String participants, int ladderHeight){ + return new GameStartOption(participants, ladderHeight); + } + private int getLadderWidth(String participants) { String[] parts = participants.split(DELIMITER); return parts.length; diff --git a/src/test/java/TestObjTest.java b/src/test/java/TestObjTest.java deleted file mode 100644 index aee6c0f..0000000 --- a/src/test/java/TestObjTest.java +++ /dev/null @@ -1,2 +0,0 @@ -public class TestObjTest { -} diff --git a/src/test/java/domain/ladder/BridgeTest.java b/src/test/java/domain/ladder/BridgeTest.java index 88be584..fb60974 100644 --- a/src/test/java/domain/ladder/BridgeTest.java +++ b/src/test/java/domain/ladder/BridgeTest.java @@ -8,13 +8,13 @@ public class BridgeTest { @Test public void 오른쪽_기둥_연결_bridge_생성하기() { - Bridge bridge = new Bridge(1, LinkedType.RIGHT); + Bridge bridge = Bridge.of(1, LinkedType.RIGHT); assertEquals(LinkedType.RIGHT, bridge.getLinkPillarDirection()); } @Test public void 왼쪽_기둥_연결_bridge_생성하기() { - Bridge bridge = new Bridge(1, LinkedType.LEFT); + Bridge bridge = Bridge.of(1, LinkedType.LEFT); assertEquals(LinkedType.LEFT, bridge.getLinkPillarDirection()); } diff --git a/src/test/java/domain/ladder/LadderTest.java b/src/test/java/domain/ladder/LadderTest.java index 506015d..9737edf 100644 --- a/src/test/java/domain/ladder/LadderTest.java +++ b/src/test/java/domain/ladder/LadderTest.java @@ -10,7 +10,7 @@ public class LadderTest { @Test public void Ladder_생성하기_Pillar_리스트_생성하기() { GameStartOption gameStartOption = new GameStartOption("pobi,honux,crong,jk", 4); - Ladder ladder = new Ladder(gameStartOption); + Ladder ladder = Ladder.of(gameStartOption); assertEquals((int) ladder.getWidth(), ladder.getPillars().size()); } @@ -18,7 +18,7 @@ public class LadderTest { @Test public void Pillar_NUM_에따라_찾기() { GameStartOption gameStartOption = new GameStartOption("pobi,honux,crong,jk", 4); - Ladder ladder = new Ladder(gameStartOption); + Ladder ladder = Ladder.of(gameStartOption); Pillar p = ladder.getPillarByNum(1); assertEquals((Integer) 1, p.getPillarNum()); diff --git a/src/test/java/domain/ladder/PillarTest.java b/src/test/java/domain/ladder/PillarTest.java index 357eb9d..fc87e0b 100644 --- a/src/test/java/domain/ladder/PillarTest.java +++ b/src/test/java/domain/ladder/PillarTest.java @@ -14,7 +14,7 @@ public class PillarTest { @Test public void 기둥에_연결된_다리의_location_값_리스트_가져오기() { GameStartOption GameStartOption = new GameStartOption("pobi,honux,crong,jk", 3); - Pillar p = new Pillar(new PillarMaker().createBridgesInThisPillar(GameStartOption), 1); + Pillar p = Pillar.of(PillarMaker.of().createBridgesInThisPillar(GameStartOption), 1); List bridgesLocations = p.getBridgesLocations(); System.out.println(bridgesLocations); assertEquals(true, bridgesLocations.size() <= 3 && bridgesLocations.size() >= 0); @@ -23,7 +23,7 @@ public class PillarTest { @Test public void 기둥에_연결된_특정_방향의_다리의_location_값_리스트_가져오기() { GameStartOption GameStartOption = new GameStartOption("pobi,honux,crong,jk", 3); - Pillar p = new Pillar(new PillarMaker().createBridgesInThisPillar(GameStartOption), 1); + Pillar p = Pillar.of(PillarMaker.of().createBridgesInThisPillar(GameStartOption), 1); List bridgesLocations = p.getBridgesDirectionLocation(LinkedType.LEFT); assertEquals(0, bridgesLocations.size()); } diff --git a/src/test/java/domain/maker/LadderMakerTest.java b/src/test/java/domain/maker/LadderMakerTest.java index 06a0f41..a319e86 100644 --- a/src/test/java/domain/maker/LadderMakerTest.java +++ b/src/test/java/domain/maker/LadderMakerTest.java @@ -13,7 +13,7 @@ public class LadderMakerTest { @Test public void LadderMaker로_Ladder안에있는_PillarList_만들기() { GameStartOption gameStartOption = new GameStartOption("pobi,honux,crong,jk", 3); - LadderMaker ladderMaker = new LadderMaker(); + LadderMaker ladderMaker = LadderMaker.of(); List pillarList = ladderMaker.createLadder(gameStartOption); assertEquals(4, pillarList.size()); } diff --git a/src/test/java/domain/maker/PillarMakerTest.java b/src/test/java/domain/maker/PillarMakerTest.java index 716376b..852546f 100644 --- a/src/test/java/domain/maker/PillarMakerTest.java +++ b/src/test/java/domain/maker/PillarMakerTest.java @@ -1,5 +1,6 @@ package domain.maker; +import domain.factory.PillarFactoryTest; import domain.ladder.Bridge; import domain.ladder.LinkedType; import domain.ladder.Pillar; @@ -15,16 +16,16 @@ public class PillarMakerTest { @Test public void 자동으로_오른쪽_기둥과_연결된_다리리스트_만들기() { GameStartOption gameStartOption = new GameStartOption("pobi,honux,crong,jk", 3); - List bridges = new PillarMaker().createBridgesInThisPillar(gameStartOption); + List bridges = PillarMaker.of().createBridgesInThisPillar(gameStartOption); assertEquals(true, bridges.size() <= 3); } @Test public void 첫번째_기둥_bridge_리스트_만들기() { GameStartOption gameStartOption = new GameStartOption("pobi,honux,crong,jk", 3); - List bridges = new PillarMaker().createBridgesInThisPillar(gameStartOption); + List bridges = PillarMaker.of().createBridgesInThisPillar(gameStartOption); - Pillar p = new Pillar(bridges, 0); + Pillar p = Pillar.of(bridges, 0); System.out.println(p.getBridgesLocations()); @@ -36,11 +37,11 @@ public class PillarMakerTest { public void 두번째_기둥_bridge_리스트_만들기() { GameStartOption gameStartOption = new GameStartOption("pobi,honux,crong,jk", 10); - List bridges = new PillarMaker().createBridgesInThisPillar(gameStartOption); - Pillar p = new Pillar(bridges, 0); + List bridges = PillarMaker.of().createBridgesInThisPillar(gameStartOption); + Pillar p = Pillar.of(bridges, 0); - List bridges1 = new PillarMaker().createBridgesInThisPillar(gameStartOption, p); - Pillar p1 = new Pillar(bridges1, 1); + List bridges1 = PillarMaker.of().createBridgesInThisPillar(gameStartOption, p); + Pillar p1 = Pillar.of(bridges1, 1); List p1LeftBridgesLocation = p1.getBridgesDirectionLocation(LinkedType.LEFT); List p1RightBridgesLocation = p1.getBridgesDirectionLocation(LinkedType.RIGHT); @@ -59,18 +60,18 @@ public class PillarMakerTest { public void 마지막_기둥_bridge_리스트_만들기() { GameStartOption gameStartOption = new GameStartOption("pobi,honux,crong,jk", 10); - List bridges = new PillarMaker().createBridgesInThisPillar(gameStartOption); - Pillar p = new Pillar(bridges, 0); + List bridges = PillarMaker.of().createBridgesInThisPillar(gameStartOption); + Pillar p = Pillar.of(bridges, 0); - List bridges1 = new PillarMaker().createBridgesInThisPillar(gameStartOption, p); - Pillar p1 = new Pillar(bridges1, 1); + List bridges1 = PillarMaker.of().createBridgesInThisPillar(gameStartOption, p); + Pillar p1 = Pillar.of(bridges1, 1); - List bridges2 = new PillarMaker().createBridgesInThisPillar(gameStartOption, p1); - Pillar p2 = new Pillar(bridges2, 2); + List bridges2 = PillarMaker.of().createBridgesInThisPillar(gameStartOption, p1); + Pillar p2 = Pillar.of(bridges2, 2); - List bridges3 = new PillarMaker().createBridgesInThisPillar(gameStartOption, p2); - Pillar p3 = new Pillar(bridges3, 3); + List bridges3 = PillarMaker.of().createBridgesInThisPillar(gameStartOption, p2); + Pillar p3 = Pillar.of(bridges3, 3); System.out.println("P RIGHT" + p.getBridgesDirectionLocation(LinkedType.RIGHT)); diff --git a/src/test/java/domain/user/ParticipantUsersTest.java b/src/test/java/domain/user/ParticipantUsersTest.java index d35c5da..f654df9 100644 --- a/src/test/java/domain/user/ParticipantUsersTest.java +++ b/src/test/java/domain/user/ParticipantUsersTest.java @@ -9,8 +9,8 @@ public class ParticipantUsersTest { @Test public void 유저_리스트_관리하는_유저_관리자_생성하기() { - GameStartOption gameStartOption = new GameStartOption("pobi,honux,crong,jk", 4); - ParticipantUsers participantUsers = new ParticipantUsers(gameStartOption); + GameStartOption gameStartOption = GameStartOption.of("pobi,honux,crong,jk", 4); + ParticipantUsers participantUsers = ParticipantUsers.of(gameStartOption); assertEquals(4, participantUsers.getUsers().size()); } } \ No newline at end of file diff --git a/src/test/java/view/InputViewTest.java b/src/test/java/view/InputViewTest.java index 71a337d..1d88452 100644 --- a/src/test/java/view/InputViewTest.java +++ b/src/test/java/view/InputViewTest.java @@ -12,7 +12,7 @@ public class InputViewTest { public void 참가자_입력() { String purchase = "pobi,honux,crong,jk"; InputStream purchaseInputStream = new ByteArrayInputStream(purchase.getBytes()); - InputView inputView = new InputView(purchaseInputStream); + InputView inputView = InputView.of(purchaseInputStream); assertEquals("pobi,honux,crong,jk", inputView.participants()); } @@ -20,7 +20,7 @@ public class InputViewTest { public void 사다리_높이_입력() { String ladderHeight = "1"; InputStream inputCorrectStringStream = new ByteArrayInputStream(ladderHeight.getBytes()); - InputView inputView = new InputView(inputCorrectStringStream); + InputView inputView = InputView.of(inputCorrectStringStream); assertEquals(1, inputView.ladderHeight()); } } \ No newline at end of file From 1313b1f2abc2dbf56ca0696172fe2a2955acc9c5 Mon Sep 17 00:00:00 2001 From: mjung1798 Date: Fri, 17 May 2019 22:29:40 +0900 Subject: [PATCH 12/14] ladder output domain --- build.gradle | 1 + src/main/java/LadderGame.java | 7 +- src/main/java/domain/converter/Level.java | 10 -- .../domain/converter/OutputConverter.java | 16 ++- src/main/java/domain/converter/Point.java | 47 +++++++ src/main/java/domain/converter/Row.java | 39 ++++++ src/main/java/domain/ladder/Pillar.java | 7 ++ src/main/java/view/OutputLine.java | 17 +++ src/main/java/view/OutputView.java | 118 ++++++------------ src/test/java/domain/converter/LevelTest.java | 12 -- .../domain/converter/OutputConverterTest.java | 13 +- src/test/java/domain/converter/RowTest.java | 40 ++++++ 12 files changed, 219 insertions(+), 108 deletions(-) delete mode 100644 src/main/java/domain/converter/Level.java create mode 100644 src/main/java/domain/converter/Point.java create mode 100644 src/main/java/domain/converter/Row.java create mode 100644 src/main/java/view/OutputLine.java delete mode 100644 src/test/java/domain/converter/LevelTest.java create mode 100644 src/test/java/domain/converter/RowTest.java diff --git a/build.gradle b/build.gradle index 14c315c..0de849e 100644 --- a/build.gradle +++ b/build.gradle @@ -13,4 +13,5 @@ repositories { dependencies { testCompile group: 'junit', name: 'junit', version: '4.12' + testCompile group: 'org.hamcrest', name: 'hamcrest-all', version: '1.3' } diff --git a/src/main/java/LadderGame.java b/src/main/java/LadderGame.java index 4c74ffc..c48a38b 100644 --- a/src/main/java/LadderGame.java +++ b/src/main/java/LadderGame.java @@ -10,7 +10,10 @@ public static void main(String args[]) { GameStartOption gameStartOption = InputView.of(System.in).initGameStartOption(); Ladder ladder = Ladder.of(gameStartOption); ParticipantUsers userManage = ParticipantUsers.of(gameStartOption); - OutputView outputView = OutputView.of(userManage, ladder); - outputView.printLadder(); + OutputView print = OutputView.of(userManage, ladder); + + print.drawUserNames(); + print.drawOutput(); + } } diff --git a/src/main/java/domain/converter/Level.java b/src/main/java/domain/converter/Level.java deleted file mode 100644 index 041503f..0000000 --- a/src/main/java/domain/converter/Level.java +++ /dev/null @@ -1,10 +0,0 @@ -package domain.converter; - -import domain.ladder.Bridge; - -import java.util.List; - -public class Level { - private Integer number; - private List bridges; -} \ No newline at end of file diff --git a/src/main/java/domain/converter/OutputConverter.java b/src/main/java/domain/converter/OutputConverter.java index 6d0a313..1c4c256 100644 --- a/src/main/java/domain/converter/OutputConverter.java +++ b/src/main/java/domain/converter/OutputConverter.java @@ -2,11 +2,25 @@ import domain.ladder.Ladder; +import java.util.ArrayList; import java.util.List; public class OutputConverter { - private List levels; + private List rows = new ArrayList<>(); + private OutputConverter(Ladder ladder) { + for (int location = 0; location < ladder.getHeight(); location++) { + rows.add(Row.of(location, ladder)); + } + } + + public static OutputConverter of(Ladder ladder) { + return new OutputConverter(ladder); + } + + public List getRows() { + return new ArrayList<>(rows); + } } diff --git a/src/main/java/domain/converter/Point.java b/src/main/java/domain/converter/Point.java new file mode 100644 index 0000000..5f91022 --- /dev/null +++ b/src/main/java/domain/converter/Point.java @@ -0,0 +1,47 @@ +package domain.converter; + +import domain.ladder.Bridge; + +import java.util.Optional; + +public class Point implements Comparable { + private Integer pillarNum; + private Bridge bridge; + + private Point(Integer pillarNum, Bridge bridge) { + this.pillarNum = pillarNum; + this.bridge = bridge; + } + + private Point(Integer pillarNum) { + this.pillarNum = pillarNum; + } + + public static Point of(Integer pillarNum, Optional bridge) { + if (bridge.isPresent()) + return new Point(pillarNum, bridge.get()); + return new Point(pillarNum); + } + + public boolean isBlankPoint() { + return bridge == null; + } + + @Override + public String toString() { + return "pillarNum:" + pillarNum + "/" + "bridge:" + bridge.getLocation(); + } + + public Integer getPillarNum() { + return pillarNum; + } + + public Bridge getBridge() { + return bridge; + } + + @Override + public int compareTo(Point o) { + return pillarNum.compareTo(o.pillarNum); + } +} diff --git a/src/main/java/domain/converter/Row.java b/src/main/java/domain/converter/Row.java new file mode 100644 index 0000000..6ec9cd1 --- /dev/null +++ b/src/main/java/domain/converter/Row.java @@ -0,0 +1,39 @@ +package domain.converter; + +import domain.ladder.Ladder; + +import java.util.List; +import java.util.stream.Collectors; + +public class Row implements Comparable { + private Integer location; + private List points; + + private Row(Integer location, Ladder ladder) { + this.location = location; + this.points = findLocationBridge(ladder); + } + + public static Row of(Integer location, Ladder ladder) { + return new Row(location, ladder); + } + + private List findLocationBridge(Ladder ladder) { + return ladder.getPillars().stream() + .map(pillar -> Point.of(pillar.getPillarNum(), pillar.getLevelBridges(location))) + .collect(Collectors.toList()); + } + + public Integer getLocation() { + return location; + } + + public List getPoints() { + return points; + } + + @Override + public int compareTo(Row o) { + return location.compareTo(o.location); + } +} \ No newline at end of file diff --git a/src/main/java/domain/ladder/Pillar.java b/src/main/java/domain/ladder/Pillar.java index 2346d9e..99f8a47 100644 --- a/src/main/java/domain/ladder/Pillar.java +++ b/src/main/java/domain/ladder/Pillar.java @@ -1,6 +1,7 @@ package domain.ladder; import java.util.List; +import java.util.Optional; import java.util.stream.Collectors; public class Pillar { @@ -25,6 +26,12 @@ public List getBridges() { return bridges; } + public Optional getLevelBridges(Integer level) { + return bridges.stream() + .filter(bridge -> bridge.getLocation().equals(level)) + .findFirst(); + } + public List getBridgesLocations() { return bridges.stream() .map(b -> b.getLocation()) diff --git a/src/main/java/view/OutputLine.java b/src/main/java/view/OutputLine.java new file mode 100644 index 0000000..158c497 --- /dev/null +++ b/src/main/java/view/OutputLine.java @@ -0,0 +1,17 @@ +package view; + +public class OutputLine { + public static final String DOWN = "│"; + public static final String HORIZON = "─"; + public static final String RIGHT = "├"; + public static final String LEFT = "┤"; + public static final String BLANK = " "; + + public static String widthLine(int repeat) { + return new String(new char[repeat]).replace("\0", HORIZON); + } + + public static String widthBlank(int repeat) { + return new String(new char[repeat]).replace("\0", BLANK); + } +} diff --git a/src/main/java/view/OutputView.java b/src/main/java/view/OutputView.java index 0ac963f..1a6b313 100644 --- a/src/main/java/view/OutputView.java +++ b/src/main/java/view/OutputView.java @@ -1,123 +1,77 @@ package view; +import domain.converter.OutputConverter; +import domain.converter.Point; +import domain.converter.Row; import domain.ladder.Ladder; import domain.ladder.LinkedType; -import domain.ladder.Pillar; import domain.user.ParticipantUsers; import domain.user.User; -import java.util.Arrays; +import java.util.Collections; +import java.util.List; import java.util.stream.IntStream; -public class OutputView { - -// 가로로 찍을 수 있게 변환해서 -// dto로 bridge와 그 높이 들고있는 dto만들어서 가로로 변환해서 -// 찍기 편한 형태로 변환하기 -// flatMap으로 쭉 적으면서 -// bridge 1개랑 level 들고있으면 (Converter class 만들기) - - /* - 높이만큼 돌고 높이 1일 때 - */ - - public static final int PILLAR_WIDTH_SURPLUS = 1; - private static final char DOWN = '│'; - private static final char HORIZON = '─'; - private static final char RIGHT = '├'; - private static final char LEFT = '┤'; - private static final char BLANK = ' '; +import static view.OutputLine.*; - private char[][] ladderDrawing; - private int basicNum; - private int ladderHeight; +public class OutputView { private ParticipantUsers participantUsers; + private Ladder ladder; private OutputView(ParticipantUsers participantUsers, Ladder ladder) { - this.basicNum = calculateBasicsNum(participantUsers); - this.ladderHeight = ladder.getHeight(); - this.ladderDrawing = drawAllLadder(ladder); + this.ladder = ladder; this.participantUsers = participantUsers; } - public static OutputView of(ParticipantUsers participantUsers, Ladder ladder){ + public static OutputView of(ParticipantUsers participantUsers, Ladder ladder) { return new OutputView(participantUsers, ladder); } - public void printLadder() { - System.out.println(makeUserNames()); - System.out.println(makeStringLadder()); + public void drawOutput() { + List rows = OutputConverter.of(ladder).getRows(); + Collections.sort(rows); + for (Row row : rows) { + drawRow(row); + } } - private String makeStringLadder() { - StringBuilder sb = new StringBuilder(); - for (int i = 0; i < ladderHeight; i++) { - sb.append(new String(ladderDrawing[i]) + "\n"); + private void drawRow(Row row) { + List points = row.getPoints(); + Collections.sort(points); + for (Point point : points) { + System.out.print(drawPoint(point)); } - return sb.toString(); + System.out.println(); + } + + private String drawPoint(Point point) { + int repeat = participantUsers.getUserCharMaxNum(); + return point.isBlankPoint() ? DOWN + widthBlank(repeat) : Link(point); } - private String makeUserNames() { + public void drawUserNames() { StringBuilder sb = new StringBuilder(); for (User user : participantUsers.getUsers()) { sb.append(user.getName()); sb.append(nameBlank(user)); + sb.append(BLANK); } - return sb.toString(); + System.out.println(sb); } - private String nameBlank(User user) { - int width = basicNum - user.getName().length() + PILLAR_WIDTH_SURPLUS; + int width = participantUsers.getUserCharMaxNum() - user.getName().length(); StringBuilder sb = new StringBuilder(); IntStream.range(0, width) .forEach(each -> sb.append(BLANK)); return sb.toString(); } - private char[][] drawAllLadder(Ladder ladder) { - char[][] charLadder = drawLadderInit(ladder); - for (int i = 0; i < ladder.getWidth(); i++) { - drawPillar(charLadder, ladder.getPillarByNum(i)); - } - return charLadder; - } - - private char[][] drawLadderInit(Ladder ladder) { - char[][] charLadder = new char[ladderHeight][calculateDrawingWidth(ladder)]; - for (int i = 0; i < ladderHeight; i++) { - Arrays.fill(charLadder[i], BLANK); - } - return charLadder; - } - - private void drawPillar(char[][] charLadder, Pillar pillar) { - for (int i = 0; i < ladderHeight; i++) { - int mainPillarIdx = pillar.getPillarNum() * (basicNum + PILLAR_WIDTH_SURPLUS); - charLadder[i][mainPillarIdx] = DOWN; - } - for (Integer location : pillar.getBridgesDirectionLocation(LinkedType.RIGHT)) { - drawPillarWithRIGHTLink(charLadder[location], pillar.getPillarNum()); - } - for (Integer location : pillar.getBridgesDirectionLocation(LinkedType.LEFT)) { - charLadder[location][pillar.getPillarNum() * (basicNum + PILLAR_WIDTH_SURPLUS)] = LEFT; - } - } - - private void drawPillarWithRIGHTLink(char[] ladderRow, Integer pillarNum) { - int mainPillarIdx = pillarNum * (basicNum + PILLAR_WIDTH_SURPLUS); - ladderRow[mainPillarIdx] = RIGHT; - for (int i = mainPillarIdx + PILLAR_WIDTH_SURPLUS; i <= mainPillarIdx + basicNum; i++) { - ladderRow[i] = HORIZON; - } - } - - private int calculateDrawingWidth(Ladder ladder) { - return ladder.getWidth() * basicNum; - } - - private int calculateBasicsNum(ParticipantUsers participantUsers) { - return participantUsers.getUserCharMaxNum(); + private String Link(Point point) { + int repeat = participantUsers.getUserCharMaxNum(); + if (point.getBridge().getLinkPillarDirection() == LinkedType.RIGHT) + return RIGHT + widthLine(repeat); + return LEFT + widthBlank(repeat); } } diff --git a/src/test/java/domain/converter/LevelTest.java b/src/test/java/domain/converter/LevelTest.java deleted file mode 100644 index 071c45d..0000000 --- a/src/test/java/domain/converter/LevelTest.java +++ /dev/null @@ -1,12 +0,0 @@ -package domain.converter; - -import org.junit.Test; - -import static org.junit.Assert.*; - -public class LevelTest { - - @Test - public void name() { - } -} diff --git a/src/test/java/domain/converter/OutputConverterTest.java b/src/test/java/domain/converter/OutputConverterTest.java index 00df020..434a26f 100644 --- a/src/test/java/domain/converter/OutputConverterTest.java +++ b/src/test/java/domain/converter/OutputConverterTest.java @@ -1,7 +1,18 @@ package domain.converter; -import static org.junit.Assert.*; +import domain.ladder.Ladder; +import dto.GameStartOption; +import org.junit.Test; + +import static org.junit.Assert.assertEquals; public class OutputConverterTest { + @Test + public void Height에_따른_Level_생성() { + GameStartOption gameStartOption = new GameStartOption("pobi,honux,crong,jk", 10); + Ladder ladder = Ladder.of(gameStartOption); + + assertEquals(OutputConverter.of(ladder).getRows().size(), 10); + } } \ No newline at end of file diff --git a/src/test/java/domain/converter/RowTest.java b/src/test/java/domain/converter/RowTest.java new file mode 100644 index 0000000..94e554d --- /dev/null +++ b/src/test/java/domain/converter/RowTest.java @@ -0,0 +1,40 @@ +package domain.converter; + +import domain.ladder.Ladder; +import dto.GameStartOption; +import org.junit.Test; + +import static org.junit.Assert.assertEquals; + +public class RowTest { + + @Test + public void location에_맞는_bridge_point_생성() { + GameStartOption gameStartOption = new GameStartOption("pobi,honux,crong,jk", 4); + Ladder ladder = Ladder.of(gameStartOption); + + Row row = Row.of(1, ladder); + + for (Point point : row.getPoints()) { + if (!point.isBlankPoint()) { + assertEquals((int) point.getBridge().getLocation(), 1); + } + } + } + + @Test + public void point와_bridge_Pillar_대응_확인() { + GameStartOption gameStartOption = new GameStartOption("pobi,honux,crong,jk", 4); + Ladder ladder = Ladder.of(gameStartOption); + + Row row = Row.of(1, ladder); + + for (Point point : row.getPoints()) { + if (!point.isBlankPoint()) { + Integer pointPillarNum = point.getPillarNum(); + boolean levelBridgesIsPresent = ladder.getPillarByNum(pointPillarNum).getLevelBridges(1).isPresent(); + assertEquals(true, levelBridgesIsPresent); + } + } + } +} From 0f550702cdc85fc3722b9c95a6d278ddac5e0b35 Mon Sep 17 00:00:00 2001 From: mjung1798 Date: Sat, 18 May 2019 01:38:06 +0900 Subject: [PATCH 13/14] ladder game complete --- src/main/java/LadderGame.java | 21 ++++-- src/main/java/domain/ladder/Ladder.java | 13 +++- .../domain/ladderCalculator/LadderIO.java | 52 +++++++++++++++ .../java/domain/user/ParticipantUsers.java | 40 ----------- src/main/java/domain/user/User.java | 18 ----- src/main/java/dto/GameStartOption.java | 14 +++- src/main/java/util/RandomIntegerMaker.java | 6 +- src/main/java/view/InputView.java | 13 +++- .../{OutputView.java => OutputLadder.java} | 66 ++++++++++++------- .../domain/converter/OutputConverterTest.java | 2 +- src/test/java/domain/converter/RowTest.java | 4 +- .../domain/factory/PillarFactoryTest.java | 12 ++-- src/test/java/domain/ladder/LadderTest.java | 6 +- src/test/java/domain/ladder/PillarTest.java | 10 +-- .../domain/ladderCalculator/LadderIOTest.java | 18 +++++ .../java/domain/maker/LadderMakerTest.java | 3 +- .../java/domain/maker/PillarMakerTest.java | 12 ++-- .../domain/user/ParticipantUsersTest.java | 16 ----- src/test/java/domain/user/UserTest.java | 13 ---- src/test/java/util/UtilTest.java | 2 +- 20 files changed, 197 insertions(+), 144 deletions(-) create mode 100644 src/main/java/domain/ladderCalculator/LadderIO.java delete mode 100644 src/main/java/domain/user/ParticipantUsers.java delete mode 100644 src/main/java/domain/user/User.java rename src/main/java/view/{OutputView.java => OutputLadder.java} (51%) create mode 100644 src/test/java/domain/ladderCalculator/LadderIOTest.java delete mode 100644 src/test/java/domain/user/ParticipantUsersTest.java delete mode 100644 src/test/java/domain/user/UserTest.java diff --git a/src/main/java/LadderGame.java b/src/main/java/LadderGame.java index c48a38b..1504f9e 100644 --- a/src/main/java/LadderGame.java +++ b/src/main/java/LadderGame.java @@ -1,19 +1,26 @@ import domain.ladder.Ladder; -import domain.user.ParticipantUsers; +import domain.ladderCalculator.LadderIO; import dto.GameStartOption; import view.InputView; -import view.OutputView; +import view.OutputLadder; public class LadderGame { public static void main(String args[]) { - GameStartOption gameStartOption = InputView.of(System.in).initGameStartOption(); + InputView inputView = InputView.of(System.in); + GameStartOption gameStartOption = inputView.initGameStartOption(); Ladder ladder = Ladder.of(gameStartOption); - ParticipantUsers userManage = ParticipantUsers.of(gameStartOption); - OutputView print = OutputView.of(userManage, ladder); + LadderIO ladderIO = LadderIO.of(gameStartOption); + OutputLadder ladderPrint = OutputLadder.of(ladderIO, ladder); - print.drawUserNames(); - print.drawOutput(); + ladderPrint.drawUserNames(); + ladderPrint.drawOutput(); + ladderPrint.drawResults(); + + while (true) { + String ask = inputView.showResultUser(); + ladderPrint.showLadderResult(ask); + } } } diff --git a/src/main/java/domain/ladder/Ladder.java b/src/main/java/domain/ladder/Ladder.java index 4b687a2..25753c8 100644 --- a/src/main/java/domain/ladder/Ladder.java +++ b/src/main/java/domain/ladder/Ladder.java @@ -2,7 +2,9 @@ import domain.maker.LadderMaker; import dto.GameStartOption; + import java.util.List; +import java.util.Optional; public class Ladder { @@ -16,7 +18,7 @@ private Ladder(GameStartOption gameStartOption) { this.pillars = LadderMaker.of().createLadder(gameStartOption); } - public static Ladder of(GameStartOption gameStartOption){ + public static Ladder of(GameStartOption gameStartOption) { return new Ladder(gameStartOption); } @@ -39,4 +41,13 @@ public Integer getHeight() { return height; } + public Pillar getNextPillar(Pillar nowPillar, Integer nowLocation) { + Optional linkBridge = nowPillar.getLevelBridges(nowLocation); + if (!linkBridge.isPresent()) + return nowPillar; + return linkBridge.get().getLinkPillarDirection() == LinkedType.RIGHT ? + getPillarByNum(nowPillar.getPillarNum() + 1) : + getPillarByNum(nowPillar.getPillarNum() - 1); + } + } diff --git a/src/main/java/domain/ladderCalculator/LadderIO.java b/src/main/java/domain/ladderCalculator/LadderIO.java new file mode 100644 index 0000000..85f2265 --- /dev/null +++ b/src/main/java/domain/ladderCalculator/LadderIO.java @@ -0,0 +1,52 @@ +package domain.ladderCalculator; + +import domain.ladder.Ladder; +import domain.ladder.Pillar; +import dto.GameStartOption; + +import java.util.Collections; +import java.util.List; +import java.util.stream.Collectors; + +import static util.RandomIntegerMaker.separateByDelimiter; + +public class LadderIO { + + private List users; + private List results; + + private LadderIO(GameStartOption gameStartOption) { + this.users = separateByDelimiter(gameStartOption.getParticipants()); + this.results = separateByDelimiter(gameStartOption.getResults()); + } + + public static LadderIO of(GameStartOption gameStartOption) { + return new LadderIO(gameStartOption); + } + + public List getUsers() { + return users; + } + + public List getResults() { + return results; + } + + public String findResult(Ladder ladder, String userName) { + int row = 0; + Pillar pillar = ladder.getPillarByNum(users.indexOf(userName)); + while (row < ladder.getHeight()) { + pillar = ladder.getNextPillar(pillar, row); + row++; + } + return results.get(pillar.getPillarNum()); + } + + public int getUserCharMaxNum() { + List lengths = users.stream() + .map(u -> u.length()) + .collect(Collectors.toList()); + return Collections.max(lengths); + } + +} diff --git a/src/main/java/domain/user/ParticipantUsers.java b/src/main/java/domain/user/ParticipantUsers.java deleted file mode 100644 index 56de831..0000000 --- a/src/main/java/domain/user/ParticipantUsers.java +++ /dev/null @@ -1,40 +0,0 @@ -package domain.user; - -import dto.GameStartOption; - -import java.util.Collections; -import java.util.List; -import java.util.stream.Collectors; - -import static util.RandomIntegerMaker.separateUserName; - -public class ParticipantUsers { - private List users; - - private ParticipantUsers(GameStartOption gameStartOption) { - this.users = createUser(gameStartOption.getParticipants()); - } - - public static ParticipantUsers of(GameStartOption gameStartOption){ - return new ParticipantUsers(gameStartOption); - } - - public List getUsers() { - return users; - } - - private List createUser(String users) { - return separateUserName(users).stream() - .map(u -> new User(u)) - .collect(Collectors.toList()); - } - - public int getUserCharMaxNum() { - List lengths = users.stream() - .map(u -> u.getName().length()) - .collect(Collectors.toList()); - return Collections.max(lengths); - } - - -} diff --git a/src/main/java/domain/user/User.java b/src/main/java/domain/user/User.java deleted file mode 100644 index efe026a..0000000 --- a/src/main/java/domain/user/User.java +++ /dev/null @@ -1,18 +0,0 @@ -package domain.user; - -public class User { - - //user's PillarNum 갖고있게 하기, - //결과 반환하는것 만들기 - - private String name; - - public User(String name) { - this.name = name; - } - - public String getName() { - return name; - } - -} diff --git a/src/main/java/dto/GameStartOption.java b/src/main/java/dto/GameStartOption.java index db57da9..4ddff1a 100644 --- a/src/main/java/dto/GameStartOption.java +++ b/src/main/java/dto/GameStartOption.java @@ -9,15 +9,17 @@ public class GameStartOption { private int ladderHeight; private String participants; + private String results; - public GameStartOption(String participants, int ladderHeight) { + public GameStartOption(String participants, int ladderHeight, String results) { this.ladderHeight = ladderHeight; this.participants = participants; + this.results = results; validate(); } - public static GameStartOption of(String participants, int ladderHeight){ - return new GameStartOption(participants, ladderHeight); + public static GameStartOption of(String participants, int ladderHeight, String results){ + return new GameStartOption(participants, ladderHeight, results); } private int getLadderWidth(String participants) { @@ -37,10 +39,16 @@ public int getLadderHeight() { return ladderHeight; } + public String getResults() { + return results; + } + private void validate(){ if(ladderHeight < MINIMUM_LADDER_HEIGHT) throw new IllegalArgumentException("올바른 사다리 높이를 입력해주세요."); if(getLadderWidth() < MINIMUM_PARTICIPANTS_COUNT ) throw new IllegalArgumentException(("참가자 수를 2명이상 입력해주세요.")); + if(participants.split(DELIMITER).length != results.split(DELIMITER).length) + throw new IllegalArgumentException(("결과와 참가자 수를 동일하게 입력해주세요.")); } } diff --git a/src/main/java/util/RandomIntegerMaker.java b/src/main/java/util/RandomIntegerMaker.java index 801da44..fae9898 100644 --- a/src/main/java/util/RandomIntegerMaker.java +++ b/src/main/java/util/RandomIntegerMaker.java @@ -30,9 +30,9 @@ public static List createRandomIntegersWithRestriction(Integer ladderHe .collect(Collectors.toList()); } - public static List separateUserName(String participants) { - String[] users = participants.split(DELIMITER); - return Arrays.asList(users); + public static List separateByDelimiter(String inputString) { + String[] splitString = inputString.split(DELIMITER); + return Arrays.asList(splitString); } public static Integer randInt(int bound) { diff --git a/src/main/java/view/InputView.java b/src/main/java/view/InputView.java index 689bfef..2927b6a 100644 --- a/src/main/java/view/InputView.java +++ b/src/main/java/view/InputView.java @@ -21,16 +21,27 @@ public String participants() { return sc.next(); } + public String results(){ + System.out.println("실행 결과를 입력하세요. (결과는 쉼표(,)로 구분하세요)"); + return sc.next(); + + } public int ladderHeight() { System.out.println("최대 사다리 높이는 몇 개인가요?"); return sc.nextInt(); } + public String showResultUser() { + System.out.println("결과를 보고싶은 사람은?"); + return sc.next(); + } + public GameStartOption initGameStartOption(){ String participants = participants(); + String results = results(); int ladderHeight = ladderHeight(); - return new GameStartOption(participants, ladderHeight); + return new GameStartOption(participants, ladderHeight, results); } } diff --git a/src/main/java/view/OutputView.java b/src/main/java/view/OutputLadder.java similarity index 51% rename from src/main/java/view/OutputView.java rename to src/main/java/view/OutputLadder.java index 1a6b313..a7b255e 100644 --- a/src/main/java/view/OutputView.java +++ b/src/main/java/view/OutputLadder.java @@ -5,8 +5,7 @@ import domain.converter.Row; import domain.ladder.Ladder; import domain.ladder.LinkedType; -import domain.user.ParticipantUsers; -import domain.user.User; +import domain.ladderCalculator.LadderIO; import java.util.Collections; import java.util.List; @@ -14,17 +13,17 @@ import static view.OutputLine.*; -public class OutputView { - private ParticipantUsers participantUsers; +public class OutputLadder { + private LadderIO ladderIO; private Ladder ladder; - private OutputView(ParticipantUsers participantUsers, Ladder ladder) { + private OutputLadder(LadderIO ladderIO, Ladder ladder) { this.ladder = ladder; - this.participantUsers = participantUsers; + this.ladderIO = ladderIO; } - public static OutputView of(ParticipantUsers participantUsers, Ladder ladder) { - return new OutputView(participantUsers, ladder); + public static OutputLadder of(LadderIO ladderIO, Ladder ladder) { + return new OutputLadder(ladderIO, ladder); } public void drawOutput() { @@ -35,6 +34,39 @@ public void drawOutput() { } } + public void drawUserNames() { + StringBuilder sb = new StringBuilder(); + for (String user : ladderIO.getUsers()) { + sb.append(user); + sb.append(calculateBlank(user)); + sb.append(BLANK); + } + System.out.println(sb); + } + + public void drawResults() { + StringBuilder sb = new StringBuilder(); + for (String result : ladderIO.getResults()) { + sb.append(result); + sb.append(calculateBlank(result)); + sb.append(BLANK); + } + System.out.println(sb); + } + + public void showLadderResult(String userName) { + String result = userName.equals("all") ? showAllResult() : ladderIO.findResult(ladder, userName); + System.out.println(result); + } + + private String showAllResult() { + StringBuilder sb = new StringBuilder(); + for (String user : ladderIO.getUsers()) { + sb.append(user + ":" + ladderIO.findResult(ladder, user)+"\n"); + } + return sb.toString(); + } + private void drawRow(Row row) { List points = row.getPoints(); Collections.sort(points); @@ -45,22 +77,12 @@ private void drawRow(Row row) { } private String drawPoint(Point point) { - int repeat = participantUsers.getUserCharMaxNum(); + int repeat = ladderIO.getUserCharMaxNum(); return point.isBlankPoint() ? DOWN + widthBlank(repeat) : Link(point); } - public void drawUserNames() { - StringBuilder sb = new StringBuilder(); - for (User user : participantUsers.getUsers()) { - sb.append(user.getName()); - sb.append(nameBlank(user)); - sb.append(BLANK); - } - System.out.println(sb); - } - - private String nameBlank(User user) { - int width = participantUsers.getUserCharMaxNum() - user.getName().length(); + private String calculateBlank(String result) { + int width = ladderIO.getUserCharMaxNum() - result.length(); StringBuilder sb = new StringBuilder(); IntStream.range(0, width) .forEach(each -> sb.append(BLANK)); @@ -68,7 +90,7 @@ private String nameBlank(User user) { } private String Link(Point point) { - int repeat = participantUsers.getUserCharMaxNum(); + int repeat = ladderIO.getUserCharMaxNum(); if (point.getBridge().getLinkPillarDirection() == LinkedType.RIGHT) return RIGHT + widthLine(repeat); return LEFT + widthBlank(repeat); diff --git a/src/test/java/domain/converter/OutputConverterTest.java b/src/test/java/domain/converter/OutputConverterTest.java index 434a26f..11e8ed7 100644 --- a/src/test/java/domain/converter/OutputConverterTest.java +++ b/src/test/java/domain/converter/OutputConverterTest.java @@ -10,7 +10,7 @@ public class OutputConverterTest { @Test public void Height에_따른_Level_생성() { - GameStartOption gameStartOption = new GameStartOption("pobi,honux,crong,jk", 10); + GameStartOption gameStartOption = GameStartOption.of("pobi,honux,crong,jk", 10, "꽝,5000,꽝,3000"); Ladder ladder = Ladder.of(gameStartOption); assertEquals(OutputConverter.of(ladder).getRows().size(), 10); diff --git a/src/test/java/domain/converter/RowTest.java b/src/test/java/domain/converter/RowTest.java index 94e554d..b153ea4 100644 --- a/src/test/java/domain/converter/RowTest.java +++ b/src/test/java/domain/converter/RowTest.java @@ -10,7 +10,7 @@ public class RowTest { @Test public void location에_맞는_bridge_point_생성() { - GameStartOption gameStartOption = new GameStartOption("pobi,honux,crong,jk", 4); + GameStartOption gameStartOption = GameStartOption.of("pobi,honux,crong,jk", 4, "꽝,5000,꽝,3000"); Ladder ladder = Ladder.of(gameStartOption); Row row = Row.of(1, ladder); @@ -24,7 +24,7 @@ public class RowTest { @Test public void point와_bridge_Pillar_대응_확인() { - GameStartOption gameStartOption = new GameStartOption("pobi,honux,crong,jk", 4); + GameStartOption gameStartOption = GameStartOption.of("pobi,honux,crong,jk", 4, "꽝,5000,꽝,3000"); Ladder ladder = Ladder.of(gameStartOption); Row row = Row.of(1, ladder); diff --git a/src/test/java/domain/factory/PillarFactoryTest.java b/src/test/java/domain/factory/PillarFactoryTest.java index 14b89c6..dc2e7a0 100644 --- a/src/test/java/domain/factory/PillarFactoryTest.java +++ b/src/test/java/domain/factory/PillarFactoryTest.java @@ -11,7 +11,8 @@ public class PillarFactoryTest { @Test public void 첫번째기둥_넘버만들기() { - GameStartOption gameStartOption = new GameStartOption("pobi,honux,crong,jk", 3); + GameStartOption gameStartOption = GameStartOption.of("pobi,honux,crong,jk", 10, "꽝,5000,꽝,3000"); + PillarFactory pillarFactory = new PillarFactory(); Pillar p = pillarFactory.createFirstPillar(gameStartOption); assertEquals((Integer) 0, p.getPillarNum()); @@ -19,7 +20,8 @@ public class PillarFactoryTest { @Test public void 가운데기둥_넘버만들기() { - GameStartOption gameStartOption = new GameStartOption("pobi,honux,crong,jk", 3); + GameStartOption gameStartOption = GameStartOption.of("pobi,honux,crong,jk", 10, "꽝,5000,꽝,3000"); + PillarFactory pillarFactory = new PillarFactory(); Pillar p = pillarFactory.createFirstPillar(gameStartOption); Pillar p1 = pillarFactory.createNotFirstPillar(gameStartOption, p); @@ -29,7 +31,8 @@ public class PillarFactoryTest { @Test public void 마지막기둥_넘버만들기() { - GameStartOption gameStartOption = new GameStartOption("pobi,honux,crong,jk", 3); + GameStartOption gameStartOption = GameStartOption.of("pobi,honux,crong,jk", 10, "꽝,5000,꽝,3000"); + PillarFactory pillarFactory = new PillarFactory(); Pillar p = pillarFactory.createFirstPillar(gameStartOption); Pillar p1 = pillarFactory.createNotFirstPillar(gameStartOption, p); @@ -41,7 +44,8 @@ public class PillarFactoryTest { @Test public void 이전기둥확인해서_넘버만들기() { - GameStartOption gameStartOption = new GameStartOption("pobi,honux,crong,jk", 3); + GameStartOption gameStartOption = GameStartOption.of("pobi,honux,crong,jk", 10, "꽝,5000,꽝,3000"); + PillarFactory pillarFactory = new PillarFactory(); Pillar p = pillarFactory.createFirstPillar(gameStartOption); Pillar p1 = pillarFactory.createNotFirstPillar(gameStartOption, p); diff --git a/src/test/java/domain/ladder/LadderTest.java b/src/test/java/domain/ladder/LadderTest.java index 9737edf..621ddd1 100644 --- a/src/test/java/domain/ladder/LadderTest.java +++ b/src/test/java/domain/ladder/LadderTest.java @@ -9,7 +9,7 @@ public class LadderTest { @Test public void Ladder_생성하기_Pillar_리스트_생성하기() { - GameStartOption gameStartOption = new GameStartOption("pobi,honux,crong,jk", 4); + GameStartOption gameStartOption = new GameStartOption("pobi,honux,crong,jk", 4, "꽝,5000,꽝,3000"); Ladder ladder = Ladder.of(gameStartOption); assertEquals((int) ladder.getWidth(), ladder.getPillars().size()); @@ -17,7 +17,7 @@ public class LadderTest { @Test public void Pillar_NUM_에따라_찾기() { - GameStartOption gameStartOption = new GameStartOption("pobi,honux,crong,jk", 4); + GameStartOption gameStartOption = new GameStartOption("pobi,honux,crong,jk", 4, "꽝,5000,꽝,3000"); Ladder ladder = Ladder.of(gameStartOption); Pillar p = ladder.getPillarByNum(1); @@ -29,7 +29,7 @@ public class LadderTest { // InputData inputData = new InputData(3,4); // Ladder ladder = new Ladder(inputData); // Pillar now = ladder.getPillars().get(2); -// System.out.println(now.getPillarNum()); +// System.out.println(now.getStartPillar()); // assertEquals(0, ladder.getPreviousPillar(now)); // assertEquals(2, ladder.getNextPillar(now)); // } diff --git a/src/test/java/domain/ladder/PillarTest.java b/src/test/java/domain/ladder/PillarTest.java index fc87e0b..b5e7ee1 100644 --- a/src/test/java/domain/ladder/PillarTest.java +++ b/src/test/java/domain/ladder/PillarTest.java @@ -13,8 +13,9 @@ public class PillarTest { @Test public void 기둥에_연결된_다리의_location_값_리스트_가져오기() { - GameStartOption GameStartOption = new GameStartOption("pobi,honux,crong,jk", 3); - Pillar p = Pillar.of(PillarMaker.of().createBridgesInThisPillar(GameStartOption), 1); + GameStartOption gameStartOption = GameStartOption.of("pobi,honux,crong,jk", 3, "꽝,5000,꽝,3000"); + + Pillar p = Pillar.of(PillarMaker.of().createBridgesInThisPillar(gameStartOption), 1); List bridgesLocations = p.getBridgesLocations(); System.out.println(bridgesLocations); assertEquals(true, bridgesLocations.size() <= 3 && bridgesLocations.size() >= 0); @@ -22,8 +23,9 @@ public class PillarTest { @Test public void 기둥에_연결된_특정_방향의_다리의_location_값_리스트_가져오기() { - GameStartOption GameStartOption = new GameStartOption("pobi,honux,crong,jk", 3); - Pillar p = Pillar.of(PillarMaker.of().createBridgesInThisPillar(GameStartOption), 1); + GameStartOption gameStartOption = GameStartOption.of("pobi,honux,crong,jk", 3, "꽝,5000,꽝,3000"); + + Pillar p = Pillar.of(PillarMaker.of().createBridgesInThisPillar(gameStartOption), 1); List bridgesLocations = p.getBridgesDirectionLocation(LinkedType.LEFT); assertEquals(0, bridgesLocations.size()); } diff --git a/src/test/java/domain/ladderCalculator/LadderIOTest.java b/src/test/java/domain/ladderCalculator/LadderIOTest.java new file mode 100644 index 0000000..dde3589 --- /dev/null +++ b/src/test/java/domain/ladderCalculator/LadderIOTest.java @@ -0,0 +1,18 @@ +package domain.ladderCalculator; + +import domain.ladder.Ladder; +import dto.GameStartOption; +import org.junit.Test; + +import static org.junit.Assert.assertEquals; + +public class LadderIOTest { + + @Test + public void 유저_리스트_관리하는_유저_관리자_생성하기() { + GameStartOption gameStartOption = GameStartOption.of("pobi,honux,crong,jk", 4, "꽝,5000,꽝,3000"); + Ladder ladder = Ladder.of(gameStartOption); + LadderIO ladderIO = LadderIO.of(gameStartOption); + assertEquals(4, ladderIO.getUsers().size()); + } +} \ No newline at end of file diff --git a/src/test/java/domain/maker/LadderMakerTest.java b/src/test/java/domain/maker/LadderMakerTest.java index a319e86..6a7cbfd 100644 --- a/src/test/java/domain/maker/LadderMakerTest.java +++ b/src/test/java/domain/maker/LadderMakerTest.java @@ -12,7 +12,8 @@ public class LadderMakerTest { @Test public void LadderMaker로_Ladder안에있는_PillarList_만들기() { - GameStartOption gameStartOption = new GameStartOption("pobi,honux,crong,jk", 3); + GameStartOption gameStartOption = GameStartOption.of("pobi,honux,crong,jk", 3, "꽝,5000,꽝,3000"); + LadderMaker ladderMaker = LadderMaker.of(); List pillarList = ladderMaker.createLadder(gameStartOption); assertEquals(4, pillarList.size()); diff --git a/src/test/java/domain/maker/PillarMakerTest.java b/src/test/java/domain/maker/PillarMakerTest.java index 852546f..d075f09 100644 --- a/src/test/java/domain/maker/PillarMakerTest.java +++ b/src/test/java/domain/maker/PillarMakerTest.java @@ -15,14 +15,16 @@ public class PillarMakerTest { @Test public void 자동으로_오른쪽_기둥과_연결된_다리리스트_만들기() { - GameStartOption gameStartOption = new GameStartOption("pobi,honux,crong,jk", 3); + GameStartOption gameStartOption = GameStartOption.of("pobi,honux,crong,jk", 3, "꽝,5000,꽝,3000"); + List bridges = PillarMaker.of().createBridgesInThisPillar(gameStartOption); assertEquals(true, bridges.size() <= 3); } @Test public void 첫번째_기둥_bridge_리스트_만들기() { - GameStartOption gameStartOption = new GameStartOption("pobi,honux,crong,jk", 3); + GameStartOption gameStartOption = GameStartOption.of("pobi,honux,crong,jk", 3, "꽝,5000,꽝,3000"); + List bridges = PillarMaker.of().createBridgesInThisPillar(gameStartOption); Pillar p = Pillar.of(bridges, 0); @@ -35,7 +37,8 @@ public class PillarMakerTest { @Test public void 두번째_기둥_bridge_리스트_만들기() { - GameStartOption gameStartOption = new GameStartOption("pobi,honux,crong,jk", 10); + GameStartOption gameStartOption = GameStartOption.of("pobi,honux,crong,jk", 10, "꽝,5000,꽝,3000"); + List bridges = PillarMaker.of().createBridgesInThisPillar(gameStartOption); Pillar p = Pillar.of(bridges, 0); @@ -58,7 +61,8 @@ public class PillarMakerTest { @Test public void 마지막_기둥_bridge_리스트_만들기() { - GameStartOption gameStartOption = new GameStartOption("pobi,honux,crong,jk", 10); + GameStartOption gameStartOption = GameStartOption.of("pobi,honux,crong,jk", 3, "꽝,5000,꽝,3000"); + List bridges = PillarMaker.of().createBridgesInThisPillar(gameStartOption); Pillar p = Pillar.of(bridges, 0); diff --git a/src/test/java/domain/user/ParticipantUsersTest.java b/src/test/java/domain/user/ParticipantUsersTest.java deleted file mode 100644 index f654df9..0000000 --- a/src/test/java/domain/user/ParticipantUsersTest.java +++ /dev/null @@ -1,16 +0,0 @@ -package domain.user; - -import dto.GameStartOption; -import org.junit.Test; - -import static org.junit.Assert.assertEquals; - -public class ParticipantUsersTest { - - @Test - public void 유저_리스트_관리하는_유저_관리자_생성하기() { - GameStartOption gameStartOption = GameStartOption.of("pobi,honux,crong,jk", 4); - ParticipantUsers participantUsers = ParticipantUsers.of(gameStartOption); - assertEquals(4, participantUsers.getUsers().size()); - } -} \ No newline at end of file diff --git a/src/test/java/domain/user/UserTest.java b/src/test/java/domain/user/UserTest.java deleted file mode 100644 index 4eef335..0000000 --- a/src/test/java/domain/user/UserTest.java +++ /dev/null @@ -1,13 +0,0 @@ -package domain.user; - -import org.junit.Test; - -import static org.junit.Assert.assertEquals; - -public class UserTest { - @Test - public void 유저생성() { - User user = new User("hello"); - assertEquals("hello", user.getName()); - } -} \ No newline at end of file diff --git a/src/test/java/util/UtilTest.java b/src/test/java/util/UtilTest.java index b2b5721..5bafdfb 100644 --- a/src/test/java/util/UtilTest.java +++ b/src/test/java/util/UtilTest.java @@ -18,7 +18,7 @@ public class UtilTest { @Test public void UserName_여러개로_분리하기() { String users = "pobi,honux,crong,jk"; - List separateUserName = RandomIntegerMaker.separateUserName(users); + List separateUserName = RandomIntegerMaker.separateByDelimiter(users); assertEquals("pobi", separateUserName.get(0)); } } \ No newline at end of file From bb6f1f01fe263b13667db5d28343de56616a2d57 Mon Sep 17 00:00:00 2001 From: mjung1798 Date: Mon, 20 May 2019 13:27:39 +0900 Subject: [PATCH 14/14] =?UTF-8?q?[=20=EC=88=98=EC=A0=95=EC=99=84=EB=A3=8C?= =?UTF-8?q?=20]=201.=20package=20=EC=84=A4=EA=B3=84=20=EB=8B=A4=EC=8B=9C?= =?UTF-8?q?=ED=95=98=EA=B8=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 각 List, List 생성부분 maker라는 class로 분리하기 throw error 처리 factory method 패턴 : PillarFactory test code 수정 2. output view 수정 bridge와 높이 들고있는 dto로 만들기 (가로로 출력할 수 있는 dto로 만들기) converter class로 분리 : bridge 1개와 level 들고있는 찍기 편한 형태로 변환 (flatMap) 3. 마지막 요구사항 추가하기 실행결과 유저와 실행 결과 매칭해서 output 보여주기 - user class에서 calc 메소드 만들어서 구현 사다리 input output 결과 매칭하기 --- src/main/java/domain/factory/PillarFactory.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/java/domain/factory/PillarFactory.java b/src/main/java/domain/factory/PillarFactory.java index 5819ec3..99504b4 100644 --- a/src/main/java/domain/factory/PillarFactory.java +++ b/src/main/java/domain/factory/PillarFactory.java @@ -11,7 +11,7 @@ public class PillarFactory { public static final int MINIMUM_PILLAR_NUM = 0; - public Pillar createFirstPillar (GameStartOption gameStartOption) { + public Pillar createFirstPillar(GameStartOption gameStartOption) { List bridges = PillarMaker.of().createBridgesInThisPillar(gameStartOption); Integer pillarNum = MINIMUM_PILLAR_NUM; @@ -19,7 +19,7 @@ public Pillar createFirstPillar (GameStartOption gameStartOption) { return Pillar.of(bridges, pillarNum); } - public Pillar createNotFirstPillar (GameStartOption gameStartOption, Pillar previousPillar) { + public Pillar createNotFirstPillar(GameStartOption gameStartOption, Pillar previousPillar) { List bridges = PillarMaker.of().createBridgesInThisPillar(gameStartOption, previousPillar); Integer pillarNum = nowPillarNum(previousPillar);