예제 #1
0
        /// <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>());
        }
예제 #2
0
        public bool OpenProject()
        {
            bool loadSuccessful = true;
            Microsoft.Win32.OpenFileDialog openDialog = new Microsoft.Win32.OpenFileDialog();
            openDialog.DefaultExt = DEFAULT_EXT;
            openDialog.Filter = FILTER;
            bool? result = openDialog.ShowDialog();
            bool isCorrectFileType = System.Text.RegularExpressions.Regex.IsMatch(openDialog.FileName, DEFAULT_EXT);

            if (result == true && isCorrectFileType) //User pressed OK and the extension is correct
            {
                loadSuccessful = true;
                projectFileName = openDialog.FileName;

                IFormatter format = new BinaryFormatter();
                Stream stream = new FileStream(projectFileName, FileMode.Open, FileAccess.Read, FileShare.Read);
                ProjectData loadedProject = (ProjectData)format.Deserialize(stream);
                savedPrizeLevels = loadedProject.savedPrizeLevels;
                savedGameSetup = loadedProject.savedGameSetup;
                savedDivisions = loadedProject.savedDivisions;
            }
            else if (result == true && !isCorrectFileType) //User pressed OK, but the extension is incorrect
            {
                System.Windows.MessageBox.Show("The file must be of type " + DEFAULT_EXT);
                loadSuccessful = this.OpenProject();
            }
            else if (result == false) //User pressed Cancel or closed the dialog box
            {
                loadSuccessful = false;
            }

            return loadSuccessful;
        }
예제 #3
0
        /// <summary>
        /// Gets all non winning picks for a given permutation
        /// </summary>
        /// <param name="permutation"> The base permutation</param>
        /// <param name="prizeLevels"> Used to find collection amount for unused pic<s/param>
        /// <returns> Returns an array of non winning picks</returns>
        private int[] getExtraPicks(
            int[] permutation,
            PrizeLevels.PrizeLevels prizeLevels)
        {
            List <int> usedIndexes = new List <int>();
            List <int> extraPicks  = new List <int>();

            foreach (int i in permutation)
            {
                int j = Math.Abs(i);
                if (j - 1 != -1 && !usedIndexes.Contains((j - 1)))
                {
                    usedIndexes.Add(j - 1);
                }
            }
            int numberOfPrizeLevels = prizeLevels.getNumPrizeLevels();

            for (int i = 0; i < numberOfPrizeLevels; i++)
            {
                if (!usedIndexes.Contains(i))
                {
                    int numberOfCollections = prizeLevels.getPrizeLevel(i).numCollections - 1;
                    for (int j = 0; j < numberOfCollections; j++)
                    {
                        extraPicks.Add(i + 1);
                    }
                }
            }
            return(extraPicks.ToArray());
        }
예제 #4
0
        /// <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);
        }
예제 #5
0
        public bool OpenProject()
        {
            bool loadSuccessful = true;

            Microsoft.Win32.OpenFileDialog openDialog = new Microsoft.Win32.OpenFileDialog();
            openDialog.DefaultExt = DEFAULT_EXT;
            openDialog.Filter     = FILTER;
            bool?result            = openDialog.ShowDialog();
            bool isCorrectFileType = System.Text.RegularExpressions.Regex.IsMatch(openDialog.FileName, DEFAULT_EXT);

            if (result == true && isCorrectFileType) //User pressed OK and the extension is correct
            {
                loadSuccessful  = true;
                projectFileName = openDialog.FileName;

                IFormatter  format        = new BinaryFormatter();
                Stream      stream        = new FileStream(projectFileName, FileMode.Open, FileAccess.Read, FileShare.Read);
                ProjectData loadedProject = (ProjectData)format.Deserialize(stream);
                savedPrizeLevels = loadedProject.savedPrizeLevels;
                savedGameSetup   = loadedProject.savedGameSetup;
                savedDivisions   = loadedProject.savedDivisions;
            }
            else if (result == true && !isCorrectFileType) //User pressed OK, but the extension is incorrect
            {
                System.Windows.MessageBox.Show("The file must be of type " + DEFAULT_EXT);
                loadSuccessful = this.OpenProject();
            }
            else if (result == false) //User pressed Cancel or closed the dialog box
            {
                loadSuccessful = false;
            }

            return(loadSuccessful);
        }
