Generate a dictionary of pieces using the given options.

    pieces options supported:
    - Opt.empty -> no locations have pieces
    - Opt.random ->
    - Opt.preset -> robber is placed on the first desert found
    - Opt.debug -> a variety of pieces are placed around the board

    :param tiles: list of tiles from _generate_tiles
    :param ports: list of ports from _generate_ports
    :param players_opts: Opt
    :param pieces_opts: Opt
    :return: dictionary mapping (hexgrid.TYPE, coord:int) -> Piece

def _get_pieces(tiles, ports, players_opts, pieces_opts):
    """
    Generate a dictionary of pieces using the given options.

    pieces options supported:
    - Opt.empty -> no locations have pieces
    - Opt.random ->
    - Opt.preset -> robber is placed on the first desert found
    - Opt.debug -> a variety of pieces are placed around the board

    :param tiles: list of tiles from _generate_tiles
    :param ports: list of ports from _generate_ports
    :param players_opts: Opt
    :param pieces_opts: Opt
    :return: dictionary mapping (hexgrid.TYPE, coord:int) -> Piece
    """
    if pieces_opts == Opt.empty:
        return dict()
    elif pieces_opts == Opt.debug:
        players = catan.game.Game.get_debug_players()
        return {
            (hexgrid.NODE, 0x23): catan.pieces.Piece(catan.pieces.PieceType.settlement, players[0]),
            (hexgrid.EDGE, 0x22): catan.pieces.Piece(catan.pieces.PieceType.road, players[0]),
            (hexgrid.NODE, 0x67): catan.pieces.Piece(catan.pieces.PieceType.settlement, players[1]),
            (hexgrid.EDGE, 0x98): catan.pieces.Piece(catan.pieces.PieceType.road, players[1]),
            (hexgrid.NODE, 0x87): catan.pieces.Piece(catan.pieces.PieceType.settlement, players[2]),
            (hexgrid.EDGE, 0x89): catan.pieces.Piece(catan.pieces.PieceType.road, players[2]),
            (hexgrid.EDGE, 0xA9): catan.pieces.Piece(catan.pieces.PieceType.road, players[3]),
            (hexgrid.TILE, 0x77): catan.pieces.Piece(catan.pieces.PieceType.robber, None),
        }
    elif pieces_opts in (Opt.preset, ):
        deserts = filter(lambda tile: tile.terrain == catan.board.Terrain.desert, tiles)
        coord = hexgrid.tile_id_to_coord(list(deserts)[0].tile_id)
        return {
            (hexgrid.TILE, coord): catan.pieces.Piece(catan.pieces.PieceType.robber, None)
        }
    elif pieces_opts in (Opt.random, ):
        logging.warning('{} option not yet implemented'.format(pieces_opts))