72 lines
No EOL
2 KiB
C
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 |