コード例 #1
0
            //Получение индекса пересеченного слова по номеру символа
            internal int GetCrossedIndex(Word _Word, int _Index)
            {
                int x = _Word.X;
                int y = _Word.Y;

                int xp = 0;
                int yp = 0;

                if (_Word.Direction == EWordDirection.wdHorizontal)
                {
                    xp = 1;
                    yp = 0;
                }
                else
                {
                    xp = 0;
                    yp = 1;
                }

                x = x + xp * _Index;
                y = y + yp * _Index;

                string _Key = WordIntersection.GetKey(x, y);

                if (m_Intersections.ContainsKey(_Key))
                {
                    return(m_Intersections[_Key].CrossedBy(_Word).Index);
                }

                return(-1);
            }
コード例 #2
0
            //Очистка значения слова с сохранением символов в местах пересечений. Значения символов определяются по соответствующим пересечениям.
            public void ClearValue(Word _Word, bool _UpdateCrosses)
            {
                _Word.Null();
                _Word.IsDefined = false;

                if (!_UpdateCrosses)
                {
                    return;
                }

                int x = _Word.X;
                int y = _Word.Y;

                int xp = 0;
                int yp = 0;

                if (_Word.Direction == EWordDirection.wdHorizontal)
                {
                    xp = 1;
                    yp = 0;
                }
                else
                {
                    xp = 0;
                    yp = 1;
                }

                for (int i = 0; i < _Word.Length; i++)
                {
                    string _Key = WordIntersection.GetKey(x, y);

                    if (m_Intersections.ContainsKey(_Key))
                    {
                        WordIntersection _Intersection = m_Intersections[_Key];
                        Word             _CrossedWord  = _Intersection.CrossedBy(_Word);

                        if (_CrossedWord.IsDefined)
                        {
                            if (_CrossedWord.Direction == EWordDirection.wdHorizontal)
                            {
                                _Word[i] = _CrossedWord[x - _CrossedWord.X];
                            }
                            else
                            {
                                _Word[i] = _CrossedWord[y - _CrossedWord.Y];
                            }
                        }
                    }

                    x += xp;
                    y += yp;
                }
            }
コード例 #3
0
            //Выделение слов по горизонтали и вертикали в отдельные списки, вычисление пересечений слов.
            internal void Prepare()
            {
                m_Intersections = new Dictionary <string, WordIntersection>();
                m_WordsH        = new Words();
                m_WordsV        = new Words();

                foreach (Word _Word in this)
                {
                    if (_Word.Direction == EWordDirection.wdHorizontal)
                    {
                        m_WordsH.Add(_Word);
                    }
                    else
                    {
                        m_WordsV.Add(_Word);
                    }
                }

                foreach (Word _WordH in m_WordsH)
                {
                    foreach (Word _WordV in m_WordsV)
                    {
                        if (_WordH.X <= _WordV.X && _WordH.X + _WordH.Length >= _WordV.X)
                        {
                            if (_WordV.Y <= _WordH.Y && _WordV.Y + _WordV.Length >= _WordH.Y)
                            {
                                WordIntersection _Intersection = new WordIntersection();
                                _Intersection.X     = _WordV.X;
                                _Intersection.Y     = _WordH.Y;
                                _Intersection.WordH = _WordH;
                                _Intersection.WordV = _WordV;
                                m_Intersections.Add(_Intersection.Key, _Intersection);
                            }
                        }
                    }
                }
            }