1.1 --- a/src/chess/rules.c Wed Jun 11 16:54:20 2014 +0200 1.2 +++ b/src/chess/rules.c Mon Jun 16 13:45:31 2014 +0200 1.3 @@ -44,6 +44,22 @@ 1.4 return simulation; 1.5 } 1.6 1.7 +void gamestate_init(GameState *gamestate) { 1.8 + memset(gamestate, 0, sizeof(GameState)); 1.9 + 1.10 + Board initboard = { 1.11 + {WROOK, WKNIGHT, WBISHOP, WQUEEN, WKING, WBISHOP, WKNIGHT, WROOK}, 1.12 + {WPAWN, WPAWN, WPAWN, WPAWN, WPAWN, WPAWN, WPAWN, WPAWN}, 1.13 + {0, 0, 0, 0, 0, 0, 0, 0}, 1.14 + {0, 0, 0, 0, 0, 0, 0, 0}, 1.15 + {0, 0, 0, 0, 0, 0, 0, 0}, 1.16 + {0, 0, 0, 0, 0, 0, 0, 0}, 1.17 + {BPAWN, BPAWN, BPAWN, BPAWN, BPAWN, BPAWN, BPAWN, BPAWN}, 1.18 + {BROOK, BKNIGHT, BBISHOP, BQUEEN, BKING, BBISHOP, BKNIGHT, BROOK} 1.19 + }; 1.20 + memcpy(gamestate->board, initboard, sizeof(Board)); 1.21 +} 1.22 + 1.23 void gamestate_cleanup(GameState *gamestate) { 1.24 MoveList *elem; 1.25 elem = gamestate->movelist; 1.26 @@ -587,7 +603,7 @@ 1.27 } 1.28 } 1.29 1.30 -int eval_move(GameState *gamestate, char *mstr, Move *move) { 1.31 +int eval_move(GameState *gamestate, char *mstr, Move *move, uint8_t color) { 1.32 memset(move, 0, sizeof(Move)); 1.33 move->fromfile = POS_UNSPECIFIED; 1.34 move->fromrow = POS_UNSPECIFIED; 1.35 @@ -612,7 +628,7 @@ 1.36 if (!move->promotion) { 1.37 return INVALID_MOVE_SYNTAX; 1.38 } else { 1.39 - move->promotion |= gamestate->mycolor; 1.40 + move->promotion |= color; 1.41 len -= 2; 1.42 mstr[len] = 0; 1.43 } 1.44 @@ -629,7 +645,7 @@ 1.45 move->piece = KING; 1.46 move->fromfile = fileidx('e'); 1.47 move->tofile = fileidx('g'); 1.48 - move->fromrow = move->torow = gamestate->mycolor == WHITE ? 0 : 7; 1.49 + move->fromrow = move->torow = color == WHITE ? 0 : 7; 1.50 } else { 1.51 /* move (e.g. "Nf3") */ 1.52 move->piece = getpiece(mstr[0]); 1.53 @@ -664,7 +680,7 @@ 1.54 move->piece = KING; 1.55 move->fromfile = fileidx('e'); 1.56 move->tofile = fileidx('c'); 1.57 - move->fromrow = move->torow = gamestate->mycolor == WHITE ? 0 : 7; 1.58 + move->fromrow = move->torow = color == WHITE ? 0 : 7; 1.59 } else { 1.60 move->piece = getpiece(mstr[0]); 1.61 if (mstr[2] == 'x') { 1.62 @@ -701,12 +717,12 @@ 1.63 1.64 if (move->piece) { 1.65 if (move->piece == PAWN 1.66 - && move->torow == (gamestate->mycolor==WHITE?7:0) 1.67 + && move->torow == (color==WHITE?7:0) 1.68 && !move->promotion) { 1.69 return NEED_PROMOTION; 1.70 } 1.71 1.72 - move->piece |= gamestate->mycolor; 1.73 + move->piece |= color; 1.74 if (move->fromfile == POS_UNSPECIFIED 1.75 || move->fromrow == POS_UNSPECIFIED) { 1.76 return getlocation(gamestate, move);