Exemplo n.º 1
0
        /// <summary>
        /// This method builts a new crozzle after reading the files from the given destination.
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void getCrozzleBTN_Click(object sender, EventArgs e)
        {
            crozzle = new CrozzleGrid(addressesCB.Text);
            try
            {
                crozzle.ReadCrozzle();
                MyTimer          = new System.Timers.Timer(crozzle.Config.RUNTIME_LIMIT * 1000);
                MyTimer.Elapsed += MyTimer_Elasped;
                MyTimer.Start();
                while (MyTimer.Enabled)
                {
                    crozzle.Fill();
                }

                string endpoint           = "BasicHttpBinding_IWordGroupService";
                WordGroupServiceClient ws = new WordGroupServiceClient(endpoint);
                int NumberOfGroups        = ws.Count(crozzle.GetGrid());
                if (NumberOfGroups >= crozzle.Config.MINIMUM_NUMBER_OF_GROUPS && NumberOfGroups <= crozzle.Config.MAXIMUM_NUMBER_OF_GROUPS)
                {
                    string result = crozzle.GetHtmlTable();
                    int    score  = crozzle.CalculateScore();
                    result += "<br/><div><p><b> Score = " + score + "</b></p></div>";
                    webBrowser1.Navigate("about:blank");
                    HtmlDocument doc = webBrowser1.Document;
                    doc.Write(String.Empty);
                    webBrowser1.DocumentText = result;
                }
                else
                {
                    MessageBox.Show("Crozzle cannot be formed because valid number of groups were not formed");
                    string result = crozzle.GetHtmlTable();
                    result += "<br/><div><p><b> Invalid Crozzle is Generated !</b></p></div>";
                    webBrowser1.Navigate("about:blank");
                    HtmlDocument doc = webBrowser1.Document;
                    doc.Write(String.Empty);
                    webBrowser1.DocumentText = result;
                }
            }
            catch (Exception)
            {
                MessageBox.Show("Network Failure: Cannot Read Crozzle Configurations from the given address!");
            }
        }
Exemplo n.º 2
0
        /// <summary>
        /// Seperate a one-group crozzle into multi-group crozzle
        /// </summary>
        /// <param name="cp">One-group crozzle</param>
        /// <returns>One multi-group crozzle</returns>
        public static CrozzlePartial SeperateGroups(CrozzlePartial cp)
        {
            int         bestScore     = 0;
            List <Word> bestUsedWords = new List <Word>();

            for (int i = 0; i < cp.GetUsedWord().Count; i++)
            {
                List <Word> usedWords = new List <Word>();
                for (int j = 0; j < cp.GetUsedWord().Count; j++)
                {
                    usedWords.Add(cp.GetUsedWord()[j]);
                }
                Word deleteWord = cp.GetUsedWord()[i];
                usedWords.Remove(cp.GetUsedWord()[i]);
                int groups;
                try
                {
                    WordGroupServiceClient ws;
                    string endpoint = "BasicHttpBinding_IWordGroupService";
                    ws = new WordGroupServiceClient(endpoint);
                    Grid     grid       = new Grid(PublicInfo.GetFullRows(), PublicInfo.GetFullColumns(), usedWords);
                    string[] stringGrid = ConvertToString(grid.GetGrid(), PublicInfo.GetFullRows(), PublicInfo.GetFullColumns());
                    groups = ws.Count(stringGrid);
                }
                catch
                {
                    // use local group calculation method if online method fail
                    groups = CalculateGroup(usedWords);
                }
                int score = CalculateScoreAfterRemovingAWord(cp, cp.GetUsedWord()[i]);
                if (groups >= PublicInfo.GetMinGroups() && groups <= PublicInfo.GetMaxGroups() && score > bestScore && CheckAllIntersections(usedWords))
                {
                    bestScore     = score;
                    bestUsedWords = usedWords;
                }
            }
            // generate a multi-groups crozzle with used words
            cp.SetUsedWord(bestUsedWords);
            cp.SetScore(bestScore);
            cp.SetGrid(new Grid(PublicInfo.GetFullRows(), PublicInfo.GetFullColumns(), bestUsedWords));
            return(cp);
        }