예제 #1
0
        private async Task ValidateLetter()
        {
            Attempts++;
            var wordArray = Word.ToCharArray();

            if (wordArray.Contains(Letter))
            {
                foreach (Match m in Regex.Matches(Word, Letter.ToString()))
                {
                    Letters[m.Index] = Letter;
                }

                if (!Letters.Any(c => c == '_'))
                {
                    await Win();
                }
            }
            else
            {
                IncorrectLetters.Add(Letter);
                SetImage();

                if (IncorrectLetters.Count == 6)
                {
                    await Loose();
                }
            }
        }
        public bool IsDefiniteLetter(string letter)
        {
            if (Text == "er" && Letters.Any() && !Letters.Contains("r"))
            {
                return(true);
            }

            foreach (var pattern in PerfectPatterns)
            {
                if (pattern.Key == Text)
                {
                    if (Letters + letter == pattern.Value)
                    {
                        return(true);
                    }
                }
            }

            return(Letters + letter == Text);
        }
        public string[] GetPossibleLetters()
        {
            List <string> matches = Text.Select(each => each.ToString()).ToList();

            if (Letters.Any())
            {
                //matches = Text.Select(each => each.ToString()).ToList();
            }
            else
            {
                //matches = Text.Take(1).Select(each => each.ToString()).ToList();
            }

            // Todo:  Use patterns like this instead?
            if (ArticulationPlace == ArticulationPlaces.Glottal)
            {
                matches.AddRange(new[] { "h" });
            }

            switch (Text)
            {
            case "aa":
                matches.AddRange(new[] { "o", "h", "r", "u" });
                break;

            case "ae":
                matches.AddRange(new[] { "i" });
                break;

            case "ah":
                matches.AddRange(new[] { "i", "l", "o", "e", "t", "y", "u" });   // bustling (silent t)
                break;

            case "ao":
                matches.AddRange(new[] { "u", "h" });
                break;

            case "aw":
                return(new[] { "o", "u", "g", "h", "w" });

            case "ay":
                return(new[] { "e", "u", "y", "i", "g", "h" });

            case "b":
                matches.AddRange(new[] { "a", "i" });
                break;

            case "ch":
                matches.AddRange(new[] { "t" });
                break;

            case "dh":
                matches.AddRange(new[] { "t" });
                break;

            case "eh":
                matches.AddRange(new[] { "a", "i", "y" });
                break;

            case "ey":
                matches.AddRange(new[] { "a", "e", "i", "g", "h" });
                break;

            case "er":
                matches.AddRange(new[] { "a" });
                break;

            case "f":
                matches.AddRange(new[] { "p", "h" });
                break;

            case "g":
                matches.AddRange(new[] { "x" });
                break;

            case "k":
                /*if (Letters.Contains("q")) {
                 *  matches.AddRange(new[] {"u", "i"});
                 * }*/

                matches.AddRange(new[] { "c", "x", "h", "q" });
                break;

            case "l":
                matches.AddRange(new[] { "a" });
                break;

            case "iy":
                matches.AddRange(new[] { "e", "a" });
                break;

            case "jh":
                matches.AddRange(new[] { "d", "g" });
                break;

            case "ih":
                matches.AddRange(new[] { "e", "y", "a" });
                break;

            case "m":
                matches.AddRange(new[] { "n" });
                break;

            case "n":
                matches.AddRange(new[] { "e", "d" });
                break;

            case "ow":
                matches.AddRange(new[] { "h", "a" });
                break;

            case "oy":
                matches.AddRange(new[] { "i", "u", "e" });
                break;

            case "p":
                matches.AddRange(new[] { "e", "i", "a" });
                break;

            case "r":
                matches.AddRange(new[] { "e" });
                break;

            case "s":
                matches.AddRange(new[] { "c", "z" /*, "t"*/ });
                break;

            case "sh":
                matches.AddRange(new[] { "t", "i", "c", "e" });
                break;

            case "t":
                matches.AddRange(new[] { "d", "e" });
                break;

            case "uh":
                matches.AddRange(new[] { "o" });
                break;

            case "uw":
                matches.AddRange(new[] { "h", "i" });
                break;

            case "v":
                matches.AddRange(new[] { "s" });
                break;

            case "w":
                matches.AddRange(new[] { "h" });
                break;

            case "y":
                matches.AddRange(new[] { "j", "l" });
                break;

            case "z":
                matches.AddRange(new[] { "s", "e", "i" });
                break;

            case "zh":
                matches.AddRange(new[] { "s", "g", "i", "j" });
                break;
            }

            return(matches.ToArray());
        }