]> git.cworth.org Git - loudgame/blobdiff - lg-loa.c
Use loa_move_t structure instead of two x,y pairs
[loudgame] / lg-loa.c
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);
 }