예제 #6
0
        /// <summary>
        /// Gets the needed picks to win all prize levels of a given division
        /// </summary>
        /// <param name="division">The division is the division containing the winning prize levels</param>
        /// <param name="prizeLevels">All prize levels in the game used to get the index of the prize level</param>
        /// <returns>Returns a list of ints containing the needed picks to win a division</returns>
        private List <int> getNeededPicksForDivision(
            bool useInstantWin,
            Divisions.DivisionModel division,
            PrizeLevels.PrizeLevels prizeLevels)
        {
            List <int> neededPicks            = new List <int>();
            List <PrizeLevels.PrizeLevel> pls = division.getPrizeLevelsAtDivision();

            foreach (PrizeLevels.PrizeLevel pl in pls)
            {
                int numberToCollect    = pl.numCollections;
                int indexInPrizeLevels = prizeLevels.getLevelOfPrize(pl) + 1;
                if ((pl.isInstantWin || pl.numCollections == 0) && useInstantWin)
                {
                    numberToCollect = 1;
                    neededPicks.Add(-indexInPrizeLevels);
                }
                else
                {
                    numberToCollect = pl.numCollections;
                    for (int i = 0; i < numberToCollect; i++)
                    {
                        neededPicks.Add(indexInPrizeLevels);
                    }
                }
            }
            return(neededPicks);
        }
예제 #7
0
        /// <summary>
        /// Fill the extra spots of a permutation with non winning picks.
        /// </summary>
        /// <param name="nonWinningPermutations">The non winning permutations</param>
        /// <param name="extraPicks">The extra picks to fill in for a division</param>
        /// <param name="div">The division</param>
        /// <param name="prizeLevels">All prize levels</param>
        /// <param name="maxNumberOfpermutations">Max number of permutations to reach.</param>
        /// <returns>Returns filled permutations.</returns>
        private List <int[]> fillBlankDivisionPermutationsWithNonWinningData(
            List <int[]> nonWinningPermutations,
            int[] extraPicks,
            Divisions.DivisionModel div,
            PrizeLevels.PrizeLevels prizeLevels,
            int maxNumberOfPermutations)
        {
            List <int[]> filledPermutations = new List <int[]>();

            filledPermutations = createExtraPermutations(nonWinningPermutations, maxNumberOfPermutations, prizeLevels);
            return(filledPermutations);
        }
예제 #8
0
 /// <summary>
 /// Gets called when the class is registered to another class' shout
 /// </summary>
 /// <param name="pass"></param>
 public void onListen(object pass)
 {
     if (pass is PrizeLevels.PrizeLevels)
     {
         prizes = (PrizeLevels.PrizeLevels)pass;
     }
     else if (pass is int)
     {
         allottedPlayerPicks = (int)pass;
         checkDivisionsPicks();
     }
     shout(pass);
 }
예제 #9
0
        /// <summary>
        /// Gets complete combinations of near wins
        /// </summary>
        /// <param name="nearWinPrizeLevels">Number of near wins</param>
        /// <param name="totalNumberOfPicks">total number of picks for a level</param>
        /// <param name="prizeLevels">All prize levels</param>
        /// <returns></returns>
        private List <int[]> getPrizeLevelCombinationsForNearWins(
            int nearWinPrizeLevels,
            int totalNumberOfPicks,
            PrizeLevels.PrizeLevels prizeLevels)
        {
            int          numberOfPrizeLevels         = prizeLevels.getNumPrizeLevels();
            List <int[]> prizeLevelCombinations      = new List <int[]>();
            int          numberOfMaximumCombinations = prizeLevels.getNumPrizeLevels();

            List <int> prizeLevelsIndexes = new List <int>();

            for (int i = 0; i < numberOfPrizeLevels; i++)
            {
                prizeLevelsIndexes.Add(i);
            }
            // Max possible Base
            for (int i = 1; i <= nearWinPrizeLevels; i++)
            {
                for (int j = 0; j < numberOfMaximumCombinations; j++)
                {
                    Random     rand = new Random();
                    int[]      tempPrizeLevelCombinations             = new int[i];
                    int        numberOfPicksForPrizeLevelCombintation = 0;
                    bool       newBaseComboAdded     = false;
                    int        failCount             = 0;
                    List <int> tempPrizeLevelIndexes = new List <int>(prizeLevelsIndexes);
                    do
                    {
                        for (int k = 0; k < i; k++)
                        {
                            int randomPrizeLevelSelection = rand.Next(0, tempPrizeLevelIndexes.Count);
                            numberOfPicksForPrizeLevelCombintation += prizeLevels.getPrizeLevel(tempPrizeLevelIndexes[randomPrizeLevelSelection]).numCollections - 1;
                            tempPrizeLevelCombinations[k]           = tempPrizeLevelIndexes[randomPrizeLevelSelection];
                            tempPrizeLevelIndexes.RemoveAt(randomPrizeLevelSelection);
                        }
                        if (!prizeLevelCombinations.Any(tempPrizeLevelCombinations.SequenceEqual) && numberOfPicksForPrizeLevelCombintation <= totalNumberOfPicks)
                        {
                            prizeLevelCombinations.Add(tempPrizeLevelCombinations);
                            newBaseComboAdded = true;
                        }
                        tempPrizeLevelCombinations             = new int[i];
                        numberOfPicksForPrizeLevelCombintation = 0;
                        tempPrizeLevelIndexes = new List <int>(prizeLevelsIndexes);
                        failCount++;
                    } while (!newBaseComboAdded && failCount <= 2500);
                }
            }
            return(prizeLevelCombinations);
        }
