-
Notifications
You must be signed in to change notification settings - Fork 461
Expand file tree
/
Copy pathBoard.java
More file actions
66 lines (55 loc) · 1.92 KB
/
Board.java
File metadata and controls
66 lines (55 loc) · 1.92 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
package chess;
import chess.piece.Bishop;
import chess.piece.King;
import chess.piece.Knight;
import chess.piece.Pawn;
import chess.piece.Piece;
import chess.piece.Queen;
import chess.piece.Rook;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Optional;
public class Board {
private final List<Piece> pieces;
public Board(List<Piece> pieces) {
this.pieces = pieces;
}
public static Board initialize() {
List<Piece> pieces = new ArrayList<>();
for (Color color : Color.validColors()) {
pieces.addAll(Bishop.initialize(color));
pieces.addAll(King.initialize(color));
pieces.addAll(Knight.initialize(color));
pieces.addAll(Pawn.initialize(color));
pieces.addAll(Queen.initialize(color));
pieces.addAll(Rook.initialize(color));
}
return new Board(pieces);
}
//TODO 존재하는 포지션만 주기
public Hurdles findHurdlePositions() {
return new Hurdles(pieces.stream()
.map(Piece::getPosition)
.toList());
}
public Optional<Piece> findByPosition(Position position) {
return pieces.stream()
.filter(piece -> piece.getPosition().equals(position)) //TODO 수정
.findFirst();
}
public List<Piece> getPieces() {
return Collections.unmodifiableList(pieces);
}
public Piece findByPositionOrThrow(Position position) {
return findByPosition(position)
.orElseThrow(() -> new IllegalArgumentException("해당하는 좌표에 기물이 없습니다."));
}
public void move(Piece movingPiece, Position targetPosition) {
movingPiece.moveTo(targetPosition, this);
}
public void remove(Position targetPosition) {
Piece piece = findByPositionOrThrow(targetPosition);
this.pieces.remove(piece);
}
}