public GameDto GetGame(GameParametersDto parameters) { Random random = new Random(); var gameCards = _cardRepository.GetCardsForGame(parameters.ExpansionIDs).OrderBy(x => random.NextDouble()).ToList(); int numberOfEvents = (int)parameters.EventFrequency; if (parameters.EventFrequency == EventFrequencies.Random) { numberOfEvents = random.Next(3); } var kingdomCards = gameCards.Where(x => x.CardCategories.Any(y => y.Name == Constants.KINGDOM_CATEGORY)).ToList(); var supplyCards = kingdomCards.Take(10) .OrderBy(x => x.Expansion.Name) .ThenBy(x => x.Name); Card baneCard = null; Card youngWitchCard = supplyCards.FirstOrDefault(x => x.Name == "Young Witch"); if (youngWitchCard != null) { baneCard = kingdomCards.Skip(10) .FirstOrDefault(x => x.CoinCost == 2 || x.CoinCost == 3); youngWitchCard.DependentCards = new Card[] { baneCard }; } var eventsAndLandmarks = gameCards.Where(x => x.CardCategories.Any(y => y.Name == Constants.EVENT_CATEGORY)) .Take(numberOfEvents) .OrderBy(x => x.Expansion.Name) .ThenBy(x => x.Name); double prosperityExpandedProbability = parameters.ProsperityExpandedPercentage / 100.0; bool includeProsperityExpandedCards = random.NextDouble() <= prosperityExpandedProbability; double darkAgesShelterProbability = parameters.DarkAgesShelterPercentage / 100.0; bool includeDarkAgesShelters = random.NextDouble() <= darkAgesShelterProbability; var result = new GameDto() { Cards = _mapper.Map <IEnumerable <CardDto> >(supplyCards), Events = _mapper.Map <IEnumerable <CardDto> >(eventsAndLandmarks.Where(x => x.CardTypes.Any(y => y.Name == Constants.EVENT_TYPE))), Landmarks = _mapper.Map <IEnumerable <CardDto> >(eventsAndLandmarks.Where(x => x.CardTypes.Any(y => y.Name == Constants.LANDMARK_TYPE))), IncludeProsperityExpandedCards = includeProsperityExpandedCards, IncludeDarkAgesShelters = includeDarkAgesShelters }; return(result); }
public IActionResult Post([FromBody] GameParametersDto gameParameters) { return(ApiResult <GameDto> .GetSingle(_gameService.GetGame(gameParameters))); }