public override int Apply(byte depth, ISearchTree tree, int alpha, int beta) { if (depth < Depth || !tree.TimeLeft) { return Score; } // If no children, get moves. if (Children == null) { var items = tree.GetMoves(Field, (Depth & 1) == 1); var childDepth = (byte)(Depth + 1); Children = new ISearchTreeNode[7]; var item0 = items[0]; var item1 = items[1]; var item2 = items[2]; var item3 = items[3]; var item4 = items[4]; var item5 = items[5]; var item6 = items[6]; if (item2 != Field.Empty) { Children[Count++] = tree.GetNode(item2, childDepth); } if (item4 != Field.Empty) { Children[Count++] = tree.GetNode(item4, childDepth); } if (item3 != Field.Empty) { Children[Count++] = tree.GetNode(item3, childDepth); } if (item1 != Field.Empty) { Children[Count++] = tree.GetNode(item1, childDepth); } if (item5 != Field.Empty) { Children[Count++] = tree.GetNode(item5, childDepth); } if (item0 != Field.Empty) { Children[Count++] = tree.GetNode(item0, childDepth); } if (item6 != Field.Empty) { Children[Count++] = tree.GetNode(item6, childDepth); } } Score = ApplyChildren(depth, tree, alpha, beta); return Score; }