X-Git-Url: https://git.cworth.org/git?p=loudgame;a=blobdiff_plain;f=loa-board.c;fp=loa-board.c;h=e630519cbfd81d7406c94e24892e019f0f62e8d7;hp=9478731e29cbb9455dd9da7f492239e5e9f052f5;hb=e8c3a13a4e33e77a6fea0be26a4b15fea7afb257;hpb=f37ff234d97a4fb8532f8c9387fb7fff5780afaf diff --git a/loa-board.c b/loa-board.c index 9478731..e630519 100644 --- a/loa-board.c +++ b/loa-board.c @@ -71,11 +71,9 @@ loa_move_init_from_string (loa_move_t *move, const char *string) move->y2 = 0; move->is_capture = 0; - matched = sscanf (string, " %c%d%c%c%d", &xc1, &y1, &sep, &xc2, &y2); - if (matched != 5) { - printf ("Matched only %d fields of %s\n", matched, string); + matched = sscanf (string, "%c%d%c%c%d", &xc1, &y1, &sep, &xc2, &y2); + if (matched != 5) return FALSE; - } x1 = tolower (xc1) - 'a'; x2 = tolower (xc2) - 'a'; @@ -276,10 +274,10 @@ loa_board_is_won (loa_board_t *board, int x, int y) return 0; } -static loa_bool_t -loa_board_move_legal (loa_board_t *board, - const loa_move_t *move, - char **error) +loa_bool_t +loa_board_move_is_legal (loa_board_t *board, + loa_move_t *move, + char **error) { int x, y; int x1, y1, x2, y2; @@ -312,6 +310,11 @@ loa_board_move_legal (loa_board_t *board, return FALSE; } + if (board->cells[x2][y2] == LOA_CELL_EMPTY) + move->is_capture = FALSE; + else + move->is_capture = TRUE; + dx = x2 - x1; dy = y2 - y1; @@ -420,19 +423,15 @@ loa_board_move (loa_board_t *board, { loa_cell_t cell; - if (! loa_board_move_legal (board, move, error)) + if (! loa_board_move_is_legal (board, move, error)) return FALSE; cell = loa_board_remove_piece (board, move->x1, move->y1); assert (cell == board->player); cell = loa_board_remove_piece (board, move->x2, move->y2); - if (cell == LOA_CELL_EMPTY) { - move->is_capture = FALSE; - } else { - assert (cell != board->player); - move->is_capture = TRUE; - } + assert (cell == LOA_CELL_EMPTY || + (move->is_capture && cell != board->player)); loa_board_add_piece (board, move->x2, move->y2,