private int alphaBeta(eCoinType[][] i_Board, eCoinType i_Color, Point i_Move, int i_Depth, int a, int b) { var model = new ReverciBoardModel(i_Board); model.MakeMove(i_Move.X, i_Move.Y, i_Color); var otherColor = SquareTypeUtil.GetOtherColor(i_Color); var possibleMoves = model.GetPossibleMovesFor(otherColor); if (possibleMoves.Count == 0 || i_Depth == 0) { a = model.GetPieceCountOfType(getColor()) - model.GetPieceCountOfType(SquareTypeUtil.GetOtherColor(getColor())) + i_Depth; } else { foreach (var move in possibleMoves) { a = Math.Max(a, alphaBeta(model.GetBoard(), otherColor, move, i_Depth - 1, -b, -a)); if (b <= a) { break; } } } return a; }
public void testShouldSaveInitialState() { var boardModel = new ReverciBoardModel(ReverciBoardBuilder.CreateInitialBoardWithSize(4)); Assert.AreEqual(ReverciBoardBuilder.CreateInitialBoardWithSize(4), boardModel.GetBoard()); }