Board modification (Set Piece,User touch)

This commit is contained in:
Tilman Crosetti 2025-05-13 15:12:55 +02:00
parent 5822222afd
commit c666978058
1 changed files with 59 additions and 35 deletions

View File

@ -52,11 +52,31 @@ private ArrayList<int[]> highlightedPositions = new ArrayList<>();
}
public void setPiece(boolean isWhite, PieceType type, int x, int y) {
pieces.add(new Piece(isWhite, type, x, y));
// Create a new instance of the specific piece type
Piece newPiece;
switch (type) {
case Pawn:
newPiece = new Pawn(isWhite, x, y);
break;
case King:
newPiece = new King(isWhite, x, y);
break;
case Queen:
newPiece = new Queen(isWhite, x, y);
break;
case Rook:
newPiece = new Rook(isWhite, x, y);
break;
case Bishop:
newPiece = new Bishop(isWhite, x, y);
break;
case Knight:
newPiece = new Knight(isWhite, x, y);
break;
default:
throw new IllegalArgumentException("Unknown piece type");
}
pieces.add(newPiece);
}
public void populateBoard() {
@ -134,63 +154,65 @@ private ArrayList<int[]> highlightedPositions = new ArrayList<>();
}
public void userTouch(int x, int y) {
if (selectedX == null && selectedY == null) {
Piece pieceAtPos = getPieceAt(x, y);
if (pieceAtPos != null) {
selectedX = x;
selectedY = y;
}
} else {
if (selectedX == x && selectedY == y) {
selectedX = null;
selectedY = null;
} else {
Piece pieceToMove = getPieceAt(selectedX, selectedY);
if (pieceToMove != null) {
Piece pieceAtDestination = getPieceAt(x, y);
if (pieceAtDestination == null ||
pieceAtDestination.isWhite() != pieceToMove.isWhite()) {
if (pieceAtDestination == null || pieceAtDestination.isWhite() != pieceToMove.isWhite()) {
if (pieceAtDestination != null) {
pieces.remove(pieceAtDestination);
}
pieces.remove(pieceToMove);
pieces.add(new Piece(pieceToMove.isWhite(), pieceToMove.getType(), x, y));
// Create a new instance of the specific piece type
Piece newPiece;
switch (pieceToMove.getType()) {
case Pawn:
newPiece = new Pawn(pieceToMove.isWhite(), x, y);
break;
case King:
newPiece = new King(pieceToMove.isWhite(), x, y);
break;
case Queen:
newPiece = new Queen(pieceToMove.isWhite(), x, y);
break;
case Rook:
newPiece = new Rook(pieceToMove.isWhite(), x, y);
break;
case Bishop:
newPiece = new Bishop(pieceToMove.isWhite(), x, y);
break;
case Knight:
newPiece = new Knight(pieceToMove.isWhite(), x, y);
break;
default:
throw new IllegalArgumentException("Unknown piece type");
}
pieces.add(newPiece);
turnNumber++;
turnIsWhite = !turnIsWhite;
}
}
selectedX = null;
selectedY = null;
}
}
}
}
}
private Piece getPieceAt(int x, int y) {
public Piece getPieceAt(int x, int y) {
for (Piece piece : pieces) {
if (piece.getX() == x && piece.getY() == y) {
return piece;
@ -304,5 +326,7 @@ public ArrayList<Piece> getAllPieces() {
return pieces;
}
public boolean isInBounds(int row, int col) {
return row >= 0 && row < 8 && col >= 0 && col < 8;
}
}