public PhutballMoveScore Search(IFieldsGraph fieldsGraph) { if (_alphaBetaSearchDepth.SearchDepth == 0) { return(PhutballMoveScore.Empty()); } var actualGraph = (IFieldsGraph)fieldsGraph.Clone(); var performMoves = new PerformMoves(actualGraph, _playersState); var visitedNodes = new VisitedNodesCounter <JumpNode>(); _alphaBetaSearch = new AlphaBetaSearch <JumpNode>( new WhiteStoneToCurrentPlayerBorderDistance(_playersState, actualGraph, _alphaBetaSearchDepth.DistanceToBorderWeight) .Add(new BlackStoneToTargetBorderCount(_playersState, actualGraph, _alphaBetaSearchDepth.BlackStonesToBorderWeight)) , _alphaBetaSearchDepth, new PerformMovesNodeVisitor(performMoves).FollowedBy(visitedNodes) ); var movesTree = _movesFactory(actualGraph); _alphaBetaSearch.Run(movesTree); var result = new CompositeMove(); _alphaBetaSearch.BestMove.Move.MovesFromRoot.CollectToPlayerSwitch(result); return(new PhutballMoveScore(result, _alphaBetaSearch.BestMove.Score) { CuttoffsCount = _alphaBetaSearch.CuttoffsCount, VisitedNodesCount = visitedNodes.Count }); }
public CompositeMoveFixture() { _piece = Helper.GetMockedPieceAt(4, 4, PieceColor.Black); _pieces = new List <IPiece> { _piece }; _sut = new CompositeMove(new DiagonalMove(), new OrthogonalMove()); }
private void MaxValueUpdated(int actualValue, ITreeSearchContinuation treeSearchContinuation, ITree <JumpNode> node) { if (actualValue <= CurrentMaxValue) { return; } if (actualValue == _targetBorder.WinValue) { treeSearchContinuation.Stop(); } ResultMove = new CompositeMove(_acutalMoves.ToArray().Reverse()); CurrentMaxValue = actualValue; CurrentMaxNode = node.Node; MaxUpdated(); }
public bool CollectToPlayerSwitch(CompositeMove resultMove) { resultMove.Add(this); return(true); }
public bool CollectToPlayerSwitch(CompositeMove resultMove) { return false; }
public bool CollectToPlayerSwitch(CompositeMove resultMove) { return(false); }
public bool CollectToPlayerSwitch(CompositeMove resultMove) { resultMove.Add(this); return true; }
public EnemyInitialization(IEnemyFactory enemyFactory) { _enemyFactory = enemyFactory; _enemy = new CompositeMove(); _enemy.AddUnit(_enemyFactory.CreateEnemy(EnemyType.Small)); }