]> git.cworth.org Git - loudgame/commitdiff
Use loa_move_t structure instead of two x,y pairs
authorCarl Worth <cworth@cworth.org>
Mon, 3 Mar 2008 19:51:24 +0000 (11:51 -0800)
committerCarl Worth <cworth@cworth.org>
Mon, 3 Mar 2008 19:51:24 +0000 (11:51 -0800)
lg-loa.c
loa-board.c
loa-board.h

index 174914307f71ca72faf74a496b08ce00e2a2d336..88f6ffbf15dc11b8c6b8b39ba50d5ea6a37a1f32 100644 (file)
--- a/lg-loa.c
+++ b/lg-loa.c
@@ -41,16 +41,13 @@ loa_game_new_game (loa_game_t *game)
 }
 
 static loa_bool_t
-loa_game_move (loa_game_t *game, const char * peer,
-              int x1, int y1, int x2, int y2)
+loa_game_move (loa_game_t *game, const char * peer, loa_move_t *move)
 {
     char *error;
 
-    if (! loa_board_move (&game->board, x1, y1, x2, y2, &error)) {
-       loudgame_sendf (&game->lg, peer, "Illegal move: %c%d%c%d: %s",
-                       'a' + x1, LOA_BOARD_SIZE - y1,
-                       'a' + x2, LOA_BOARD_SIZE - y2,
-                       error);
+    if (! loa_board_move (&game->board, move, &error)) {
+       loudgame_sendf (&game->lg, peer, "Illegal move: %s: %s",
+                       loa_move_to_string (move), error);
        return FALSE;
     }
 
@@ -114,32 +111,22 @@ loa_game_handle_show (loa_game_t *game,
 static void
 loa_game_handle_move (loa_game_t *game,
                      const char *peer,
-                     const char *move)
+                     const char *move_string)
 {
-    char xc1, xc2;
-    int x1, y1, x2, y2;
-    int matched;
+    loa_move_t move;
 
-    matched = sscanf (move, " %c %d %c %d ", &xc1, &y1, &xc2, &y2);
-    if (matched != 4) {
+    if (! loa_move_init_from_string (&move, move_string)) {
        loudgame_sendf (&game->lg, peer,
-                       "Error: The 'move' command requires a move of the form 'b1d3'");
+                       "Error: The 'move' command requires a move of the form 'b1-d3'");
        return;
     }
 
-    x1 = tolower (xc1) - 'a';
-    x2 = tolower (xc2) - 'a';
-    /* We use an upper-left origin internally. */
-    y1 = LOA_BOARD_SIZE - y1;
-    y2 = LOA_BOARD_SIZE - y2;
-    if (! loa_game_move (game, peer, x1, y1, x2, y2))
+    if (! loa_game_move (game, peer, &move))
        return;
 
-    loudgame_broadcastf (&game->lg, "%c%d%c%d",
-                        'a' + x1, LOA_BOARD_SIZE - y1,
-                        'a' + x2, LOA_BOARD_SIZE - y2);
+    loudgame_broadcastf (&game->lg, "%s", loa_move_to_string (&move));
 
-    if (loa_board_is_won (&game->board, x2, y2))
+    if (loa_board_is_won (&game->board, move.x2, move.y2))
        loudgame_broadcastf (&game->lg, "%s wins", peer);
 }
 
index 21f4302ffaf676283c0e7b1495f5839f191d0194..9478731e29cbb9455dd9da7f492239e5e9f052f5 100644 (file)
@@ -71,9 +71,11 @@ 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)
+    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);
        return FALSE;
+    }
 
     x1 = tolower (xc1) - 'a';
     x2 = tolower (xc2) - 'a';
@@ -413,35 +415,30 @@ loa_board_add_move_to_history (loa_board_t        *board,
 
 int
 loa_board_move (loa_board_t *board,
-               int x1, int y1,
-               int x2, int y2,
+               loa_move_t *move,
                char **error)
 {
     loa_cell_t cell;
-    loa_move_t move;
-
-    move.x1 = x1;
-    move.y1 = y1;
-    move.x2 = x2;
-    move.y2 = y2;
 
-    if (! loa_board_move_legal (board, &move, error))
+    if (! loa_board_move_legal (board, move, error))
        return FALSE;
 
-    cell = loa_board_remove_piece (board, x1, y1);
+    cell = loa_board_remove_piece (board, move->x1, move->y1);
     assert (cell == board->player);
 
-    cell = loa_board_remove_piece (board, x2, y2);
+    cell = loa_board_remove_piece (board, move->x2, move->y2);
     if (cell == LOA_CELL_EMPTY) {
-       move.is_capture = FALSE;
+       move->is_capture = FALSE;
     } else {
        assert (cell != board->player);
-       move.is_capture = TRUE;
+       move->is_capture = TRUE;
     }
 
-    loa_board_add_piece (board, x2, y2, board->player);
+    loa_board_add_piece (board,
+                        move->x2, move->y2,
+                        board->player);
 
-    loa_board_add_move_to_history (board, &move);
+    loa_board_add_move_to_history (board, move);
 
     loa_board_next_player (board);
 
index 4a4f690855fdd1541d365c29af262e6b5c0acfab..da48c7238e72cbf90ed1cfb7617ceeeaa35bd362 100644 (file)
@@ -114,8 +114,7 @@ loa_board_is_won (loa_board_t *board, int x, int y);
  * set to a string describing why the move is illegal.*/
 int
 loa_board_move (loa_board_t *board,
-               int x1, int y1,
-               int x2, int y2,
+               loa_move_t *move,
                char **error);
 
 /* Execute a 'pass'---changing the player-to-move from the current