public static List <Card> GetOpeningCards(long state, bool player, bool noRare = false) { int zellCard = 105; int rareLimit = 10; int[] levels = { 1, 2, 4, 5 }; CardRng cardRng = new CardRng(state, SearchType.First); List <Card> cards = new List <Card>(); List <Card> allCards = CreateCardTable(); if (cardRng.State % 100 < rareLimit) { cards.Add(allCards.Single(s => s.ID == zellCard)); } while (cards.Count < 5) { int level = levels[cardRng.State % levels.Length]; long row1 = cardRng.State % 11; cardRng.GetNextState(); long cardIndex = (level - 1) * 11 + row1; cards.Add(allCards.Single(s => s.ID == cardIndex)); } return(cards); }
public static CardRng BeginManip(string[] args) { ParseArguments(args); CardRng rng = new CardRng(InputArguments.FirstState.ToInitialState(), args.Length > 1 ? SearchType.First : SearchType.Recovery); if (args.Length > 1) { for (int i = 0; i < InputArguments.Count; i++) { rng.GetNextState(); } } StartScan(rng.State, SearchType.Counting); return(rng); }
public static List <CardFormation> CreateOpeningTable(long from, long to, QuistisPattern pattern, SearchType type = SearchType.First, int increment = 0) { long size = to + 1; List <long> rngStateArray = new List <long>(); switch (type) { case SearchType.First: //CardRng cardRng = new CardRng(null, SearchType.First); break; case SearchType.Counting: CardRng cardRng = new CardRng(pattern.ToInitialState(), SearchType.Counting); long maxIndex = InputArguments.Count.Value + Settings.CountingWidth; for (int i = 0; i < maxIndex; i++) { cardRng.GetNextState(); rngStateArray.Add(cardRng.State + increment); } break; } int[] offsetArray = new int[Settings.CountingWidth]; switch (type) { case SearchType.Counting: offsetArray = new int[Settings.CountingWidth]; for (int i = 0; i < offsetArray.Length; i++) { offsetArray[i] = i - Settings.CountingWidth / 2; } break; } int index = -1; List <CardFormation> formations = new List <CardFormation>(); for (int i = 0; i <= to; i++) { if (i < from || i > to) { continue; } foreach (int offset in offsetArray) { var rngState = (rngStateArray[i] + offset) & 0xffff_ffff; formations.Add(new CardFormation { Cards = GetOpeningCards(rngState, true), Index = index, Offset = offset }); } } //foreach (int offset in offsetArray) //{ // index++; // long rngState = rngStateArray[index] + offset & 0xffff_ffff; // formations.Add(new CardFormation // { // Cards = GetOpeningCards(rngState, true), // Index = index, // Offset = offset // }); //} return(formations); }