Skip to content

Commit 0f55070

Browse files
committed
ladder game complete
1 parent 1313b1f commit 0f55070

20 files changed

Lines changed: 197 additions & 144 deletions

src/main/java/LadderGame.java

Lines changed: 14 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,19 +1,26 @@
11
import domain.ladder.Ladder;
2-
import domain.user.ParticipantUsers;
2+
import domain.ladderCalculator.LadderIO;
33
import dto.GameStartOption;
44
import view.InputView;
5-
import view.OutputView;
5+
import view.OutputLadder;
66

77
public class LadderGame {
88

99
public static void main(String args[]) {
10-
GameStartOption gameStartOption = InputView.of(System.in).initGameStartOption();
10+
InputView inputView = InputView.of(System.in);
11+
GameStartOption gameStartOption = inputView.initGameStartOption();
1112
Ladder ladder = Ladder.of(gameStartOption);
12-
ParticipantUsers userManage = ParticipantUsers.of(gameStartOption);
13-
OutputView print = OutputView.of(userManage, ladder);
13+
LadderIO ladderIO = LadderIO.of(gameStartOption);
14+
OutputLadder ladderPrint = OutputLadder.of(ladderIO, ladder);
1415

15-
print.drawUserNames();
16-
print.drawOutput();
16+
ladderPrint.drawUserNames();
17+
ladderPrint.drawOutput();
18+
ladderPrint.drawResults();
19+
20+
while (true) {
21+
String ask = inputView.showResultUser();
22+
ladderPrint.showLadderResult(ask);
23+
}
1724

1825
}
1926
}

src/main/java/domain/ladder/Ladder.java

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,9 @@
22

33
import domain.maker.LadderMaker;
44
import dto.GameStartOption;
5+
56
import java.util.List;
7+
import java.util.Optional;
68

