Exemple #1
0
        public void TestLevel4()
        {
            var choosenState = AlphaBetaSearch.DoSearch(_state, 4);

            Console.WriteLine(choosenState.ToString());
            Assert.AreEqual(true, true);
        }
Exemple #2
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
            });
        }
Exemple #3
0
        static void RunSingleTurn3()
        {
            var statsCollector = new GameClientStatsCollector();
            var evaluator      = new Evaluator(0.876, 0.000, 0.137, 0.625, 1.000, 0.289, 0.696, 0.000, 0.522);
            AlphaBetaSearchGameClient absGameClient = new AlphaBetaSearchGameClient(evaluator, 7, statsCollector, true, true, runParallel: true);
            Player player     = new Player("AlphaBetaSearch", () => absGameClient);
            var    gameClient = player.CreateGameClient.Invoke();
            var    b          = "....." +
                                ".Ko.." +
                                ".o..." +
                                "....." +
                                "..k..";
            IEnumerable <Card> cards = new List <Card>()
            {
                Card.Elephant, Card.Monkey, Card.Cobra, Card.Frog, Card.Horse
            };
            var  cardNumbers = new[] { 0, 1, 2, 3, 4 };
            Game game        = new Game(player, null, GameUtil.ParseGameState(b, cards, 0, cardNumbers));
            Turn turn        = gameClient.GetTurn(game);

            game.PlayTurn(turn);
            Console.Out.WriteLine($"Score: {absGameClient.GameResult:0.000000}");
            Console.Out.WriteLine(AlphaBetaSearch.GetStats());
            Console.Out.WriteLine(statsCollector.GetReport());
            Console.Out.WriteLine(turn);
            Console.Out.WriteLine(game.ToString());
        }
Exemple #4
0
        static void RunSingleTurn()
        {
            var statsCollector = new GameClientStatsCollector();
            //var evaluator = new Evaluator(1.0, 0.0, 1.0, 1.0, 1.0, 1.0, 1.0, 0.0, 1.0);
            var evaluator = new Evaluator(0.654, 1.000, 0.125, 0.674, 0.241, 0.346, 0.867, 0.554, 0.338);
            AlphaBetaSearchGameClient absGameClient = new AlphaBetaSearchGameClient(evaluator, 6, statsCollector, true, true, runParallel: true);
            Player player1    = new Player("AlphaBetaSearch", () => absGameClient);
            Player player2    = new Player("MovePawnsToBase", () => new MovePawnsToBaseGameClient());
            var    gameClient = player1.CreateGameClient.Invoke();
            var    b          = "OOK.O" +
                                "...O." +
                                "....." +
                                ".o..." +
                                "o.koo";
            IEnumerable <Card> cards = new List <Card>()
            {
                Card.Boar, Card.Ox, Card.Tiger, Card.Dragon, Card.Eel
            };
            var  cardNumbers = new[] { 0, 1, 2, 3, 4 };
            Turn turn        = gameClient.GetTurn(new Game(player1, player2, GameUtil.ParseGameState(b, cards, 0, cardNumbers)));

            Console.Out.WriteLine($"Score: {absGameClient.GameResult:0.000000}");
            Console.Out.WriteLine(AlphaBetaSearch.GetStats());
            Console.Out.WriteLine(statsCollector.GetReport());
        }
Exemple #5
0
        static void RunSingleTurn5()
        {
            var statsCollector = new GameClientStatsCollector();
            var evaluator      = new Evaluator(0.353, 0.000, 0.030, 1.000, 0.406, 0.111, 0.103, 0.000, 0.389);
            AlphaBetaSearchGameClient absGameClient = new AlphaBetaSearchGameClient(evaluator, 7, statsCollector, true, true, runParallel: false);
            Player player     = new Player("AlphaBetaSearch", () => absGameClient);
            var    gameClient = player.CreateGameClient.Invoke();
            var    b          = "...O." +
                                ".k..." +
                                "...K." +
                                "....." +
                                "o...o";
            IEnumerable <Card> cards = new List <Card>()
            {
                Card.Eel, Card.Boar, Card.Crane, Card.Rabbit, Card.Frog
            };
            var  cardNumbers = new[] { 0, 1, 2, 3, 4 };
            Game game        = new Game(player, null, GameUtil.ParseGameState(b, cards, 0, cardNumbers));
            Turn turn        = gameClient.GetTurn(game);

            game.PlayTurn(turn);
            Console.Out.WriteLine($"Score: {absGameClient.GameResult:0.000000}");
            Console.Out.WriteLine(AlphaBetaSearch.GetStats());
            Console.Out.WriteLine(statsCollector.GetReport());
            Console.Out.WriteLine(turn);
            Console.Out.WriteLine(game.ToString());
        }
