-
Notifications
You must be signed in to change notification settings - Fork 252
Expand file tree
/
Copy pathMain.java
More file actions
86 lines (75 loc) · 3.68 KB
/
Main.java
File metadata and controls
86 lines (75 loc) · 3.68 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
import domain.LadderGame;
import domain.LadderGame.LadderGameBuilder;
import domain.LineGenerateStrategy;
import domain.RandomLineGenerateStrategy;
import dto.LadderGameResults;
import java.util.List;
import util.RetryHelper;
import view.GiftsInputView;
import view.InputView;
import view.LadderGameOperatorInputView;
import view.LadderHeightInputView;
import view.OutputView;
import view.PlayersInputView;
public class Main {
public static void main(String[] args) {
RetryHelper retryHelper = new RetryHelper(10);
List<String> playerNames = getPlayerNames(retryHelper);
List<String> giftNames = getGiftNames(retryHelper, playerNames);
Integer ladderHeight = getLadderHeight(retryHelper);
LadderGame ladderGame = makeLadderGame(playerNames, giftNames, ladderHeight);
printLadderGame(playerNames, giftNames, ladderGame);
printLadderGameResults(playerNames, ladderGame);
}
private static List<String> getPlayerNames(RetryHelper retryHelper) {
return retryHelper.retry(() -> {
OutputView.print("참여할 사람 이름을 입력하세요. (이름은 쉼표(,)로 구분하세요)");
return PlayersInputView.getPlayerNames(InputView.getInput());
});
}
private static List<String> getGiftNames(RetryHelper retryHelper, List<String> playerNames) {
return retryHelper.retry(() -> {
OutputView.print("실행 결과를 입력하세요. (결과는 쉼표(,)로 구분하세요)");
return GiftsInputView.getGiftNames(InputView.getInput(), playerNames.size());
});
}
private static Integer getLadderHeight(RetryHelper retryHelper) {
return retryHelper.retry(() -> {
OutputView.print("최대 사다리 높이는 몇 개인가요?");
return LadderHeightInputView.getLadderHeight(InputView.getInput());
});
}
private static LadderGame makeLadderGame(List<String> playerNames, List<String> giftNames, Integer ladderHeight) {
LineGenerateStrategy lineGenerateStrategy = new RandomLineGenerateStrategy();
return makeLadderGame(playerNames, giftNames, ladderHeight, lineGenerateStrategy);
}
private static LadderGame makeLadderGame(List<String> playerNames, List<String> giftNames, Integer ladderHeight,
LineGenerateStrategy randomLineMakeStrategy) {
return LadderGameBuilder.builder()
.players(playerNames)
.gifts(giftNames)
.ladderHeight(ladderHeight)
.lineGenerateStrategy(randomLineMakeStrategy)
.build();
}
private static void printLadderGame(List<String> playerNames, List<String> giftNames, LadderGame ladderGame) {
OutputView.printPlayers(playerNames);
OutputView.printLadder(ladderGame.rawLadder());
OutputView.printGifts(giftNames);
}
private static void printLadderGameResults(List<String> playerNames, LadderGame ladderGame) {
String ladderGameResultOwner = showLadderGameResult(playerNames, ladderGame);
while (!ladderGameResultOwner.equals("all")) {
ladderGameResultOwner = showLadderGameResult(playerNames, ladderGame);
}
}
private static String showLadderGameResult(List<String> playerNames, LadderGame ladderGame) {
RetryHelper retryHelper = new RetryHelper(10);
return retryHelper.retry(() -> {
String operator = LadderGameOperatorInputView.getOperator(InputView.getInput(), playerNames);
LadderGameResults ladderGameResults = ladderGame.start(operator);
OutputView.printLadderGameResults(ladderGameResults);
return operator;
});
}
}