public void CalculateAvailableForQueen_ThreeBlackCheckers_Should_Have_5_Paths()
        {
            //  Arrange
            var mainPlayCheckers = new List <CheckerModel> {
                new CheckerModel(4, 6, PieceType.Queen, Side.White)
            };
            var secondPlayerCheckers = new List <CheckerModel>()
            {
                new CheckerModel(2, 4, PieceType.Checker, Side.Black),
                new CheckerModel(1, 1, PieceType.Checker, Side.Black),
                new CheckerModel(6, 4, PieceType.Checker, Side.Black),
            };
            DataProvider dataProvider = new DataProvider(mainPlayCheckers, secondPlayerCheckers);
            var          mainPlayer   = new MainPlayer(dataProvider, Side.White);
            var          robotPlayer  = new RobotPlayer(dataProvider, Side.Black);
            var          emptyPlayer  = new EmptyUserPlayer(dataProvider);
            var          game         = new RussianCheckers.Core.Game(mainPlayer, robotPlayer, emptyPlayer, dataProvider);

            //  Act
            game.ReCalculateNeighborsAndPaths();

            //  Assert
            var availablePaths = mainPlayer.CalculateAvailablePaths();

            Assert.AreEqual(5, availablePaths.Count());
        }
Пример #2
0
    //读取机器人配置
    void ReadQualifyingRobot()
    {
        string text = ResourceLoadManager.Instance.GetConfigText(name2);
        if (text == null)
        {
            Debug.LogError("LoadConfig failed: " + name2);
            return;
        }
        
        RobotPlayerData.Clear();
        XmlDocument xmlDoc = CommonFunction.LoadXmlConfig(GlobalConst.DIR_XML_QUALIFYING_ROBOT, text);
        XmlNodeList nodelist = xmlDoc.SelectSingleNode("Data").ChildNodes;
        foreach (XmlElement xe in nodelist)
        {
            uint min, max;
            if (CommonFunction.IsCommented(xe))
                continue;
            RobotTeam data = new RobotTeam();
            string ranking = xe.SelectSingleNode("ranking").InnerText;
            if (ranking.IndexOf(",") == -1)
            {
                min = uint.Parse(ranking);
                max = uint.Parse(ranking);
            }
            else
            {
                string[] temp = ranking.Split(',');
                min = uint.Parse(temp[0]);
                max = uint.Parse(temp[1]);
            }
            data.rank_min = min;
            data.rank_max = max;
            data.AI_id = uint.Parse(xe.SelectSingleNode("AI").InnerText);
            data.level = uint.Parse(xe.SelectSingleNode("level").InnerText);
            string modify = xe.SelectSingleNode("modify").InnerText;
            string[] sep = modify.Split('&');
            if (sep.Length == 2)
            {
                data.basic = uint.Parse(sep[0]);
                data.hedging = float.Parse(sep[1]);
            }
            else
            {
                data.basic = 0;
                data.hedging = 1;
            }

            for (int i = 0; i < 3; i++)
            {
                string star = "star" + (i + 1);
                //string aptitude = "aptitude" + (i + 1);
                RobotPlayer player = new RobotPlayer();
                player.star = uint.Parse(xe.SelectSingleNode(star).InnerText);
                //player.aptitude = uint.Parse(xe.SelectSingleNode(aptitude).InnerText);
                data.robotTeam.Add(player);
            }
            RobotPlayerData.Add(data);
        }

    }
        public void Checker_ConvertsTakeCheckerAndActsAsQueen_ShouldTakeSecondChecker()
        {
            //  Arrange
            var mainPlayCheckers = new List <CheckerModel>()
            {
                new CheckerModel(5, 5, PieceType.Checker, Side.White),
            };
            var secondPlayerCheckers = new List <CheckerModel>()
            {
                new CheckerModel(4, 6, PieceType.Checker, Side.Black),
                new CheckerModel(1, 5, PieceType.Checker, Side.Black),
            };
            DataProvider dataProvider = new DataProvider(mainPlayCheckers, secondPlayerCheckers);
            var          mainPlayer   = new MainPlayer(dataProvider, Side.White);
            var          robotPlayer  = new RobotPlayer(dataProvider, Side.Black);
            var          emptyPlayer  = new EmptyUserPlayer(dataProvider);
            var          game         = new RussianCheckers.Core.Game(mainPlayer, robotPlayer, emptyPlayer, dataProvider);

            //  Act
            game.ReCalculateNeighborsAndPaths();

            //  Assert
            var availablePaths = mainPlayer.CalculateAvailablePaths();

            Assert.IsTrue(availablePaths.Any(x => x.Last.Value.Column == 0 && x.Last.Value.Row == 4));
        }
        public void GetWinnerSide_QueensMoved15TimesWithTaking_NoDraw()
        {
            //  Arrange
            var playerCheckersFirstPlayer = new List <CheckerModel> {
                new CheckerModel(0, 0, PieceType.Queen, Side.White)
            };
            var playerCheckersSecondPlayer = new List <CheckerModel> {
                new CheckerModel(7, 1, PieceType.Queen, Side.Black)
            };
            DataProvider dataProvider   = new DataProvider(playerCheckersFirstPlayer, playerCheckersSecondPlayer);
            var          mainPlayer     = new MainPlayer(dataProvider, Side.White);
            var          robotPlayer    = new RobotPlayer(dataProvider, Side.Black);
            var          actionsHistory = new Stack <HistoryMove>(GetHistoryActionsWithTaking(playerCheckersFirstPlayer.Single(), playerCheckersSecondPlayer.Single()));

            //  Act
            mainPlayer.CalculateNeighbors();
            robotPlayer.CalculateNeighbors();
            mainPlayer.CalculateAvailablePaths();
            robotPlayer.CalculateAvailablePaths();
            var  gameStatusChecker = new GameStatusChecker(mainPlayer, robotPlayer, actionsHistory);
            Side winnerSide        = gameStatusChecker.GetWinnerSide();

            //  Assert
            Assert.AreEqual(Side.None, winnerSide);
        }
        public void CalculateAvailableForQueen_SameBehaviorAsChecker_ShouldBe_23()
        {
            //  Arrange
            var mainPlayCheckers = new List <CheckerModel>()
            {
                new CheckerModel(4, 2, PieceType.Queen, Side.White),
            };
            var secondPlayerCheckers = new List <CheckerModel>()
            {
                new CheckerModel(3, 3, PieceType.Checker, Side.Black),
                new CheckerModel(5, 3, PieceType.Checker, Side.Black),
                new CheckerModel(3, 5, PieceType.Checker, Side.Black),
                new CheckerModel(5, 5, PieceType.Checker, Side.Black),
                new CheckerModel(1, 5, PieceType.Checker, Side.Black),
                new CheckerModel(5, 1, PieceType.Checker, Side.Black),
            };
            DataProvider dataProvider = new DataProvider(mainPlayCheckers, secondPlayerCheckers);
            var          mainPlayer   = new MainPlayer(dataProvider, Side.White);
            var          robotPlayer  = new RobotPlayer(dataProvider, Side.Black);
            var          emptyPlayer  = new EmptyUserPlayer(dataProvider);
            var          game         = new RussianCheckers.Core.Game(mainPlayer, robotPlayer, emptyPlayer, dataProvider);

            //  Act
            game.ReCalculateNeighborsAndPaths();

            //  Assert
            var availablePaths = mainPlayer.CalculateAvailablePaths();

            Assert.AreEqual(23, availablePaths.Count());
        }
    static int FindLast(IntPtr L)
    {
        LuaScriptMgr.CheckArgsCount(L, 2);
        List <RobotPlayer>      obj  = (List <RobotPlayer>)LuaScriptMgr.GetNetObjectSelf(L, 1, "List<RobotPlayer>");
        Predicate <RobotPlayer> arg0 = null;
        LuaTypes funcType2           = LuaDLL.lua_type(L, 2);

        if (funcType2 != LuaTypes.LUA_TFUNCTION)
        {
            arg0 = (Predicate <RobotPlayer>)LuaScriptMgr.GetNetObject(L, 2, typeof(Predicate <RobotPlayer>));
        }
        else
        {
            LuaFunction func = LuaScriptMgr.GetLuaFunction(L, 2);
            arg0 = (param0) =>
            {
                int top = func.BeginPCall();
                LuaScriptMgr.PushObject(L, param0);
                func.PCall(top, 1);
                object[] objs = func.PopValues(top);
                func.EndPCall(top);
                return((bool)objs[0]);
            };
        }

        RobotPlayer o = obj.FindLast(arg0);

        LuaScriptMgr.PushObject(L, o);
        return(1);
    }
        public void CalculateAvailablePaths_Returns_Paths_MaxIs_9()
        {
            //  Arrange
            var mainPlayCheckers = new List <CheckerModel>()
            {
                new CheckerModel(4, 2, PieceType.Checker, Side.White),
            };
            var secondPlayerCheckers = new List <CheckerModel>()
            {
                new CheckerModel(3, 3, PieceType.Checker, Side.Black),
                new CheckerModel(5, 3, PieceType.Checker, Side.Black),
                new CheckerModel(3, 5, PieceType.Checker, Side.Black),
                new CheckerModel(5, 5, PieceType.Checker, Side.Black),
                new CheckerModel(1, 5, PieceType.Checker, Side.Black),
            };

            DataProvider dataProvider = new DataProvider(mainPlayCheckers, secondPlayerCheckers);

            var mainPlayer  = new MainPlayer(dataProvider, Side.White);
            var robotPlayer = new RobotPlayer(dataProvider, Side.Black);
            var emptyPlayer = new EmptyUserPlayer(dataProvider);

            //  Act
            var game = new RussianCheckers.Core.Game(mainPlayer, robotPlayer, emptyPlayer, dataProvider);

            game.ReCalculateNeighborsAndPaths();
            var availablePathsForWhite = mainPlayer.CalculateAvailablePaths();

            //  Assert
            Assert.AreEqual(9, availablePathsForWhite.Max(x => x.Count));
        }
    static int Add(IntPtr L)
    {
        LuaScriptMgr.CheckArgsCount(L, 2);
        List <RobotPlayer> obj  = (List <RobotPlayer>)LuaScriptMgr.GetNetObjectSelf(L, 1, "List<RobotPlayer>");
        RobotPlayer        arg0 = (RobotPlayer)LuaScriptMgr.GetNetObject(L, 2, typeof(RobotPlayer));

        obj.Add(arg0);
        return(0);
    }
