summaryrefslogtreecommitdiff
path: root/chess.c
diff options
context:
space:
mode:
Diffstat (limited to 'chess.c')
-rw-r--r--chess.c93
1 files changed, 42 insertions, 51 deletions
diff --git a/chess.c b/chess.c
index c8de4fc..f2064d1 100644
--- a/chess.c
+++ b/chess.c
@@ -97,64 +97,55 @@ int in_board(vector_t position) {
int is_empty(int board[8][8], vector_t position) {
return board[position.mx][position.my] == 0;
}
-int is_white(int board[8][8], vector_t position) {
- return board[position.mx][position.my] >= 1 && board[position.mx][position.my] <= 6;
-}
-int is_black(int board[8][8], vector_t position) {
- return board[position.mx][position.my] >= 7;
+int is_color(int board[8][8], vector_t position, int color) {
+ if(color == 0) {
+ return board[position.mx][position.my] >= 1 && board[position.mx][position.my] <= 6;
+ }
+ else {
+ return board[position.mx][position.my] >= 7;
+ }
}
-vectorp_t get_moves(int board[8][8], vector_t position, piece_t piece) {
+//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));
int moveCount = 0;
- if(piece == pawn) {
- vector_t move1 = init_vector(position.mx, position.my - 1);
- if(in_board(move1) && is_empty(board, move1)) {
- moves[moveCount] = move1;
- moveCount++;
- if(position.my == 6) {
- vector_t move2 = init_vector(position.mx, position.my - 2);
- if(is_empty(board, move2)) {
- moves[moveCount] = move2;
- moveCount++;
- }
+ int forwardDir = (color == 0 ? -1 : 1);
+ vector_t move1 = init_vector(position.mx, position.my + forwardDir);
+ if(in_board(move1) && is_empty(board, move1)) {
+ moves[moveCount] = move1;
+ moveCount++;
+ if(position.my == (color == 0 ? 6 : 1)) {
+ vector_t move2 = init_vector(position.mx, position.my + (forwardDir * 2));
+ if(is_empty(board, move2)) {
+ moves[moveCount] = move2;
+ moveCount++;
}
}
- vector_t captureL = init_vector(position.mx - 1, position.my - 1);
- if(in_board(captureL) && is_black(board, captureL)) {
- moves[moveCount] = captureL;
- moveCount++;
- }
- vector_t captureR = init_vector(position.mx + 1, position.my - 1);
- if(in_board(captureR) && is_black(board, captureR)) {
- moves[moveCount] = captureR;
- moveCount++;
- }
- return init_vectorp(moves, moveCount);
+ }
+ vector_t captureL = init_vector(position.mx - 1, position.my + forwardDir);
+ if(in_board(captureL) && is_color(board, captureL, !color)) {
+ moves[moveCount] = captureL;
+ moveCount++;
+ }
+ vector_t captureR = init_vector(position.mx + 1, position.my + forwardDir);
+ if(in_board(captureR) && is_color(board, captureR, !color)) {
+ moves[moveCount] = captureR;
+ moveCount++;
+ }
+ return init_vectorp(moves, moveCount);
+}
+vectorp_t get_knight_moves(int board[8][8], vector_t position, int color) {
+
+}
+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) {
- vector_t move1 = init_vector(position.mx, position.my + 1);
- if(in_board(move1) && is_empty(board, move1)) {
- moves[moveCount] = move1;
- moveCount++;
- if(position.my == 1) {
- vector_t move2 = init_vector(position.mx, position.my + 2);
- if(is_empty(board, move2)) {
- moves[moveCount] = move2;
- moveCount++;
- }
- }
- }
- vector_t captureL = init_vector(position.mx - 1, position.my + 1);
- if(in_board(captureL) && is_white(board, captureL)) {
- moves[moveCount] = captureL;
- moveCount++;
- }
- vector_t captureR = init_vector(position.mx + 1, position.my + 1);
- if(in_board(captureR) && is_white(board, captureR)) {
- moves[moveCount] = captureR;
- moveCount++;
- }
- return init_vectorp(moves, moveCount);
+ return get_pawn_moves(board, position, 1);
+ }
+ else if(piece == knight) {
+
}
}
vector_t user_input_pos() {