int GetAvailableMoves(Board b) { if (_availableMoves == null) _availableMoves = new Move[Size*Size+1]; int moveCount = 0; for (int i = 0; i < Size; i++) { for (int j = 0; j < Size; j++) { //is on empty space on the board and not a friendly eye if (b[i, j] == 0 && b.IsEye(i, j) != b.ActivePlayer) { _availableMoves[moveCount++] = new Move(i, j); } } } return moveCount; }
private int GetAvailableMoves(Board b) { if (_availableMoves == null) { _availableMoves = new Move[Size * Size + 1]; } int moveCount = 0; for (int i = 0; i < Size; i++) { for (int j = 0; j < Size; j++) { //is on empty space on the board and not a friendly eye if (b[i, j] == 0 && b.IsEye(i, j) != b.ActivePlayer) { _availableMoves[moveCount++] = new Move(i, j); } } } return(moveCount); }
public void CreateChildren() { lock (this) { int size = Board.Size; Board b = BoardState; if (Children != null) { return; } if (Parent == null || Parent.Children == null) { Children = new List <UCTNode>(size * size); } else { Children = new List <UCTNode>(Parent.Children.Count); } for (int i = 0; i < size; i++) { for (int j = 0; j < size; j++) { //is on empty space on the board if (b[i, j] == 0 && b.IsEye(i, j) != b.ActivePlayer) { Board anotherCloneBoard = b.Clone(); Move m = new Move(i, j); if (anotherCloneBoard.PlaceStone(m) == true) { Children.Add(new UCTNode(this, m, anotherCloneBoard)); } } } } Children.Shuffle(); HasChildren = true; } }