Пример #9
0
    /*
     * Constructor
     * param boardViewer Reference to its viewer
     */
    public BoardPresenter(BoardViewer boardViewer)
    {
        model  = new BoardModel();
        viewer = boardViewer;
        turn   = BoardModel.SquareType.CROSS;

        // Starts robot as opposite player
        robot = new RobotPlayer(BoardModel.swapType(GameSettings.Instance.humanSide));
    }
Пример #10
0
    static int Insert(IntPtr L)
    {
        LuaScriptMgr.CheckArgsCount(L, 3);
        List <RobotPlayer> obj = (List <RobotPlayer>)LuaScriptMgr.GetNetObjectSelf(L, 1, "List<RobotPlayer>");
        int         arg0       = (int)LuaScriptMgr.GetNumber(L, 2);
        RobotPlayer arg1       = (RobotPlayer)LuaScriptMgr.GetNetObject(L, 3, typeof(RobotPlayer));

        obj.Insert(arg0, arg1);
        return(0);
    }
Пример #11
0
    static int Remove(IntPtr L)
    {
        LuaScriptMgr.CheckArgsCount(L, 2);
        List <RobotPlayer> obj  = (List <RobotPlayer>)LuaScriptMgr.GetNetObjectSelf(L, 1, "List<RobotPlayer>");
        RobotPlayer        arg0 = (RobotPlayer)LuaScriptMgr.GetNetObject(L, 2, typeof(RobotPlayer));
        bool o = obj.Remove(arg0);

        LuaScriptMgr.Push(L, o);
        return(1);
    }
