summaryrefslogtreecommitdiff
path: root/chess.c
diff options
context:
space:
mode:
authorKai Stevenson <kai@kaistevenson.com>2022-12-04 17:55:06 -0800
committerKai Stevenson <kai@kaistevenson.com>2022-12-04 17:55:55 -0800
commitaa5a3275dbe7bc737850ade52e55109303c92e80 (patch)
treeea28469db3f8d064b8b269f94d670fc8e76f50f7 /chess.c
parent2b051a7a6fe585a8bd71629020f6ea750dcb140f (diff)
added bishop moves
Diffstat (limited to 'chess.c')
-rw-r--r--chess.c37
1 files changed, 36 insertions, 1 deletions
diff --git a/chess.c b/chess.c
index f4abecb..3657f63 100644
--- a/chess.c
+++ b/chess.c
@@ -148,6 +148,37 @@ vectorp_t get_knight_moves(int board[8][8], vector_t position, int color) {
}
return init_vectorp(moves, moveCount);
}
+vectorp_t get_bishop_moves(int board[8][8], vector_t position, int color) {
+ vector_t* moves = malloc(13 * sizeof(vector_t));
+ int moveCount = 0;
+ for(int i = 0; i < 4; i++) {
+ int h = i < 2 ? 1 : -1;
+ int v = (i == 0 || i == 2) ? 1 : -1;
+ vector_t checkPos = init_vector(position.mx, position.my);
+ for(int d = 0; d < 7; d++) {
+ checkPos.mx += h;
+ checkPos.my += v;
+ if(in_board(checkPos)) {
+ if(is_empty(board, checkPos)) {
+ moves[moveCount] = init_vector(checkPos.mx, checkPos.my);
+ moveCount++;
+ }
+ else if(is_color(board, checkPos, !color)) {
+ moves[moveCount] = init_vector(checkPos.mx, checkPos.my);
+ moveCount++;
+ break;
+ }
+ else {
+ break;
+ }
+ }
+ else {
+ break;
+ }
+ }
+ }
+ return init_vectorp(moves, moveCount);
+}
vectorp_t get_moves(int board[8][8], vector_t position, piece_t piece) {
int color = 0;
if(piece > 6) {
@@ -156,9 +187,13 @@ vectorp_t get_moves(int board[8][8], vector_t position, piece_t piece) {
}
if(piece == pawn) {
return get_pawn_moves(board, position, color);
- } else if(piece == knight) {
+ }
+ else if(piece == knight) {
return get_knight_moves(board, position, color);
}
+ else if(piece == bishop) {
+ return get_bishop_moves(board, position, color);
+ }
}
vector_t user_input_pos() {
char* inputString = malloc(3 * sizeof(char));