Exemplo n.º 1
0
        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);
        }
Exemplo n.º 2
0
        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);
        }
Exemplo n.º 3
0
        /// <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);
        }