57 lines
1.3 KiB
C++
57 lines
1.3 KiB
C++
/*
|
|
* File: Piece.hpp
|
|
* Author: amr
|
|
*
|
|
* Created on July 30, 2025, 9:21 PM
|
|
*/
|
|
|
|
#ifndef PIECE_HPP
|
|
#define PIECE_HPP
|
|
#pragma once
|
|
|
|
#include <cstdint>
|
|
#include <utility>
|
|
#include <memory>
|
|
#include <vector>
|
|
#include "Board.hpp"
|
|
class Board;
|
|
|
|
enum PieceType { PAWN, BISHOP, KNIGHT, ROOK, QUEEN, KING, EMPTY };
|
|
enum PieceColour { PIECE_WHITE, PIECE_BLACK, PIECE_EMPTY };
|
|
enum Rank { R1 = 0, R2 = 1, R3 = 2, R4 = 3, R5 = 4, R6 = 5, R7 = 6, R8 = 7 };
|
|
enum File { A = 0, B = 1, C = 2, D = 3, E = 4, F = 5, G = 6, H = 7 };
|
|
struct Square {
|
|
Rank rank;
|
|
File file;
|
|
bool isValid() const {
|
|
return rank >= 0 && rank < 8 && file >= 0 && file < 8;
|
|
}
|
|
};
|
|
struct Move {
|
|
Square from;
|
|
Square to;
|
|
};
|
|
class Piece {
|
|
protected:
|
|
PieceColour colour;
|
|
|
|
public:
|
|
// methods
|
|
Piece(PieceColour pColour) : colour(pColour) {}
|
|
virtual ~Piece();
|
|
virtual std::vector<Move> getLegalMoves(const Square &from, const Board &board) const;
|
|
PieceColour getColour() const { return colour; }
|
|
};
|
|
|
|
class King : public Piece {
|
|
public:
|
|
King(PieceColour colour) : Piece(colour) {}
|
|
virtual std::vector<Move> getLegalMoves(const Square &from, const Board &board) const override;
|
|
};
|
|
|
|
class Rook : Public Piece {
|
|
Rook(PieceColour colour) : Piece(colour) {}
|
|
virtual std::vector<Move> getLegalMoves(const square &from, const Board &board) const override;
|
|
};
|
|
#endif // PIECE_HPP
|
|
|