Ö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