Implemented piece logic

This commit is contained in:
lin committed 2026-10-19 04:10:19 +02:00
1 parent a117de01fc
commit f14920f03a
7 files changed
+200

No files matched your search

@@ -0,0 +1,24 @@
package com.gitea.lin.model.Piece;
import com.gitea.lin.model.Color;
import com.gitea.lin.model.Direction;
import com.gitea.lin.model.Type;
import static com.gitea.lin.model.Direction.*;
public final class Bishop extends Piece {
public Bishop(Color c) {
super(c);
}
@Override
public Direction[] getMoveDomain() {
return new Direction[] {NORTH_EAST, NORTH_WEST, SOUTH_EAST, SOUTH_WEST};
}
@Override
public int getMaximumStep() { return 7; }
@Override
public char getSymbol() { return 'B'; }
@Override
public Type getType() { return Type.BISHOP; }
}
@@ -0,0 +1,33 @@
package com.gitea.lin.model.Piece;
import com.gitea.lin.model.Color;
import com.gitea.lin.model.Direction;
import com.gitea.lin.model.Type;
import static com.gitea.lin.model.Direction.*;
public final class King extends Piece {
public King(Color c) {
super(c);
}
@Override
public Direction[] getMoveDomain() {
return new Direction[] {NORTH, NORTH_EAST, EAST, SOUTH_EAST, SOUTH, SOUTH_WEST, WEST, NORTH_WEST};
}
@Override
public int getMaximumStep() {
return 1;
}
@Override
public char getSymbol() {
return 'K';
}
@Override
public Type getType() {
return Type.KING;
}
}
@@ -0,0 +1,24 @@
package com.gitea.lin.model.Piece;
import com.gitea.lin.model.Color;
import com.gitea.lin.model.Direction;
import com.gitea.lin.model.Type;
import static com.gitea.lin.model.Direction.*;
public final class Knight extends Piece {
public Knight(Color c) {
super(c);
}
@Override
public Direction[] getMoveDomain() {
return new Direction[] {KNIGHT_ENE, KNIGHT_ESE, KNIGHT_NNE, KNIGHT_NNW, KNIGHT_SSE, KNIGHT_SSW, KNIGHT_WNW, KNIGHT_WSW};
}
@Override
public int getMaximumStep() { return 2; }
@Override
public char getSymbol() { return 'N'; }
@Override
public Type getType() { return Type.KNIGHT; }
}
@@ -0,0 +1,44 @@
package com.gitea.lin.model.Piece;
import com.gitea.lin.model.Color;
import com.gitea.lin.model.Direction;
import com.gitea.lin.model.Type;
import static com.gitea.lin.model.Direction.*;
public final class Pawn extends Piece {
public Pawn(Color c) {
super(c);
}
@Override
public Direction[] getMoveDomain() {
boolean isWhite = super.getColor() == Color.WHITE;
Direction forward = isWhite ? NORTH : SOUTH;
Direction forwardDouble = isWhite ? PAWN_DOUBLE_NORTH : PAWN_DOUBLE_SOUTH;
Direction hitLeft = isWhite ? NORTH_WEST : SOUTH_WEST;
Direction hitRight = isWhite ? NORTH_EAST : SOUTH_EAST;
if (super.hasMoved()) {
return new Direction[] {forward, hitLeft, hitRight};
}
return new Direction[] {forward, forwardDouble, hitLeft, hitRight};
}
@Override
public int getMaximumStep() {
return super.hasMoved() ? 1 : 2;
}
@Override
public char getSymbol() {
return 'P';
}
@Override
public Type getType() {
return Type.PAWN;
}
}
@@ -0,0 +1,27 @@
package com.gitea.lin.model.Piece;
import com.gitea.lin.model.Color;
import com.gitea.lin.model.Direction;
import com.gitea.lin.model.Type;
public abstract class Piece {
private Color pieceColor;
private boolean movedBefore;
public Piece(Color c) {
this.pieceColor = c;
}
public abstract Direction[] getMoveDomain();
public abstract int getMaximumStep(); // TODO: Update UML
public abstract char getSymbol();
public abstract Type getType();
public Color getColor() {
return this.pieceColor;
}
public boolean hasMoved() {
return this.movedBefore;
}
}
@@ -0,0 +1,24 @@
package com.gitea.lin.model.Piece;
import com.gitea.lin.model.Color;
import com.gitea.lin.model.Direction;
import com.gitea.lin.model.Type;
import static com.gitea.lin.model.Direction.*;
public final class Queen extends Piece {
public Queen(Color c) {
super(c);
}
@Override
public Direction[] getMoveDomain() {
return new Direction[] {NORTH, NORTH_EAST, EAST, SOUTH_EAST, SOUTH, SOUTH_WEST, WEST, NORTH_WEST};
}
@Override
public int getMaximumStep() { return 7; }
@Override
public char getSymbol() { return 'Q'; }
@Override
public Type getType() { return Type.QUEEN; }
}
@@ -0,0 +1,24 @@
package com.gitea.lin.model.Piece;
import com.gitea.lin.model.Color;
import com.gitea.lin.model.Direction;
import com.gitea.lin.model.Type;
import static com.gitea.lin.model.Direction.*;
public final class Rook extends Piece {
public Rook(Color c) {
super(c);
}
@Override
public Direction[] getMoveDomain() {
return new Direction[] {NORTH, EAST, SOUTH, WEST};
}
@Override
public int getMaximumStep() { return 7; }
@Override
public char getSymbol() { return 'R'; }
@Override
public Type getType() { return Type.ROOK; }
}