-
Notifications
You must be signed in to change notification settings - Fork 61
Expand file tree
/
Copy pathLadderController.java
More file actions
74 lines (59 loc) · 2.61 KB
/
LadderController.java
File metadata and controls
74 lines (59 loc) · 2.61 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
package controller;
import domain.*;
import view.InputView;
import view.OutputView;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
public class LadderController {
private final InputView inputView;
private final OutputView outputView;
public LadderController(InputView inputView, OutputView outputView) {
this.inputView = inputView;
this.outputView = outputView;
}
public void run() {
System.out.println("Starting Ladder Game..."); // 초기 진입 확인
Players players = readPlayers();
ResultItems resultItems = readResultItems(players.count());
LadderHeight height = inputView.readHeight();
LadderGame ladderGame = LadderGame.of(players.count(), height, new RandomGenerator());
List<String> playerNames = players.extractNames();
List<String> resultItemNames = resultItems.extractNames();
outputView.printLadder(playerNames, ladderGame, resultItemNames);
String requestName = inputView.readResultRequest();
handleResultRequest(requestName, players, ladderGame, resultItems);
}
private Players readPlayers() {
List<String> names = inputView.readPlayerNames();
List<Player> players = names.stream()
.map(Player::new)
.toList();
return new Players(players);
}
private ResultItems readResultItems(int expectedSize) {
List<String> results = inputView.readResultItems();
List<ResultItem> resultItems = results.stream()
.map(ResultItem::new)
.toList();
return new ResultItems(resultItems, expectedSize);
}
private void handleResultRequest(String request, Players players, LadderGame ladder, ResultItems resultItems) {
LadderGameResult gameResult = new LadderGameResult(players, resultItems, ladder);
while (!request.equals("all")) {
try {
Player player = new Player(request);
outputView.printSingleResult(player.getName(), gameResult.getSingleResultFor(player).getItem());
} catch (IllegalArgumentException e) {
System.out.println("잘못된 이름입니다. 다시 입력해주세요.");
}
request = inputView.readResultRequest();
}
Map<String, String> resultMap = gameResult.getAllResults().entrySet().stream()
.collect(Collectors.toMap(
entry -> entry.getKey().getName(),
entry -> entry.getValue().getItem()
));
outputView.printAllResults(resultMap);
}
}