+ loudgame_sendf (&game->lg, peer, "Sets possible: %d",
+ game->board.sets_possible);
+}
+
+static void
+set_game_handle_shuffle (set_game_t *game,
+ const char *peer)
+{
+ if (game->board.sets_possible) {
+ loudgame_sendf (&game->lg, peer,
+ "There are %d sets, refusing to shuffle.",
+ game->board.sets_possible);
+ return;
+ }
+
+ set_game_shuffle (game);
+}
+
+static void
+set_game_handle_message (loudgame_t *lg,
+ const char *peer,
+ const char *message)
+{
+ set_game_t *game = (set_game_t*) lg;
+
+ if (strcmp (message, "show") == 0)
+ set_game_handle_show (game, peer);
+ else if (strcmp (message, "hint") == 0)
+ set_game_handle_hint (game, peer);
+ else if (strcmp (message, "shuffle") == 0)
+ set_game_handle_shuffle (game, peer);
+ else
+ loudgame_sendf (lg, peer, "Unknown command: '%s'", message);
+}
+
+/* Begin a new game */
+static int
+set_game_init (set_game_t *game, int argc, char *argv[])
+{
+ int err;
+
+ err = loudgame_init (&game->lg, argc, argv);
+ if (err)
+ return err;
+
+ deck_init (&game->deck);
+ board_init (&game->board);
+ deal (&game->deck, &game->board);
+
+ return 0;