예제 #10
0
        public void SaveProject(GameSetupModel gsObject, PrizeLevels.PrizeLevels plsObject, DivisionsModel divisionsList)
        {
            if (isProjectSaved)
            {
                savedGameSetup   = gsObject;
                savedPrizeLevels = plsObject;
                savedDivisions   = divisionsList;

                IFormatter formatter = new BinaryFormatter();
                Stream     stream    = new FileStream(projectFileName, FileMode.OpenOrCreate, FileAccess.Write, FileShare.None);
                formatter.Serialize(stream, this);
                stream.Close();
            }
            else
            {
                SaveProjectAs(gsObject, plsObject, divisionsList);
            }
        }
예제 #11
0
        /// <summary>
        /// Creates all the winning permutations of a divisions
        /// </summary>
        /// <param name="divisionIndicator">Selected Division</param>
        /// <param name="totalNumberOfPicks">Number of picks for a division</param>
        /// <param name="numberOfPermutations">number of permutations to genreate for a division</param>
        /// <param name="division">Division informaiton</param>
        /// <param name="prizeLevels">Prize level informaiton</param>
        /// <returns>Returns the list of winning permutaitons for a division</returns>
        private List <int[]> getDivisionWinningPermutations(
            int divisionIndicator,
            short totalNumberOfPicks,
            int numberOfPermutations,
            Divisions.DivisionModel division,
            PrizeLevels.PrizeLevels prizeLevels)
        {
            List <int[]> divisionIncompleteWinPermutations    = new List <int[]>();
            List <PrizeLevels.PrizeLevel> divisionPrizeLevels = division.getPrizeLevelsAtDivision();
            int  maxNumberOfNeededPicksForDivision            = 0;
            bool isInstantWinPresent = false;

            foreach (PrizeLevels.PrizeLevel p in divisionPrizeLevels)
            {
                maxNumberOfNeededPicksForDivision += p.numCollections;
                if (p.isInstantWin)
                {
                    isInstantWinPresent = true;
                }
            }

            int[] picks = getNeededPicksForDivision(true, division, prizeLevels).ToArray();
            divisionIncompleteWinPermutations.AddRange(getAllBasePermutations(totalNumberOfPicks, numberOfPermutations, getBaseCombinaiton(totalNumberOfPicks, picks).ToArray()));
            int[] nonWinningPicks = getExtraPicks(divisionIncompleteWinPermutations[0], prizeLevels);
            if (nonWinningPicks.Length + picks.Length < totalNumberOfPicks && isInstantWinPresent)
            {
                divisionIncompleteWinPermutations.Clear();
            }
            if (maxNumberOfNeededPicksForDivision <= totalNumberOfPicks && isInstantWinPresent)
            {
                divisionIncompleteWinPermutations.AddRange(getAllBasePermutations(totalNumberOfPicks, numberOfPermutations, getBaseCombinaiton(totalNumberOfPicks, getNeededPicksForDivision(false, division, prizeLevels).ToArray()).ToArray()));
            }

            List <int[]> maximumPermutations = fillBlankDivisionPermutationsWithNonWinningData(
                divisionIncompleteWinPermutations,
                nonWinningPicks,
                division,
                prizeLevels,
                (numberOfPermutations + extraPermutationBuffer)).OrderBy(a => Guid.NewGuid()).ToList();
            List <int[]> finalPermutations = maximumPermutations.Take(numberOfPermutations).ToList();

            return(finalPermutations);
        }
예제 #12
0
        public DivisionUC(PrizeLevels.PrizeLevels initialPrizeLevels, int number)
        {
            InitializeComponent();
            DivModel = new DivisionModel();
            setDataContextToModel();
            Prizes = initialPrizeLevels;
            DivModel.DivisionNumber = number;

            for (int i = 0; i < DivisionModel.MAX_PRIZE_BOXES; i++)
            {
                LevelBox levelBox = new LevelBox(i + 1);
                DivModel.levelBoxes.Add(levelBox);
                PrizeLevelBox box = new PrizeLevelBox(this, DivModel.levelBoxes[i]);
                if (i < initialPrizeLevels.getNumPrizeLevels())
                {
                    box.levelModel.IsAvailable = true;
                }
                prizeLevelsGrid.Children.Add(box);
            }
        }
