From f14920f03a5067d50af124baf26cf188fb9f5906 Mon Sep 17 00:00:00 2001 From: Dottere Date: Mon, 19 Oct 2026 04:10:19 +0200 Subject: [PATCH] Implemented piece logic --- .../com/gitea/lin/model/Piece/Bishop.java | 24 ++++++++++ .../java/com/gitea/lin/model/Piece/King.java | 33 ++++++++++++++ .../com/gitea/lin/model/Piece/Knight.java | 24 ++++++++++ .../java/com/gitea/lin/model/Piece/Pawn.java | 44 +++++++++++++++++++ .../java/com/gitea/lin/model/Piece/Piece.java | 27 ++++++++++++ .../java/com/gitea/lin/model/Piece/Queen.java | 24 ++++++++++ .../java/com/gitea/lin/model/Piece/Rook.java | 24 ++++++++++ 7 files changed, 200 insertions(+) create mode 100644 gui-chess/src/main/java/com/gitea/lin/model/Piece/Bishop.java create mode 100644 gui-chess/src/main/java/com/gitea/lin/model/Piece/King.java create mode 100644 gui-chess/src/main/java/com/gitea/lin/model/Piece/Knight.java create mode 100644 gui-chess/src/main/java/com/gitea/lin/model/Piece/Pawn.java create mode 100644 gui-chess/src/main/java/com/gitea/lin/model/Piece/Piece.java create mode 100644 gui-chess/src/main/java/com/gitea/lin/model/Piece/Queen.java create mode 100644 gui-chess/src/main/java/com/gitea/lin/model/Piece/Rook.java diff --git a/gui-chess/src/main/java/com/gitea/lin/model/Piece/Bishop.java b/gui-chess/src/main/java/com/gitea/lin/model/Piece/Bishop.java new file mode 100644 index 0000000..e5a7df0 --- /dev/null +++ b/gui-chess/src/main/java/com/gitea/lin/model/Piece/Bishop.java @@ -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; } +} diff --git a/gui-chess/src/main/java/com/gitea/lin/model/Piece/King.java b/gui-chess/src/main/java/com/gitea/lin/model/Piece/King.java new file mode 100644 index 0000000..003b442 --- /dev/null +++ b/gui-chess/src/main/java/com/gitea/lin/model/Piece/King.java @@ -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; + } +} diff --git a/gui-chess/src/main/java/com/gitea/lin/model/Piece/Knight.java b/gui-chess/src/main/java/com/gitea/lin/model/Piece/Knight.java new file mode 100644 index 0000000..c901cc2 --- /dev/null +++ b/gui-chess/src/main/java/com/gitea/lin/model/Piece/Knight.java @@ -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; } +} diff --git a/gui-chess/src/main/java/com/gitea/lin/model/Piece/Pawn.java b/gui-chess/src/main/java/com/gitea/lin/model/Piece/Pawn.java new file mode 100644 index 0000000..f26e94f --- /dev/null +++ b/gui-chess/src/main/java/com/gitea/lin/model/Piece/Pawn.java @@ -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; + } +} diff --git a/gui-chess/src/main/java/com/gitea/lin/model/Piece/Piece.java b/gui-chess/src/main/java/com/gitea/lin/model/Piece/Piece.java new file mode 100644 index 0000000..325a5bc --- /dev/null +++ b/gui-chess/src/main/java/com/gitea/lin/model/Piece/Piece.java @@ -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; + } +} diff --git a/gui-chess/src/main/java/com/gitea/lin/model/Piece/Queen.java b/gui-chess/src/main/java/com/gitea/lin/model/Piece/Queen.java new file mode 100644 index 0000000..e88166c --- /dev/null +++ b/gui-chess/src/main/java/com/gitea/lin/model/Piece/Queen.java @@ -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; } +} diff --git a/gui-chess/src/main/java/com/gitea/lin/model/Piece/Rook.java b/gui-chess/src/main/java/com/gitea/lin/model/Piece/Rook.java new file mode 100644 index 0000000..244335e --- /dev/null +++ b/gui-chess/src/main/java/com/gitea/lin/model/Piece/Rook.java @@ -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; } +}