Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion .idea/misc.xml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

124 changes: 124 additions & 0 deletions .idea/uiDesigner.xml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

5 changes: 5 additions & 0 deletions src/main/java/ladder/LadderGame.java
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
package ladder;

import ladder.component.Position;
import ladder.creator.LadderCreator;

public class LadderGame {
Expand All @@ -15,4 +16,8 @@ public int run(Position position) {
ladderRunner.run(position);
return position.getValue();
}

public LadderCreator getLadderCreator() {
return this.ladderCreator;
}
}
19 changes: 19 additions & 0 deletions src/main/java/ladder/LadderGameFactory.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
package ladder;

import ladder.component.GreaterThanOne;
import ladder.component.LadderSize;
import ladder.creator.AutoLadderCreatorImpl;
import ladder.creator.BasicLadderCreatorImpl;
import ladder.creator.LadderCreator;

public class LadderGameFactory {

public static LadderGame createRandomLadderGame(LadderSize ladderSize) {
return new LadderGame(new AutoLadderCreatorImpl(ladderSize));
}

public static LadderGame createBasicLadderGame(LadderSize ladderSize) {
return new LadderGame(new BasicLadderCreatorImpl(ladderSize));
}
}

18 changes: 18 additions & 0 deletions src/main/java/ladder/LadderRunner.java
Original file line number Diff line number Diff line change
@@ -1,17 +1,35 @@
package ladder;

import ladder.component.LadderPosition;
import ladder.component.Position;
import ladder.component.Row;
import ladder.printer.LadderPrinter;

import static ladder.constant.TimeLine.*;

public class LadderRunner {

private final Row[] rows;
private final LadderPrinter ladderPrinter;

public LadderRunner(Row[] rows) {
this.rows = rows;
this.ladderPrinter = LadderPrinter.from(rows);
}

public int run(Position position) {

for (int i = 0; i < rows.length; i++) {

ladderPrinter.printWholeLine(LadderPosition.from(Position.from(i), position), BEFORE);

rows[i].nextPosition(position);

ladderPrinter.printWholeLine(LadderPosition.from(Position.from(i), position), AFTER);

}

return position.getValue();
}

}
Original file line number Diff line number Diff line change
@@ -1,4 +1,6 @@
package ladder;
package ladder.component;

import ladder.constant.ExceptionMessage;

public class GreaterThanOne {

Expand Down
28 changes: 28 additions & 0 deletions src/main/java/ladder/component/LadderPosition.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
package ladder.component;

public class LadderPosition {

private Position row;
private Position col;

private LadderPosition(Position row, Position col) {
this.row = row;
this.col = col;
}

public static LadderPosition from(Position row, Position col) {
return new LadderPosition(row, col);
}

public Position getRow() {
return row;
}

public Position getCol() {
return col;
}

public boolean isCurrentRow(Position row) {
return this.row.getValue() == row.getValue();
}
}
26 changes: 26 additions & 0 deletions src/main/java/ladder/component/LadderSize.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
package ladder.component;

public class LadderSize {

GreaterThanOne numberOfRow;
GreaterThanOne numberOfPerson;

private LadderSize(GreaterThanOne numberOfRow, GreaterThanOne numberOfPerson) {
this.numberOfRow = numberOfRow;
this.numberOfPerson = numberOfPerson;
}

public static LadderSize from(GreaterThanOne numberOfRow, GreaterThanOne numberOfPerson) {
return new LadderSize(numberOfRow, numberOfPerson);
}

public GreaterThanOne getNumberOfRow() {
return numberOfRow;
}

public GreaterThanOne getNumberOfPerson() {
return numberOfPerson;
}


}
Original file line number Diff line number Diff line change
@@ -1,6 +1,8 @@
package ladder;
package ladder.component;

import static ladder.Direction.*;
import ladder.constant.Direction;

import static ladder.constant.Direction.*;

public class Node {

Expand Down Expand Up @@ -48,4 +50,8 @@ private boolean isLeft() {
private boolean isNone() {
return direction == NONE;
}

public void appendNodeValue(StringBuilder sb) {
sb.append(this.direction.getValue());
}
}
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
package ladder;
package ladder.component;

import static ladder.ExceptionMessage.INVALID_LADDER_POSITION;
import static ladder.constant.ExceptionMessage.INVALID_LADDER_POSITION;

public class Position {
private int position;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,8 @@
package ladder;
package ladder.component;

import static ladder.Direction.*;
import ladder.constant.ExceptionMessage;

import static ladder.constant.Direction.*;

public class Row {
private final Node[] nodes;
Expand All @@ -12,6 +14,10 @@ public Row(GreaterThanOne numberOfPerson) {
}
}

public Node[] getNodes() {
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

해당 로직이 getNodes().length() 이렇게 활용되는데 getNodes를 통해 캡슐화를 깨뜨릴 필요가 있을까요? getNodesLength()를 사용하거나, LadderSize 를 사용하는게 바람직해 보입니다.

return this.nodes;
}

public void drawLine(Position startPosition) {
validateDrawLinePosition(startPosition);

Expand All @@ -24,27 +30,61 @@ public void nextPosition(Position position) {
nodes[position.getValue()].move(position);
}


// 별표를 추가한 행 출력
public StringBuilder printAsteroidLine(Position col) {
StringBuilder sb = new StringBuilder();

for (int i = 0; i < nodes.length; i++) {
if (i == col.getValue()) {
nodes[i].appendNodeValue(sb);
sb.append("* ");
continue;
}

nodes[i].appendNodeValue(sb);
sb.append(" ");
}

return sb;
}

// 별표를 추가하지 않는 행 출력
public StringBuilder printNormalLine() {
StringBuilder sb = new StringBuilder();

for (int i = 0; i < nodes.length; i++) {
nodes[i].appendNodeValue(sb);
sb.append(" ");
}

return sb;
}


private void setDirectionBetweenNextPosition(Position position) {
nodes[position.getValue()].setRightNode();
position.next();
nodes[position.getValue()].setLeftNode();
}

private void validatePosition(Position position) {
if (isInvalidPosition(position) ) {
if (isInvalidPosition(position)) {
throw new IllegalArgumentException(ExceptionMessage.INVALID_POSITION.getMessage());
}
}

private void validateDrawLinePosition(Position startPosition) {

// AutoLadderCreator에서도 메소드를 가져다 사용할 것이라서 public으로 변경
public void validateDrawLinePosition(Position startPosition) {
validatePosition(startPosition);
if (isLineAtPosition(startPosition) || isLineAtNextPosition(startPosition)) {
throw new IllegalArgumentException(ExceptionMessage.INVALID_DRAW_POSITION.getMessage());
}
}

private boolean isInvalidPosition(Position position) {
return position.isBiggerThan(nodes.length - 1) ;
return position.isBiggerThan(nodes.length - 1);
}

private boolean isLineAtPosition(Position position) {
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package ladder;
package ladder.constant;

public enum Direction {

Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package ladder;
package ladder.constant;

public enum ExceptionMessage {

Expand Down
Loading