* @param tile a <code>Tile</code> value
     */
    private void drawRoad(Graphics2D g, Tile tile) {

        Color oldColor = g.getColor();
        g.setColor(ResourceManager.getColor("road.color"));
        g.setStroke(roadStroke);
        g.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
        GeneralPath path = new GeneralPath();
        List<Point2D.Float> points = new ArrayList<Point2D.Float>(8);
        List<Direction> directions = new ArrayList<Direction>(8);
        for (Direction direction : Direction.values()) {
            Tile borderingTile = tile.getAdjacentTile(direction);
            TileImprovement r;
            if (borderingTile != null
                && (r = borderingTile.getRoad()) != null
                && r.isComplete()) {
                points.add(corners.get(direction));
                directions.add(direction);
            }
        }

        switch(points.size()) {
        case 0:
            path.moveTo(0.35f * tileWidth, 0.35f * tileHeight);
            path.lineTo(0.65f * tileWidth, 0.65f * tileHeight);
            path.moveTo(0.35f * tileWidth, 0.65f * tileHeight);
            path.lineTo(0.65f * tileWidth, 0.35f * tileHeight);
            break;
        case 1:
            path.moveTo(halfWidth, halfHeight);
            path.lineTo(points.get(0).getX(), points.get(0).getY());
            break;
        case 2:
            path.moveTo(points.get(0).getX(), points.get(0).getY());
            path.quadTo(halfWidth, halfHeight, points.get(1).getX(), points.get(1).getY());
            break;
        case 3:
        case 4: {
            Direction pen = directions.get(directions.size() - 1);
            Point2D p = corners.get(pen);
            path.moveTo(p.getX(), p.getY());
            for (Direction d : directions) {
                p = corners.get(d);
                if(prohibitedRoads.get(pen).contains(d)) {
                    path.moveTo(p.getX(), p.getY());
                } else {
                    path.quadTo(halfWidth, halfHeight, p.getX(), p.getY());
                }
                pen = d;
            }
            break;
        }
        default:
            for (Point2D p : points) {
                path.moveTo(halfWidth, halfHeight);
                path.lineTo(p.getX(), p.getY());
            }
        }
        g.draw(path);
        g.setColor(oldColor);
        g.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_OFF);
    }