private static int CalculateScoreAfterRemovingAWord(CrozzlePartial cp, Word removeWord) { int score = cp.GetScore(); // reverse the process of adding a word score -= PublicInfo.GetPointsPerWord(); for (int i = 0; i < cp.GetUsedWord().Count; i++) { if (!cp.GetUsedWord()[i].GetType().Equals(removeWord.GetType()) && CrozzleValidation.Crossing(cp.GetUsedWord()[i], removeWord)) { char crossingLetter = CrozzleValidation.GetCrossingLetter(cp.GetUsedWord()[i], removeWord); score -= WordInfo.intersectingPointsPerLetter[crossingLetter]; score += WordInfo.nonIntersectingPointsPerLetter[crossingLetter]; } } return(score); }
private static bool CheckAllIntersections(List <Word> usedWord) { for (int i = 0; i < usedWord.Count; i++) { // calculate number of intersections int cross = 0; for (int j = 0; j < usedWord.Count; j++) { if (!usedWord[i].GetType().Equals(usedWord[j].GetType()) && CrozzleValidation.Crossing(usedWord[i], usedWord[j])) { cross++; } } // check intersection requirements if (cross == 0) { return(false); } } return(true); }
/// <summary> /// Local method of calculating groups /// </summary> /// <param name="usedWordList">List of words</param> /// <returns>number of groups</returns> private static int CalculateGroup(List <Word> usedWordList) { int groupNumber = 0; List <Word> usedWord = new List <Word>(); for (int index = 0; index < usedWordList.Count(); index++) { usedWord.Add(usedWordList[index]); } // Calculate group numbers while (usedWord.Count() != 0) { List <Word> group = new List <Word>(); Queue <Word> next = new Queue <Word>(); next.Enqueue(usedWord[0]); group.Add(usedWord[0]); usedWord.Remove(usedWord[0]); while (next.Count() > 0) { Queue <Word> vertical = new Queue <Word>(); Queue <Word> horizontal = new Queue <Word>(); Word[] temp_array = next.ToArray(); for (int index = 0; index < next.Count(); index++) { if (temp_array[index].GetType().Equals("ROW")) { horizontal.Enqueue(temp_array[index]); } else { vertical.Enqueue(temp_array[index]); } } int queueLength = next.Count(); for (int index = 0; index < usedWord.Count(); index++) { if (usedWord[index].GetType().Equals("ROW")) { if (CrozzleValidation.Crossing(usedWord[index], vertical)) { next.Enqueue(usedWord[index]); group.Add(usedWord[index]); usedWord.Remove(usedWord[index--]); } } else { if (CrozzleValidation.Crossing(usedWord[index], horizontal)) { next.Enqueue(usedWord[index]); group.Add(usedWord[index]); usedWord.Remove(usedWord[index--]); } } } for (int index = 0; index < queueLength; index++) { next.Dequeue(); } } groupNumber++; } return(groupNumber); }