Beispiel #1
0
    void AddToGroup(GroupOfStones group, Stone stone)
    {
        if (stone == null)
        {
            return;                // stone is null
        }
        if (stone.inGroup)
        {
            return;                // stone is already in a group
        }
        if (stone.val == 0)
        {
            group.AddLiberty(stone);
            return; // open space (liberty)
        }

        int x = stone.x;
        int y = stone.y;
        int z = stone.z;

        if (group.AddStone(stone))
        {
            AddToGroup(group, GetStoneAt(x + 1, y, z));
            AddToGroup(group, GetStoneAt(x - 1, y, z));
            AddToGroup(group, GetStoneAt(x, y + 1, z));
            AddToGroup(group, GetStoneAt(x, y - 1, z));
            AddToGroup(group, GetStoneAt(x, y, z + 1));
            AddToGroup(group, GetStoneAt(x, y, z - 1));
        }
    }
Beispiel #2
0
    List <GroupOfStones> FindAllGroups()
    {
        foreach (Stone stone in data)
        {
            stone.inGroup = false;
        }

        List <GroupOfStones> groups = new List <GroupOfStones>();

        foreach (Stone stone in data)
        {
            GroupOfStones group = MakeGroup(stone);
            if (group != null && group.stones.Count > 0)
            {
                groups.Add(group);
            }
        }
        return(groups);
    }
Beispiel #3
0
    GroupOfStones MakeGroup(Stone stone)
    {
        if (stone == null)
        {
            return(null);               // stone is null
        }
        if (stone.inGroup)
        {
            return(null);               // stone is already in a group
        }
        if (stone.val == 0)
        {
            return(null);                // open space (liberty)
        }
        GroupOfStones group = new GroupOfStones(stone.val);

        AddToGroup(group, stone);

        return(group);
    }