Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Contribute to GitLab
Sign in
Toggle navigation
C
Chess-AP
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Omid Sayfun
Chess-AP
Commits
ff795df0
Commit
ff795df0
authored
May 13, 2019
by
Omid Sayfun
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
First GUI Interactions added
parent
3c6b4cfc
Hide whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
284 additions
and
94 deletions
+284
-94
Main.java
src/Main.java
+52
-5
Board.java
src/lab/game/Board.java
+186
-59
Pawn.java
src/lab/game/Pawn.java
+3
-18
Rook.java
src/lab/game/Rook.java
+43
-12
No files found.
src/Main.java
View file @
ff795df0
...
@@ -15,11 +15,21 @@ public class Main{
...
@@ -15,11 +15,21 @@ public class Main{
}
}
}
}
/**
* A New Button class that has piece attribute
* @author Omiid
*/
class
newJButton
extends
JButton
{
class
newJButton
extends
JButton
{
private
Piece
piece
;
private
Piece
piece
;
private
char
X
;
private
char
X
;
private
int
Y
;
private
int
Y
;
/**
* Make new button
* @param X The X-Axis
* @param Y The Y-Axis
* @author Omiid
*/
public
newJButton
(
char
X
,
int
Y
){
public
newJButton
(
char
X
,
int
Y
){
this
.
piece
=
null
;
this
.
piece
=
null
;
this
.
X
=
X
;
this
.
X
=
X
;
...
@@ -27,6 +37,13 @@ class newJButton extends JButton{
...
@@ -27,6 +37,13 @@ class newJButton extends JButton{
this
.
setIcon
(
null
);
this
.
setIcon
(
null
);
}
}
/**
* Make new button
* @param p The piece
* @param X The X-Axis
* @param Y The Y-Axis
* @author Omiid
*/
public
newJButton
(
Piece
p
,
char
X
,
int
Y
){
public
newJButton
(
Piece
p
,
char
X
,
int
Y
){
this
.
piece
=
p
;
this
.
piece
=
p
;
this
.
X
=
X
;
this
.
X
=
X
;
...
@@ -44,6 +61,10 @@ class newJButton extends JButton{
...
@@ -44,6 +61,10 @@ class newJButton extends JButton{
return
this
.
piece
;
return
this
.
piece
;
}
}
public
void
setPiece
(
Piece
p
){
this
.
piece
=
p
;
}
public
char
getNewX
(){
public
char
getNewX
(){
return
this
.
X
;
return
this
.
X
;
}
}
...
@@ -53,6 +74,9 @@ class newJButton extends JButton{
...
@@ -53,6 +74,9 @@ class newJButton extends JButton{
}
}
}
}
/**
* Main Chess Class
*/
class
Chess
implements
MouseListener
{
class
Chess
implements
MouseListener
{
private
Board
board
=
null
;
private
Board
board
=
null
;
private
String
color
=
"B"
;
private
String
color
=
"B"
;
...
@@ -60,6 +84,9 @@ class Chess implements MouseListener{
...
@@ -60,6 +84,9 @@ class Chess implements MouseListener{
private
newJButton
inMove
=
null
;
private
newJButton
inMove
=
null
;
private
ArrayList
<
newJButton
>
btns
=
new
ArrayList
<
newJButton
>();
private
ArrayList
<
newJButton
>
btns
=
new
ArrayList
<
newJButton
>();
/**
* Initial Run
*/
public
void
run
(){
public
void
run
(){
JFrame
frame
=
new
JFrame
(
"Chess Frame"
);
JFrame
frame
=
new
JFrame
(
"Chess Frame"
);
frame
.
setExtendedState
(
java
.
awt
.
Frame
.
MAXIMIZED_BOTH
);
frame
.
setExtendedState
(
java
.
awt
.
Frame
.
MAXIMIZED_BOTH
);
...
@@ -130,10 +157,10 @@ class Chess implements MouseListener{
...
@@ -130,10 +157,10 @@ class Chess implements MouseListener{
btn
=
new
newJButton
(
blackKing
,
j
,
i
);
btn
=
new
newJButton
(
blackKing
,
j
,
i
);
}
}
}
else
if
(
i
==
2
){
}
else
if
(
i
==
2
){
//
Pawn newPawn = new Pawn(j, i, false, "BP");
Pawn
newPawn
=
new
Pawn
(
j
,
i
,
false
,
"BP"
);
//
blackPieces.add(newPawn);
blackPieces
.
add
(
newPawn
);
//
btn = new newJButton(newPawn, j, i);
btn
=
new
newJButton
(
newPawn
,
j
,
i
);
btn
=
new
newJButton
(
j
,
i
);
//
btn = new newJButton(j, i);
}
else
{
}
else
{
btn
=
new
newJButton
(
j
,
i
);
btn
=
new
newJButton
(
j
,
i
);
}
}
...
@@ -195,10 +222,14 @@ class Chess implements MouseListener{
...
@@ -195,10 +222,14 @@ class Chess implements MouseListener{
frame
.
setVisible
(
true
);
frame
.
setVisible
(
true
);
}
}
/**
* Mouse Clicking behaviour
* @param e The event Happened
*/
@Override
@Override
public
void
mouseClicked
(
MouseEvent
e
)
{
public
void
mouseClicked
(
MouseEvent
e
)
{
newJButton
source
=
(
newJButton
)(
e
.
getSource
());
if
(
!
isSelected
){
if
(
!
isSelected
){
newJButton
source
=
(
newJButton
)(
e
.
getSource
());
for
(
newJButton
btn
:
this
.
btns
){
for
(
newJButton
btn
:
this
.
btns
){
if
(
source
!=
btn
&&
source
.
getPiece
()
!=
null
&&
this
.
board
.
canGo
(
source
.
getPiece
(),
btn
.
getNewX
(),
btn
.
getNewY
(),
this
.
color
)
){
if
(
source
!=
btn
&&
source
.
getPiece
()
!=
null
&&
this
.
board
.
canGo
(
source
.
getPiece
(),
btn
.
getNewX
(),
btn
.
getNewY
(),
this
.
color
)
){
if
(
this
.
board
.
canAttack
(
source
.
getPiece
(),
btn
.
getNewX
(),
btn
.
getNewY
(),
this
.
color
)
){
if
(
this
.
board
.
canAttack
(
source
.
getPiece
(),
btn
.
getNewX
(),
btn
.
getNewY
(),
this
.
color
)
){
...
@@ -218,6 +249,22 @@ class Chess implements MouseListener{
...
@@ -218,6 +249,22 @@ class Chess implements MouseListener{
}
}
}
}
}
else
{
}
else
{
if
(
this
.
board
.
canGo
(
this
.
inMove
.
getPiece
(),
source
.
getNewX
(),
source
.
getNewY
(),
this
.
color
)
){
if
(
this
.
board
.
canAttack
(
this
.
inMove
.
getPiece
(),
source
.
getNewX
(),
source
.
getNewY
(),
this
.
color
)
){
source
.
setPiece
(
this
.
inMove
.
getPiece
());
this
.
inMove
.
setPiece
(
null
);
}
else
{
Piece
temp
=
this
.
inMove
.
getPiece
();
this
.
inMove
.
setPiece
(
source
.
getPiece
());
source
.
setPiece
(
temp
);
}
System
.
out
.
println
(
this
.
board
.
move
(
inMove
.
getNewY
()
+
Character
.
toString
(
inMove
.
getNewX
()),
source
.
getNewY
()
+
Character
.
toString
(
source
.
getNewX
()),
this
.
color
));
if
(
this
.
color
.
equals
(
"W"
)){
this
.
color
=
"B"
;
}
else
{
this
.
color
=
"W"
;
}
}
for
(
newJButton
btn
:
this
.
btns
)
{
for
(
newJButton
btn
:
this
.
btns
)
{
// if( ((ImageIcon)btn.getIcon()) != null ){
// if( ((ImageIcon)btn.getIcon()) != null ){
// System.out.println(((ImageIcon)btn.getIcon()).getDescription());
// System.out.println(((ImageIcon)btn.getIcon()).getDescription());
...
...
src/lab/game/Board.java
View file @
ff795df0
package
lab
.
game
;
package
lab
.
game
;
import
java.util.*
;
import
java.util.*
;
/**
* Main board used for logic
*/
public
class
Board
{
public
class
Board
{
private
ArrayList
<
Piece
>
whitePieces
;
private
ArrayList
<
Piece
>
whitePieces
;
private
ArrayList
<
Piece
>
blackPieces
;
private
ArrayList
<
Piece
>
blackPieces
;
private
ArrayList
<
Piece
>
allPieces
;
private
ArrayList
<
Piece
>
allPieces
;
/**
* Board Constructor for logic
*/
public
Board
(){
public
Board
(){
this
.
whitePieces
=
new
ArrayList
<
Piece
>();
this
.
whitePieces
=
new
ArrayList
<
Piece
>();
this
.
blackPieces
=
new
ArrayList
<
Piece
>();
this
.
blackPieces
=
new
ArrayList
<
Piece
>();
}
}
/**
* Board constructor for ui
* @author Omiid
* @param whitePieces ArrayList of all white pieces
* @param blackPieces ArrayList of all black pieces
*/
public
Board
(
ArrayList
<
Piece
>
whitePieces
,
ArrayList
<
Piece
>
blackPieces
){
public
Board
(
ArrayList
<
Piece
>
whitePieces
,
ArrayList
<
Piece
>
blackPieces
){
this
.
whitePieces
=
whitePieces
;
this
.
whitePieces
=
whitePieces
;
this
.
blackPieces
=
blackPieces
;
this
.
blackPieces
=
blackPieces
;
...
@@ -27,6 +39,9 @@ public class Board{
...
@@ -27,6 +39,9 @@ public class Board{
return
this
.
allPieces
;
return
this
.
allPieces
;
}
}
/**
* Initial run of logic
*/
public
void
initPieces
(){
public
void
initPieces
(){
// White Players
// White Players
// Pawns
// Pawns
...
@@ -84,6 +99,13 @@ public class Board{
...
@@ -84,6 +99,13 @@ public class Board{
this
.
blackPieces
.
add
(
blackKing
);
this
.
blackPieces
.
add
(
blackKing
);
}
}
/**
* Check if any white player is present at (X, Y)
* @author Omiid
* @param y The Y-Axis
* @param x The X-Axis
* @return true if is present
*/
public
boolean
isTakenByWhite
(
int
y
,
char
x
){
public
boolean
isTakenByWhite
(
int
y
,
char
x
){
boolean
flag
=
false
;
boolean
flag
=
false
;
for
(
Piece
p
:
whitePieces
){
for
(
Piece
p
:
whitePieces
){
...
@@ -96,6 +118,13 @@ public class Board{
...
@@ -96,6 +118,13 @@ public class Board{
return
flag
;
return
flag
;
}
}
/**
* Check if any black player is present at (X, Y)
* @author Omiid
* @param y The Y-Axis
* @param x The X-Axis
* @return true if is present
*/
public
boolean
isTakenByBlack
(
int
y
,
char
x
){
public
boolean
isTakenByBlack
(
int
y
,
char
x
){
boolean
flag
=
false
;
boolean
flag
=
false
;
for
(
Piece
p
:
blackPieces
){
for
(
Piece
p
:
blackPieces
){
...
@@ -108,6 +137,13 @@ public class Board{
...
@@ -108,6 +137,13 @@ public class Board{
return
flag
;
return
flag
;
}
}
/**
* Check if piece available at (X, Y)
* @author Omiid
* @param y The Y-Axis
* @param x The X-Axis
* @return true if is present
*/
public
boolean
isTaken
(
int
y
,
char
x
){
public
boolean
isTaken
(
int
y
,
char
x
){
boolean
flag
=
false
;
boolean
flag
=
false
;
flag
=
isTakenByWhite
(
y
,
x
);
flag
=
isTakenByWhite
(
y
,
x
);
...
@@ -116,6 +152,13 @@ public class Board{
...
@@ -116,6 +152,13 @@ public class Board{
return
flag
;
return
flag
;
}
}
/**
* Find white piece at (X, Y)
* @author Omiid
* @param y The Y-Axis
* @param x The X-Axis
* @return piece available at (X, Y)
*/
public
Piece
takenByWhite
(
int
y
,
char
x
){
public
Piece
takenByWhite
(
int
y
,
char
x
){
Piece
newPiece
=
null
;
Piece
newPiece
=
null
;
for
(
Piece
p
:
whitePieces
){
for
(
Piece
p
:
whitePieces
){
...
@@ -128,6 +171,13 @@ public class Board{
...
@@ -128,6 +171,13 @@ public class Board{
return
newPiece
;
return
newPiece
;
}
}
/**
* Find black piece at (X, Y)
* @author Omiid
* @param y The Y-Axis
* @param x The X-Axis
* @return piece available at (X, Y)
*/
public
Piece
takenByBlack
(
int
y
,
char
x
){
public
Piece
takenByBlack
(
int
y
,
char
x
){
Piece
newPiece
=
null
;
Piece
newPiece
=
null
;
for
(
Piece
p
:
blackPieces
){
for
(
Piece
p
:
blackPieces
){
...
@@ -140,6 +190,13 @@ public class Board{
...
@@ -140,6 +190,13 @@ public class Board{
return
newPiece
;
return
newPiece
;
}
}
/**
* Find any piece at (X, Y)
* @author Omiid
* @param y The Y-Axis
* @param x The X-Axis
* @return piece available at (X, Y)
*/
public
Piece
takenBy
(
int
y
,
char
x
){
public
Piece
takenBy
(
int
y
,
char
x
){
Piece
newPiece
=
null
;
Piece
newPiece
=
null
;
newPiece
=
takenByWhite
(
y
,
x
);
newPiece
=
takenByWhite
(
y
,
x
);
...
@@ -148,6 +205,9 @@ public class Board{
...
@@ -148,6 +205,9 @@ public class Board{
return
newPiece
;
return
newPiece
;
}
}
/**
* Print Logic Help
*/
public
void
printHelp
(){
public
void
printHelp
(){
System
.
out
.
println
(
"***** Board Help *****"
);
System
.
out
.
println
(
"***** Board Help *****"
);
System
.
out
.
println
(
"WK: White King \t|\tBK: Black King"
);
System
.
out
.
println
(
"WK: White King \t|\tBK: Black King"
);
...
@@ -160,6 +220,11 @@ public class Board{
...
@@ -160,6 +220,11 @@ public class Board{
System
.
out
.
println
(
"Press any key to start the game..."
);
System
.
out
.
println
(
"Press any key to start the game..."
);
}
}
/**
* Prints full logic board
* @author Omiid
* @param player Current Player that is playing (W/ B)
*/
public
void
printBoard
(
String
player
){
public
void
printBoard
(
String
player
){
if
(
player
.
equals
(
"W"
)
){
if
(
player
.
equals
(
"W"
)
){
...
@@ -217,6 +282,14 @@ public class Board{
...
@@ -217,6 +282,14 @@ public class Board{
}
}
}
}
/**
* Move Piece in the board
* @author Omiid
* @param from String of current place
* @param to String of going place
* @param color String of current player
* @return true if move is valid
*/
public
boolean
move
(
String
from
,
String
to
,
String
color
){
// Name Format: 1D
public
boolean
move
(
String
from
,
String
to
,
String
color
){
// Name Format: 1D
char
[]
fromArray
=
from
.
toCharArray
();
char
[]
fromArray
=
from
.
toCharArray
();
char
[]
toArray
=
to
.
toCharArray
();
char
[]
toArray
=
to
.
toCharArray
();
...
@@ -226,58 +299,31 @@ public class Board{
...
@@ -226,58 +299,31 @@ public class Board{
if
(
toArray
[
0
]
>=
'1'
&&
toArray
[
0
]
<=
'8'
&&
toArray
[
1
]
>=
'A'
&&
toArray
[
1
]
<=
'H'
){
// Check to bound
if
(
toArray
[
0
]
>=
'1'
&&
toArray
[
0
]
<=
'8'
&&
toArray
[
1
]
>=
'A'
&&
toArray
[
1
]
<=
'H'
){
// Check to bound
ArrayList
<
Piece
>
selector
=
null
;
if
(
canGo
(
fromArray
,
toArray
,
color
)
){
ArrayList
<
Piece
>
enemy
=
null
;
Piece
found
=
null
;
boolean
toBusy
=
false
;
Piece
attack
=
null
;
if
(
color
.
equals
(
"W"
)
){
selector
=
this
.
whitePieces
;
enemy
=
this
.
blackPieces
;
found
=
takenByWhite
(
fromArray
[
0
]
-
'0'
,
fromArray
[
1
]);
toBusy
=
isTakenByWhite
(
toArray
[
0
]
-
'0'
,
toArray
[
1
]);
attack
=
takenByBlack
(
toArray
[
0
]
-
'0'
,
toArray
[
1
]);
}
else
{
selector
=
this
.
blackPieces
;
enemy
=
this
.
whitePieces
;
found
=
takenByBlack
(
fromArray
[
0
]
-
'0'
,
fromArray
[
1
]);
toBusy
=
isTakenByBlack
(
toArray
[
0
]
-
'0'
,
toArray
[
1
]);
attack
=
takenByWhite
(
toArray
[
0
]
-
'0'
,
toArray
[
1
]);
}
if
(
found
!=
null
&&
!
toBusy
){
// Found and to is not busy
if
(
found
.
getY
()
==
fromArray
[
0
]
-
'0'
&&
found
.
getX
()
==
fromArray
[
1
]
){
// Find Piece in select
ArrayList
<
Piece
>
enemy
=
null
;
Piece
found
=
null
;
Piece
attack
=
null
;
if
(
color
.
equals
(
"W"
)
){
if
(
kingCheck
(
this
.
allPieces
,
selector
,
enemy
)
&&
!(
found
instanceof
King
)
){
enemy
=
this
.
blackPieces
;
found
=
takenByWhite
(
fromArray
[
0
]
-
'0'
,
fromArray
[
1
]);
attack
=
takenByBlack
(
toArray
[
0
]
-
'0'
,
toArray
[
1
]);
}
else
{
enemy
=
this
.
whitePieces
;
found
=
takenByBlack
(
fromArray
[
0
]
-
'0'
,
fromArray
[
1
]);
attack
=
takenByWhite
(
toArray
[
0
]
-
'0'
,
toArray
[
1
]);
}
if
(
attack
!=
null
){
return
false
;
enemy
.
remove
(
attack
);
}
else
{
if
(
found
.
canMove
(
toArray
[
1
],
toArray
[
0
]
-
'0'
)
){
// Check if move is valid
if
(
found
.
checkWay
(
this
.
allPieces
,
toArray
[
1
],
toArray
[
0
]
-
'0'
)
){
if
(
(
found
instanceof
Pawn
)
&&
found
.
crossMove
(
toArray
[
1
],
toArray
[
0
]
-
'0'
)
&&
attack
==
null
){
return
false
;
}
else
{
if
(
attack
!=
null
){
enemy
.
remove
(
attack
);
}
found
.
setY
(
toArray
[
0
]
-
'0'
);
found
.
setX
(
toArray
[
1
]);
return
true
;
}
}
else
{
return
false
;
}
}
else
{
return
false
;
}
}
}
}
return
false
;
if
(
found
instanceof
Pawn
&&
((
Pawn
)
found
).
getFirstMove
()
==
true
){
((
Pawn
)
found
).
setFirstMove
(
false
);
}
found
.
setY
(
toArray
[
0
]
-
'0'
);
found
.
setX
(
toArray
[
1
]);
return
true
;
}
else
{
}
else
{
return
false
;
return
false
;
}
}
...
@@ -292,7 +338,14 @@ public class Board{
...
@@ -292,7 +338,14 @@ public class Board{
}
}
}
}
public
boolean
kingCheck
(
ArrayList
<
Piece
>
all
,
ArrayList
<
Piece
>
base
,
ArrayList
<
Piece
>
enemy
){
/**
* Check if playing player's king is checked
* @author Omiid
* @param base ArrayList of playing player
* @param enemy ArrayList of waiting player
* @return true if is checked
*/
public
boolean
kingCheck
(
ArrayList
<
Piece
>
base
,
ArrayList
<
Piece
>
enemy
){
// find king
// find king
int
kingY
=
0
;
int
kingY
=
0
;
char
kingX
=
'A'
;
char
kingX
=
'A'
;
...
@@ -306,7 +359,7 @@ public class Board{
...
@@ -306,7 +359,7 @@ public class Board{
for
(
Piece
p
:
enemy
){
for
(
Piece
p
:
enemy
){
if
(
p
.
canMove
(
kingX
,
kingY
)
){
// Check if move is valid
if
(
p
.
canMove
(
kingX
,
kingY
)
){
// Check if move is valid
if
(
p
.
checkWay
(
all
,
kingX
,
kingY
)
){
if
(
p
.
checkWay
(
this
.
allPieces
,
kingX
,
kingY
)
){
System
.
out
.
println
(
p
.
getName
());
System
.
out
.
println
(
p
.
getName
());
return
true
;
return
true
;
...
@@ -316,7 +369,14 @@ public class Board{
...
@@ -316,7 +369,14 @@ public class Board{
return
false
;
return
false
;
}
}
private
boolean
kingMate
(
ArrayList
<
Piece
>
all
,
ArrayList
<
Piece
>
base
,
ArrayList
<
Piece
>
enemy
){
/**
* Check if playing player's king is mate
* @author Omiid
* @param base ArrayList of playing player
* @param enemy ArrayList of waiting player
* @return true if is mated
*/
private
boolean
kingMate
(
ArrayList
<
Piece
>
base
,
ArrayList
<
Piece
>
enemy
){
int
kingY
=
0
;
int
kingY
=
0
;
char
kingX
=
'A'
;
char
kingX
=
'A'
;
for
(
Piece
p
:
base
){
for
(
Piece
p
:
base
){
...
@@ -335,7 +395,7 @@ public class Board{
...
@@ -335,7 +395,7 @@ public class Board{
for
(
Piece
p
:
enemy
){
for
(
Piece
p
:
enemy
){
if
(
p
.
canMove
(
tempX
,
tempY
)
){
if
(
p
.
canMove
(
tempX
,
tempY
)
){
if
(
p
.
checkWay
(
all
,
tempX
,
tempY
)
){
if
(
p
.
checkWay
(
this
.
allPieces
,
tempX
,
tempY
)
){
flag
=
true
;
flag
=
true
;
}
}
...
@@ -349,6 +409,11 @@ public class Board{
...
@@ -349,6 +409,11 @@ public class Board{
return
true
;
return
true
;
}
}
/**
* Check which player is checkmated
* @author Omiid
* @return W for white, B for Black
*/
public
String
checkMate
(){
public
String
checkMate
(){
ArrayList
<
Piece
>
all
=
new
ArrayList
<
Piece
>();
ArrayList
<
Piece
>
all
=
new
ArrayList
<
Piece
>();
for
(
Piece
p
:
this
.
blackPieces
){
for
(
Piece
p
:
this
.
blackPieces
){
...
@@ -357,10 +422,10 @@ public class Board{
...
@@ -357,10 +422,10 @@ public class Board{
for
(
Piece
p
:
this
.
whitePieces
){
for
(
Piece
p
:
this
.
whitePieces
){
all
.
add
(
p
);
all
.
add
(
p
);
}
}
if
(
kingMate
(
all
,
this
.
whitePieces
,
this
.
blackPieces
)
){
if
(
kingMate
(
this
.
whitePieces
,
this
.
blackPieces
)
){
return
"B"
;
return
"B"
;
}
else
if
(
kingMate
(
all
,
this
.
whitePieces
,
this
.
blackPieces
)
){
}
else
if
(
kingMate
(
this
.
whitePieces
,
this
.
blackPieces
)
){
return
"W"
;
return
"W"
;
}
else
{
}
else
{
...
@@ -368,10 +433,19 @@ public class Board{
...
@@ -368,10 +433,19 @@ public class Board{
}
}
}
}
/**
* Check if piece can go to (X, Y)
* @author Omiid
* @param p Piece to move
* @param x The X-Axis
* @param y The Y-Axis
* @param color The Playing player(W/ B)
* @return true if can go
*/
public
boolean
canGo
(
Piece
p
,
char
x
,
int
y
,
String
color
){
public
boolean
canGo
(
Piece
p
,
char
x
,
int
y
,
String
color
){
ArrayList
<
Piece
>
selector
=
null
;
ArrayList
<
Piece
>
selector
=
null
;
ArrayList
<
Piece
>
enemy
=
null
;
ArrayList
<
Piece
>
enemy
=
null
;
Piece
found
=
p
;
Piece
found
=
p
;
boolean
toBusy
=
false
;
boolean
toBusy
=
false
;
Piece
attack
=
null
;
Piece
attack
=
null
;
boolean
booleanColor
=
false
;
boolean
booleanColor
=
false
;
...
@@ -390,14 +464,12 @@ public class Board{
...
@@ -390,14 +464,12 @@ public class Board{
}
}
if
(
found
.
getColor
()
==
booleanColor
&&
!
toBusy
){
// Found and to is not busy
if
(
found
.
getColor
()
==
booleanColor
&&
!
toBusy
){
// Found and to is not busy
if
(
kingCheck
(
this
.
allPieces
,
selector
,
enemy
)
&&
!(
found
instanceof
King
)
){
if
(
kingCheck
(
selector
,
enemy
)
&&
!(
found
instanceof
King
)
){
return
false
;
return
false
;
}
else
{
}
else
{
if
(
found
.
canMove
(
x
,
y
)
){
// Check if move is valid
if
(
found
.
canMove
(
x
,
y
)
){
// Check if move is valid
if
(
found
.
checkWay
(
this
.
allPieces
,
x
,
y
)
){
if
(
found
.
checkWay
(
this
.
allPieces
,
x
,
y
)
){
if
(
(
found
instanceof
Pawn
)
&&
found
.
crossMove
(
x
,
y
)
&&
attack
==
null
){
if
(
(
found
instanceof
Pawn
)
&&
found
.
crossMove
(
x
,
y
)
&&
attack
==
null
){
return
false
;
return
false
;
...
@@ -415,7 +487,62 @@ public class Board{
...
@@ -415,7 +487,62 @@ public class Board{
return
false
;
return
false
;
}
}
}
}
public
boolean
canGo
(
char
[]
fromArray
,
char
[]
toArray
,
String
color
){
ArrayList
<
Piece
>
selector
=
null
;
ArrayList
<
Piece
>
enemy
=
null
;
Piece
found
=
null
;
boolean
toBusy
=
false
;
Piece
attack
=
null
;
boolean
booleanColor
=
false
;
if
(
color
.
equals
(
"W"
)
){
selector
=
this
.
whitePieces
;
enemy
=
this
.
blackPieces
;
found
=
takenByWhite
(
fromArray
[
0
]
-
'0'
,
fromArray
[
1
]);
toBusy
=
isTakenByWhite
(
toArray
[
0
]
-
'0'
,
toArray
[
1
]);
attack
=
takenByBlack
(
toArray
[
0
]
-
'0'
,
toArray
[
1
]);
booleanColor
=
true
;
}
else
{
selector
=
this
.
blackPieces
;
enemy
=
this
.
whitePieces
;
found
=
takenByBlack
(
fromArray
[
0
]
-
'0'
,
fromArray
[
1
]);
toBusy
=
isTakenByBlack
(
toArray
[
0
]
-
'0'
,
toArray
[
1
]);
attack
=
takenByWhite
(
toArray
[
0
]
-
'0'
,
toArray
[
1
]);
}
if
(
found
!=
null
&&
found
.
getColor
()
==
booleanColor
&&
!
toBusy
){
// Found and to is not busy
if
(
kingCheck
(
selector
,
enemy
)
&&
!(
found
instanceof
King
)
){
return
false
;
}
else
{
if
(
found
.
canMove
(
toArray
[
1
],
toArray
[
0
]
-
'0'
)
){
// Check if move is valid
if
(
found
.
checkWay
(
this
.
allPieces
,
toArray
[
1
],
toArray
[
0
]
-
'0'
)){
if
(
(
found
instanceof
Pawn
)
&&
found
.
crossMove
(
toArray
[
1
],
toArray
[
0
]
-
'0'
)
&&
attack
==
null
){
return
false
;
}
else
{
return
true
;
}
}
else
{
return
false
;
}
}
else
{
return
false
;
}
}
}
else
{
return
false
;
}
}
/**
* Check if piece can attack at (X, Y)
* @author Omiid
* @param p Piece for attack
* @param x The X-Axis
* @param y The Y-Axis
* @param color The Playing player(W/ B)
* @return true if can go
*/
public
boolean
canAttack
(
Piece
p
,
char
x
,
int
y
,
String
color
){
public
boolean
canAttack
(
Piece
p
,
char
x
,
int
y
,
String
color
){
ArrayList
<
Piece
>
selector
=
null
;
ArrayList
<
Piece
>
selector
=
null
;
ArrayList
<
Piece
>
enemy
=
null
;
ArrayList
<
Piece
>
enemy
=
null
;
...
@@ -438,7 +565,7 @@ public class Board{
...
@@ -438,7 +565,7 @@ public class Board{
}
}
if
(
found
.
getColor
()
==
booleanColor
&&
!
toBusy
){
// Found and to is not busy
if
(
found
.
getColor
()
==
booleanColor
&&
!
toBusy
){
// Found and to is not busy
if
(
kingCheck
(
this
.
allPieces
,
selector
,
enemy
)
&&
!(
found
instanceof
King
)
){
if
(
kingCheck
(
selector
,
enemy
)
&&
!(
found
instanceof
King
)
){
return
false
;
return
false
;
}
else
{
}
else
{
...
...
src/lab/game/Pawn.java
View file @
ff795df0
...
@@ -3,6 +3,7 @@ import java.util.*;
...
@@ -3,6 +3,7 @@ import java.util.*;
public
class
Pawn
extends
Piece
{
public
class
Pawn
extends
Piece
{
private
boolean
firstMove
;
private
boolean
firstMove
;
public
Pawn
(
char
x
,
int
y
,
boolean
color
,
String
name
){
public
Pawn
(
char
x
,
int
y
,
boolean
color
,
String
name
){
super
(
x
,
y
,
color
,
name
);
super
(
x
,
y
,
color
,
name
);
this
.
firstMove
=
true
;
this
.
firstMove
=
true
;
...
@@ -23,10 +24,6 @@ public class Pawn extends Piece{
...
@@ -23,10 +24,6 @@ public class Pawn extends Piece{
if
(
(
this
.
color
&&
this
.
y
-
y
>
0
)
||
(!
this
.
color
&&
y
-
this
.
y
>
0
)
){
// Moving Backward
if
(
(
this
.
color
&&
this
.
y
-
y
>
0
)
||
(!
this
.
color
&&
y
-
this
.
y
>
0
)
){
// Moving Backward
if
(
this
.
firstMove
){
this
.
firstMove
=
false
;
}
return
true
;
return
true
;
}
else
{
}
else
{
return
false
;
return
false
;
...
@@ -57,20 +54,8 @@ public class Pawn extends Piece{
...
@@ -57,20 +54,8 @@ public class Pawn extends Piece{
return
true
;
return
true
;
}
else
{
}
else
{
int
yShift
=
0
;
int
yShift
=
(
y
-
this
.
y
)
/
Math
.
abs
(
y
-
this
.
y
);
if
(
this
.
y
-
y
!=
0
){
if
(
checkTaken
(
pieces
,
this
.
x
,
this
.
y
+
yShift
)
||
checkTaken
(
pieces
,
this
.
x
,
this
.
y
+
2
*
yShift
)
){
yShift
=
(
y
-
this
.
y
)
/
Math
.
abs
(
y
-
this
.
y
);
}
int
i
=
1
;
while
(
y
!=
this
.
y
+
i
*
yShift
){
if
(
checkTaken
(
pieces
,
this
.
x
,
this
.
y
+
i
*
yShift
)
){
return
false
;
}
i
++;
}
if
(
checkTaken
(
pieces
,
this
.
x
,
this
.
y
+
i
*
yShift
)
){
return
false
;
return
false
;
}
}
...
...
src/lab/game/Rook.java
View file @
ff795df0
package
lab
.
game
;
package
lab
.
game
;
import
java.util.*
;
import
java.util.*
;
/**
* Rook Class
*/
public
class
Rook
extends
Piece
{
public
class
Rook
extends
Piece
{
public
Rook
(
char
x
,
int
y
,
boolean
color
,
String
name
){
public
Rook
(
char
x
,
int
y
,
boolean
color
,
String
name
){
super
(
x
,
y
,
color
,
name
);
super
(
x
,
y
,
color
,
name
);
}
}
/**
* Check if can move to (X, Y)
* @author Omiid
* @param x The X-Axis
* @param y The Y-Axis
* @return true if can move
*/
public
boolean
canMove
(
char
x
,
int
y
){
// Ignore the presence of other pieces
public
boolean
canMove
(
char
x
,
int
y
){
// Ignore the presence of other pieces
if
(
this
.
x
-
x
==
0
||
this
.
y
-
y
==
0
){
if
(
this
.
x
-
x
==
0
||
this
.
y
-
y
==
0
){
...
@@ -14,6 +25,13 @@ public class Rook extends Piece{
...
@@ -14,6 +25,13 @@ public class Rook extends Piece{
return
false
;
return
false
;
}
}
/**
* Check if can move to (X, Y) : Used for queen class
* @author Omiid
* @param x The X-Axis
* @param y The Y-Axis
* @return true if can move
*/
public
static
boolean
canMove
(
Piece
p
,
char
x
,
int
y
){
// Ignore the presence of other pieces
public
static
boolean
canMove
(
Piece
p
,
char
x
,
int
y
){
// Ignore the presence of other pieces
if
(
p
.
x
-
x
==
0
||
p
.
y
-
y
==
0
){
if
(
p
.
x
-
x
==
0
||
p
.
y
-
y
==
0
){
...
@@ -22,26 +40,39 @@ public class Rook extends Piece{
...
@@ -22,26 +40,39 @@ public class Rook extends Piece{
return
false
;
return
false
;
}
}
/**
* Check if way is free to go
* @param pieces ArrayList of all pieces
* @param x The X-Axis
* @param y The Y-Axis
* @return true if is free to go
*/
public
boolean
checkWay
(
ArrayList
<
Piece
>
pieces
,
char
x
,
int
y
){
public
boolean
checkWay
(
ArrayList
<
Piece
>
pieces
,
char
x
,
int
y
){
int
xShift
=
0
;
int
xShift
=
0
;
int
yShift
=
0
;
int
yShift
=
0
;
if
(
this
.
x
-
x
!
=
0
){
if
(
this
.
x
-
x
==
0
||
this
.
y
-
y
=
=
0
){
xShift
=
(
x
-
this
.
x
)
/
Math
.
abs
(
x
-
this
.
x
);
if
(
this
.
x
-
x
!=
0
){
}
if
(
this
.
y
-
y
!=
0
){
yShift
=
(
y
-
this
.
y
)
/
Math
.
abs
(
y
-
this
.
y
);
xShift
=
(
this
.
x
-
x
)
/
Math
.
abs
(
x
-
this
.
x
);
}
}
int
i
=
1
;
if
(
this
.
y
-
y
!=
0
){
while
(
x
!=
(
char
)(
this
.
x
+
i
*
xShift
)
||
y
!=
this
.
y
+
i
*
yShift
){
if
(
checkTaken
(
pieces
,
(
char
)(
this
.
x
+
i
*
xShift
),
this
.
y
+
i
*
yShift
)
){
yShift
=
(
this
.
y
-
y
)
/
Math
.
abs
(
y
-
this
.
y
);
}
int
i
=
1
;
boolean
flag
=
true
;
while
(
this
.
x
!=
(
char
)(
x
+
i
*
xShift
)
||
this
.
y
!=
y
+
i
*
yShift
){
if
(
checkTaken
(
pieces
,
(
char
)(
x
+
i
*
xShift
),
y
+
i
*
yShift
)
){
return
false
;
flag
=
false
;
}
i
++;
}
}
i
++;
return
flag
;
}
else
{
return
false
;
}
}
return
true
;
}
}
public
static
boolean
checkWay
(
Piece
p
,
ArrayList
<
Piece
>
pieces
,
char
x
,
int
y
){
public
static
boolean
checkWay
(
Piece
p
,
ArrayList
<
Piece
>
pieces
,
char
x
,
int
y
){
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment