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