Esempio n. 1
0
        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
            });
        }
Esempio n. 2
0
 public CompositeMoveFixture()
 {
     _piece  = Helper.GetMockedPieceAt(4, 4, PieceColor.Black);
     _pieces = new List <IPiece> {
         _piece
     };
     _sut = new CompositeMove(new DiagonalMove(), new OrthogonalMove());
 }
Esempio n. 3
0
 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();
 }
Esempio n. 4
0
 public bool CollectToPlayerSwitch(CompositeMove resultMove)
 {
     resultMove.Add(this);
     return(true);
 }
Esempio n. 5
0
 public bool CollectToPlayerSwitch(CompositeMove resultMove)
 {
     return false;
 }
Esempio n. 6
0
 public bool CollectToPlayerSwitch(CompositeMove resultMove)
 {
     return(false);
 }
 public bool CollectToPlayerSwitch(CompositeMove resultMove)
 {
     resultMove.Add(this);
     return true;
 }
Esempio n. 8
0
 public EnemyInitialization(IEnemyFactory enemyFactory)
 {
     _enemyFactory = enemyFactory;
     _enemy        = new CompositeMove();
     _enemy.AddUnit(_enemyFactory.CreateEnemy(EnemyType.Small));
 }