Exemple #6
0
        static void RunSingleTurn4()
        {
            var statsCollector = new GameClientStatsCollector();
            var evaluator      = new Evaluator(1.000, 0.000, 0.043, 0.829, 0.654, 0.082, 0.797, 0.000, 0.437);
            AlphaBetaSearchGameClient absGameClient = new AlphaBetaSearchGameClient(evaluator, 6, statsCollector, true, true, runParallel: true);
            Player player     = new Player("AlphaBetaSearch", () => absGameClient);
            var    gameClient = player.CreateGameClient.Invoke();
            var    b          = ".O.OO" +
                                "k...K" +
                                "..o.." +
                                "....." +
                                ".o..o";
            IEnumerable <Card> cards = new List <Card>()
            {
                Card.Dragon, Card.Rooster, Card.Goose, Card.Frog, Card.Mantis
            };
            var  cardNumbers = new[] { 0, 1, 2, 3, 4 };
            Game game        = new Game(player, null, GameUtil.ParseGameState(b, cards, 0, cardNumbers));
            Turn turn        = gameClient.GetTurn(game);

            game.PlayTurn(turn);
            Console.Out.WriteLine($"Score: {absGameClient.GameResult:0.000000}");
            Console.Out.WriteLine(AlphaBetaSearch.GetStats());
            Console.Out.WriteLine(statsCollector.GetReport());
            Console.Out.WriteLine(turn);
            Console.Out.WriteLine(game.ToString());
        }
        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
                       };
        }
Exemple #8
0
 public void Run()
 {
     Console.WriteLine(CurrentState.ToString());
     while (true)
     {
         if (TestWin())
         {
             return;
         }
         Console.WriteLine(SelectTargetString);
         Console.WriteLine(XyPositionString);
         var fromX = Convert.ToInt16(Console.ReadKey().KeyChar.ToString());
         var fromY = Convert.ToInt16(Console.ReadKey().KeyChar.ToString());
         Console.WriteLine(SelecttargetLocationString);
         Console.WriteLine(XyPositionString);
         var toX        = Convert.ToInt16(Console.ReadKey().KeyChar.ToString());
         var toY        = Convert.ToInt16(Console.ReadKey().KeyChar.ToString());
         var moveStatus = this.HandleUserMove(CurrentState, fromX, fromY, toX, toY);
         if (moveStatus == Move.MoveStatus.NoError)
         {
             Console.WriteLine(CurrentState);
             if (TestWin())
             {
                 return;
             }
             Console.WriteLine("Now it's Computer's turn... ");
             CurrentState = (AlphaBetaSearch.DoSearch(CurrentState, 1));
         }
         Console.Clear();
         Console.WriteLine(CurrentState.ToString());
     }
 }
Exemple #9
0
        public void testAlphaBetaDecision()
        {
            AlphaBetaSearch <TicTacToeState, XYLocation, string> search = AlphaBetaSearch <TicTacToeState, XYLocation, string> .createFor(game);

            search.makeDecision(state);
            int expandedNodes = search.getMetrics().getInt(MinimaxSearch <TicTacToeState, XYLocation, string> .METRICS_NODES_EXPANDED);

            Assert.AreEqual(30709, expandedNodes);
        }
        public void GetUniqueIdentifier_should_returnDifferentValueForDifferentInTurnPlayer_2()
        {
            var b = ".OK.." +
                    "...O." +
                    ".o..O" +
                    "....." +
                    "o.k..";

            AlphaBetaSearch.GetUniqueIdentifier(GameUtil.ParseGameState(b, inTurnPlayerIndex: 0)).Should().NotBe(AlphaBetaSearch.GetUniqueIdentifier(GameUtil.ParseGameState(b, inTurnPlayerIndex: 1)));
        }
