-
Notifications
You must be signed in to change notification settings - Fork 166
Expand file tree
/
Copy pathArrangementOption.java
More file actions
67 lines (56 loc) · 2.34 KB
/
ArrangementOption.java
File metadata and controls
67 lines (56 loc) · 2.34 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
package janggi.controller;
import static janggi.domain.piece.PieceType.MA;
import static janggi.domain.piece.PieceType.SANG;
import janggi.domain.Side;
import janggi.domain.piece.PieceType;
import janggi.strategy.ArrangementStrategy;
import janggi.strategy.MaSangArrangementStrategy;
import java.util.Arrays;
import java.util.Collections;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
public enum ArrangementOption {
MA_SANG_MA_SANG(1, "마상마상", List.of(MA, SANG, MA, SANG)),
SANG_MA_SANG_MA(2, "상마상마", List.of(SANG, MA, SANG, MA)),
SANG_MA_MA_SANG(3, "상마마상", List.of(SANG, MA, MA, SANG)),
MA_SANG_SANG_MA(4, "마상상마", List.of(MA, SANG, SANG, MA));
private static final Map<Integer, String> STRATEGY_OPTIONS =
Collections.unmodifiableMap(
Arrays.stream(values())
.collect(Collectors.toMap(
ArrangementOption::getOptionNumber,
ArrangementOption::getDisplayName,
(existing, replacement) -> existing,
LinkedHashMap::new
))
);
private final int optionNumber;
private final String displayName;
private final List<PieceType> arrangement;
ArrangementOption(int optionNumber, String displayName, List<PieceType> arrangement) {
this.optionNumber = optionNumber;
this.displayName = displayName;
this.arrangement = arrangement;
}
public static ArrangementStrategy createStrategyOf(Side side, int optionNumber) {
return Arrays.stream(values())
.filter(resolver -> resolver.optionNumber == optionNumber)
.findFirst()
.orElseThrow(() -> new IllegalArgumentException("유효하지 않은 배치 전략 번호입니다."))
.toStrategy(side);
}
public static Map<Integer, String> getStrategyOptions() {
return STRATEGY_OPTIONS;
}
private int getOptionNumber() {
return optionNumber;
}
private String getDisplayName() {
return displayName;
}
private ArrangementStrategy toStrategy(Side side) {
return MaSangArrangementStrategy.of(side, arrangement);
}
}