public void TestGenerateGameplay()
        {
            PrizeLevels prizeLevels = createPrizeLevels();
            List<DivisionModel> divisions = new List<DivisionModel>();
            MainWindowModel.Instance.DivisionsModel = new DivisionsModel();

            DivisionModel div1 = new DivisionModel();
            div1.DivisionNumber = 1;
            div1.addPrizeLevel(prizeLevels.getPrizeLevel(0));
            divisions.Add(div1);

            DivisionModel div2 = new DivisionModel();
            div2.DivisionNumber = 2;
            div2.addPrizeLevel(prizeLevels.getPrizeLevel(1));
            divisions.Add(div2);

            //DivisionModel div3 = new DivisionModel();
            //div3.DivisionNumber = 3;
            //div3.addPrizeLevel(prizeLevels.getPrizeLevel(3));
            //divisions.Add(div3);

            //DivisionModel div4 = new DivisionModel();
            //div4.DivisionNumber = 4;
            //div4.addPrizeLevel(prizeLevels.getPrizeLevel(4));
            //divisions.Add(div4);

            ITile board = createBoard(prizeLevels);
            List<ITile> boards = new List<ITile>();
            boards.Add(board);
            GamePlayGeneration gp = new GamePlayGeneration(boards);
            gp.Generate(3, divisions, prizeLevels.prizeLevels, 1);
            string output = gp.GetFormattedGameplay(boards);
        }
        /// <summary>
        /// The thread to run to create the board file.
        /// </summary>
        private void ProcessThread(DoWorkEventArgs e)
        {
            //open save dialog
            string filename = OpenSaveWindow();

            if ( !string.IsNullOrEmpty( filename ))
            {
                _processCanceled = false;

                int minMove = 0;
                int maxMove = 0;
                if (MainWindowModel.Instance.GameSetupModel.DiceSelected)
                {
                    minMove = MainWindowModel.Instance.GameSetupModel.NumDice;
                    maxMove = MainWindowModel.Instance.GameSetupModel.NumDice * 6;
                }
                else
                {
                    minMove = 1;
                    maxMove = MainWindowModel.Instance.GameSetupModel.SpinnerMaxValue;
                }

                Collection_Game_Tool.Services.Tiles.ITile boardFirstTile =
                    new BoardGeneration(e).GenerateBoard(
                        MainWindowModel.Instance.GameSetupModel.BoardSize,
                        MainWindowModel.Instance.GameSetupModel.InitialReachableSpaces,
                        minMove,
                        maxMove,
                        MainWindowModel.Instance.GameSetupModel.NumMoveBackwardTiles,
                        MainWindowModel.Instance.GameSetupModel.NumMoveForwardTiles,
                        MainWindowModel.Instance.PrizeLevelsModel,
                        MainWindowModel.Instance.GameSetupModel.MoveForwardLength,
                        MainWindowModel.Instance.GameSetupModel.MoveBackwardLength
                    );
                if (e != null && e.Cancel) return;

                List<Collection_Game_Tool.Services.Tiles.ITile> boards = new List<Collection_Game_Tool.Services.Tiles.ITile>();
                boards.Add(boardFirstTile);
                if (e != null && e.Cancel) return;

                GamePlayGeneration generator = new GamePlayGeneration(boards);

                StringBuilder formattedPlays = new StringBuilder();
                foreach (Collection_Game_Tool.Services.Tiles.ITile board in boards)
                {
                    if (e != null && e.Cancel) return;
                    formattedPlays.Append(generator.GetFormattedGameplay(boards));
                }

                if (e != null && e.Cancel) return;
                // write to file
                File.WriteAllText(filename, formattedPlays.ToString());
            }
            else
            {
                _processCanceled = true;
            }
        }