Exemple #11
0
        public HexCoordinate GetNextPlay(Andantino state)
        {
            // The first 2 turns do not matter, just return one action
            if (state.Turn <= 2)
            {
                return(state.GetValidPlacements()[0]);
            }

            PreviousSearchResults = AlphaBetaSearch.GetBestPlay(state, 4000L);
            return(PreviousSearchResults.BestMove);
        }
    private void Start()
    {
        End.SetActive(false);
        game = new Awale();

        //minimaxSearch = MinimaxSearch<State, int, int>.createFor(game);
        alphabetaSearch = AlphaBetaSearch <StateAwale, int, int> .createFor(game);

        CurrentState = game.getInitialState();

        CheckisTerminal();
    }
Exemple #13
0
 public void AI()
 {
     Console.WriteLine("__________________________AI STARTS_____________________________");
     var(bestScore, bestMove) = true ? IterativeDeepening.Start() : AlphaBetaSearch.NegaMax(2, Const.MIN_VALUE, Const.MAX_VALUE);
     if (bestMove == null)
     {
         Console.WriteLine("STALEMATE");
         GameStatus = Const.GAME_OVER;
         return;
     }
     Console.WriteLine(bestMove.ToString() + "\t-->\t" + bestScore);
     MakeMove(bestMove);
 }
        public void GetUniqueIdentifier_should_returnDifferentValuesForDifferentCards()
        {
            var b = "OOKOO" +
                    "....." +
                    "....." +
                    "....." +
                    "ookoo";
            var cards        = new[] { Card.Boar, Card.Cobra, Card.Dragon, Card.Eel, Card.Frog };
            var cardNumbers1 = new[] { 0, 1, 2, 3, 4 };
            var cardNumbers2 = new[] { 0, 1, 2, 4, 3 };

            AlphaBetaSearch.GetUniqueIdentifier(GameUtil.ParseGameState(b, cards, 0, cardNumbers1)).Should().NotBe(AlphaBetaSearch.GetUniqueIdentifier(GameUtil.ParseGameState(b, cards, 0, cardNumbers2)));
        }
        public void GetGameResult_RegressionTest2()
        {
            var b = "OOK.O" +
                    "...O." +
                    "....." +
                    ".o..." +
                    "o.koo";
            var cards       = new[] { Card.Boar, Card.Ox, Card.Tiger, Card.Dragon, Card.Eel };
            var cardNumbers = new[] { 0, 1, 2, 3, 4 };
            var game        = GameUtil.ParseGame(b, cards, 0, cardNumbers);
            var tup         = new AlphaBetaSearch(game, 6, new Evaluator(1.0, 0.0, 1.0, 1.0, 1.0, 1.0, 1.0, 0.0, 1.0), true, true, true).GetGameResult();

            tup.Item1.Should().BeApproximately(-0.192021, 0.000001);
        }
        public void GetGameResult_Should_CapturePawn()
        {
            var b = "OOK.O" +
                    "....." +
                    "....." +
                    "o..O." +
                    ".okoo";
            var cards       = new[] { Card.Frog, Card.Rabbit, Card.Monkey, Card.Tiger, Card.Boar };
            var cardNumbers = new[] { 0, 1, 2, 3, 4 };
            var game        = GameUtil.ParseGame(b, cards, 0, cardNumbers);
            var tup         = new AlphaBetaSearch(game, 1, new Evaluator(1, 0, 0, 0, 0, 0, 0, 0, 0)).GetGameResult();

            tup.Item1.Should().Be(0.25); // +1/4 in material
        }
        public void GetGameResult_Should_ReturnLosingWhenOpponentInDirectWinningPosition()
        {
            var b = "OO.OO" +
                    "....." +
                    "..K.." +
                    "....." +
                    "ookoo";
            var cards       = new[] { Card.Boar, Card.Dragon, Card.Eel, Card.Tiger, Card.Frog };
            var cardNumbers = new[] { 0, 1, 2, 3, 4 };
            var game        = GameUtil.ParseGame(b, cards, 0, cardNumbers);
            var tup         = new AlphaBetaSearch(game, 2, new IndifferentEvaluator()).GetGameResult();

            tup.Item1.Should().Be(AlphaBetaSearch.GameResultLosing);
        }
        public void GetGameResult_Should_ReturnUndecidedWhenNotInDirectWinningPosition()
        {
            var b = "OOK.O" +
                    "....." +
                    "..O.." +
                    "....." +
                    "ookoo";
            var cards       = new[] { Card.Boar, Card.Dragon, Card.Eel, Card.Rooster, Card.Frog };
            var cardNumbers = new[] { 0, 1, 2, 3, 4 };
            var game        = GameUtil.ParseGame(b, cards, 1, cardNumbers);
            var tup         = new AlphaBetaSearch(game, 1, new IndifferentEvaluator()).GetGameResult();

            tup.Item1.Should().Be(0); // value from indifferent evaluator
        }
        public void GetUniqueIdentifier_should_returnSameValueForMirroredBoards_3()
        {
            var b1 = "....K" +
                     "O...O" +
                     "....." +
                     "....." +
                     "oo..k";
            var b2 = "K...." +
                     "O...O" +
                     "....." +
                     "....." +
                     "k..oo";

            AlphaBetaSearch.GetUniqueIdentifier(GameUtil.ParseGameState(b1)).Should().Be(AlphaBetaSearch.GetUniqueIdentifier(GameUtil.ParseGameState(b2)));
        }
        public void GetGameResult_Should_ReturnLosingWhenOpponentInTwoStepWinningPosition()
        {
            // opponent winning in two steps: play Monkey, moving pawn to (2,2), then Tiger to capture base.
            var b = "OO.OO" +
                    "...K." +
                    "....." +
                    "....." +
                    "ok.oo";
            var cards       = new[] { Card.Frog, Card.Rabbit, Card.Monkey, Card.Tiger, Card.Eel };
            var cardNumbers = new[] { 0, 1, 2, 3, 4 };
            var game        = GameUtil.ParseGame(b, cards, 0, cardNumbers);
            var tup         = new AlphaBetaSearch(game, 4, new IndifferentEvaluator()).GetGameResult();

            tup.Item1.Should().Be(AlphaBetaSearch.GameResultLosing);
        }
        public void GetUniqueIdentifier_should_returnDifferentValueForBoardsWithPawnRemoved()
        {
            var b1 = "OOKOO" +
                     "....." +
                     "....." +
                     "....." +
                     "ookoo";
            var b2 = "OOKOO" +
                     "....." +
                     "....." +
                     "....." +
                     "ook.o";

            AlphaBetaSearch.GetUniqueIdentifier(GameUtil.ParseGameState(b1)).Should().NotBe(AlphaBetaSearch.GetUniqueIdentifier(GameUtil.ParseGameState(b2)));
        }
    public void SetupGame(int nb)
    {
        End.SetActive(false);
        allumettesTxt.text = "";
        IATxt.text         = "";

        game = new Nim(nb);
        //minimaxSearch = MinimaxSearch<List<int>, int, int>.createFor(game);
        alphabetaSearch = AlphaBetaSearch <NimState, int, int> .createFor(game);

        CurrentState       = game.getInitialState();
        allumettesTxt.text = "Allumettes restantes : " + CurrentState.allumettes.ToString();

        CheckisTerminal();
    }
        public void GetUniqueIdentifier_should_returnDifferentValueForBoardsWithPawnsInDIfferentPositions2()
        {
            var b1 = "OO..." +
                     "..K.." +
                     "...o." +
                     ".o..." +
                     "..k.o";
            var b2 = "OO..." +
                     "..K.." +
                     "...o." +
                     "..o.." +
                     "..k.o";

            AlphaBetaSearch.GetUniqueIdentifier(GameUtil.ParseGameState(b1)).Should().NotBe(AlphaBetaSearch.GetUniqueIdentifier(GameUtil.ParseGameState(b2)));
        }
        public void GetGameResult_Should_ReturnWinningWhenInDirectWinningPosition_North()
        {
            var b = "OOK.O" +
                    "....." +
                    "..O.." +
                    "....." +
                    "ookoo";
            var cards       = new[] { Card.Boar, Card.Dragon, Card.Eel, Card.Tiger, Card.Frog };
            var cardNumbers = new[] { 0, 1, 2, 3, 4 };
            var game        = GameUtil.ParseGame(b, cards, 1, cardNumbers);
            var tup         = new AlphaBetaSearch(game, 1, new IndifferentEvaluator()).GetGameResult();

            tup.Item1.Should().Be(AlphaBetaSearch.GameResultWinning);
            tup.Item2.Where(kvp => kvp.Value == AlphaBetaSearch.GameResultWinning).Select(kvp => kvp.Key).Should()
            .Contain(new Turn(game.InTurnPlayer, Card.Tiger, 1, PieceType.Pawn, new Vector(2, 2), new Vector(0, -2)));
        }
