probably made the ROOK, BISHOP and QUEEN moves work
This commit is contained in:
+46
-10
@@ -75,23 +75,59 @@ bool compare_pos(pos_t a, pos_t b) {
|
|||||||
return a.x == b.x && a.y == b.y;
|
return a.x == b.x && a.y == b.y;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pos_t pos_multiply_scalar(pos_t a, int b) {
|
||||||
|
return (pos_t){a.x*b, a.y*b};
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* check the wanted pos_t against all valid move options
|
* check the wanted pos_t against all valid move options
|
||||||
* of the current piece
|
* of the current piece
|
||||||
*/
|
*/
|
||||||
bool is_move_legal(move_t move) {
|
bool is_move_legal(move_t move) {
|
||||||
valid_move_t valid_moves[PIECE_COUNT] = DEFAULT_VALID_MOVES;
|
valid_move_t valid_moves[PIECE_COUNT] = DEFAULT_VALID_MOVES;
|
||||||
for (int i = 0; i < PIECE_COUNT; i++) {
|
switch (move.piece) {
|
||||||
for (int j = 0;
|
case NONE:
|
||||||
j < valid_moves[i].piece_move_count &&
|
case PAWN:
|
||||||
move.piece == valid_moves[i].piece;
|
case KNIGHT:
|
||||||
j++
|
case KING:
|
||||||
) {
|
for (int i = 0; i < PIECE_COUNT; i++) {
|
||||||
pos_t new_pos = {move.from.x+move.to.x, move.from.y+move.to.y};
|
for (int j = 0;
|
||||||
if (compare_pos(new_pos, valid_moves[i].options[j]) == true) {
|
j < valid_moves[i].piece_move_count &&
|
||||||
return true;
|
move.piece == valid_moves[i].piece;
|
||||||
|
j++
|
||||||
|
) {
|
||||||
|
pos_t new_pos = {move.from.x+move.to.x, move.from.y+move.to.y};
|
||||||
|
if (compare_pos(new_pos, valid_moves[i].options[j]) == true) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
break;
|
||||||
|
case ROOK:
|
||||||
|
case BISHOP:
|
||||||
|
case QUEEN:
|
||||||
|
for (int i = 0; i < PIECE_COUNT; i++) {
|
||||||
|
for (int j = 0;
|
||||||
|
j < valid_moves[i].piece_move_count &&
|
||||||
|
move.piece == valid_moves[i].piece;
|
||||||
|
j++
|
||||||
|
) {
|
||||||
|
/** NOTE: BOARD_HORIZONTAL assuming HORIZONTAL & VERTICAL are the same */
|
||||||
|
for (int k = 0; k < BOARD_HORIZONTAL; k++) {
|
||||||
|
pos_t new_pos = {
|
||||||
|
move.from.x+move.to.x,
|
||||||
|
move.from.y+move.to.y
|
||||||
|
};
|
||||||
|
if (compare_pos(
|
||||||
|
new_pos,
|
||||||
|
pos_multiply_scalar(valid_moves[i].options[j], k)
|
||||||
|
) == true) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
return false;
|
return false;
|
||||||
|
|||||||
Reference in New Issue
Block a user