Clear        


                
                    namespace _14_String.Demos
{
    public class AdamAsmaca
    {
        public static void Calistir()
        {
            // Konfigürasyon başlangıç
            string testIsim = ""; // testi devre dışı bırakmak için testIsim = "" yapılmalıdır. test için testIsim değişkenine herhangi bir isim verilebilir
            string cikisDegeri = "0";
            char sorudaGosterilecekKarakter = '*';
            string[] isimListesi = IsimleriOlustur();
            // Konfigürasyon bitiş

            string rasgeleIsim;
            if (testIsim != "")
                rasgeleIsim = testIsim;
            else
                rasgeleIsim = RasgeleIsimGetir(isimListesi);
            RasgeleIsmeGoreSoruyuGetir(rasgeleIsim, cikisDegeri, sorudaGosterilecekKarakter, testIsim);
            OyunSonucuEnum oyunSonucu = OyunuBaslat(rasgeleIsim, cikisDegeri, sorudaGosterilecekKarakter);
            OyunuSonlandir(oyunSonucu);
        }

        public static string[] IsimleriOlustur()
        {
            string[] isimler = new string[20]
            {
                "ALİ",
                "AHMET",
                "BÜŞRA",
                "BELİZ",
                "CEM",
                "DENİZ",
                "ENGİN",
                "FATİH",
                "FERHAT",
                "GAMZE",
                "HALE",
                "JALE",
                "UFUK",
                "ÜSTÜN",
                "YASEMİN",
                "TEKİN",
                "MUHİTTİN",
                "MERT",
                "ZAFER",
                "TANSU"
            };
            return isimler;
        }

        public static string RasgeleIsimGetir(string[] isimler)
        {
            Random random = new Random();
            int randomIndex = random.Next(0, isimler.Length);
            string randomIsim = isimler[randomIndex];
            return randomIsim;
        }

        public static void RasgeleIsmeGoreSoruyuGetir(string isim, string cikisDegeri, char sorudaGosterilecekKarakter, string testIsim)
        {
            string soru = "";
            Console.WriteLine("Aşağıdaki ismi bulun (Çıkmak için '" + cikisDegeri + "' basılmalıdır):");
            foreach (var randomKarakter in isim)
            {
                soru += sorudaGosterilecekKarakter;
            }
            soru = soru.Trim();
            if (!testIsim.Equals(""))
                soru = soru + " (Test için: " + testIsim + ")";
            Console.WriteLine(soru);
        }

        public static OyunSonucuEnum OyunuBaslat(string isim, string cikisDegeri, char sorudaGosterilecekKarakter)
        {
            char[] karakterler = new char[isim.Length];
            for (int i = 0; i < karakterler.Length; i++)
            {
                karakterler[i] = sorudaGosterilecekKarakter;
            }
            string input = GetInput();
            String output = "";
            int foundIndex;
            int length = 0;
            while (karakterler.Length != length && input != cikisDegeri)
            {
                foundIndex = FindIndex(isim, input);
                while (foundIndex != -1 && !output.Contains(input))
                {
                    karakterler[foundIndex] = isim[foundIndex];
                    foundIndex = FindIndex(isim, input, foundIndex);
                    length++;
                }
                output = new String(karakterler);
                Console.WriteLine(output);
                if (karakterler.Length != length)
                    input = GetInput();
            }
            if (karakterler.Length == length)
                return OyunSonucuEnum.Basarili;
            else
                return OyunSonucuEnum.Basarisiz;
        }

        public static int FindIndex(string isim, string input, int foundIndex = -1)
        {
            bool found = false;
            for (int i = foundIndex + 1; i < isim.Length && !found; i++)
            {
                if (isim[i] == Convert.ToChar(input))
                {
                    foundIndex = i;
                    found = true;
                }
            }
            if (found)
                return foundIndex;
            else
                return -1;
        }

        public static string GetInput()
        {
            string input = Console.ReadLine();
            input = input.ToUpper();
            while (input.Length != 1)
            {
                Console.WriteLine("Hatalı giriş!");
                input = Console.ReadLine();
                input = input.ToUpper();
            }
            return input;
        }

        public static void OyunuSonlandir(OyunSonucuEnum oyunSonucu)
        {
            if (oyunSonucu == OyunSonucuEnum.Basarili)
                Console.WriteLine("Tebrikler, ismi buldun. :)");
            else
                Console.WriteLine("Vazgeçtin, olsun bir dahaki sefere. :(");
        }
    }

    public enum OyunSonucuEnum
    {
        Basarili = 1,
        Basarisiz = 0
    }
}