Exemple #25
0
    private void Start()
    {
        Nim game = new Nim(Matches);
        MinimaxSearch <NimState, int, int> minimaxSearch = MinimaxSearch <NimState, int, int> .createFor(game);

        AlphaBetaSearch <NimState, int, int> alphabetaSearch = AlphaBetaSearch <NimState, int, int> .createFor(game);

        NimState state   = game.getInitialState();
        int      action1 = -1;
        int      action2 = -1;

        action1 = minimaxSearch.makeDecision(state);
        action2 = alphabetaSearch.makeDecision(state);

        Debug.Log("Chosen action is " + action1 + " and node minimax " + minimaxSearch.getMetrics());
        Debug.Log("Chosen action is " + action2 + " and node alphabeta " + alphabetaSearch.getMetrics());
    }
        public void GetUniqueIdentifier_should_returnSameValuesForSameCardsInDifferentOrder()
        {
            var b = "O.KOO" +
                    "....." +
                    ".O..." +
                    "..oo." +
                    "..koo";
            var cards        = new[] { Card.Boar, Card.Cobra, Card.Dragon, Card.Eel, Card.Frog };
            var cardNumbers1 = new[] { 0, 1, 2, 3, 4 };
            var cardNumbers2 = new[] { 1, 0, 2, 3, 4 };
            var cardNumbers3 = new[] { 0, 1, 3, 2, 4 };
            var cardNumbers4 = new[] { 1, 0, 3, 2, 4 };

            AlphaBetaSearch.GetUniqueIdentifier(GameUtil.ParseGameState(b, cards, 0, cardNumbers1)).Should().Be(AlphaBetaSearch.GetUniqueIdentifier(GameUtil.ParseGameState(b, cards, 0, cardNumbers2)));
            AlphaBetaSearch.GetUniqueIdentifier(GameUtil.ParseGameState(b, cards, 0, cardNumbers1)).Should().Be(AlphaBetaSearch.GetUniqueIdentifier(GameUtil.ParseGameState(b, cards, 0, cardNumbers3)));
            AlphaBetaSearch.GetUniqueIdentifier(GameUtil.ParseGameState(b, cards, 0, cardNumbers1)).Should().Be(AlphaBetaSearch.GetUniqueIdentifier(GameUtil.ParseGameState(b, cards, 0, cardNumbers4)));
        }
