C# tuş basılana kadar döngü

Bu konuyu okuyanlar

hasbi_muharip

Asistan
Katılım
11 Ocak 2010
Mesajlar
142
Reaksiyon puanı
1
Puanları
18
Merhaba arkadaşlar c# ta bir program ile ilgili yardım istiyorum sizlerden. Şimdiden çok teşekkürler.

Program bir animasyon ile açılmakta ve daha sonra menüye geçmekte. Animasyon kısmında (henüz taslak) bir tuşa basılana kadar animasyona devam etmesini istiyorum. Bu programda "Enter" tuşu olarak belirledim fakat do-while yapısında bu programda şartı nasıl belirleyeceğimi çözemedim. Altta kodlarını verdiğim şekilde olursa kodların altındaki animasyondan göreceğiniz üzere bir tuşa basmamı bekliyor program fakat bu sırada animasyon duruyor. Benim istediğim üsttede belirttiğim üzere animasyonla eş zamanlı tuşa basmayıda kontrol ettirmek bu sayede animasyon devam ederken(durmadan-sonsuz döngüde) belirli bir tuşa misal burda olduğu üzere "Enter" a bastığım an animasyonun durması ve asıl menüye geçmesi.

Bir de menüyü "If" şartıyla yaptım fakat Switch case ile nasıl olur o konudada yardımcı olursanız sevinirim.

Teşekkürler.

KOD:
PHP:
static void Main(string[] args)        
{
            char[] rakam={'1','2','3','4'};
            char t;
            ConsoleKey ef;
            
                
                 //    Menü Efekti
                             do
                {
                    Console.ForegroundColor = ConsoleColor.Red;
                    Console.WriteLine("Demoyu Bitirmek için 'ENTER' a basın.");
                    Console.ForegroundColor = ConsoleColor.Blue;
                    for (int i = 1; i < 11; i++)
                    {
                        System.Threading.Thread.Sleep(100);
                        Console.SetCursorPosition(i, i);
                        Console.WriteLine("1");
                        Console.SetCursorPosition(10 - i, i);
                        Console.WriteLine("1");
                    }
                    
                    ef = Console.ReadKey().Key;
                    


                    if (ef != System.ConsoleKey.Enter) Console.Clear();
                    


                } while (ef != System.ConsoleKey.Enter);


                // MENÜ
            do
            {
                Console.Clear();
                Console.ForegroundColor = ConsoleColor.White;
                    Console.WriteLine("Seçiminizi yapın:");
                    Console.WriteLine("[1] Demo1");
                    Console.WriteLine("[2] Demo2");
                    Console.WriteLine("[3] Demo3");
                    Console.WriteLine("[4] Çıkış");
                    Console.SetCursorPosition(0, 0);
                
                t = Console.ReadKey().KeyChar;
                Console.ForegroundColor = ConsoleColor.Yellow;
                       if (t == rakam[0])
                        {
                            Console.Clear();
                            Console.WriteLine("1. demoya hoşgeldiniz");
                            Console.ReadKey();
                        }
                        else if (t == rakam[1])
                        {
                            Console.Clear();
                            Console.WriteLine("2. demoya hoşgeldiniz");
                            Console.ReadKey();
                        }
                        else if (t == rakam[2])
                        {
                            Console.Clear();
                            Console.WriteLine("3. demoya hoşgeldiniz");
                            Console.ReadKey();
                        }
                       else if (t == '4')
                       {
                           Console.ForegroundColor = ConsoleColor.Magenta;
                           Console.Clear();
                           Console.WriteLine("Çıkış Yapılıyor.");
                           System.Threading.Thread.Sleep(500);
                           Console.Clear();
                           Console.WriteLine("Çıkış Yapılıyor..");
                           System.Threading.Thread.Sleep(500);
                           Console.Clear();
                           Console.WriteLine("Çıkış Yapılıyor...");
                           System.Threading.Thread.Sleep(500);
                           Console.Clear();
                       }
                       else
                       {
                           Console.Clear();
                           Console.ForegroundColor = ConsoleColor.Red;
                           Console.Write("Yanlış bir tuşa bastın, tekrar dene!");
                           System.Threading.Thread.Sleep(1000);
                       }
                                                                          
                
                            
                Console.Clear();
            } while (t!='4');
}

PROGRAM ÇIKTISI:
[FLASH]http://s7.directupload.net/images/120204/x9bqoq67.swf[/FLASH]
 

aslanpayi

Doçent
Katılım
12 Ağustos 2009
Mesajlar
523
Reaksiyon puanı
1
Puanları
0
Merhaba arkadaşlar c# ta bir program ile ilgili yardım istiyorum sizlerden. Şimdiden çok teşekkürler.

Program bir animasyon ile açılmakta ve daha sonra menüye geçmekte. Animasyon kısmında (henüz taslak) bir tuşa basılana kadar animasyona devam etmesini istiyorum. Bu programda "Enter" tuşu olarak belirledim fakat do-while yapısında bu programda şartı nasıl belirleyeceğimi çözemedim. Altta kodlarını verdiğim şekilde olursa kodların altındaki animasyondan göreceğiniz üzere bir tuşa basmamı bekliyor program fakat bu sırada animasyon duruyor. Benim istediğim üsttede belirttiğim üzere animasyonla eş zamanlı tuşa basmayıda kontrol ettirmek bu sayede animasyon devam ederken(durmadan-sonsuz döngüde) belirli bir tuşa misal burda olduğu üzere "Enter" a bastığım an animasyonun durması ve asıl menüye geçmesi.