Пример #12
0
    static int get_Item(IntPtr L)
    {
        LuaScriptMgr.CheckArgsCount(L, 2);
        List <RobotPlayer> obj = (List <RobotPlayer>)LuaScriptMgr.GetNetObjectSelf(L, 1, "List<RobotPlayer>");
        int         arg0       = (int)LuaScriptMgr.GetNumber(L, 2);
        RobotPlayer o          = obj[arg0];

        LuaScriptMgr.PushObject(L, o);
        return(1);
    }
Пример #13
0
        public MainWindow()
        {
            InitializeComponent();
            var dialogService = new DialogService(this);

            dialogService.Register <NotificationDialogViewModel, NotificationDialog>();
            dialogService.Register <ChooseDialogViewModel, ChooseSideDialog>();


            SourceInitialized += (sender, args) =>
            {
                var chooseDialogViewModel = new ChooseDialogViewModel();
                dialogService.ShowDialog(chooseDialogViewModel);
                Side userSide = chooseDialogViewModel.Side;
////                Side userSide = Side.White;
//
//                var mainPlayCheckers = new List<CheckerModel>()
//                {
//                    new CheckerModel(1, 1, PieceType.Checker, Side.Black),
//                    new CheckerModel(1, 3, PieceType.Checker, Side.Black),
//                    new CheckerModel(3, 3, PieceType.Checker, Side.Black),
//                    new CheckerModel(5, 3, PieceType.Checker, Side.Black),
//                    new CheckerModel(7, 1, PieceType.Checker, Side.Black),
//                };
//                var secondPlayerCheckers = new List<CheckerModel>()
//                {
//                    new CheckerModel(4, 4, PieceType.Checker, Side.White),
//                };
//            DataProvider dataProvider = new DataProvider(mainPlayCheckers, secondPlayerCheckers);
//            var mainPlayer = new MainPlayer(dataProvider, Side.Black);
//            var robotPlayer = new RobotPlayer(dataProvider, Side.White, new MinMaxStrategy());
//            var emptyPlayer = new EmptyUserPlayer(dataProvider);

                var dataProvider = new DataProvider(userSide);
                var mainPlayer   = new MainPlayer(dataProvider, userSide);
                var robotPlayer  = new RobotPlayer(dataProvider, userSide == Side.White? Side.Black:Side.White, new MinMaxStrategy());
                var emptyPlayer  = new EmptyUserPlayer(dataProvider);

                var game = new Core.Game(mainPlayer, robotPlayer, emptyPlayer, dataProvider);
                game.ReCalculateNeighborsAndPaths();



                this.DataContext = new GameViewModel(game, dialogService, true);
            };
        }
        public void GetWinnerSide_PlayersHasNotPlayablePaths_Draw()
        {
            //  Arrange
            var playerCheckersFirstPlayer = new List <CheckerModel> {
                new CheckerModel(1, 1, PieceType.Checker, Side.White)
            };
            var playerCheckersSecondPlayer = new List <CheckerModel> {
                new CheckerModel(7, 7, PieceType.Checker, Side.Black)
            };
            DataProvider dataProvider = new DataProvider(playerCheckersFirstPlayer, playerCheckersSecondPlayer);
            var          mainPlayer   = new MainPlayer(dataProvider, Side.White);
            var          robotPlayer  = new RobotPlayer(dataProvider, Side.Black);

            //  Act
            var  gameStatusChecker = new GameStatusChecker(mainPlayer, robotPlayer, new Stack <HistoryMove>());
            Side winnerSide        = gameStatusChecker.GetWinnerSide();

            //  Assert
            Assert.AreEqual(Side.Draw, winnerSide);
        }
