Exemple #1
0
    void makeMove(C2DPoint pos, Constants.StoneColor color, List <C2DHoledPolyArc> blackShape, List <C2DHoledPolyArc> whiteShape)
    {
        C2DHoledPolyArc stoneShape = makeCircle(pos, 1);

        List <C2DHoledPolyArc> ownShape;

        if (color == Constants.StoneColor.Black)
        {
            ownShape = blackShape;
        }
        else
        {
            ownShape = whiteShape;
        }

        List <C2DHoledPolyArc> shapesToMerge = new List <C2DHoledPolyArc> ();

        foreach (C2DHoledPolyArc poly in ownShape)
        {
            if (poly.Overlaps(stoneShape))
            {
                shapesToMerge.Add(poly);
            }
        }

        merge(stoneShape, shapesToMerge, ownShape);
    }
Exemple #2
0
    void merge(C2DHoledPolyArc stoneShape, List <C2DHoledPolyArc> shapesToMerge, List <C2DHoledPolyArc> ownShape)
    {
        List <C2DHoledPolyArc> acc = new List <C2DHoledPolyArc>();
        CGrid grid = new CGrid();

        grid.SetGridSize(0.01f);

        if (shapesToMerge.Count == 0)
        {
            ownShape.Add(stoneShape);
            return;
        }

        foreach (C2DHoledPolyArc shape in shapesToMerge)
        {
            ownShape.Remove(shape);
        }

        foreach (C2DHoledPolyArc shape in shapesToMerge)
        {
            shape.GetUnion(stoneShape, acc, grid);
        }

        ownShape.Add(acc[acc.Count - 1]);
    }
Exemple #3
0
    C2DHoledPolyArc makeCircle(C2DPoint pos, float radius)
    {
        C2DPolyArc shape = new C2DPolyArc();

        shape.SetStartPoint(new C2DPoint(pos.x + radius, pos.y));

        for (int i = 0; i < 16; i++)
        {
            shape.LineTo(new C2DPoint(pos.x + Mathf.Cos(Mathf.PI * 2 * i / 16) * radius, pos.y + Mathf.Sin(Mathf.PI * 2 * i / 16) * radius), radius, false, true);
        }
        shape.Close(radius, false, true);

        C2DHoledPolyArc result = new C2DHoledPolyArc();

        result.Rim = shape;
        return(result);
    }