//NegaAlpha法 private float NegaAlpha(Stone.ColorType color, int depth, float alpha, float beta) { if (depth == 0) { return(Evaluator.Evaluate(board, color)); } var movable = board.GetMovableBitBoard(color); if (LogicBoard.CountBit(movable) == 0) { board.Log(); var eval = -NegaAlpha(Stone.GetReverseColor(color), depth - 1, -beta, -alpha); board.Undo(); return(eval); } while (movable != 0) { ulong next = GetLeastSignificantBit(movable); board.Log(); board.Reverse(next, color); var eval = -NegaAlpha(Stone.GetReverseColor(color), depth - 1, -beta, -alpha); board.Undo(); if (beta <= eval) { return(eval); } alpha = Mathf.Max(eval, alpha); movable ^= next; } return(alpha); }
//合法手の数を取得 private static int CountMovableCells(Stone.ColorType color) { var movable = board.GetMovableBitBoard(color); return(LogicBoard.CountBit(movable)); }