public override bool Execute(Arguments arguments) { if (arguments.Count != 1 && arguments.Count != 5) { return(false); } var count = int.Parse(arguments["count"]); MediaLibrary.LoadSets(); MagicSet starterSet; MagicSet boosterSet1; MagicSet boosterSet2; MagicSet boosterSet3; if (arguments.Count == 1) { starterSet = MediaLibrary.RandomSet(); boosterSet1 = MediaLibrary.RandomSet(); boosterSet2 = MediaLibrary.RandomSet(); boosterSet3 = MediaLibrary.RandomSet(); } else { starterSet = MediaLibrary.GetSet(arguments["s"]); boosterSet1 = MediaLibrary.GetSet(arguments["b1"]); boosterSet2 = MediaLibrary.GetSet(arguments["b2"]); boosterSet3 = MediaLibrary.GetSet(arguments["b3"]); } Console.WriteLine("Starter: {0}\nBooster1: {1}\nBooster2: {2}\nBooster3: {3}\n", starterSet.Name, boosterSet1.Name, boosterSet2.Name, boosterSet3.Name); for (var i = 0; i < count; i++) { var starter = starterSet.GenerateTournamentPack(); var booster1 = boosterSet1.GenerateBoosterPack(); var booster2 = boosterSet2.GenerateBoosterPack(); var booster3 = boosterSet3.GenerateBoosterPack(); var library = new List <CardInfo>(); library.AddRange(starter); library.AddRange(booster1); library.AddRange(booster2); library.AddRange(booster3); var ratings = CardRatings.Merge(CardRatings.Merge(boosterSet2.Ratings, boosterSet3.Ratings), CardRatings.Merge(starterSet.Ratings, boosterSet1.Ratings)); var deck = DeckBuilder.BuildDeck(library, ratings); deck.LimitedCode = MagicSet.GetLimitedCode(starterSet.Name, new[] { boosterSet1.Name, boosterSet2.Name, boosterSet3.Name }); File.WriteAllBytes(Guid.NewGuid() + ".dec", DeckFile.Write(deck)); } return(true); }
private List <DraftPlayer> CreatePlayers(int playerCount, CardRatings ratings, bool includeHumanPlayer) { var aiStrategies = new Func <IDraftingStrategy>[] { () => new Forcing(ratings), () => new Greedy(ratings), }; var players = new List <DraftPlayer>(); for (var i = 0; i < playerCount; i++) { players.Add(new DraftPlayer { Strategy = aiStrategies[RandomEx.Next(10) >= 3 ? 0 : 1]() }); } if (includeHumanPlayer) { players[0] = new DraftPlayer { Strategy = _userInterface }; } return(players); }
public DraftResults Run(int playerCount, string[] sets, CardRatings ratings) { var players = CreatePlayers(playerCount, ratings, _userInterface != null); var boosters = CreateBoosters(sets, players); var round = 1; var direction = 1; // clockwise while (round <= 3) { var roundBoosters = boosters .Skip((round - 1) * players.Count) .Take(players.Count) .ToList(); var cardCount = roundBoosters[0].Count; while (cardCount > 0) { for (var playerIndex = 0; playerIndex < players.Count; playerIndex++) { var boosterIndex = (100 + playerIndex + direction * cardCount) % players.Count; var player = players[playerIndex]; var draftedCard = player.Strategy.PickCard(roundBoosters[boosterIndex], round); if (_userInterface != null && _userInterface.PlayerLeftDraft) { return(null); } player.Library.Add(draftedCard); roundBoosters[boosterIndex].Remove(draftedCard); } cardCount = roundBoosters[0].Count; } round++; direction = -direction; } return(new DraftResults(players)); }
private void NewTournament() { _cardRatings = LoadCardRatings(); _roundsLeft = CalculateRoundCount(); _players = CreatePlayers(); _type = _p.Type; switch (_type) { case TournamentType.Sealed: { CreateSealedDecks(); break; } case TournamentType.Draft: { CreateDraftDecks(); } break; } }
private CardRatings LoadCardRatings() { CardRatings merged = null; foreach (var setName in _p.BoosterPacks) { var ratings = MediaLibrary.GetSet(setName).Ratings; if (merged == null) { merged = ratings; } else { merged = CardRatings.Merge(merged, ratings); } } if (_p.TournamentPack == null) { return(merged); } return(CardRatings.Merge(merged, MediaLibrary.GetSet(_p.TournamentPack).Ratings)); }
protected DraftingStrategy(CardRatings ratings) { _ratings = ratings; }
public Greedy(CardRatings ratings) : base(ratings) { }
public Forcing(CardRatings ratings) : base(ratings) { }