26 * POSSIBILITY OF SUCH DAMAGE. |
26 * POSSIBILITY OF SUCH DAMAGE. |
27 * |
27 * |
28 */ |
28 */ |
29 |
29 |
30 #include "rules.h" |
30 #include "rules.h" |
|
31 #include "rook.h" |
|
32 #include "bishop.h" |
31 #include "queen.h" |
33 #include "queen.h" |
32 |
34 |
33 _Bool queen_chkrules(Move* move) { |
35 _Bool queen_chkrules(Move* move) { |
34 // TODO: implement |
36 return bishop_chkrules(move) || rook_chkrules(move); |
35 return 0; |
|
36 } |
37 } |
37 |
38 |
38 _Bool queen_isblocked(GameState *gamestate, Move *move) { |
39 _Bool queen_isblocked(GameState *gamestate, Move *move) { |
39 // TODO: implement |
40 if (rook_chkrules(move)) { |
40 return 1; |
41 return rook_isblocked(gamestate, move); |
|
42 } else { |
|
43 return bishop_isblocked(gamestate, move); |
|
44 } |
41 } |
45 } |
42 |
46 |
43 int queen_getlocation(GameState *gamestate, Move *move) { |
47 int queen_getlocation(GameState *gamestate, Move *move) { |
44 // TODO: implement |
48 |
45 return INVALID_MOVE_SYNTAX; |
49 Move moveasrook = *move; |
|
50 int rookaspect = rook_getlocation(gamestate, &moveasrook); |
|
51 |
|
52 Move moveasbishop = *move; |
|
53 int bishopaspect = bishop_getlocation(gamestate, &moveasbishop); |
|
54 |
|
55 if (rookaspect == VALID_MOVE_SYNTAX && bishopaspect == VALID_MOVE_SYNTAX) { |
|
56 return AMBIGUOUS_MOVE; |
|
57 } |
|
58 |
|
59 if (rookaspect == VALID_MOVE_SYNTAX) { |
|
60 *move = moveasrook; |
|
61 return VALID_MOVE_SYNTAX; |
|
62 } |
|
63 |
|
64 if (bishopaspect == VALID_MOVE_SYNTAX) { |
|
65 *move = moveasbishop; |
|
66 return VALID_MOVE_SYNTAX; |
|
67 } |
|
68 |
|
69 return INVALID_POSITION; |
46 } |
70 } |