198 lines
4.6 KiB
Java
198 lines
4.6 KiB
Java
package backend;
|
|
|
|
import java.util.ArrayList;
|
|
|
|
public class Board {
|
|
|
|
private int width;
|
|
private int height;
|
|
private int turnNumber;
|
|
private boolean isWhiteTurn;
|
|
private ArrayList<Piece> pieces;
|
|
|
|
public Board(int colNum, int lineNum) {
|
|
this.width = colNum;
|
|
this.height = lineNum;
|
|
this.turnNumber = 0;
|
|
this.isWhiteTurn = true;
|
|
this.pieces = new ArrayList<>();
|
|
}
|
|
|
|
public int getWidth() {
|
|
return width;
|
|
}
|
|
|
|
public int getHeight() {
|
|
return height;
|
|
}
|
|
|
|
public int getTurnNumber() {
|
|
return turnNumber;
|
|
}
|
|
|
|
public boolean isTurnWhite() {
|
|
return isWhiteTurn;
|
|
}
|
|
|
|
public void setPiece(boolean isWhite, PieceType type, int x, int y) {
|
|
for (int i = 0; i < pieces.size(); i++) {
|
|
Piece p = pieces.get(i);
|
|
if (p.getX() == x && p.getY() == y) {
|
|
pieces.remove(i);
|
|
break;
|
|
}
|
|
}
|
|
Piece newPiece = new Piece( x, y, type,isWhite);
|
|
pieces.add(newPiece);
|
|
}
|
|
|
|
public void populateBoard() {
|
|
//TODO
|
|
cleanBoard();
|
|
|
|
PieceType pawn = PieceType.Pawn;
|
|
PieceType rook = PieceType.Rook;
|
|
PieceType knight = PieceType.Knight;
|
|
PieceType bishop = PieceType.Bishop;
|
|
PieceType queen = PieceType.Queen;
|
|
PieceType king = PieceType.King;
|
|
|
|
//all the pawns
|
|
for (int x=0; x<8; x++) {
|
|
pieces.add(new Piece(x, 1, pawn, false));
|
|
pieces.add(new Piece(x, 6, pawn, true));
|
|
}
|
|
|
|
//black pieces
|
|
pieces.add(new Piece(0, 0, rook, false));
|
|
pieces.add(new Piece(1, 0, knight, false));
|
|
pieces.add(new Piece(2, 0, bishop, false));
|
|
pieces.add(new Piece(3, 0, queen, false));
|
|
pieces.add(new Piece(4, 0, king, false));
|
|
pieces.add(new Piece(5, 0, bishop, false));
|
|
pieces.add(new Piece(6, 0, knight, false));
|
|
pieces.add(new Piece(7, 0, rook, false));
|
|
|
|
|
|
//white pieces
|
|
pieces.add(new Piece(0, 7, rook, true));
|
|
pieces.add(new Piece(1, 7, knight, true));
|
|
pieces.add(new Piece(2, 7, bishop, true));
|
|
pieces.add(new Piece(3, 7, queen, true));
|
|
pieces.add(new Piece(4, 7, king, true));
|
|
pieces.add(new Piece(5, 7, bishop, true));
|
|
pieces.add(new Piece(6, 7, knight, true));
|
|
pieces.add(new Piece(7, 7, rook, true));
|
|
|
|
|
|
}
|
|
|
|
public void cleanBoard() {
|
|
pieces.clear();
|
|
}
|
|
|
|
public String toString() {
|
|
//TODO
|
|
return "";
|
|
}
|
|
|
|
public ArrayList<Piece> getPieces() {
|
|
ArrayList<Piece> result = new ArrayList<>();
|
|
for (Piece p : this.pieces) {
|
|
result.add(p);
|
|
}
|
|
return result;
|
|
}
|
|
private Piece getPieceAt(int x, int y) {
|
|
for (Piece p : pieces) {
|
|
if (p.getX() == x && p.getY() == y) {
|
|
return p;
|
|
}
|
|
}
|
|
return null;
|
|
}
|
|
|
|
private Integer selectedX = null;
|
|
private Integer selectedY = null;
|
|
|
|
public void userTouch(int x, int y) {
|
|
Piece clickedPiece = getPieceAt(x, y);
|
|
|
|
if (selectedX == null || selectedY == null) {
|
|
// No piece selected yet
|
|
if (clickedPiece != null && clickedPiece.isWhite() == isWhiteTurn) {
|
|
selectedX = x;
|
|
selectedY = y;
|
|
}
|
|
} else {
|
|
if (selectedX == x && selectedY == y) {
|
|
// Unselection
|
|
selectedX = null;
|
|
selectedY = null;
|
|
} else {
|
|
// Attempt to move
|
|
Piece selectedPiece = getPieceAt(selectedX, selectedY);
|
|
if (selectedPiece != null) {
|
|
// Remove captured piece (if any)
|
|
Piece toRemove = getPieceAt(x, y);
|
|
if (toRemove != null && toRemove.isWhite() != isWhiteTurn) {
|
|
pieces.remove(toRemove);
|
|
}
|
|
|
|
// Move piece
|
|
selectedPiece.moveTo(x, y);
|
|
|
|
// Advance turn
|
|
turnNumber++;
|
|
isWhiteTurn = !isWhiteTurn;
|
|
|
|
// Unselect
|
|
selectedX = null;
|
|
selectedY = null;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
public boolean isSelected(int x, int y) {
|
|
//TODO
|
|
return selectedX != null && selectedY != null && selectedX == x && selectedY == y;
|
|
}
|
|
|
|
/* saving-loading feature :*/
|
|
|
|
public String[] toFileRep() {
|
|
//TODO
|
|
return null;
|
|
}
|
|
|
|
public Board(String[] array) {
|
|
//TODO
|
|
|
|
}
|
|
|
|
/* The following methods require more work ! */
|
|
|
|
public boolean isHighlighted(int x, int y) {
|
|
//TODO
|
|
return false;
|
|
}
|
|
|
|
public void undoLastMove() {
|
|
//TODO
|
|
|
|
}
|
|
|
|
public Board(Board board) {
|
|
//TODO
|
|
|
|
}
|
|
|
|
public void playMove(Move move) {
|
|
//TODO
|
|
|
|
}
|
|
|
|
}
|