public Game NewGame(List <TournamentPlayer> players) { if (players.Count != 2) { throw new ArgumentException("Hearthstone games must have exactly 2 players"); } Game game = new Game(this); int numBonusCards = 0; foreach (TournamentPlayer templatePlayer in players) { if (templatePlayer.MainDeck.Count() != this.Starting_DeckSize) { throw new ArgumentException("Hearthstone decks must start with exactly 30 cards"); } Writable_GamePlayer newPlayer = new Writable_GamePlayer(templatePlayer); newPlayer.InitializeHealth(30); game.AddPlayer(newPlayer); // draw a bunch of cards from the player's deck DrawEffect drawEffect = new DrawEffect(new ConstantValueProvider <Writable_GamePlayer, Controlled>(newPlayer), DrawFromDeck_Provider.FromController(), new ConstantValueProvider <int, Controlled>(this.Starting_HandSize + numBonusCards)); drawEffect.ControllerID = newPlayer.GetID((Readable_GamePlayer)null); drawEffect.Process(game); // potentially draw a Coin too DrawEffect bonusCards = new DrawEffect(new ConstantValueProvider <Writable_GamePlayer, Controlled>(newPlayer), new ConstantValueProvider <ReadableCard, Controlled>(HearthstoneReferee.Coin), new ConstantValueProvider <int, Controlled>(numBonusCards)); bonusCards.ControllerID = newPlayer.GetID((Readable_GamePlayer)null); bonusCards.Process(game); // each player gets one more card than the previous and one additional Coin numBonusCards++; } return(game); }
public override void Process(Game game) { Writable_GamePlayer monsterController = this.monsterController_provider.GetValue(this, game, (Writable_GamePlayer)null); int numberToSpawn = this.countProvider.GetValue(this, game, default(int)); //monsterController.get List <ID <Readable_MonsterCard> > territory = monsterController.MonsterIDsInPlay.GetWritable(); for (int i = 0; i < numberToSpawn; i++) { Writable_MonsterCard monster = this.monsterToSpawn.Clone((Writable_MonsterCard)null); monster.ID = IDFactory.NewID(); monster.ControllerID = monsterController.GetID((Readable_GamePlayer)null); territory.Add(monster.GetID((Readable_MonsterCard)null)); game.AddCard(monster); } }