diff --git a/.idea/misc.xml b/.idea/misc.xml
index 8f86b33..bfd8e61 100644
--- a/.idea/misc.xml
+++ b/.idea/misc.xml
@@ -4,7 +4,7 @@
-
+
\ No newline at end of file
diff --git a/.idea/uiDesigner.xml b/.idea/uiDesigner.xml
new file mode 100644
index 0000000..2b63946
--- /dev/null
+++ b/.idea/uiDesigner.xml
@@ -0,0 +1,124 @@
+
+
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+
+
+
+ -
+
+
+
+
+
+ -
+
+
+
+
+
+ -
+
+
+
+
+
+ -
+
+
+
+
+ -
+
+
+
+
+ -
+
+
+
+
+ -
+
+
+
+
+ -
+
+
+
+
+ -
+
+
+
+
+ -
+
+
+ -
+
+
+
+
+ -
+
+
+
+
+ -
+
+
+
+
+ -
+
+
+
+
+ -
+
+
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+
+
+ -
+
+
+ -
+
+
+
+
+
\ No newline at end of file
diff --git a/src/main/java/ladder/LadderGame.java b/src/main/java/ladder/LadderGame.java
index 717458e..cd44712 100644
--- a/src/main/java/ladder/LadderGame.java
+++ b/src/main/java/ladder/LadderGame.java
@@ -2,6 +2,7 @@
import ladder.creator.LadderCreator;
+
public class LadderGame {
private final LadderCreator ladderCreator;
diff --git a/src/main/java/ladder/LadderGameFactory.java b/src/main/java/ladder/LadderGameFactory.java
new file mode 100644
index 0000000..3f1aa53
--- /dev/null
+++ b/src/main/java/ladder/LadderGameFactory.java
@@ -0,0 +1,22 @@
+package ladder;
+
+import ladder.creator.DefaultLadderCreator;
+import ladder.creator.LadderCreator;
+import ladder.creator.RandomLadderCreator;
+
+public class LadderGameFactory {
+
+ private LadderSize ladderSize;
+ // 정적 팩토리 메서드
+ public static LadderGame createRandomLadderGame(LadderSize ladderSize) {
+ // 복잡한 생성 로직을 여기서 처리
+ RandomLadderCreator randomLadderCreator = new RandomLadderCreator(ladderSize.getNumberOfRow(), ladderSize.getNumberOfPerson());
+ return new LadderGame(randomLadderCreator); // 의존성 주입도 여기서 처리
+ }
+
+ // 다른 방식의 사다리 생성 메서드도 가능
+ public static LadderGame createDefaultLadderGame(LadderSize ladderSize) {
+ DefaultLadderCreator defaultLadderCreator = new DefaultLadderCreator(ladderSize.getNumberOfRow(), ladderSize.getNumberOfPerson());
+ return new LadderGame(defaultLadderCreator);
+ }
+}
\ No newline at end of file
diff --git a/src/main/java/ladder/LadderPosition.java b/src/main/java/ladder/LadderPosition.java
new file mode 100644
index 0000000..aad838e
--- /dev/null
+++ b/src/main/java/ladder/LadderPosition.java
@@ -0,0 +1,22 @@
+package ladder;
+
+public class LadderPosition {
+ private Position row;
+ private Position col;
+
+ public LadderPosition(Position row, Position col) {
+ this.row = row;
+ this.col = col;
+ }
+
+ public Position getCol() {
+ return col;
+ }
+ public Position getRow() {
+ return row;
+ }
+
+ public void moveDown() {
+ row.next();
+ }
+}
diff --git a/src/main/java/ladder/LadderRunner.java b/src/main/java/ladder/LadderRunner.java
index dc1e121..13713d4 100644
--- a/src/main/java/ladder/LadderRunner.java
+++ b/src/main/java/ladder/LadderRunner.java
@@ -9,9 +9,34 @@ public LadderRunner(Row[] rows) {
}
public int run(Position position) {
- for (int i = 0; i < rows.length; i++) {
- rows[i].nextPosition(position);
+ LadderPosition currentPosition = new LadderPosition(Position.from(0), position);
+ for (Row row : rows) {
+ printBeforeLadder(currentPosition);
+ row.nextPosition(currentPosition.getCol());
+ printAfterLadder(currentPosition);
+ currentPosition.moveDown();
}
return position.getValue();
}
+ private void printBeforeLadder(LadderPosition currentPosition){
+ System.out.println("Before");
+ printLadder(currentPosition);
+
+ }
+ private void printAfterLadder(LadderPosition currentPosition){
+ System.out.println("After");
+ printLadder(currentPosition);
+ }
+
+ private void printLadder(LadderPosition currentPosition){
+ for (int i = 0; i < rows.length; i++) {
+ if (currentPosition.getRow().getValue() == i) {
+ System.out.println(rows[i].toString(currentPosition));
+ }
+ else {
+ System.out.println(rows[i].toString());
+ }
+ }
+ System.out.println();
+ }
}
diff --git a/src/main/java/ladder/LadderSize.java b/src/main/java/ladder/LadderSize.java
new file mode 100644
index 0000000..94e1d24
--- /dev/null
+++ b/src/main/java/ladder/LadderSize.java
@@ -0,0 +1,19 @@
+package ladder;
+
+public class LadderSize {
+ private GreaterThanOne numberOfRow;
+ private GreaterThanOne numberOfPerson;
+
+ public LadderSize(GreaterThanOne numberOfRow, GreaterThanOne numberOfPerson) {
+ this.numberOfRow = numberOfRow;
+ this.numberOfPerson = numberOfPerson;
+ }
+
+ public GreaterThanOne getNumberOfRow() {
+ return numberOfRow;
+ }
+
+ public GreaterThanOne getNumberOfPerson() {
+ return numberOfPerson;
+ }
+}
diff --git a/src/main/java/ladder/Main.java b/src/main/java/ladder/Main.java
new file mode 100644
index 0000000..f73d920
--- /dev/null
+++ b/src/main/java/ladder/Main.java
@@ -0,0 +1,35 @@
+package ladder;
+
+import ladder.creator.DefaultLadderCreator;
+import ladder.creator.RandomLadderCreator;
+
+public class Main {
+ public static void main(String[] args) {
+ // row and col
+ GreaterThanOne numberOfPerson = GreaterThanOne.from(4);
+ GreaterThanOne row = GreaterThanOne.from(3);
+
+
+ // 기본 사다리 게임
+ System.out.println("기본 사다리게임 시작 : ");
+ DefaultLadderCreator defaultLadderCreator = new DefaultLadderCreator(row, numberOfPerson);
+ LadderGame defaultLadderGame = new LadderGame(defaultLadderCreator);
+
+ defaultLadderCreator.drawLine(Position.from(0),Position.from(0));
+ defaultLadderCreator.drawLine(Position.from(1),Position.from(1));
+ defaultLadderCreator.drawLine(Position.from(2),Position.from(0));
+
+ defaultLadderGame.run(Position.from(0));
+ System.out.println();
+ // 기본 사다리 게임 출력 끝
+
+ // 랜덤 사다리 게임 시작
+ System.out.println("랜덤 사다리 게임 시작 : ");
+ RandomLadderCreator randomLadderCreator = new RandomLadderCreator(row, numberOfPerson);
+ LadderGame randomLadderGame = new LadderGame(randomLadderCreator);
+ randomLadderCreator.drawRandomLines();
+ randomLadderGame.run(Position.from(0));
+ System.out.println("왜이러지..");
+
+ }
+}
diff --git a/src/main/java/ladder/Node.java b/src/main/java/ladder/Node.java
index 3291e62..8b87211 100644
--- a/src/main/java/ladder/Node.java
+++ b/src/main/java/ladder/Node.java
@@ -24,6 +24,9 @@ public void move(Position position) {
return;
}
}
+ public Direction getDirection() {
+ return direction;
+ }
public void setRightNode() {
direction = RIGHT;
diff --git a/src/main/java/ladder/Row.java b/src/main/java/ladder/Row.java
index 1be0477..dae77a2 100644
--- a/src/main/java/ladder/Row.java
+++ b/src/main/java/ladder/Row.java
@@ -18,6 +18,26 @@ public void drawLine(Position startPosition) {
setDirectionBetweenNextPosition(startPosition);
}
+ public String toString(LadderPosition currentPosition){
+ StringBuilder sb = new StringBuilder();
+ for (int i = 0; i < nodes.length; i++) {
+ sb.append(nodes[i].getDirection().getValue());
+ if (i == currentPosition.getCol().getValue()){
+ sb.append("*");
+ }
+ sb.append(" ");
+ }
+ return sb.toString();
+ }
+ public String toString(){
+ StringBuilder sb = new StringBuilder();
+ for (int i = 0; i < nodes.length; i++) {
+ sb.append(nodes[i].getDirection().getValue());
+ sb.append(" ");
+ }
+ return sb.toString();
+ }
+
public void nextPosition(Position position) {
validatePosition(position);
diff --git a/src/main/java/ladder/creator/DefaultLadderCreator.java b/src/main/java/ladder/creator/DefaultLadderCreator.java
new file mode 100644
index 0000000..79264b7
--- /dev/null
+++ b/src/main/java/ladder/creator/DefaultLadderCreator.java
@@ -0,0 +1,27 @@
+package ladder.creator;
+
+import ladder.GreaterThanOne;
+import ladder.Position;
+import ladder.Row;
+
+public class DefaultLadderCreator implements LadderCreator {
+
+ private final Row[] rows;
+
+ public DefaultLadderCreator(GreaterThanOne numberOfRow, GreaterThanOne numberOfPerson) {
+ rows = new Row[numberOfRow.getNumber()];
+ for (int i = 0; i < numberOfRow.getNumber(); i++) {
+ rows[i] = new Row(numberOfPerson);
+ }
+ }
+
+ @Override
+ public void drawLine(Position row, Position col) {
+ rows[row.getValue()].drawLine(col);
+ }
+
+ @Override
+ public Row[] getRows() {
+ return rows;
+ }
+}
diff --git a/src/main/java/ladder/creator/LadderCreator.java b/src/main/java/ladder/creator/LadderCreator.java
index 0145e29..5af30ed 100644
--- a/src/main/java/ladder/creator/LadderCreator.java
+++ b/src/main/java/ladder/creator/LadderCreator.java
@@ -1,25 +1,11 @@
package ladder.creator;
-import ladder.GreaterThanOne;
import ladder.Position;
import ladder.Row;
-public class LadderCreator {
+public interface LadderCreator {
- private final Row[] rows;
+ public void drawLine(Position row, Position col);
- public LadderCreator(GreaterThanOne numberOfRow, GreaterThanOne numberOfPerson) {
- rows = new Row[numberOfRow.getNumber()];
- for (int i = 0; i < numberOfRow.getNumber(); i++) {
- rows[i] = new Row(numberOfPerson);
- }
- }
-
- public void drawLine(Position row, Position col) {
- rows[row.getValue()].drawLine(col);
- }
-
- public Row[] getRows() {
- return rows;
- }
+ public Row[] getRows();
}
diff --git a/src/main/java/ladder/creator/RandomLadderCreator.java b/src/main/java/ladder/creator/RandomLadderCreator.java
new file mode 100644
index 0000000..ebf970e
--- /dev/null
+++ b/src/main/java/ladder/creator/RandomLadderCreator.java
@@ -0,0 +1,52 @@
+package ladder.creator;
+
+import ladder.GreaterThanOne;
+import ladder.LadderPosition;
+import ladder.Position;
+import ladder.Row;
+
+import java.util.HashSet;
+import java.util.Random;
+import java.util.Set;
+
+public class RandomLadderCreator implements LadderCreator {
+ private final Row[] rows;
+ private int numberOfLines;
+ private int numberOfPerson;
+
+ public RandomLadderCreator(GreaterThanOne numberOfRow, GreaterThanOne numberOfPerson) {
+ rows = new Row[numberOfRow.getNumber()];
+ for (int i = 0; i < numberOfRow.getNumber(); i++) {
+ rows[i] = new Row(numberOfPerson);
+ }
+ this.numberOfPerson = numberOfPerson.getNumber();
+ numberOfLines = numberOfRow.getNumber() * numberOfPerson.getNumber() * 3 / 10;
+ }
+
+ public void drawRandomLines(){
+ Set drawnLines = new HashSet();
+ while (drawnLines.size() < numberOfLines) {
+ Random random = new Random();
+ int randomRow = random.nextInt(rows.length);
+ int randomCol = random.nextInt(numberOfPerson);
+ LadderPosition ladderPosition = new LadderPosition(Position.from(randomRow),Position.from(randomCol));
+ try {
+ drawLine(ladderPosition.getRow(), ladderPosition.getCol());
+ } catch (Exception e){
+ continue;
+ }
+ drawnLines.add(ladderPosition);
+ }
+ }
+
+
+ @Override
+ public void drawLine(Position row, Position col) {
+ rows[row.getValue()].drawLine(col);
+ }
+
+ @Override
+ public Row[] getRows() {
+ return rows;
+ }
+}
diff --git a/src/test/java/ladder/LadderGameTest.java b/src/test/java/ladder/LadderGameTest.java
index aa93e5f..319021e 100644
--- a/src/test/java/ladder/LadderGameTest.java
+++ b/src/test/java/ladder/LadderGameTest.java
@@ -1,6 +1,6 @@
package ladder;
-import ladder.creator.LadderCreator;
+import ladder.creator.DefaultLadderCreator;
import org.junit.jupiter.api.Test;
import static org.assertj.core.api.Assertions.*;
@@ -14,18 +14,18 @@ class LadderGameTest {
GreaterThanOne numberOfPerson = GreaterThanOne.from(5);
//when
- LadderCreator ladderCreator = new LadderCreator(numberOfRow, numberOfPerson);
+ DefaultLadderCreator defaultLadderCreator = new DefaultLadderCreator(numberOfRow, numberOfPerson);
//then
- assertThat(ladderCreator).isNotNull();
+ assertThat(defaultLadderCreator).isNotNull();
}
@Test
void 사다리_사람_예외_처리_확인() {
//when
GreaterThanOne numberOfPerson = GreaterThanOne.from(3);
- LadderCreator ladderCreator = new LadderCreator(GreaterThanOne.from(2), numberOfPerson);
- LadderGame ladderGame = new LadderGame(ladderCreator);
+ DefaultLadderCreator defaultLadderCreator = new DefaultLadderCreator(GreaterThanOne.from(2), numberOfPerson);
+ LadderGame ladderGame = new LadderGame(defaultLadderCreator);
//given
Position position = Position.from(4);
@@ -40,12 +40,12 @@ class LadderGameTest {
//when
GreaterThanOne numberOfPerson = GreaterThanOne.from(4);
GreaterThanOne row = GreaterThanOne.from(3);
- LadderCreator ladderCreator = new LadderCreator(row, numberOfPerson);
- LadderGame ladderGame = new LadderGame(ladderCreator);
+ DefaultLadderCreator defaultLadderCreator = new DefaultLadderCreator(row, numberOfPerson);
+ LadderGame ladderGame = new LadderGame(defaultLadderCreator);
- ladderCreator.drawLine(Position.from(0),Position.from(0));
- ladderCreator.drawLine(Position.from(1),Position.from(1));
- ladderCreator.drawLine(Position.from(2),Position.from(0));
+ defaultLadderCreator.drawLine(Position.from(0),Position.from(0));
+ defaultLadderCreator.drawLine(Position.from(1),Position.from(1));
+ defaultLadderCreator.drawLine(Position.from(2),Position.from(0));
//given
Position position = Position.from(0);