06-chess/assignment/chess.h
2024-10-30 10:16:42 +01:00

72 lines
No EOL
2 KiB
C

/*----------------------------------------------------------
* HTBLA-Leonding
* ----------------------------------------------------------
* Description:
* Basic chess functions.
* ----------------------------------------------------------
*/
#ifndef ___CHESS_H
#define ___CHESS_H
#include <stdio.h>
#include <stdbool.h>
#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