Esempio n. 1
0
        /// <summary>
        /// Handles when an available letter is pressed,
        /// sets that letter and check if accross or down direction the word is completed and correct
        /// That list of cells will be blocked
        /// </summary>
        /// <param name="idLetter">Letter id.</param>
        public void OnLetterButtonPress(int idLetter)
        {
            CellCrossWord selectedCell = m_CrossWordGUI.GetCell(m_LastSelectedRow, m_LastSelectedColumn);

            if ((selectedCell == null) || selectedCell.IsMarkAsCorrect)
            {
                return;
            }



            // Set letter in grid
            string auxLetter = m_CrossWordGUI.GetLetter(idLetter);

            m_CrossWordGUI.SetLetter(m_LastSelectedRow, m_LastSelectedColumn, auxLetter);



            // Get accross and down info for this coords in solution grid
            InfoWordCrossword accrossInfo = m_CrossWordSolution.GetAcrossInfo(m_LastSelectedRow, m_LastSelectedColumn);
            InfoWordCrossword downInfo    = m_CrossWordSolution.GetDownInfo(m_LastSelectedRow, m_LastSelectedColumn);

            Debug.Log("OnLetterButtonPress selectedCell: " + auxLetter);
            Debug.Log("OnLetterButtonPress accrossInfo word: " + accrossInfo.Word + " accrossInfo letter: " + accrossInfo.Letter);
            Debug.Log("OnLetterButtonPress downInfo word: " + downInfo.Word + "  downInfo letter: " + downInfo.Letter);

            // Check accross word info solution with grid
            if (accrossInfo.Valid)
            {
                // Checks if that letter is correct and block
                if (auxLetter == accrossInfo.Letter.ToString())
                {
                    selectedCell.MarkCorrect(m_ColorCorrectWord);
                }
            }

            // Check down word info solution with grid
            if (downInfo.Valid)
            {
                // Checks if that letter is correct and block
                if (auxLetter == downInfo.Letter.ToString())
                {
                    selectedCell.MarkCorrect(m_ColorCorrectWord);
                }
            }

            // Remove hint from list of hints
            if (auxLetter == m_CrossWordSolution.Letter(m_LastSelectedRow, m_LastSelectedColumn).ToString())
            {
                m_ListCoordHints.Remove(new Vector2(m_LastSelectedRow, m_LastSelectedRow));
            }
        }
