/// <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!"); } }
/// <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); }