public void Gameplay() { DefinePalavra(); while (Jogando) { Escondida = String.Concat(PalavraEscondida); if (Escondida.ToLower() != Palavra.ToLower()) { Console.WriteLine(Escondida + "\n" + $"Você tem {Chances}chances"); string letra = Console.ReadLine(); if (Palavra.ToLower().Contains(letra)) { for (int i = 0; i < Palavra.Length; i++) { if (Palavra[i].ToString().ToLower() == letra.ToLower()) { PalavraEscondida[i] = letra; } } Console.WriteLine("Acertou!"); Som.Acertou(); } else { Chances--; Console.WriteLine("Errou!Perdeu uma chance"); Som.Errou(); if (Chances == 0) { Console.WriteLine("Perdeu o jogo! Que pena"); Console.WriteLine($"{Palavra}"); Jogando = false; Som.Perdeu(); } } } else { Som.Ganhou(); Console.WriteLine(Palavra); Console.WriteLine("Parabéns! Você ganhou o jogo"); Jogando = false; } } }
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"; } }