Bu yazımda Google’dan bulduğumuz bir timer kodu ile console ekranında aşağıya doğru düşen * karakteri uygulaması yazılacaktır.
Google’da arama: Google uygun kelimelerle arama yaptığımızda genelde ilk sonuçta cevapla karşılaşabiliriz. Hatta yazılımcıların cevaplarını paylaştığı forum sitesi stackoverflow.com karşımıza çıkabilir. Bu durumda biraz İngilizce biraz kod okuma yeteneği ile uygun cevabı bulmamız kaçınılmazdır. Google “Console C# Timer” yazdığımızda ilk sonuç (stackoverflow’dan) ve biraz forumu okuyunca sonlara doğru bir kod tam işime yarar diye düşünüyorum. (Hatta bazen sondan başlarım okuma, bazen de okumam sadece kodlara bakıp hangisi uygun diye bulmaya çalışırım. Bende hayatımda aşağıdaki kodtaki TimerCallBack ile ilk defa karşılaşıyorum.) Aşağıdaki kodu seçtim ve kendi uygulamamı bu kod üzerine inşa etmeye karar verdim.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 |
using System; using System.Threading; class TimerExample { static public void Tick(Object stateInfo) { //Ekrana saat yazdırılıyor. 1 saniye bir yazar. Console.WriteLine("Tick: {0}", DateTime.Now.ToString("h:mm:ss")); } static void Main() { //timer tekrar çağırma ve tick fonksiyonu tekrar çağrılıyor. //tick fonksiyonu object almak zorunda, TimerCallBack TimerCallback callback = new TimerCallback(Tick); Console.WriteLine("Creating timer: {0}\n", DateTime.Now.ToString("h:mm:ss")); // create a one second timer tick (1 saniyelik tick oluştur) Timer stateTimer = new Timer(callback, null, 0, 1000); // loop here forever //Program sonlanmasın diye sonsuz döngü for (; ; ) { } } } |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 |
using System; using System.Threading; using System.Collections.Generic; class KarlarDuser { //kar tanesi koordinatları static List<int> l_x = new List<int>(); static List<int> l_y = new List<int>(); //random sayı için üreteç static Random r = new Random(); //y=0 ve herhangi bir x koordinatında gelsin. static public void Tekrar(Object stateInfo) { kartanesiYarat(); gereksizkartanelerinitemizle(); kartaneleriBirAsagiIndir_Goster(); } static public void kartanesiYarat() { l_x.Add(r.Next(0, Console.WindowWidth)); l_y.Add(-1);//aşağıda 1 arttırılcak kar tanesi } static public void kartaneleriBirAsagiIndir_Goster() { Console.Clear();//ekran temizlendi. for (int i = 0; i < l_y.Count; i++) { l_y[i]++; //Yeni koordinata tane ekleniyor ve gösteriliyor Console.SetCursorPosition(l_x[i], l_y[i]); Console.Write("*"); } } static public void gereksizkartanelerinitemizle() { int kartanesi_sayisi = l_x.Count; int i = 0; //While döngüsü olmak zorunda, count değeri değişken olduğu için while (true) { //Gereksiz kar taneleri if (l_y[i] >= Console.WindowHeight) { l_y.RemoveAt(i); l_x.RemoveAt(i); } else i++; if (i == l_x.Count) break; } } static void Main() { TimerCallback callback = new TimerCallback(Tekrar); Timer stateTimer = new Timer(callback, null, 0, 1000); //daha hızlı çalışması için 500, 100 yazılabilir. for (; ; ) { } // bir tuş belirlenir ve break kullanılıp program sonladırılabilir. } } |
Proje linki: Oyun.zip (63,82 kb). (Oyun ve kar projesi birlikte, Set as Startup Project diyerek değiştirebilirsiniz.)