Exemple #27
0
        static void startAlphaBetaDemo()
        {
            System.Console.WriteLine("ALPHA BETA DEMO\n");
            TicTacToeGame  game      = new TicTacToeGame();
            TicTacToeState currState = game.GetInitialState();
            IAdversarialSearch <TicTacToeState, XYLocation> search = AlphaBetaSearch <TicTacToeState, XYLocation, string>
                                                                     .createFor(game);

            while (!(game.IsTerminal(currState)))
            {
                System.Console.WriteLine(game.GetPlayer(currState) + "  playing ... ");
                XYLocation action = search.makeDecision(currState);
                currState = game.GetResult(currState, action);
                System.Console.WriteLine(currState);
            }
            System.Console.WriteLine("ALPHA BETA DEMO done");
        }
        public void GetGameResult_Should_ReturnWinningWhenInTwoStepWinningPosition()
        {
            // winning in two steps: play Monkey, moving pawn to (2,2), then Tiger to capture base.
            var b = "OO.OO" +
                    "...K." +
                    "....." +
                    "....." +
                    "ookoo";
            var cards       = new[] { Card.Boar, Card.Dragon, Card.Monkey, Card.Tiger, Card.Frog };
            var cardNumbers = new[] { 0, 1, 2, 3, 4 };
            var game        = GameUtil.ParseGame(b, cards, 1, cardNumbers);
            var tup         = new AlphaBetaSearch(game, 3, new IndifferentEvaluator()).GetGameResult();

            tup.Item1.Should().Be(AlphaBetaSearch.GameResultWinning);
            tup.Item2.Single(kvp => kvp.Value == AlphaBetaSearch.GameResultWinning).Key.Should()
            .Be(new Turn(game.InTurnPlayer, Card.Monkey, 0, PieceType.Pawn, new Vector(3, 3), new Vector(-1, -1)));
        }
        public void GetGameResult_Should_ReturnUndecidedWhenOpponentNotInDirectWinningPosition()
        {
            var b = "OOK.O" +
                    "....." +
                    "..O.." +
                    ".o..." +
                    "o.koo";
            var cards       = new[] { Card.Boar, Card.Elephant, Card.Eel, Card.Tiger, Card.Frog };
            var cardNumbers = new[] { 0, 1, 2, 3, 4 };
            var game        = GameUtil.ParseGame(b, cards, 0, cardNumbers);
            var tup         = new AlphaBetaSearch(game, 2, new IndifferentEvaluator()).GetGameResult();

            tup.Item1.Should().Be(0); // undecided
            // After the new rule, there are in fact multiple moves to take that lead to undecided in 2.
            // due to the nature of the ABS algorithm, not all branches will be explored, so a contains() check won't work.
            // tup.Item2.Single(kvp => kvp.Value == 0).Key.Should().Be(new Turn(game.InTurnPlayer, Card.Elephant, 1, PieceType.Pawn, new Vector(1, 1), new Vector(1, 1)));
        }
