Örnek Console Uygumalaması: Gelişmiş Kutu
C# ve algoritma bilgisini arttırmak isteyen arkadaşlar bu yazıyı inceleyebilirler.
Programda method, anonymous method, if, for, do-while, rastgele sayı üretme, klavye kontrolü, sistem bekletme gibi konulara örnekler bulabilirsiniz.
Programın özellikleri:
- Console ortamında çift çizgilerden oluşturulan bir kutu çizdiriyoruz.
- Boşluk tuşu (space bar) ile otomatik/elle kutu hareketi sağlanıyor.
- PageUp / PageDown tuşları ile kutu hızı ayarlanıyor.
- Elle hareket modunda, yön tuşları ile kutu hareket ettiriliyor.
- Shift+yön tuşları ile kutu büyüklüğü/genişliği arttırılıyor/azaltılıyor.
- Kutu ekran kenarlarına çarpınca renk değiştiriyor.
- ESC tuşu ile programdan çıkılıyor.
Uygulama kodları:
using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace KutuUygulamasi { class Program { static void Yaz(int x, int y, char c) { Console.CursorLeft = x; Console.CursorTop = y; Console.Write(c); } static void Box(int x, int y, int w, int h) { Console.Clear(); Yaz(x, y, '?'); Yaz(x + w - 1, y, '?'); Yaz(x, y + h - 1, '?'); Yaz(x + w - 1, y + h - 1, '?'); for (int i = 1; i < w - 1; i++) { Yaz(x + i, y, '?'); Yaz(x + i, y + h - 1, '?'); } for (int i = 1; i < h - 1; i++) { Yaz(x, y + i, '?'); Yaz(x + w - 1, y + i, '?'); } } static void Main() { Random rnd = new Random(); int mw = Console.WindowWidth; int mh = Console.WindowHeight; int w = 5; int h = 5; int x = rnd.Next(80 - w); int y = rnd.Next(25 - h); int artisX = 1; int artisY = 1; int sure = 50; bool oto = true; Action CarpmaTest = () => { if (x == 0 || (x + w == mw) || (y == 0) || (y + h == mh)) { int rast = rnd.Next(16); Console.ForegroundColor = (ConsoleColor)rast; } }; do { if (Console.KeyAvailable) { ConsoleKeyInfo key = Console.ReadKey(); if (key.Key == ConsoleKey.Escape) return; if (key.Key == ConsoleKey.Spacebar) { oto = !oto; } if (key.Key == ConsoleKey.PageDown) sure += 10; else if (key.Key == ConsoleKey.PageUp) { if (sure > 10) sure -= 10; } else if (key.Modifiers == ConsoleModifiers.Shift && key.Key == ConsoleKey.RightArrow) { if (x + w < mw) w++; } else if (key.Modifiers == ConsoleModifiers.Shift && key.Key == ConsoleKey.LeftArrow) { if (w > 2) w--; } else if (key.Modifiers == ConsoleModifiers.Shift && key.Key == ConsoleKey.UpArrow) { if (y + h < mh) h++; } else if (key.Modifiers == ConsoleModifiers.Shift && key.Key == ConsoleKey.DownArrow) { if (h > 2) h--; } if (!oto) { if (key.Key == ConsoleKey.RightArrow) { if (x + w < mw) x++; else artisX = -1; } else if (key.Key == ConsoleKey.LeftArrow) { if (x > 0) x--; else artisX = 1; } else if (key.Key == ConsoleKey.DownArrow) { if (y + h < mh) y++; else artisY = -1; } else if (key.Key == ConsoleKey.UpArrow) { if (y > 0) y--; else artisY = 1; } CarpmaTest(); } } Box(x, y, w, h); if (oto) { if (artisX == 1) { if (x + w < mw) x++; else artisX = -1; } else { if (x > 0) x--; else artisX = 1; } if (artisY == 1) { if (y + h < mh) y++; else artisY = -1; } else { if (y > 0) y--; else artisY = 1; } System.Threading.Thread.Sleep(sure); CarpmaTest(); } else { while (!Console.KeyAvailable) ; } } while (true); } } }
Merak edenler için ascii karakter tablosu:
Programın kodlarını incelediyseniz ben de bir soru sorayım:
CarpmaTest isimli anonymous methods (isimsiz metod) u neden kullanmış olabilirim?
Cevabını beğendiğim ilk 3 kişiye MyPageX'ten %100 indirim kuponu vereceğim.
Program kodlarını buradan indirebilirsiniz.
Herkese kolay gelsin.
#CSharp #C #ascii #algoritma #method #anonymous-method #if #for #do-while #rastgele-sayı-üretme #klavye-kontrolü #sistem-bekletme