예제 #13
0
        /// <summary>
        /// Creates extra permutations for each permutation given
        /// </summary>
        /// <param name="permutations"> A list of base permutations to genreate new permutations from</param>
        /// <param name="desiredAmountOfPermutations"> The amount of desired permutations</param>
        /// <param name="prizeLevels"> All the prize levels for a given game</param>
        /// <returns>Returns a list of all extra permutations from the base list.</returns>
        private List <int[]> createExtraPermutations(
            List <int[]> permutations,
            int desiredAmountOfPermutations,
            PrizeLevels.PrizeLevels prizeLevels)
        {
            HashSet <string> permiutationList = new HashSet <string>();

            int[] extraPicks = getExtraPicks(permutations[0], prizeLevels);
            for (int i = 0; i < permutations.Count && i < desiredAmountOfPermutations + 500 && permiutationList.Count <= desiredAmountOfPermutations; i++)
            {
                HashSet <string> extrasForPerm = createExtraPermutationsFromBase(permutations[i], extraPicks, (int)desiredAmountOfPermutations);
                permiutationList.UnionWith(extrasForPerm);
            }
            List <int[]> extraPermutations = new List <int[]>();

            foreach (string s in permiutationList)
            {
                extraPermutations.Add(permutationStringToIntArray(s));
            }
            return(extraPermutations);
        }
예제 #14
0
        public void SaveProjectAs(GameSetupModel gsObject, PrizeLevels.PrizeLevels plsObject, DivisionsModel divisionsList)
        {
            Microsoft.Win32.SaveFileDialog dialog = new Microsoft.Win32.SaveFileDialog();
            if (String.IsNullOrEmpty(projectFileName))
            {
                dialog.FileName = "CollectionGameGeneratorProject" + DEFAULT_EXT;
            }
            else
            {
                dialog.FileName = projectFileName;
            }
            dialog.DefaultExt = DEFAULT_EXT;
            dialog.Filter     = FILTER;
            bool?result = dialog.ShowDialog();

            if (result == true)
            {
                projectFileName = dialog.FileName;
                isProjectSaved  = true;
                SaveProject(gsObject, plsObject, divisionsList);
            }
        }
예제 #15
0
        /// <summary>
        /// Gets all permutations for a losing condition. Can be different if near win is needed.
        /// </summary>
        /// <param name="baseLossconditions">The base set of lossing permutations</param>
        /// <param name="prizeLevels">All of the prize level information</param>
        /// <param name="numberOfNearWins">How many near wins can there be</param>
        /// <param name="maxNumberOfpermutationsPerNearWin">Maximum number of permutations </param>
        /// <returns> Returns a list of all losing permutations</returns>
        private List <int[]> getAllLossPermutations(
            List <int[]> baseLossconditions,
            PrizeLevels.PrizeLevels prizeLevels,
            int numberOfNearWins,
            int maxNumberOfPermutationsPerNearWin)
        {
            List <int[]> lossPermituations = new List <int[]>();

            int[] nearWinCounts = new int[numberOfNearWins + 1];

            foreach (int[] lossCondition in baseLossconditions)
            {
                int nearWinType = 0;
                for (int i = 1; i < lossCondition.Length; i++)
                {
                    if (lossCondition[i] != lossCondition[i - 1])
                    {
                        nearWinType++;
                    }
                }

                int[] bsaePermuitation = new int[lossCondition.Length];
                lossCondition.CopyTo(bsaePermuitation, 0);
                bool ableToFindNextdivision = true;
                for (int i = nearWinCounts[nearWinType]; i < maxNumberOfPermutationsPerNearWin && ableToFindNextdivision; i++)
                {
                    int[] newPermuitation = new int[lossCondition.Length];
                    lossCondition.CopyTo(newPermuitation, 0);
                    if (ableToFindNextdivision)
                    {
                        lossPermituations.Add(newPermuitation);
                        nearWinCounts[nearWinType]++;
                    }
                    bsaePermuitation       = findNextPermutation(lossCondition);
                    ableToFindNextdivision = !(bsaePermuitation[0] == -1);
                }
            }
            return(createExtraPermutations(lossPermituations, maxNumberOfPermutationsPerNearWin + extraPermutationBuffer, prizeLevels));;
        }
