src/chess/queen.c

changeset 24
4d030da07c88
parent 23
824c9522ce66
child 47
d726e4b46c33
equal deleted inserted replaced
23:824c9522ce66 24:4d030da07c88
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 }

mercurial