/// <summary> /// Builds the file To Generate Game Data /// </summary> /// <param name="divisions">All Division information</param> /// <param name="prizeLevels">All Prize Level information</param> /// <param name="gameInfo">All game Inforamtion</param> /// <param name="fileName">The full output file name and pat</param> public void buildGameData( Divisions.DivisionsModel divisions, PrizeLevels.PrizeLevels prizeLevels, GameSetup.GameSetupModel gameInfo, string fileName) { int numberOfDivisions = divisions.getNumberOfDivisions() + 1; List <int[]>[] divisionLevels = new List <int[]> [numberOfDivisions]; List <Thread> threads = new List <Thread>(); for (int i = 0; i < numberOfDivisions; i++) { int divisionIndex = i; Thread t; if (divisionIndex == numberOfDivisions - 1) { t = new Thread(() => divisionLevels[divisionIndex] = getDivisionLossingPermutations(gameInfo, prizeLevels).OrderBy(a => Guid.NewGuid()).ToList()); } else { t = new Thread(() => divisionLevels[divisionIndex] = getDivisionWinningPermutations(divisionIndex, gameInfo.totalPicks, (int)gameInfo.maxPermutations, divisions.getDivision(divisionIndex), prizeLevels).OrderBy(a => Guid.NewGuid()).ToList()); } t.Start(); threads.Add(t); } for (int i = 0; i < threads.Count; i++) { threads.ElementAt(i).Join(); } writeFile(fileName, divisionLevels, new List <string>()); }
/// <summary> /// Generates losing permutations for a game /// </summary> /// <param name="gameInfo">All game Information</param> /// <param name="prizeLevels">All prizeLevels</param> /// <returns>List of int arrays representing losing permutations</returns> private List <int[]> getDivisionLossingPermutations( GameSetup.GameSetupModel gameInfo, PrizeLevels.PrizeLevels prizeLevels ) { List <int[]> lossPermutations = new List <int[]>(); List <int> extraPicks = getExtraPicks(new int[1], prizeLevels).ToList(); List <int[]> baseLossconditions = new List <int[]>(); int numberOfPermutationsForNearWinAmount = (int)gameInfo.maxPermutations; if (gameInfo.isNearWin) { numberOfPermutationsForNearWinAmount = (int)(gameInfo.maxPermutations); baseLossconditions.AddRange(getBaseNearWinLossPermutations(gameInfo.nearWins, gameInfo.totalPicks, prizeLevels)); } else { int[] baseLoss = new int[gameInfo.totalPicks]; baseLossconditions.Add(baseLoss); } lossPermutations = getAllLossPermutations(baseLossconditions, prizeLevels, gameInfo.nearWins, numberOfPermutationsForNearWinAmount); List <int[]> Losses = lossPermutations.Take((int)gameInfo.maxPermutations).ToList(); return(Losses); }