79
public class Ladder {
810

@@ -16,7 +18,7 @@ private Ladder(GameStartOption gameStartOption) {
1618
this.pillars = LadderMaker.of().createLadder(gameStartOption);
1719
}
1820

19-
public static Ladder of(GameStartOption gameStartOption){
21+
public static Ladder of(GameStartOption gameStartOption) {
2022
return new Ladder(gameStartOption);
2123
}
2224

@@ -39,4 +41,13 @@ public Integer getHeight() {
3941
return height;
4042
}
4143

44+
public Pillar getNextPillar(Pillar nowPillar, Integer nowLocation) {
45+
Optional<Bridge> linkBridge = nowPillar.getLevelBridges(nowLocation);
46+
if (!linkBridge.isPresent())
47+
return nowPillar;
48+
return linkBridge.get().getLinkPillarDirection() == LinkedType.RIGHT ?
49+
getPillarByNum(nowPillar.getPillarNum() + 1) :
50+
getPillarByNum(nowPillar.getPillarNum() - 1);
51+
}
52+
4253
}
Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,52 @@
1+
package domain.ladderCalculator;
2+
3+
import domain.ladder.Ladder;
4+
import domain.ladder.Pillar;
5+
import dto.GameStartOption;
6+
7+
import java.util.Collections;
8+
import java.util.List;
9+
import java.util.stream.Collectors;
10+
11+
import static util.RandomIntegerMaker.separateByDelimiter;
12+
13+
public class LadderIO {
14+
15+
private List<String> users;
16+
private List<String> results;
17+
18+
private LadderIO(GameStartOption gameStartOption) {
19+
this.users = separateByDelimiter(gameStartOption.getParticipants());
20+
this.results = separateByDelimiter(gameStartOption.getResults());
21+
}
22+
23+
public static LadderIO of(GameStartOption gameStartOption) {
24+
return new LadderIO(gameStartOption);
25+
}
26+
27+
public List<String> getUsers() {
28+
return users;
29+
}
30+
31+
public List<String> getResults() {
32+
return results;
33+
}
34+
35+
public String findResult(Ladder ladder, String userName) {
36+
int row = 0;
37+
Pillar pillar = ladder.getPillarByNum(users.indexOf(userName));
38+
while (row < ladder.getHeight()) {
39+
pillar = ladder.getNextPillar(pillar, row);
40+
row++;
41+
}
42+
return results.get(pillar.getPillarNum());
43+
}
44+
45+
public int getUserCharMaxNum() {
46+
List<Integer> lengths = users.stream()
47+
.map(u -> u.length())
48+
.collect(Collectors.toList());
49+
return Collections.max(lengths);
50+
}
51+
52+
}

src/main/java/domain/user/ParticipantUsers.java

Lines changed: 0 additions & 40 deletions
This file was deleted.

src/main/java/domain/user/User.java

Lines changed: 0 additions & 18 deletions
This file was deleted.

src/main/java/dto/GameStartOption.java

Lines changed: 11 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -9,15 +9,17 @@ public class GameStartOption {
99

1010
private int ladderHeight;
1111
private String participants;
12+
private String results;
1213

13-
public GameStartOption(String participants, int ladderHeight) {
14+
public GameStartOption(String participants, int ladderHeight, String results) {
1415
this.ladderHeight = ladderHeight;
1516
this.participants = participants;
17+
this.results = results;
1618
validate();
1719
}
1820

19-
public static GameStartOption of(String participants, int ladderHeight){
20-
return new GameStartOption(participants, ladderHeight);
21+
public static GameStartOption of(String participants, int ladderHeight, String results){
22+
return new GameStartOption(participants, ladderHeight, results);
2123
}
2224

2325
private int getLadderWidth(String participants) {
@@ -37,10 +39,16 @@ public int getLadderHeight() {
3739
return ladderHeight;
3840
}
3941

42+
public String getResults() {
43+
return results;
44+
}
45+
4046
private void validate(){
4147
if(ladderHeight < MINIMUM_LADDER_HEIGHT)
4248
throw new IllegalArgumentException("올바른 사다리 높이를 입력해주세요.");
4349
if(getLadderWidth() < MINIMUM_PARTICIPANTS_COUNT )
4450
throw new IllegalArgumentException(("참가자 수를 2명이상 입력해주세요."));
51+
if(participants.split(DELIMITER).length != results.split(DELIMITER).length)
52+
throw new IllegalArgumentException(("결과와 참가자 수를 동일하게 입력해주세요."));
4553
}
4654
}

src/main/java/util/RandomIntegerMaker.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -30,9 +30,9 @@ public static List<Integer> createRandomIntegersWithRestriction(Integer ladderHe
3030
.collect(Collectors.toList());
3131
}
3232

33-
public static List<String> separateUserName(String participants) {
34-
String[] users = participants.split(DELIMITER);
35-
return Arrays.asList(users);
33+
public static List<String> separateByDelimiter(String inputString) {
34+
String[] splitString = inputString.split(DELIMITER);
35+
return Arrays.asList(splitString);
3636
}
3737

3838
public static Integer randInt(int bound) {

src/main/java/view/InputView.java

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,16 +21,27 @@ public String participants() {
2121
return sc.next();
2222
}
2323

24+
public String results(){
25+
System.out.println("실행 결과를 입력하세요. (결과는 쉼표(,)로 구분하세요)");
26+
return sc.next();
27+
28+
}
2429
public int ladderHeight() {
2530
System.out.println("최대 사다리 높이는 몇 개인가요?");
2631
return sc.nextInt();
2732
}
2833

34+
public String showResultUser() {
35+
System.out.println("결과를 보고싶은 사람은?");
36+
return sc.next();
37+
}
38+
2939
public GameStartOption initGameStartOption(){
3040
String participants = participants();
41+
String results = results();
3142
int ladderHeight = ladderHeight();
3243

33-
return new GameStartOption(participants, ladderHeight);
44+
return new GameStartOption(participants, ladderHeight, results);
3445
}
3546

3647
}
Lines changed: 44 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -5,26 +5,25 @@
55
import domain.converter.Row;
66
import domain.ladder.Ladder;
77
import domain.ladder.LinkedType;
8-
import domain.user.ParticipantUsers;
9-
import domain.user.User;
8+
import domain.ladderCalculator.LadderIO;
109

1110
import java.util.Collections;
1211
import java.util.List;
1312
import java.util.stream.IntStream;
1413

1514
import static view.OutputLine.*;
1615

17-
public class OutputView {
18-
private ParticipantUsers participantUsers;
16+
public class OutputLadder {
17+
private LadderIO ladderIO;
1918
private Ladder ladder;
2019

21-
private OutputView(ParticipantUsers participantUsers, Ladder ladder) {
20+
private OutputLadder(LadderIO ladderIO, Ladder ladder) {
2221
this.ladder = ladder;
23-
this.participantUsers = participantUsers;
22+
this.ladderIO = ladderIO;
2423
}
2524

26-
public static OutputView of(ParticipantUsers participantUsers, Ladder ladder) {
27-
return new OutputView(participantUsers, ladder);
25+
public static OutputLadder of(LadderIO ladderIO, Ladder ladder) {
26+
return new OutputLadder(ladderIO, ladder);
2827
}
2928

3029
public void drawOutput() {
@@ -35,6 +34,39 @@ public void drawOutput() {
3534
}
3635
}
3736

37+
public void drawUserNames() {
38+
StringBuilder sb = new StringBuilder();
39+
for (String user : ladderIO.getUsers()) {
40+
sb.append(user);
41+
sb.append(calculateBlank(user));
42+
sb.append(BLANK);
43+
}
44+
System.out.println(sb);
45+
}
46+
47+
public void drawResults() {
48+
StringBuilder sb = new StringBuilder();
49+
for (String result : ladderIO.getResults()) {
50+
sb.append(result);
51+
sb.append(calculateBlank(result));
52+
sb.append(BLANK);
53+
}
54+
System.out.println(sb);
55+
}
56+
57+
public void showLadderResult(String userName) {
58+
String result = userName.equals("all") ? showAllResult() : ladderIO.findResult(ladder, userName);
59+
System.out.println(result);
60+
}
61+
62+
private String showAllResult() {
63+
StringBuilder sb = new StringBuilder();
64+
for (String user : ladderIO.getUsers()) {
65+
sb.append(user + ":" + ladderIO.findResult(ladder, user)+"\n");
66+
}
67+
return sb.toString();
68+
}
69+
3870
private void drawRow(Row row) {
3971
List<Point> points = row.getPoints();
4072
Collections.sort(points);
@@ -45,30 +77,20 @@ private void drawRow(Row row) {
4577
}
4678

4779
private String drawPoint(Point point) {
48-
int repeat = participantUsers.getUserCharMaxNum();
80+
int repeat = ladderIO.getUserCharMaxNum();
4981
return point.isBlankPoint() ? DOWN + widthBlank(repeat) : Link(point);
5082
}
5183

52-
public void drawUserNames() {
53-
StringBuilder sb = new StringBuilder();
54-
for (User user : participantUsers.getUsers()) {
55-
sb.append(user.getName());
56-
sb.append(nameBlank(user));
57-
sb.append(BLANK);
58-
}
59-
System.out.println(sb);
60-
}
61-
62-
private String nameBlank(User user) {
63-
int width = participantUsers.getUserCharMaxNum() - user.getName().length();
84+
private String calculateBlank(String result) {
85+
int width = ladderIO.getUserCharMaxNum() - result.length();
6486
StringBuilder sb = new StringBuilder();
6587
IntStream.range(0, width)
6688
.forEach(each -> sb.append(BLANK));
6789
return sb.toString();
6890
}
6991

7092
private String Link(Point point) {
71-
int repeat = participantUsers.getUserCharMaxNum();
93+
int repeat = ladderIO.getUserCharMaxNum();
7294
if (point.getBridge().getLinkPillarDirection() == LinkedType.RIGHT)
7395
return RIGHT + widthLine(repeat);
7496
return LEFT + widthBlank(repeat);

src/test/java/domain/converter/OutputConverterTest.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ public class OutputConverterTest {
1010

1111
@Test
1212
public void Height에_따른_Level_생성() {
13-
GameStartOption gameStartOption = new GameStartOption("pobi,honux,crong,jk", 10);
13+
GameStartOption gameStartOption = GameStartOption.of("pobi,honux,crong,jk", 10, "꽝,5000,꽝,3000");
1414
Ladder ladder = Ladder.of(gameStartOption);
1515

1616
assertEquals(OutputConverter.of(ladder).getRows().size(), 10);

0 commit comments

Comments
 (0)