public int GetBlockLibertyCount(int index) { GoBlockBase lGoBlock = Cells[index].Block; if (lGoBlock.IsEmptyBlock()) { return(0); } return(((GoBlock)lGoBlock).LibertyCount); }
public bool IsSameString(int index1, int index2) { GoBlockBase lGoBlock1 = Cells[index1].Block; GoBlockBase lGoBlock2 = Cells[index2].Block; if ( (lGoBlock1.IsEmptyBlock()) || (lGoBlock2.IsEmptyBlock()) ) { return(false); } return(lGoBlock1 == lGoBlock2); }
public ColorEnclosedRegion(GoEmptyBlock goEmptyBlock, Color defender) { Board = goEmptyBlock.Board; Defender = defender; Size = 0; Version = 2004; _RegionNbr = goEmptyBlock.BlockNbr; Members = new List <GoBlockBase>(); EmptyBlocks = new List <GoEmptyBlock>(); Neighbors = new List <GoBlock>(); InteriorAttackerBlocks = new List <GoBlock>(); Is2Vital = TriState.Unknown; Is1Vital = TriState.Unknown; IsSmall = TriState.Unknown; _EnclosedArea = null; _EmptyRegion = null; Stack <GoBlockBase> lWork = new Stack <GoBlockBase>(); lWork.Push(goEmptyBlock); while (lWork.Count != 0) { GoBlockBase lGoBlockBase = lWork.Pop(); if (!Members.Contains(lGoBlockBase)) { Members.Add(lGoBlockBase); if (lGoBlockBase.IsEmptyBlock()) { EmptyBlocks.Add((GoEmptyBlock)lGoBlockBase); Size = Size + ((GoEmptyBlock)lGoBlockBase).EmptySpaceCount; } else { InteriorAttackerBlocks.Add((GoBlock)lGoBlockBase); Size = Size + ((GoBlock)lGoBlockBase).StoneCount; } foreach (GoBlockBase lGoBlockBaseAdjacent in lGoBlockBase.AdjacentBlocks.AllBlocks) { if (lGoBlockBaseAdjacent.BlockColor == Defender) { if (!Neighbors.Contains((GoBlock)lGoBlockBaseAdjacent)) { Neighbors.Add((GoBlock)lGoBlockBaseAdjacent); } } else if (!Members.Contains(lGoBlockBaseAdjacent)) { lWork.Push(lGoBlockBaseAdjacent); } } } } EnclosingBlocks = new List <GoBlock>(Neighbors.Count); InteriorDefenderBlocks = new List <GoBlock>(); foreach (GoBlock lGoBlock in Neighbors) { bool lFound = false; foreach (GoEmptyBlock lGoEmptyBlock in lGoBlock.AdjacentBlocks.EmptyBlocks) { if (!EmptyBlocks.Contains(lGoEmptyBlock)) { lFound = true; break; } } if (lFound) { EnclosingBlocks.Add(lGoBlock); } else { InteriorDefenderBlocks.Add(lGoBlock); } } if (EnclosingBlocks.Count == 0) { InteriorDefenderBlocks.Clear(); } }