.........

Bir de böyle dene bakalım: (ikinci kısmı biraz araştırman lazım)

Kod:
static void Main(string[] args)
{
            int[] rakam = { '1', '2', '3', '4'};
            char t;
            Console.TreatControlCAsInput = true;

            //    Menü Efekti
            do
            {
                while (!Console.KeyAvailable)
                {
                    Console.ForegroundColor = ConsoleColor.Red;
                    Console.WriteLine("Demoyu Bitirmek için 'ENTER' a basın.");
                    Console.ForegroundColor = ConsoleColor.Blue;
                    for (int i = 1; i < 11; i++)
                    {
                        System.Threading.Thread.Sleep(100);
                        Console.SetCursorPosition(i, i);
                        Console.WriteLine("1");
                        Console.SetCursorPosition(10 - i, i);
                        Console.WriteLine("1");
                    }

                    Console.Clear();
                }

            } while (Console.ReadKey(true).Key != ConsoleKey.Enter);

            // MENÜ

            do
            {
                Console.Clear();
                Console.ForegroundColor = ConsoleColor.White;
                Console.WriteLine("Seçiminizi yapın:");
                Console.WriteLine("[1] Demo1");
                Console.WriteLine("[2] Demo2");
                Console.WriteLine("[3] Demo3");
                Console.WriteLine("[4] Çıkış");
                Console.SetCursorPosition(0, 0);

                t = Console.ReadKey().KeyChar;
                Console.ForegroundColor = ConsoleColor.Yellow;
                if (t == rakam[0])
                {
                    Console.Clear();
                    Console.WriteLine("1. demoya hoşgeldiniz");
                    Console.ReadKey();
                }
                else if (t == rakam[1])
                {
                    Console.Clear();
                    Console.WriteLine("2. demoya hoşgeldiniz");
                    Console.ReadKey();
                }
                else if (t == rakam[2])
                {
                    Console.Clear();
                    Console.WriteLine("3. demoya hoşgeldiniz");
                    Console.ReadKey();
                }
                else if (t == '4')
                {
                    Console.ForegroundColor = ConsoleColor.Magenta;
                    Console.Clear();
                    Console.WriteLine("Çıkış Yapılıyor.");
                    System.Threading.Thread.Sleep(500);
                    Console.Clear();
                    Console.WriteLine("Çıkış Yapılıyor..");
                    System.Threading.Thread.Sleep(500);
                    Console.Clear();
                    Console.WriteLine("Çıkış Yapılıyor...");
                    System.Threading.Thread.Sleep(500);
                    Console.Clear();
                }
                else
                {
                    Console.Clear();
                    Console.ForegroundColor = ConsoleColor.Red;
                    Console.Write("Yanlış bir tuşa bastın, tekrar dene!");
                    System.Threading.Thread.Sleep(1000);
                }

                Console.Clear();
            } while (t != '4');
}
 

hasbi_muharip

Asistan
Katılım
11 Ocak 2010
Mesajlar
142
Reaksiyon puanı
1
Puanları
18
[MENTION=75718]aslanpayi[/MENTION] hocam çok çok teşekkürler başkaları ilgilenmedi ya da görmedi. Elleriniz dert görmesin :)
 

hasbi_muharip

Asistan
Katılım
11 Ocak 2010
Mesajlar
142
Reaksiyon puanı
1
Puanları
18
Rica ederim, umarım istediğini doğru anlayıp ilk bölümü doğru düzenlemişimdir.

Aynen hocam bunu istiyordum normalde uğraştığımda animasyonun döngüsünün devam etmesi için bir tuşa basılmasını bekliyordu(readkey)
Sizin verdiğiniz kod sayesinde animasyon devam ederken aynı anda bir tuşa basılmasını da kontrol edebiliyorum :)
Console.TreatControlCAsInput = true;
Bütün olay bu kodda mı bitiyor hocam? yoksa do-while döngüsü içerisine bir tane de while eklediğiniz için mi?
 

aslanpayi

Doçent
Katılım
12 Ağustos 2009
Mesajlar
523
Reaksiyon puanı
1
Puanları
0
İçteki

Kod:
while (!Console.KeyAvailable)

klavyeyi sonsuza kadar dinler. Tuşa basılmadığı sürece döner durur. Ne zaman ki bir tuşa basarsın o zaman döngüden çıkar. Ve dıştaki

Kod:
while (Console.ReadKey(true).Key != ConsoleKey.Enter)

çalışır. Buradaki sonsuz döngü de basılan tuşun enter olup olmadığını sorgular ve değilse seni yine içteki döngüye havale eder.
Bu yöntem genelde klavyede basılmasını istemediğimiz tuşları devre dışı bırakmada kullanılır.
Enter tuşu harici diğer tuşlar devre dışı kalmış oldu böylece ve senin animasyon da devamlı dönmeye başladı tabi.
Kod:
Console.TreatControlCAsInput = true;
Burada da Ctrl+C tuşuna bastığımızda programın sonlanmasını engelliyoruz. false olursa Ctrl+C programı sonlandırır.
 
S

SDN Okuru

SDN Okuru
Hocam konuyla alakası olduğundan soruyorum bir tuşa basılma süresini elde edebileceğim bi kod lazım örneğin a ya bastım aya bastıktan 3 sn sonra b ye bastım o aradaki geçen süreyi nasıl bulacam
 
Üst