src/rules/pawn.c

changeset 16
a298c6637c30
parent 15
7ffd66591afe
child 18
6008840b859e
equal deleted inserted replaced
15:7ffd66591afe 16:a298c6637c30
26 * POSSIBILITY OF SUCH DAMAGE. 26 * POSSIBILITY OF SUCH DAMAGE.
27 * 27 *
28 */ 28 */
29 29
30 #include "pawn.h" 30 #include "pawn.h"
31 #include "rules.h"
31 32
32 _Bool pawn_chkrules(Board board, Move *move) { 33 _Bool pawn_chkrules(Board board, Move *move) {
33 int8_t d = ((move->piece & COLOR_MASK) == WHITE ? -1 : 1); 34 int8_t d = ((move->piece & COLOR_MASK) == WHITE ? -1 : 1);
34 if (move->capture) { 35 if (move->capture) {
35 if (move->fromrow == move->torow + d && ( 36 if (move->fromrow == move->torow + d && (
54 55
55 _Bool pawn_isblocked(Board board, Move *move) { 56 _Bool pawn_isblocked(Board board, Move *move) {
56 return mdst(board,move) && !move->capture; 57 return mdst(board,move) && !move->capture;
57 } 58 }
58 59
59 _Bool pawn_getlocation(Board board, Move *move) { 60 int pawn_getlocation(Board board, Move *move) {
60 int8_t d = ((move->piece & COLOR_MASK) == WHITE ? -1 : 1); 61 int8_t d = ((move->piece & COLOR_MASK) == WHITE ? -1 : 1);
61 62
62 if (move->fromfile == POS_UNSPECIFIED) { 63 if (move->fromfile == POS_UNSPECIFIED) {
63 move->fromfile = move->tofile; 64 move->fromfile = move->tofile;
64 } 65 }
65 move->fromrow = move->torow + d; 66 move->fromrow = move->torow + d;
66 if (move->fromrow > 6) { 67 if (move->fromrow > 6) {
67 return FALSE; 68 return INVALID_POSITION;
68 } else { 69 } else {
69 /* advanced first move */ 70 /* advanced first move */
70 if (move->fromrow == (d < 0 ? 2 : 5) && 71 if (move->fromrow == (d < 0 ? 2 : 5) &&
71 msrc(board,move) != move->piece) { 72 msrc(board,move) != move->piece) {
72 73
73 move->fromrow += d; 74 move->fromrow += d;
74 if (move->fromrow > 6) { 75 if (move->fromrow > 6) {
75 return FALSE; 76 return INVALID_POSITION;
76 } 77 }
77 } 78 }
78 } 79 }
79 return TRUE; 80 return VALID_MOVE_SYNTAX;
80 } 81 }

mercurial