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()); }
//读取机器人配置 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); }
/* * 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)); }
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); }
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); }
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); }
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); }
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); }
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); }
public static IEnumerable <Type> KnownTypes() { return(RobotPlayer.Types().Concat(RobotStratedies.Types()).Concat(new [] { typeof(HumanPlayer), typeof(Mexican) })); }
public RobotPlayerViewModel(RobotPlayer robotPlayer, List <CheckerElementViewModel> emptyCheckerViewModelsAsPossible) : base(robotPlayer, emptyCheckerViewModelsAsPossible) { _robotPlayer = robotPlayer; }