Exemple #30
0
        public void TestMovePieceSimple()
        {
            var states = new State();

            states = PieceMove.MovePiece(states, 7, 7, 4, 7);//user

            Debug.WriteLine(states.ToString());
            //states = PieceMove.MovePiece(states, 1, 2, 1, 9);//com
            states = (AlphaBetaSearch.DoSearch(states, 1));
            Debug.WriteLine(states.ToString());
            states = PieceMove.MovePiece(states, 0, 9, 1, 9);//user
            Debug.WriteLine(states.ToString());
            Assert.AreEqual(30, states.GetPieceList().Count);
            var piece = PieceFactory.GetPiece(23, 1, 9);

            Assert.AreEqual(typeof(Rook), piece.GetType());
        }
Exemple #31
0
    private void Start()
    {
        TTT game = new TTT();
        MinimaxSearch <StateTTT, int, int> minimaxSearch = MinimaxSearch <StateTTT, int, int> .createFor(game);

        AlphaBetaSearch <StateTTT, int, int> alphabetaSearch = AlphaBetaSearch <StateTTT, int, int> .createFor(game);

        StateTTT state = game.getInitialState();

        int action1 = -100000;
        int action2 = -100000;

        action1 = minimaxSearch.makeDecision(state);
        action2 = alphabetaSearch.makeDecision(state);

        Debug.Log("Chosen action is " + action1 + " and node minimax " + minimaxSearch.getMetrics());
        Debug.Log("Chosen action is " + action2 + " and node alphabeta " + alphabetaSearch.getMetrics());
    }