summaryrefslogtreecommitdiff
path: root/chess.c
diff options
context:
space:
mode:
authorKai Stevenson <kai@kaistevenson.com>2022-12-03 17:22:24 -0800
committerKai Stevenson <kai@kaistevenson.com>2022-12-03 17:22:24 -0800
commitdff094a64b219a3bd7c9dbae24f581a6b125e2b5 (patch)
tree2a48e57c1e9735709c20e682710f188c345b0f5f /chess.c
parent3d0c89b86e5f19648871597ffc07201d95fbf4fc (diff)
added knight moves
Diffstat (limited to 'chess.c')
-rw-r--r--chess.c30
1 files changed, 21 insertions, 9 deletions
diff --git a/chess.c b/chess.c
index f2064d1..f7b1c82 100644
--- a/chess.c
+++ b/chess.c
@@ -107,7 +107,7 @@ int is_color(int board[8][8], vector_t position, int color) {
}
//0 is white, 1 is black
vectorp_t get_pawn_moves(int board[8][8], vector_t position, int color) {
- vector_t* moves = malloc(27 * sizeof(vector_t));
+ vector_t* moves = malloc(6 * sizeof(vector_t));
int moveCount = 0;
int forwardDir = (color == 0 ? -1 : 1);
vector_t move1 = init_vector(position.mx, position.my + forwardDir);
@@ -135,17 +135,29 @@ vectorp_t get_pawn_moves(int board[8][8], vector_t position, int color) {
return init_vectorp(moves, moveCount);
}
vectorp_t get_knight_moves(int board[8][8], vector_t position, int color) {
-
+ vector_t* moves = malloc(8 * sizeof(vector_t));
+ int moveCount = 0;
+ for(int i = 0; i < 8; i++) {
+ int h = ((i == 0 || i == 1) ? 2 : (i == 2 || i == 3) ? -2 : (i == 4 || i == 5) ? 1 : -1);
+ int v = ((i == 0 || i == 2) ? -1 : (i == 1 || i == 3) ? 1 : (i == 4 || i == 6) ? 2 : -2);
+ vector_t move = init_vector(position.mx + h, position.my + v);
+ if(in_board(move) && (is_empty(board, move) || is_color(board, move, !color))) {
+ moves[moveCount] = move;
+ moveCount++;
+ }
+ }
+ return init_vectorp(moves, moveCount);
}
vectorp_t get_moves(int board[8][8], vector_t position, piece_t piece) {
- if(piece == pawn) {
- return get_pawn_moves(board, position, 0);
- }
- else if(piece == pawn + 6) {
- return get_pawn_moves(board, position, 1);
+ int color = 0;
+ if(piece > 6) {
+ color = 1;
+ piece -= 6;
}
- else if(piece == knight) {
-
+ if(piece == pawn) {
+ return get_pawn_moves(board, position, color);
+ } else if(piece == knight) {
+ return get_knight_moves(board, position, color);
}
}
vector_t user_input_pos() {