diff options
-rw-r--r-- | include/board.h | 5 | ||||
-rw-r--r-- | lib/board.c | 18 |
2 files changed, 23 insertions, 0 deletions
diff --git a/include/board.h b/include/board.h index 5fd714a..de6234d 100644 --- a/include/board.h +++ b/include/board.h @@ -9,4 +9,9 @@ int board_delete(Board); Square board_get_square(Board, Coord); Board board_set_square(Board, Coord, Square); +/* + * Receives and applies a Move on the Board + */ +Board board_make_move(Board b, Move m); + #endif diff --git a/lib/board.c b/lib/board.c index 774bfd5..a53c356 100644 --- a/lib/board.c +++ b/lib/board.c @@ -3,6 +3,7 @@ #include "board.h" #include "coordinate.h" +#include "move.h" #include "piece.h" static Board _setup_colors(Board b) { @@ -148,3 +149,20 @@ Board board_set_square(Board b, Coord c, Square s) { return b; } + +Board board_make_move(Board b, Move m) { + /* Get piece from orig square coordinate */ + Square s = board_get_square(b, move_get_orig(m)); + Piece *p = s.piece; + + /* Empty orig square */ + s.piece = NULL; + board_set_square(b, move_get_orig(m), s); + + /* Set piece on dest square */ + s = board_get_square(b, move_get_dest(m)); + s.piece = p; + board_set_square(b, move_get_dest(m), s); + + return b; +} |