Esempio n. 2
0
        /// <summary>
        /// Highlights a cell by a given row and column.
        /// Highlights the hole word, and sets the question for that word
        /// </summary>
        /// <param name="_iRow">_i row.</param>
        /// <param name="_iCol">_i col.</param>
        /// <param name="startGame">If set to <c>true</c> start game.</param>
        private void SelectsCell(int _iRow, int _iCol, bool startGame = false)
        {
            // Check boundaries
            if ((_iRow <= -1) || (_iRow >= CrossWordGenerator.NRows) ||
                (_iCol <= -1) || (_iCol >= CrossWordGenerator.NCols))
            {
                return;
            }

            // Restore last selected cells
            if (m_LastSelectedCells != null)
            {
                for (int i = 0; i < m_LastSelectedCells.Count; i++)
                {
                    if (!m_LastSelectedCells[i].IsMarkAsCorrect)
                    {
                        m_LastSelectedCells[i].ColorBackground = m_ColorNormalLetter;
                    }
                }
            }

            m_LastSelectedCells     = new List <CellCrossWord>();
            m_CrossWordGUI.Question = "";

            InfoWordCrossword accrossInfo = m_CrossWordSolution.GetAcrossInfo(_iRow, _iCol);

            if (accrossInfo.Valid)
            {
                Debug.Log("Correct letter " + accrossInfo.Letter);
                // Setup last row, and last column pressed only if is first time
                if (startGame)
                {
                    m_LastSelectedRow    = accrossInfo.StartRow;
                    m_LastSelectedColumn = accrossInfo.StartCol;
                }

                m_AcrossWordSelected    = accrossInfo.Word;
                m_CrossWordGUI.Question = "Accross: " + accrossInfo.Question;

                // Ahighlights cells in accross direction
                for (int i = accrossInfo.StartCol; i < CrossWordGenerator.NCols; i++)
                {
                    if (m_CrossWordSolution.Letter(accrossInfo.StartRow, i) != CrossWordGenerator.EMPTYCHARACTER)
                    {
                        if (!m_CrossWordGUI.GetCell(accrossInfo.StartRow, i).IsMarkAsCorrect)
                        {
                            if ((accrossInfo.StartRow == _iRow) && (i == _iCol))
                            {
                                m_CrossWordGUI.GetCell(accrossInfo.StartRow, i).ColorBackground = m_ColorStrongHighlight;
                            }
                            else
                            {
                                m_CrossWordGUI.GetCell(accrossInfo.StartRow, i).ColorBackground = m_ColorSlightHighlight;
                            }
                        }

                        m_LastSelectedCells.Add(m_CrossWordGUI.GetCell(accrossInfo.StartRow, i));
                    }
                    else
                    {
                        break;
                    }
                }
            }


            InfoWordCrossword downInfo = m_CrossWordSolution.GetDownInfo(_iRow, _iCol);

            if (downInfo.Valid)
            {
                Debug.Log("Correct letter " + downInfo.Letter);
                // Setup last row, and last column pressed only if is first time
                if (startGame)
                {
                    m_LastSelectedRow    = downInfo.StartRow;
                    m_LastSelectedColumn = downInfo.StartCol;
                }
                m_DownWordSelected = downInfo.Word;
                if (accrossInfo.Valid)
                {
                    m_CrossWordGUI.Question += "\nDown: " + downInfo.Question;
                }
                else
                {
                    m_CrossWordGUI.Question += "Down: " + downInfo.Question;
                }

                for (int i = downInfo.StartRow; i < CrossWordGenerator.NRows; i++)
                {
                    if (m_CrossWordSolution.Letter(i, downInfo.StartCol) != CrossWordGenerator.EMPTYCHARACTER)
                    {
                        if (!m_CrossWordGUI.GetCell(i, downInfo.StartCol).IsMarkAsCorrect)
                        {
                            if ((i == _iRow) && (downInfo.StartCol == _iCol))
                            {
                                m_CrossWordGUI.GetCell(i, downInfo.StartCol).ColorBackground = m_ColorStrongHighlight;
                            }
                            else
                            {
                                m_CrossWordGUI.GetCell(i, downInfo.StartCol).ColorBackground = m_ColorSlightHighlight;
                            }
                        }
                        m_LastSelectedCells.Add(m_CrossWordGUI.GetCell(i, downInfo.StartCol));
                    }
                    else
                    {
                        break;
                    }
                }
            }

            Random.InitState((int)System.DateTime.Now.Ticks);

            // Letters
            List <char> listLetters = new List <char>();

            // Add correct letter in list letters first
            if (accrossInfo.Valid && downInfo.Valid)
            {
                listLetters.Add(accrossInfo.Letter);
            }
            else if (accrossInfo.Valid && !downInfo.Valid)
            {
                listLetters.Add(accrossInfo.Letter);
            }
            else
            {
                listLetters.Add(downInfo.Letter);
            }


            // Add rest of the letters to the list
            if (accrossInfo.Valid)
            {
                // Include valid letter
                for (int i = 0; i < accrossInfo.Word.Length; i++)
                {
                    // Don't add the correct letter if it's already there
                    if (accrossInfo.Letter != accrossInfo.Word[i])
                    {
                        listLetters.Add(accrossInfo.Word[i]);
                    }
                }
            }

            // Add each letter to the list
            if (downInfo.Valid)
            {
                for (int i = 0; i < downInfo.Word.Length; i++)
                {
                    if (downInfo.Letter != downInfo.Word[i])
                    {
                        listLetters.Add(downInfo.Word[i]);
                    }
                }
            }

            for (int i = (listLetters.Count - 1); i < m_CrossWordGUI.NumberOfLetters; i++)
            {
                int iChanceWord = Random.Range(0, ALPHABETLETTERS.Length);
                listLetters.Add(ALPHABETLETTERS[iChanceWord]);
            }

            // Shuffle list and set the
            listLetters = Utils.Shuffle(listLetters);
            m_CrossWordGUI.SetLetterButtons(listLetters);
        }