diff options
| author | Kai Stevenson <kai@kaistevenson.com> | 2022-12-08 23:19:42 -0800 |
|---|---|---|
| committer | Kai Stevenson <kai@kaistevenson.com> | 2022-12-08 23:19:42 -0800 |
| commit | 972363ca92691f289d32ac5cc787aa1b354da234 (patch) | |
| tree | fec63d375f56b846887fcd8415fc3f81559e27db /chesshelpers.c | |
| parent | 40667c9adde27cebdc8bbe9a6ab60f231bc2dfd7 (diff) | |
started castling. need to implement struct to support rook move and king move at the same time
Diffstat (limited to 'chesshelpers.c')
| -rw-r--r-- | chesshelpers.c | 47 |
1 files changed, 40 insertions, 7 deletions
diff --git a/chesshelpers.c b/chesshelpers.c index 1b28ed3..d0464fb 100644 --- a/chesshelpers.c +++ b/chesshelpers.c @@ -7,9 +7,11 @@ board_t init_board(int** pieces) { board_t board; board.pieces = pieces; - board.blackKingHasMoved = 0; - board.whiteKingHasMoved = 0; - board.lastPawnMove = 0; + board.whiteCanCastleKingside = 1; + board.whiteCanCastleQueenside = 1; + board.blackCanCastleKingside = 1; + board.blackCanCastleQueenside = 1; + board.lastPawnMove = -1; return board; } //function applies side effects to board values like king move state @@ -17,13 +19,44 @@ board_t make_move(board_t board, vector_t origin, vector_t end) { int piece = board.pieces[origin.mx][origin.my]; board.pieces[origin.mx][origin.my] = 0; board.pieces[end.mx][end.my] = piece; + //white king moved + if(piece == king) { + board.whiteCanCastleQueenside = 0; + board.whiteCanCastleKingside = 0; + } + //white kingside rook moved + else if(origin.mx == 7 && origin.my == 7) { + board.whiteCanCastleKingside = 0; + } + //white queenside rook moved + else if(origin.mx == 0 && origin.my == 7) { + board.whiteCanCastleQueenside = 0; + } + //black king moved + else if(piece == king + 6) { + board.blackCanCastleQueenside = 0; + board.blackCanCastleKingside = 0; + } + //black kingside rook moved + else if(origin.mx == 7 && origin.my == 0) { + board.blackCanCastleKingside = 0; + } + //black queenside rook moved + else if(origin.mx == 0 && origin.my == 0) { + board.blackCanCastleQueenside = 0; + } + //this is not an else if! lastPawnMove must be reset + if(piece == pawn || piece == pawn + 6) { + board.lastPawnMove = origin.mx; + } + else { + //en passant no longer possible + board.lastPawnMove = -1; + } return board; } board_t clone_board(board_t board) { - board_t newBoard; - newBoard.blackKingHasMoved = board.blackKingHasMoved; - newBoard.whiteKingHasMoved = board.whiteKingHasMoved; - newBoard.lastPawnMove = board.lastPawnMove; + board_t newBoard = board; int** pieces = malloc(8 * sizeof(int*)); for(int r = 0; r < 8; r++) { pieces[r] = malloc(8 * sizeof(int)); |