Пример #15
0
    static int BinarySearch(IntPtr L)
    {
        int count = LuaDLL.lua_gettop(L);

        if (count == 2)
        {
            List <RobotPlayer> obj  = (List <RobotPlayer>)LuaScriptMgr.GetNetObjectSelf(L, 1, "List<RobotPlayer>");
            RobotPlayer        arg0 = (RobotPlayer)LuaScriptMgr.GetNetObject(L, 2, typeof(RobotPlayer));
            int o = obj.BinarySearch(arg0);
            LuaScriptMgr.Push(L, o);
            return(1);
        }
        else if (count == 3)
        {
            List <RobotPlayer>      obj  = (List <RobotPlayer>)LuaScriptMgr.GetNetObjectSelf(L, 1, "List<RobotPlayer>");
            RobotPlayer             arg0 = (RobotPlayer)LuaScriptMgr.GetNetObject(L, 2, typeof(RobotPlayer));
            IComparer <RobotPlayer> arg1 = (IComparer <RobotPlayer>)LuaScriptMgr.GetNetObject(L, 3, typeof(IComparer <RobotPlayer>));
            int o = obj.BinarySearch(arg0, arg1);
            LuaScriptMgr.Push(L, o);
            return(1);
        }
        else if (count == 5)
        {
            List <RobotPlayer> obj       = (List <RobotPlayer>)LuaScriptMgr.GetNetObjectSelf(L, 1, "List<RobotPlayer>");
            int                     arg0 = (int)LuaScriptMgr.GetNumber(L, 2);
            int                     arg1 = (int)LuaScriptMgr.GetNumber(L, 3);
            RobotPlayer             arg2 = (RobotPlayer)LuaScriptMgr.GetNetObject(L, 4, typeof(RobotPlayer));
            IComparer <RobotPlayer> arg3 = (IComparer <RobotPlayer>)LuaScriptMgr.GetNetObject(L, 5, typeof(IComparer <RobotPlayer>));
            int                     o    = obj.BinarySearch(arg0, arg1, arg2, arg3);
            LuaScriptMgr.Push(L, o);
            return(1);
        }
        else
        {
            LuaDLL.luaL_error(L, "invalid arguments to method: List<RobotPlayer>.BinarySearch");
        }

        return(0);
    }
