Пример #1
0
        static void OnPrecalculateBoard(ref CardSet board, PrecalulateParam p)
        {
            CardSet lastBoard = new CardSet();

            if (p.Entries.Count > 0)
            {
                lastBoard.bits = p.Entries[p.Entries.Count - 1].CardSet;
            }
            p.NormSuit.Reset();
            CardSet nBoard = p.NormSuit.Convert(board);

            if (nBoard.bits > lastBoard.bits)
            {
                Entry newEntry;
                newEntry.CardSet = nBoard.bits;
                newEntry.Ahvo    = Calculate(nBoard);
                p.Entries.Add(newEntry);
            }
        }
Пример #2
0
        public static void Precalculate(int round)
        {
            if (round < 1 || round > 3)
            {
                throw new ApplicationException(string.Format("Wrong round: {0}", round));
            }
            Console.WriteLine("Generating LUT for round {0}...", round);

            string lutPath = GetLutPath(round);

            if (File.Exists(lutPath))
            {
                Console.WriteLine("LUT {0} already exists, won't overwrite. Delete to create a new LUT.", lutPath);
                return;
            }
            PrecalulateParam p = new PrecalulateParam();
            int boardSize      = HeHelper.RoundToHandSize[round] - 2;

            CardEnum.Combin(StdDeck.Descriptor, boardSize, CardSet.Empty, CardSet.Empty, OnPrecalculateBoard, p);
            Entry[] lut = p.Entries.ToArray();
            WriteLut(lut, lutPath);
            Console.WriteLine("LUT {0} created.", lutPath);
        }