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); } }
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); }