summaryrefslogtreecommitdiff
path: root/chess.c
diff options
context:
space:
mode:
Diffstat (limited to 'chess.c')
-rw-r--r--chess.c36
1 files changed, 28 insertions, 8 deletions
diff --git a/chess.c b/chess.c
index 9cf9a76..c8de4fc 100644
--- a/chess.c
+++ b/chess.c
@@ -97,43 +97,63 @@ int in_board(vector_t position) {
int is_empty(int board[8][8], vector_t position) {
return board[position.mx][position.my] == 0;
}
-int get_owner(int board[8][8], vector_t position) {
-
+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
vectorp_t get_moves(int board[8][8], vector_t position, piece_t piece) {
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[0] = 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[1] = move2;
+ moves[moveCount] = move2;
moveCount++;
}
}
}
vector_t captureL = init_vector(position.mx - 1, position.my - 1);
- if(in_board(captureL) &&
+ 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);
}
else if(piece == pawn + 6) {
vector_t move1 = init_vector(position.mx, position.my + 1);
if(in_board(move1) && is_empty(board, move1)) {
- moves[0] = 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[1] = 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);
}
}