Пример #1
0
        private void RoboPlayerCallback(RoboPlayerPlugin plugin, RoboCard[] chosenCards, Exception ex)
        {
            RoboPlayer player = plugin.Player;

            if (player == null || !ActivePlayers.Contains(plugin))
            {
                return;
            }
            if (player.PlayerState != RoboPlayerState.Thinking || ex != null)
            {
                player.PlayerState = RoboPlayerState.Error;
            }
            else
            {
                if (player.EndRound(chosenCards))
                {
                    player.PlayerState = RoboPlayerState.Decided;
                }
                else
                {
                    player.PlayerState = RoboPlayerState.Error;
                }
            }

            Action playingCards = DoPlayingCards;

            playingCards.BeginInvoke(null, playingCards);
        }
Пример #2
0
        RoboPlayerPlugin playerActivationChanged(String playerName, Boolean activated)
        {
            RoboPlayerPlugin plugin = null;

            if (activated)
            {
                plugin = RoboManager.ActivatePlugin(playerName);
                plugin.Player.Position.PropertyChanged += Position_PropertyChanged;

                RoboPlayerControl control = new RoboPlayerControl();
                control.RoboPlayer = plugin.Player;
                playerPanel.Controls.Add(control);
            }
            else
            {
                plugin = RoboManager.ActivePlayers.FirstOrDefault(elem => elem.Name == playerName);
                if (plugin != null)
                {
                    plugin.Player.Position.PropertyChanged -= Position_PropertyChanged;
                    RoboPlayerControl playerControl = playerPanel.Controls
                                                      .Cast <RoboPlayerControl>()
                                                      .FirstOrDefault(control => control.RoboPlayer == plugin.Player);
                    if (playerControl != null)
                    {
                        playerPanel.Controls.Remove(playerControl);
                    }
                }
                RoboManager.DeactivatePlugin(playerName);
            }
            return(plugin);
        }
Пример #3
0
        private static RoboPlayerPlugin SetupRoboPlayer(RoboManager roboManager, String kiExecutable, bool relative)
        {
            RoboPlayerPlugin roboPlugin = RoboUtils.RegisterPlugin(roboManager, kiExecutable, relative);

            roboManager.ActivatePlugin(roboPlugin);
            return(roboPlugin);
        }
Пример #4
0
        ToolStripMenuItem AddPluginToPlayerDropDown(RoboPlayerPlugin plugin)
        {
            ToolStripMenuItem item = playerToolStripMenuItem.DropDownItems.Add(plugin.Name) as ToolStripMenuItem;

            item.CheckOnClick    = true;
            item.CheckedChanged += new EventHandler(item_CheckedChanged);
            return(item);
        }
Пример #5
0
        public void DeactivatePlugin(RoboPlayerPlugin plugin)
        {
            if (plugin == null)
            {
                return;
            }

            plugin.Player = null;
            plugin.DeactivatePlugin(null);
        }
Пример #6
0
        private void loadKIToolStripMenuItem_Click(object sender, EventArgs e)
        {
            if (openKIFileDialog.ShowDialog(this) != DialogResult.OK || openKIFileDialog.FileName.IsNullOrEmpty())
            {
                return;
            }

            RoboPlayerPlugin roboPlugin = RoboUtils.RegisterPlugin(RoboManager, openKIFileDialog.FileName);

            ToolStripMenuItem item = AddPluginToPlayerDropDown(roboPlugin);

            item.PerformClick();
        }
Пример #7
0
        public RoboPlayerPlugin ActivatePlugin(RoboPlayerPlugin plugin)
        {
            if (plugin == null)
            {
                return(null);
            }

            plugin.Player      = new RoboPlayer();
            plugin.Player.Name = plugin.Name;
            plugin.ActivatePlugin(null);

            return(plugin);
        }
Пример #8
0
        // MonoRobots.exe --play <relative_ki> <relative_board> <difficulty?>
        private static void PlayGame(String kiPath, String boardPath, Difficulty difficulty)
        {
            RoboManager      roboManager = SetupRoboManager();
            RoboPlayerPlugin roboPlugin  = SetupRoboPlayer(roboManager, kiPath, true);
            RoboBoard        board       = RoboUtils.LoadBoard(boardPath, true, difficulty);

            Console.WriteLine("Start...");

            ExecuteGame(roboManager, board, RoboUtils.CreateCardPile());

            Console.Write(GetResults(roboManager));
            Console.WriteLine("End...");
        }
Пример #9
0
        // MonoRobots.exe --stats <relative_ki> <relative_boards> <relative_decks>
        private static void Statistics(String kiPath, String boardsPath, String decksPath, Difficulty difficulty)
        {
            RoboManager roboManager = SetupRoboManager();

            Dictionary <String, Dictionary <String, List <RoboPlayerResult> > > allResults = new Dictionary <String, Dictionary <String, List <RoboPlayerResult> > >();

            int roundsPlayedInTotal = 0;

            foreach (String boardFileName in getFileEnumerable(boardsPath))
            {
                RoboBoard board = RoboUtils.LoadBoard(boardFileName, true, difficulty);
                foreach (String pluginPath in getFileEnumerable(kiPath))
                {
                    RoboPlayerPlugin roboPlugin = SetupRoboPlayer(roboManager, pluginPath, true);

                    Dictionary <String, List <RoboPlayerResult> > boardResults = new Dictionary <String, List <RoboPlayerResult> >();
                    allResults[boardFileName] = boardResults;
                    List <RoboPlayerResult> playerResults = new List <RoboPlayerResult>();
                    boardResults.Add(pluginPath, playerResults);

                    foreach (String deckFileName in getFileEnumerable(decksPath))
                    {
                        RoboCard[] pile = RoboUtils.LoadCardDeck(deckFileName);
                        ExecuteGame(roboManager, board, pile);
                        roundsPlayedInTotal++;

                        RoboPlayerResult singleStat = new RoboPlayerResult(roboPlugin.Player);
                        playerResults.Add(singleStat);
                    }

                    roboManager.DeactivatePlugin(roboPlugin);
                }
            }

            Console.WriteLine("RoundsPlayed: " + roundsPlayedInTotal);
            Console.Write(GetFormattedStatistics(allResults));
        }