diff --git a/gui-chess/src/main/java/com/gitea/lin/model/Direction.java b/gui-chess/src/main/java/com/gitea/lin/model/Direction.java new file mode 100644 index 0000000..fa7f08e --- /dev/null +++ b/gui-chess/src/main/java/com/gitea/lin/model/Direction.java @@ -0,0 +1,53 @@ +package com.gitea.lin.model; + +public enum Direction { + // Orthogonal (Rook, Queen, King) + NORTH(0, -1), + SOUTH(0, 1), + EAST(1, 0), + WEST(-1, 0), + + // Diagonal (Bishop, Queen, King, Pawn captures) + NORTH_EAST(1, -1), + NORTH_WEST(-1, -1), + SOUTH_EAST(1, 1), + SOUTH_WEST(-1, 1), + + // Knight Jumps (L-shapes) + KNIGHT_NNE(1, -2), + KNIGHT_ENE(2, -1), + KNIGHT_ESE(2, 1), + KNIGHT_SSE(1, 2), + KNIGHT_SSW(-1, 2), + KNIGHT_WSW(-2, 1), + KNIGHT_WNW(-2, -1), + KNIGHT_NNW(-1, -2), + + // Pawn Initial Double Push + PAWN_DOUBLE_NORTH(0, -2), + PAWN_DOUBLE_SOUTH(0, 2); + + private final int dx; + private final int dy; + + Direction(int dx, int dy) { + this.dx = dx; + this.dy = dy; + } + + public int getDx() { + return dx; + } + + public int getDy() { + return dy; + } + + /** + * Converts the 2D vector into a 1D array offset for Piece[64]. + * (Assuming index 0 is top-left a8 and 63 is bottom-right h1) + */ + public int getFlatOffset() { + return dy * 8 + dx; + } +}