Пример #16
0
    static int LastIndexOf(IntPtr L)
    {
        int count = LuaDLL.lua_gettop(L);

        if (count == 2)
        {
            List <RobotPlayer> obj  = (List <RobotPlayer>)LuaScriptMgr.GetNetObjectSelf(L, 1, "List<RobotPlayer>");
            RobotPlayer        arg0 = (RobotPlayer)LuaScriptMgr.GetNetObject(L, 2, typeof(RobotPlayer));
            int o = obj.LastIndexOf(arg0);
            LuaScriptMgr.Push(L, o);
            return(1);
        }
        else if (count == 3)
        {
            List <RobotPlayer> obj  = (List <RobotPlayer>)LuaScriptMgr.GetNetObjectSelf(L, 1, "List<RobotPlayer>");
            RobotPlayer        arg0 = (RobotPlayer)LuaScriptMgr.GetNetObject(L, 2, typeof(RobotPlayer));
            int arg1 = (int)LuaScriptMgr.GetNumber(L, 3);
            int o    = obj.LastIndexOf(arg0, arg1);
            LuaScriptMgr.Push(L, o);
            return(1);
        }
        else if (count == 4)
        {
            List <RobotPlayer> obj  = (List <RobotPlayer>)LuaScriptMgr.GetNetObjectSelf(L, 1, "List<RobotPlayer>");
            RobotPlayer        arg0 = (RobotPlayer)LuaScriptMgr.GetNetObject(L, 2, typeof(RobotPlayer));
            int arg1 = (int)LuaScriptMgr.GetNumber(L, 3);
            int arg2 = (int)LuaScriptMgr.GetNumber(L, 4);
            int o    = obj.LastIndexOf(arg0, arg1, arg2);
            LuaScriptMgr.Push(L, o);
            return(1);
        }
        else
        {
            LuaDLL.luaL_error(L, "invalid arguments to method: List<RobotPlayer>.LastIndexOf");
        }

        return(0);
    }
        public void GetWinnerSide_WhitePlayerHasNoAvailableMoves_BlackPlayerVictory()
        {
            //  Arrange
            var playerCheckersFirstPlayer = new List <CheckerModel> {
                new CheckerModel(0, 6, PieceType.Checker, Side.White)
            };
            var playerCheckersSecondPlayer = new List <CheckerModel> {
                new CheckerModel(1, 7, PieceType.Checker, Side.Black)
            };
            DataProvider dataProvider = new DataProvider(playerCheckersFirstPlayer, playerCheckersSecondPlayer);
            var          mainPlayer   = new MainPlayer(dataProvider, Side.White);
            var          robotPlayer  = new RobotPlayer(dataProvider, Side.Black);

            //  Act
            mainPlayer.CalculateNeighbors();
            robotPlayer.CalculateNeighbors();
            mainPlayer.CalculateAvailablePaths();
            robotPlayer.CalculateAvailablePaths();
            var  gameStatusChecker = new GameStatusChecker(mainPlayer, robotPlayer, new Stack <HistoryMove>());
            Side winnerSide        = gameStatusChecker.GetWinnerSide();

            //  Assert
            Assert.AreEqual(Side.Black, winnerSide);
        }
Пример #18
0
 public static IEnumerable <Type> KnownTypes()
 {
     return(RobotPlayer.Types().Concat(RobotStratedies.Types()).Concat(new [] { typeof(HumanPlayer), typeof(Mexican) }));
 }
Пример #19
0
 public RobotPlayerViewModel(RobotPlayer robotPlayer, List <CheckerElementViewModel> emptyCheckerViewModelsAsPossible) : base(robotPlayer, emptyCheckerViewModelsAsPossible)
 {
     _robotPlayer = robotPlayer;
 }