public string IngresarLetra(string letra) { if (Palabra.Contains(letra)) { for (int i = 0; i <= Palabra.Length - 1; i++) { string letraAux = Palabra.Substring(i, 1); if (letra == letraAux) { PalabraAdivinada = PalabraAdivinada.Remove(i, 1); PalabraAdivinada = PalabraAdivinada.Insert(i, letra); } } if (PalabraAdivinada.Contains("-")) { return(PalabraAdivinada); } else { return("Palabra adivinada"); } } else { LetrasErradas = LetrasErradas.Insert(indiceLetraErrada, letra); indiceLetraErrada++; ContErrores++; if (ContErrores == 6) { return("Perdiste, queso"); } return("letra incorrecta"); } }
public static void Procurar(string Texto) { string[] Linhas = System.IO.File.ReadAllLines(Directory.GetCurrentDirectory() + "\\dicionario.txt"); //Nao recomendo para dicionarios grandes. Para arquivo grandes recomendo dividir em pedacos string PalavraLowerCase; string PedacoLowerCase; int PosicaoPedaco = 0; // Index da array do texto separado a ser procurado. existe como funcionar sem isso porem, nao recomendo char[] LetrasErradas; char[] LetrasContidas; Dictionary <int, string[]> PalvrasCompativeis = new Dictionary <int, string[]>(); Dictionary <char, int> MelhorPossivelLetra = new Dictionary <char, int>(); // Dicionario das letras que mais apareceram nos "buracos" Form1 frm = (Form1)Application.OpenForms["Form1"]; LetrasErradas = frm.textBox2.Text.ToCharArray(); LetrasContidas = SepararLetrasContidas(Texto); List <string> Melhor_Palavra = new List <string>(); // Dicionario Das palavras que se encaixam Dictionary <char, int> AgoraMelhorPossivelLetra = new Dictionary <char, int>(); // Dicionario das letras que apareceram nos "buracos" (letra,vezes) foreach (string Pedaco in Texto.Split(' ')) { Melhor_Palavra.Clear(); foreach (string Palavra in Linhas) { if (Pedaco.Length != Palavra.Length) { continue; } PalavraLowerCase = Palavra.ToLower(); PedacoLowerCase = Pedaco.ToLower(); bool Adicionado = false; bool LetraAdicionada = false; for (int x = 0; x != PedacoLowerCase.Length; x++) // Esse codigo pode e deve ser melhor optimizado para maiores dicionarios, eu so nao sei como { if (LetrasErradas.Contains(PalavraLowerCase[x])) { if (Adicionado == true) { Melhor_Palavra.Remove(PalavraLowerCase); } if (LetraAdicionada == true) { AgoraMelhorPossivelLetra.Clear(); } break; } if (PedacoLowerCase[x].Equals('?') && !LetrasContidas.Contains(PalavraLowerCase[x])) { LetraAdicionada = true; if (AgoraMelhorPossivelLetra.ContainsKey(PalavraLowerCase[x])) { AgoraMelhorPossivelLetra[PalavraLowerCase[x]] = AgoraMelhorPossivelLetra[PalavraLowerCase[x]] + 1; } else { AgoraMelhorPossivelLetra.Add(PalavraLowerCase[x], 1); } continue; } if (PedacoLowerCase[x].Equals(PalavraLowerCase[x])) { if (Adicionado == false) { Melhor_Palavra.Add(PalavraLowerCase); Adicionado = true; } continue; } else { if (Adicionado == true) { Melhor_Palavra.Remove(PalavraLowerCase); } if (LetraAdicionada == true) { AgoraMelhorPossivelLetra.Clear(); } break; } } MelhorPossivelLetra = MesclarDicionarios(MelhorPossivelLetra, AgoraMelhorPossivelLetra); } PalvrasCompativeis.Add(PosicaoPedaco, Melhor_Palavra.ToArray()); PosicaoPedaco++; } frm.PossiveisPalavras = PalvrasCompativeis; frm.comboBox1.Items.Clear(); foreach (int k in Enumerable.Range(1, PosicaoPedaco)) { frm.comboBox1.Items.Add(k); } frm.listBox1.Items.Clear(); frm.listBox1.Items.AddRange(PalvrasCompativeis[0]); frm.comboBox1.Text = "1"; if (MaiorValorChar(MelhorPossivelLetra) != "\0") { frm.label2.Text = "Melhor escolha de letra possivel : " + MaiorValorChar(MelhorPossivelLetra); } else { frm.label2.Text = "Palavra nao existe no dicionario"; } }