예제 #16
0
        /// <summary>
        /// Creates the base combinations for near win losing conditions.
        /// </summary>
        /// <param name="nearWinPrizeLevels">Number of max near wins</param>
        /// <param name="totalNumberOfPicks">Total number of picks for a divisions</param>
        /// <param name="prizeLevels">All the prize levels</param>
        /// <returns>Returns a list of base combinations</returns>
        private List <int[]> getBaseNearWinLossPermutations(
            int nearWinPrizeLevels,
            int totalNumberOfPicks,
            PrizeLevels.PrizeLevels prizeLevels)
        {
            List <int[]> nearWinBasePermutations = new List <int[]>();
            List <int[]> prizeLevelCombinations  = getPrizeLevelCombinationsForNearWins(nearWinPrizeLevels, totalNumberOfPicks, prizeLevels);

            foreach (int[] combo in prizeLevelCombinations)
            {
                List <int> neededPicks = new List <int>();
                for (int i = 0; i < combo.Length; i++)
                {
                    int prizeLevelToSelect = combo[i];
                    for (int k = 0; k < prizeLevels.getPrizeLevel(prizeLevelToSelect).numCollections - 1; k++)
                    {
                        neededPicks.Add(combo[i] + 1);
                    }
                }
                nearWinBasePermutations.Add(getBaseCombinaiton(totalNumberOfPicks, neededPicks.ToArray()).ToArray());
            }
            return(nearWinBasePermutations);
        }
예제 #17
0
        /// <summary>
        /// Builds the header information for the file
        /// </summary>
        /// <param name="prizes">All prize informaiton</param>
        /// <param name="divisions">All division information</param>
        /// <returns>Returns a list of string representing each line of the header</returns>
        private List <string> buildHeader(PrizeLevels.PrizeLevels prizes, Divisions.DivisionsModel divisions)
        {
            List <string> headerLines = new List <string>();

            headerLines.Add("The first number is the division indicator.");
            headerLines.Add("Prize level indicators and values:");
            int           prizeLevel = 1;
            StringBuilder sb;

            foreach (PrizeLevels.PrizeLevel p in prizes.prizeLevels)
            {
                sb = new StringBuilder();
                sb.Append("Prize Level Character: " + charFromInt(prizes.getLevelOfPrize(p) + 1));
                sb.Append(" Value: " + p.prizeValue);
                headerLines.Add(sb.ToString());
            }
            headerLines.Add("division level indicators and values:");
            foreach (Divisions.DivisionModel div in divisions.divisions)
            {
                sb = new StringBuilder();
                sb.Append("Division Number: " + prizeLevel++);
                sb.Append(" Value: " + div.TotalPrizeValue);
                sb.Append("Prize Levels at Division: ");
                foreach (PrizeLevels.PrizeLevel p in div.getPrizeLevelsAtDivision())
                {
                    sb.Append(charFromInt(prizes.getLevelOfPrize(p) + 1));
                }

                headerLines.Add(sb.ToString());
            }
            sb = new StringBuilder();
            sb.Append("Division Level Number: " + prizeLevel++);
            sb.Append(" Value: " + 0);
            headerLines.Add(sb.ToString());
            return(headerLines);
        }
예제 #18
0
        public void SaveProject(GameSetupModel gsObject, PrizeLevels.PrizeLevels plsObject, DivisionsModel divisionsList)
        {
            if (isProjectSaved)
            {
                savedGameSetup = gsObject;
                savedPrizeLevels = plsObject;
                savedDivisions = divisionsList;

                IFormatter formatter = new BinaryFormatter();
                Stream stream = new FileStream(projectFileName, FileMode.OpenOrCreate, FileAccess.Write, FileShare.None);
                formatter.Serialize(stream, this);
                stream.Close();
            }
            else
            {
                SaveProjectAs(gsObject, plsObject, divisionsList);
            }
        }
예제 #19
0
 /// <summary>
 /// Respond to shouted messages from listened objects
 /// </summary>
 /// <param name="pass">The message being shouted</param>
 public void OnListen(object pass)
 {
     if (pass is PrizeLevels.PrizeLevels)
     {
         prizes = (PrizeLevels.PrizeLevels)pass;
     }
     Shout(pass);
 }
예제 #20
0
 public void onListen(object pass)
 {
     if (pass is PrizeLevels.PrizeLevels)
     {
         prizes = (PrizeLevels.PrizeLevels)pass;
     }
     else if (pass is int)
     {
         allottedPlayerPicks = (int)pass;
         checkDivisionsPicks();
     }
     shout(pass);
 }