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); }
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); }
private static RoboPlayerPlugin SetupRoboPlayer(RoboManager roboManager, String kiExecutable, bool relative) { RoboPlayerPlugin roboPlugin = RoboUtils.RegisterPlugin(roboManager, kiExecutable, relative); roboManager.ActivatePlugin(roboPlugin); return(roboPlugin); }
ToolStripMenuItem AddPluginToPlayerDropDown(RoboPlayerPlugin plugin) { ToolStripMenuItem item = playerToolStripMenuItem.DropDownItems.Add(plugin.Name) as ToolStripMenuItem; item.CheckOnClick = true; item.CheckedChanged += new EventHandler(item_CheckedChanged); return(item); }
public void DeactivatePlugin(RoboPlayerPlugin plugin) { if (plugin == null) { return; } plugin.Player = null; plugin.DeactivatePlugin(null); }
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(); }
public RoboPlayerPlugin ActivatePlugin(RoboPlayerPlugin plugin) { if (plugin == null) { return(null); } plugin.Player = new RoboPlayer(); plugin.Player.Name = plugin.Name; plugin.ActivatePlugin(null); return(plugin); }
// 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..."); }
// 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)); }