/*---------------------------------------------------------- * HTBLA-Leonding * ---------------------------------------------------------- * Description: * Basic chess functions. * ---------------------------------------------------------- */ #ifndef ___CHESS_H #define ___CHESS_H #include #include #define CHESSBOARD_LENGTH 8 typedef struct ChessSquare ChessBoard[CHESSBOARD_LENGTH][CHESSBOARD_LENGTH]; #include "chess_printer.h" typedef enum { Pawn, Knight, Bishop, Rook, Queen, King, NoPiece } PieceType; typedef enum { White, Black, NO_COLOR } Color; typedef enum { NormalMove, CaptureMove } MoveType; struct ChessPiece { Color color; PieceType type; }; struct ChessSquare { bool is_occupied; struct ChessPiece piece; }; typedef char File; typedef int Rank; struct ChessPiece get_piece(ChessBoard chess_board, File file, Rank rank); struct ChessSquare* get_square(ChessBoard chess_board, File file, Rank rank); bool squares_share_pawns_move(Color color, MoveType move, File filePiece1, Rank rankPiece1, File filePiece2, Rank rankPiece2); void init_chess_board(ChessBoard chess_board); void setup_chess_board(ChessBoard chess_board); bool is_square_occupied(ChessBoard chess_board, File file, Rank rank); bool squares_share_file(File file1, Rank rank1, File file2, Rank rank2); bool squares_share_rank(File file1, Rank rank1, File file2, Rank rank2); bool squares_share_diagonal(File file1, Rank rank1, File file2, Rank rank2); bool squares_share_knights_move(File file1, Rank rank1, File file2, Rank rank2); bool squares_share_queens_move(File file1, Rank rank1, File file2, Rank rank2); bool squares_share_kings_move(File file1, Rank rank1, File file2, Rank rank2); bool is_piece(struct ChessPiece piece, Color color, PieceType type); bool add_piece(ChessBoard chess_board, File file, Rank rank, struct ChessPiece piece); bool remove_piece(ChessBoard chess_board, File file, Rank rank); #endif