示例#1
0
        public async Task <ActionResult> Sort(DeckDetailResponse deck)
        {
            if (ModelState.IsValid)
            {
                deck = await service.Sorting(deck);
            }

            return(RedirectToAction("Index"));
        }
示例#2
0
        public async Task <ActionResult> Details(DeckDetailResponse deck)
        {
            if (ModelState.IsValid)
            {
                deck = await service.Mixing(deck);
            }

            return(View(deck));
        }
示例#3
0
        /// <summary>
        /// сохранить новый порядок карт
        /// </summary>
        /// <param name="deck"></param>
        /// <returns></returns>
        private async Task SaveMixingDeck(DeckDetailResponse deck)
        {
            using (var db = new DeckContext())
            {
                var exist = await db.Decks.FindAsync(deck.Id);

                if (exist != null)
                {
                    exist.CardsIds   = deck.CardsIds;
                    exist.DateModify = DateTime.UtcNow;
                    await db.SaveChangesAsync();
                }
            }
        }
示例#4
0
        /// <summary>
        /// сортировка карт по умолчанию
        /// </summary>
        /// <param name="deck"></param>
        /// <returns></returns>
        public async Task <DeckDetailResponse> Sorting(DeckDetailResponse deck)
        {
            var tempManual = deck.Manual;
            var tempCount  = deck.ManualCount;

            deck = await GetDeckDetailById(deck.Id);

            deck.Cards    = deck.Cards.OrderBy(x => x.SuitTitle).ThenBy(x => x.ValueTitle).ToList();
            deck.CardsIds = deck.Cards.Select(x => x.Id).ToList().SerializeToJson();
            await SaveMixingDeck(deck);

            deck.Manual      = tempManual;
            deck.ManualCount = tempCount;

            return(deck);
        }
示例#5
0
        /// <summary>
        /// имитация ручного перемешивания приблизительно по половине
        /// </summary>
        /// <param name="deck"></param>
        /// <returns></returns>
        private async Task MixingManual(DeckDetailResponse deck)
        {
            var tempCards = new List <CardResponse>();
            var cardsIds  = new JsonSerializer().Deserialize <List <long> >
                                (new JsonTextReader
                                    (new StringReader(deck.CardsIds)));
            var count = cardsIds.Count;

            for (int i = 0; i < deck.ManualCount; i++)
            {
                var random   = new Random();
                var minCount = Convert.ToInt32(count * 0.4);
                var maxCount = Convert.ToInt32(count * 0.6);
                var cnt      = random.Next(minCount, maxCount);
                tempCards = deck.Cards.GetRange(0, cnt);
                deck.Cards.RemoveRange(0, cnt);
                deck.Cards.AddRange(tempCards);
            }
            deck.CardsIds = deck.Cards.Select(x => x.Id).ToList().SerializeToJson();
        }
示例#6
0
        /// <summary>
        /// перемешать карты
        /// </summary>
        /// <param name="deck"></param>
        /// <returns></returns>
        public async Task <DeckDetailResponse> Mixing(DeckDetailResponse deck)
        {
            var tempManual = deck.Manual;
            var tempCount  = deck.ManualCount;

            deck = await GetDeckDetailById(deck.Id);

            if (tempManual)
            {
                await MixingManual(deck);
            }
            else
            {
                await MixingAuto(deck);
            }
            await SaveMixingDeck(deck);

            deck.Manual      = tempManual;
            deck.ManualCount = tempCount;

            return(deck);
        }
示例#7
0
 /// <summary>
 /// случайное перемешивание
 /// </summary>
 /// <param name="deck"></param>
 /// <returns></returns>
 private async Task MixingAuto(DeckDetailResponse deck)
 {
     deck.Cards    = deck.Cards.OrderBy(a => Guid.NewGuid()).ToList();
     deck.CardsIds = deck.Cards.Select(x => x.Id).ToList().SerializeToJson();
 }
 public async Task <DeckDetailResponse> Sort(DeckDetailResponse deck)
 {
     return(await _deckService.Sorting(deck));
 }
 public async Task <DeckDetailResponse> Details(DeckDetailResponse deck)
 {
     return(await _deckService.Mixing(deck));
 }