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.

1 change: 1 addition & 0 deletions src/main/java/ladder/LadderGame.java
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@

import ladder.creator.LadderCreator;


Copy link
Member

Choose a reason for hiding this comment

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

아무 의미 없는 부분이 commit에 포함되어 있네요.. git add -A 하신거 딱 걸렸습니다 ㅎㅎ
인텔리제이 내장 git gui(이름을 이렇게 부르는게 맞는지 모르겠네요)에서 수정 전후 코드를 확인할 수 있으니 의미 없는 부분은 제거하고 commit 하시면 좋을 것 같습니다!

public class LadderGame {

private final LadderCreator ladderCreator;
Expand Down
22 changes: 22 additions & 0 deletions src/main/java/ladder/LadderGameFactory.java
Original file line number Diff line number Diff line change
@@ -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);
}
}
22 changes: 22 additions & 0 deletions src/main/java/ladder/LadderPosition.java
Original file line number Diff line number Diff line change
@@ -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();
}
}
29 changes: 27 additions & 2 deletions src/main/java/ladder/LadderRunner.java
Original file line number Diff line number Diff line change
Expand Up @@ -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));
Copy link
Member

Choose a reason for hiding this comment

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

LadderPosition을 row 값과 비교하는 로직은 Row에 있으면 더 좋을 것 같습니다!

}
else {
System.out.println(rows[i].toString());
}
}
System.out.println();
}
}
19 changes: 19 additions & 0 deletions src/main/java/ladder/LadderSize.java
Original file line number Diff line number Diff line change
@@ -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;
}
}
35 changes: 35 additions & 0 deletions src/main/java/ladder/Main.java
Original file line number Diff line number Diff line change
@@ -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("왜이러지..");
Copy link
Contributor Author

@mr8356 mr8356 Sep 25, 2024

Choose a reason for hiding this comment

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

System.out.println("왜이러지..") <--- 이거 지우는거 깜박했네요!ㅋㅋㅋㅋ 잘 돌아갑니다


}
}
3 changes: 3 additions & 0 deletions src/main/java/ladder/Node.java
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,9 @@ public void move(Position position) {
return;
}
}
public Direction getDirection() {
return direction;
}

public void setRightNode() {
direction = RIGHT;
Expand Down
20 changes: 20 additions & 0 deletions src/main/java/ladder/Row.java
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,26 @@ public void drawLine(Position startPosition) {
setDirectionBetweenNextPosition(startPosition);
}

public String toString(LadderPosition currentPosition){
Copy link
Member

Choose a reason for hiding this comment

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

toString 이라는 이름은 최상위 클래스인 Object에 정의된 메서드와 이름이 같아 의미가 혼동될 수 있습니다. 다른 메서드 이름을 사용하는게 바람직합니다.

StringBuilder sb = new StringBuilder();
for (int i = 0; i < nodes.length; i++) {
sb.append(nodes[i].getDirection().getValue());
Copy link
Member

Choose a reason for hiding this comment

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

Node에서 getDirection을 통해 값을 가져오는게 아니라 Node에서 직접 자신의 상태를 sb에 추가하는 방식이 더 객체 지향적일 것 같습니다. getter를 사용하기 전에 해당 클래스 안에서 처리할 수 있는 로직인지 고민해 보시는게 좋겠습니다.

if (i == currentPosition.getCol().getValue()){
sb.append("*");
}
Copy link
Member

Choose a reason for hiding this comment

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

이중 들여쓰기가 된 부분은 메서드 추출을 통해 분리해 보시는게 어떨까요?

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);

Expand Down
27 changes: 27 additions & 0 deletions src/main/java/ladder/creator/DefaultLadderCreator.java
Original file line number Diff line number Diff line change
@@ -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;
}
}
20 changes: 3 additions & 17 deletions src/main/java/ladder/creator/LadderCreator.java
Original file line number Diff line number Diff line change
@@ -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();
}
Loading