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 testShouldRerieveBestStartingMove() { var boardModel = new ReverciBoardModel(createBoardFrom( new[] { new[] { X, X, X, X, X }, new[] { X, W, B, W, X }, new[] { X, B, X, X, X }, new[] { X, X, X, X, X }, new[] { X, X, X, X, X }, } )); var player = new SmartComputerPlayer(2); player.setBoardModel(boardModel); player.setColor(eCoinType.Black); Assert.AreEqual(new Point(0, 1), player.GetMove()); }
public ScanUpForwardDiagonalTemplate(ReverciBoardModel i_BoardModel, eCoinType i_Color) : base(i_BoardModel, i_Color) { }
protected ScanTemplate(ReverciBoardModel i_BoardModel, eCoinType i_Color) { r_BoardModel = i_BoardModel; r_Color = i_Color; }
public ScanForwardTemplate(ReverciBoardModel i_BoardModel, eCoinType i_Color) : base(i_BoardModel, i_Color) { }
public ScanDownBackDiagonalTemplate(ReverciBoardModel i_BoardModel, eCoinType i_Color) : base(i_BoardModel, i_Color) { }
public void testShouldSaveInitialState() { var boardModel = new ReverciBoardModel(ReverciBoardBuilder.CreateInitialBoardWithSize(4)); Assert.AreEqual(ReverciBoardBuilder.CreateInitialBoardWithSize(4), boardModel.GetBoard()); }
public void setUp() { m_BoardModel = new ReverciBoardModel(ReverciBoardBuilder.CreateInitialBoardWithSize(4)); }