-
Notifications
You must be signed in to change notification settings - Fork 4
/
Rook.java
104 lines (98 loc) · 4.27 KB
/
Rook.java
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
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
public class Rook extends ChessPiece {
boolean isFirstMove=true;//첫 움직임인지 확인
//만약 이동했을 경우 isFirstMove를 false로 바꿔준다.
public Rook(boolean isWhite, ChessBoard board) {
super(isWhite, board);
//점수 초기화
this.Score = 5;
}
@Override
public String canMove(int fromX, int fromY, int toX, int toY) {
String str = "";
boolean flag = false;
// fromX, fromY, toX, toY를 이용하여 움직일 수 있는지 판단
// 움직일 수 있는 경우, 이동하려는 위치에 기물이 없는 경우, "move" 리턴
// 움직일 수 있는 경우, 이동하려는 위치에 기물이 없는 경우, 이동하려는 위치에 기물이 있는 경우, 적인 경우, "eat" 리턴
// 움직일 수 있는 경우, 이동하려는 위치에 기물이 없는 경우, 이동하려는 위치에 기물이 있는 경우, 아군인 경우, "wrong" 리턴
// 움직일 수 없는 경우, "wrong" 리턴
// 이동하려는 위치가 체스판을 벗어나는 경우는 입력값이 잘못된 경우이므로, "wrong" 리턴
// 이동하려는 위치가 같은 위치인 경우는 입력값이 잘못된 경우이므로, "wrong" 리턴
if(fromX == toX && fromY == toY){//자기 자신의 위치를 입력했을 때
flag=true;
str="invalid move";
}else if(fromX == toX && fromY != toY){//세로로 이동
if(fromY<toY){//위로 이동
for(int i=fromY+1;i<toY;i++){//이동 경로에 장애물이 있는지 확인
if(ChessBoard.board[fromX][i]!=null){
flag=true;
str="there is a piece in the way";
break;
}
}
}else{//아래로 이동
for(int i=fromY-1;i>toY;i--){//이동 경로에 장애물이 있는지 확인
if(ChessBoard.board[fromX][i]!=null){
flag=true;
str="there is a piece in the way";
break;
}
}
}
}else if(fromX != toX && fromY == toY){//가로로 이동
if(fromX<toX){//오른쪽으로 이동
for(int i=fromX+1;i<toX;i++){//이동 경로에 장애물이 있는지 확인
if(ChessBoard.board[i][fromY]!=null){
str="there is a piece in the way";
flag=true;
break;
}
}
}else{//왼쪽으로 이동
for(int i=fromX-1;i>toX;i--){//이동 경로에 장애물이 있는지 확인
if(ChessBoard.board[i][fromY]!=null){
str="there is a piece in the way";
flag=true;
break;
}
}
}
}else{//대각선으로 이동
flag=true;
str="invalid move";
}
if(flag==false){//이동 경로에 장애물이 없을 때
if(ChessBoard.board[toX][toY]==null){//이동하려는 위치에 기물이 없는 경우
str="move";
isFirstMove=false;
}else if(ChessBoard.board[toX][toY].isWhite!=this.isWhite){//이동하려는 위치에 기물이 있는 경우
str="eat";
isFirstMove=false;
}else if(ChessBoard.board[toX][toY].isWhite==this.isWhite){//이동하려는 위치에 기물이 있는 경우
str="cannot move to the same color";
}
}
return str;
}
@Override
public boolean canCheck(int pieceX, int pieceY, int kingX, int kingY) {
//인자로 받아온 pieceX, pieceY, kingX, kingY를 canMove에 대입 후 반환값을 비교
String s=canMove(pieceX,pieceY,kingX,kingY);
if(s=="eat"){
return true;
}
return false;
}
@Override
public String toString() {
// TODO Auto-generated method stub
if (isWhite) {
return "R";
} else {
return "r";
}
}
@Override
public String getFullname() {
return "Rook";
}
}