Tarlanın (Butonların) Hazırlanması

Mayın tarlası oyunumuzun kodlamasına 10×10 boyutunda bir butonlar panelini oluşturarak başlayalım. Bunun için yüz adet butonu sürükle bırak yöntemi ile oluşturmak tabi ki çok zor. Bundan dolayı bu butonları bir for döngüsü ile oluşturup panelimize ekleyeceğiz.

    Butonları yerleştirmek için form üzerine 500×500 boyutunda bir panel ekleyelim.

Buradaki i sayısı üzerine dönen for butonun satırını, j sayısı üzerinde dönen for döngüsü ise sütun sayısını ifade eder. Burada, butonun mayın olup olmadığını Tag özelliğine atayacağımız işaret ile sorgulayacağız. Tag özelliği bir nevi cep görevi görür kontrollerde, içine object türünde nesne alır.  Başlangıçta bütün butonları temiz anlamında “-” işareti ile işaretleyelim. Butonun yerini de Location özelliği ile belirliyoruz ve son adım olarak oluşturduğumuz butonu panelTarla.Controls.Add(b) satırı ile panele ekliyoruz.

        Tarlaya yerleştirilen butonlar içinden mayın olanların belirlenmesi:

Burada, “Button button = panelTarla.Controls[“_” + satir + “” + sutun] as Button” satırı ile satır ve sutuna göre adı belirlenen kontrolu buton olarak alıyoruz ve bu butonun Tag özelliği “-” ise mayına çevirmek adına “+” işareti ile değiştiriyoruz ve s sayısını arttırıyoruz böylece tarlaya rastgele on adet mayın döşemiz oluruz.

https://github.com/saitorhan/mayintarlasi




Mayın Tarlası

Uzunca bir aradan sonra tekrardan C# yazılarına başlıyoruz Gülümseme Yazacağımız program bir zamanlar Windows’un vazgeçilmezi olan hatta ortaokul bilgisayar derslerinde bile gösterilen mayın tarlası oyunu. Şunu hemen belirteyim ki projeyi istediğiniz zaman https://github.com/saitorhan/mayintarlasi linkinden indirebilirsiniz. Tabi projeyi yazdıkça kodlar burada görünecektir ve her yazıda projenin nasıl şekillendiğini karşılaştırabilirsiniz.




.mp3 ve .wav Ses Dosyalarını Oynatmak için User Control

Bu user controlümüzü windows form tasarlarken mp3 ve wav uzantılı ses dosyalarını çalmak için kullanabiliriz.

User Controlümüze ait Fieldler:

  • bool FileIsSelected : Çalınacak olan dosyanın seçilip seçilmediğini belirtir. Sadece okunabilir.
  • bool IsPlaying : Sesin şuanda çalınıp çalınmadığını belirtir. Sadece okunabilir.
  • string SoundLocation : Çalınacak olan sesin konumunu belirtir. Hem okunabilir hem değiştirilebilr. Değiştirilirken dikkat edilmesi gereken nokta dosya uzantısının mp3 veya wav olması gerektiğidir.

 

User Controlümüze ait Metodlar:

  • public bool PlaySound() : Sesi çalmaya başlar. çalma işlemi başarılı şekilde başlarsa true, aksi halde false döndürür.
  • public void StopSound() : Sesi çalma işlemini durdurur.

.dll dosyasını indirmek için TIKLAYIN!

Çalışır projeyi indirmek için TIKLAYIN!

.dll dosyası nasıl kullanılır? Okumak için TIKLAYIN! (Bu konu altında ki Eklentini Visual Studio’ya Yüklenmesi başlığına bakınız.)




Girilen Sayının Asallığını Test Eden Program

Hemen hemen herkesin kullandığı klasik bir yöntemdir, sayıyı kendisine kadar ki sayılara sayılara sırayla bölmek. Bu yöntem müthiş bir işlem yükü getirmektedir programa. Bugün programını yazacağımız yöntemi anlatmadan önce bu klasik yöntemi nasıl geliştirebiliriz diye biraz tartışalım önce.

Akla ilk gelen şu olabilir; bir sayı 2ye tam bölünmüyorsa hiç bir çift sayıya tam bölünmez. O halde sayıyı kendisine kadar birer birer arttırmak yerine 2ye tam bölünmediğini gördükten sonra sayıyı 3 yapıp ikişer ikişer arttırabiliriz. Zira sayı 2ye tam bölünmüyorsa kesinlikle tektir ve tek sayıyı ancak bir tek sayı tam bölebilir.

İkinci olarak sayıyı kendisine kadar arttırmak yerine yarısına kadar arttırmak daha iyidir. Çünkü hiçbir sayıyı, yarısından büyük bir sayı tam bölemez.

Şimdide gelelim asıl yönteme,

Kural şu: Bir sayıyı bölebilen bütün asal asal sayılar kendisinin karekökünden küçüktür. Dolayısı ile bir sayının karekökünü aldıktan sonra, kare köküne kadar olan sayılardan herhangi biri sayıyı tam bölebiliyorsa sayı asal sayı değildir. Ancak sayının karekökünden küçük sayılardan herhangi biri sayıyı tam bölemiyorsa sayı asaldır.

Örnek C# Kodları:




System.Environment Sınıfı ile Sistem Bilgisi Alma

Yazılım geliştirilirken bazen olur ki sistem bilgilerine ihtiyaç duyulur. Burada devreye Environment sınıfı girer. İşte bazı özellikleri



Şu an çalışma klasörü:
Environment.CurrentDirectory

İşletim sistemi 64bit mi?
Environment.Is64BitOperatingSystem

İşlemci 64bit mi?
Environment.Is64BitProcess

Bilgisayar adı:
Environment.MachineName

İşletim sistemi versiyonu
Environment.OSVersion

İşlemci sayısı
Environment.ProcessorCount

Sistem klasörü
Environment.SystemDirectory

Sistem ne kadar süredir açık?
Environment.TickCount

Şu an aktif olan kullanıcı adı
Environment.UserName

Özel Sistem klasörlerinin adresleri
Environment.SpecialFolder

Örnek Program:




Mail Gönderme Eklentisi

SMTP sunucu kullanılarak windows form uygulamasından mail göndermeyi sağlayan bir user kontroldür.

User kontrole ait elemanlar:

  • string Kime: Mailin gönderileceği mail adresi
  • string KullaniciAd: Kullanacağınız SMTP sunucu üzerindeki kullanıcı adınız. Outlook ve Gmail için mail adresidir.
  • string Sifre: Kullanacağınız SMTP sunucu üzerindeki şifreniz.
  • string Konu: Mailin konusu
  • string Mesaj: Mailin ana gövdesi

Eklentinin çalışır kodlarını indirmek için TIKLAYIN




Seri Port Üzerinden SMS Gönderme User Controlü

Bu user control Visual Studio için yazılmıştır.

Eklentinin amacı:

USB ile bilgisayara bağlanan cep telefonu üzerinden sms göndermektir. Bu smsleri gönderirken varsa sms paketlerinden düşer, sms paketi yoksa da tarifeye göre sms gönderme ücreti kesilir bakiyeden.

Eklentiyi indirmek için TIKLAYIN

Eklentinin Visual Studioya Yüklenmesi

Tools menüsünden Choose ToolBox Items… seçeneğini tıklayın

Açılan pencereden Browse… düğmesi tıklanarak SensSms.dll dosyası seçilir ve tamam düğmesine basılır. Sonuç olarak eklentimiz Visual Studionun toolboxına eklenecektir. Proje eklemek için sadece sürüklenip bırakılır. Bunun dışında yapılacak bir işlem yoktur.

EKLENTİNİN ÇALIŞIR PROJEDE KULLANILMASI

Eklenti projeye eklendikten sonra kullanmak için ilk önce Port Ayarla butonu ile telefonun bağlı olduğu seri port numarasının ayarlanması gerekmektedir. Bu işlem için, denetim masasından bilgisayara bağlı telefon ve modemlere bakılır. Buradan sms hangi modem üzerinden gönderilecekse onun port numarası programa yazılır.

Port ayarlandıktan sonra port numarasının kullanılabilir olması durumunda Gönder butonu aktif olacaktır. Bundan sonra gönderilecek telefon numarası ve mesaj yazıldıktan sonra Gönder butonuna tıklanır. Mesaj gönderiminin başarılı olması durumunda “mesaj seri porta yazıldı” uyarısı gözükecektir.




C# ile Dosya Okuma Yazma İşleme

Ödev Metni

Bir input dosyasından kayıtlar okunacak ve kayıtlarda ki bir anahtar alana göre sıralı bir output dosyası oluşturulacaktır.
    input1.txt 
Kayıtlar sırasız bir şekilde yerleştirilmiş ve bütün kayıtların uzunluğu değişkendir. Kayıtlarda ki alanların uzunlukları da genelde değişkendir ve alanlar birbirinden ‘|’karakteriyle ayrılmaktadır. Kayıtlarda ki alanlar:

Ders kodu (7 characters)

Ders adı (variable length >= 1)

Dersin kredisi (1 character)

Önşart dersi (variable length >= 0)

Ders açıklaması (variable length >= 1)

    output.txt  
Output Dosyasında yapılacak işlemler:

Sort – Output dosyasında kayıtlar Ders koduna göre sıralı olarak yerleştirilmiş olacak.
Duplicate eleme – Dosyada çift kayıtlar (aynı ders koduna sahip dersler var ise bunlar istenirse silinebilecek)
Insert – output.txt’ye sıralı yerine kayıt ekle

 

Projenin Raporu

Projenin çalışır kodlarını indirmek için TIKLAYIN

Kayıtların Dosyada Tutulma Formatı ve Kayıt Bilgilerin Ayrıştırılması

Dosyada her bir satır bit kayıttır ve her bir kaydın alanları birbirinden | karakteri ile ayrılmaktadır. Dosyadan her okumada bir satır dolayısı ile bir kayıt okunur. Okunan bu kayıt “|” karakteri baz alınarak parçalanır ve her bir parçası oluşturulan bir diziye atanır. Bu dizi içerisinde her zaman;

0. Eleman: Dersin kodu

1. Eleman: Dersin adı

2. Eleman: Dersin Kredisi

3. Eleman: Dersin şart dersi (şart ders yok ise bu eleman boş kalır)

4. Elaman: Dersin açıklaması bulunur.

Ders Sınıfı

Bu sınıf, her bir kaydı temsil eden dersleri barındıracak olan yapıyı sunar. Sahip olduğu metot ve özellikle aşağıdaki gibidir;

public enum SiralamaOlcudu

Sıralama metodunda sıralamanın hangi alana göre yapılacağını belirtmek için kullanılan parametreyi daha anlaşılır yapmak için kullanılan yapıdır. İçerdiği alan şu şekildedir;

KredisineGore, KodunaGore, AdinaGore

Sınıfın Sahip Olduğu Alan ve Yapıcı Metotlar

private string _Kod: Dersin kodunu tutar ve yedi karakter uzunluğundadır.

private string _Ad: Dersin adını tutar ve en az bir karakter uzunluğundadır.

private int _Kredi: Dersin kredisini tutar ve bir karakter uzunluğundadır.

private string _OnSart: Dersin varsa şart dersi onu tutar ve herhangi bir uzunluk sınırlamasına tabi değildir.

private string _Aciklama: Dersin açıklamasını tutar ve en az bir karakter uzunluğundadır.

Sınıf iki adet yapıcı metot içerir bunlardan biri boş parametre listesi ile çağrılabilirken diğeri nesnenin özellikleri taşıyacak şekilde çağrılır.

Ders Arama Metodu

public static Ders DersAra(string dosya, string DersKodu) prototipine sahiptir. Parametre olarak içinde arama yapacağı dosyanın adresini ve arayacağı dersin konu alır. Adresini aldığı dosyadan sırayla kayıtları çekerek aradığı kayıt olup olmadığını araştırır. Elindeki kayıt aradığı kayıt ise Ders sınıfından bir nesne olarak döndürür. Bu şekilde dosyanın sonuna kadar ilerler. Dosyanın sonuna geldi ise ve kaydı bulamadı ise Ders sınıfından null değer taşıyan bir nesne döndürür.

Sıralama Metodu

public static List<Ders> Sirala(List<Ders> Siralanacak, bool DosyayaYazilsinMi, SiralamaOlcudu NeyeGore) prototipine sahiptir. Parametre olarak sıralayacağı kayıtların listesini, sıralama sonucunun dosyaya yazılıp yazılmayacağını ve sıralamanın neye göre yapılacağını belirten değerler alır.

Sıralama işlemi için kabarcık sıralama algoritmasını kullanır. Kayıtları sırayla ikili olarak karşılaştırır. Önce gelen kayıt sonraki kayıttan büyük ise yer değiştir. Böylece her iterasyonda listenin en büyük elemanı listenin sonuna gelmiş olur. Sıralama sırasında içerisinde bulundurduğu bir switch-case yapısı ile SiralamaOlcudu parametresinin değerine göre kaydın hangi alanlarını karşılaştıracağına karar verir.

Dersleri Listeleme metodu

public static List<Ders> DersleriListele(string dosya) prototipine sahiptir. Parametre olarak kayıtların okunacağı dosya yolunu alır ve sonuçta Ders sınıfından bir liste döndürür.

Kayıtları sırayla dosya sonuna kadar okuyup her bir kaydı Ders sınıfından bir nesneye çevirip döndüreceği listeye ekler ve dosya sonuna geldiğinde listeyi dönderir.

Dosyaya Yazma Metodu

public bool DosyayaYaz(string dosya) prototipine sahiptir. Parametre olarak yazma yapacağı dosya yolunu tutar.

Üzerinden çağrıldığı nesneyi parametre ile belirtilen dosyaya eklemeye çalışır. Ekleme başarılı olursa true başarısız olursa false değer döndürür.

Form1 Sınıfı (Uygulama Katmanı)

Kayıt İçin Girilen Değerlerin Doğruluğunu Test Eden Metot

bool KayitlariKontrolEt(out string Kod,out string Ad,out int Kredi, out string onSart, out string Aciklama, out string DonecekHataMesaji) parametresine sahiptir. Parametre listesi Ders sınıfından nesnenin özellikleridir ve hatalı kayıt olması durumunda hata mesajını taşıyacak olan stringtir.

Test işlemi için öncelikle ilgili metin kutularından değerleri çekip ilgili değişkenler atar daha sonra uzunluk bilgilerine bakar. Bu noktada ders kodu değişkeninin ilk dört karakterinin harf son üç karakterinin de rakam olmasını test eder. Test sırasında ilk hatalı değişkende; ilgili değişkenin hata mesajını DonecekHataMesaji’na atar ve false değer döndürür. Bütün kayıtların doğru formatta olduğu görüldüğünde hatamesajı içeriğini boş bırakarak true değer döndürür.

İnput.txt Dosyasına Yeni Kayıt Ekleme

Bu işlem için öncelikle KayitlariKontrolEt metodu çağrılır ve true değer dönerse şu işlemleri yapar;

Metin kutularına girilen değerler ile Ders sınıfı tipinden bir nesne oluşturur ve bu nesne üzerinden DosyayaYaz metodunu çağırır.

Bir Dersi Koduna Göre Arama

Ders arama bölümünde ki ders kodu metin kutusundan arayacağı kodu alır ve bu kodla beraber içinde arama yapacağı dosya adını DersAra statik metoduna parametre olarak atar. Sonuçta dönen değer nul değer ise kaydın bulunmadığına yönelik mesaj verir. Dönen değer dolu ise kaydın bilgilerini ilgili alanlara girer.




MICROCHIP Firmasının f serisi Denetleyicileri için Timer Interrupt Sayısı Hesaplama

Programın kullanımı:

  1. Kullanılacak timer tipini seç,
  2. Kullanılacak timer bölme değerini seç,
  3. Timerın kaç saniyede bir interrupta gireceğini gir,
  4. Interrupt sayılarının küsüratlı gelmemesi için “Sadece tamsayılı interrups göster” kutucuğunu tıkla,
  5. Hesapla butonuna tıkla.

Not: Gerekli olan sürenin kaç saniye tutuğunu hesaplamak için programa dahili olan “Zaman Hesaplama” aracını kullanabilirsiniz.

Projenin çalışır kodlarını indirmek için TIKLAYIN




Metin Şifreleme Programı

Projenin çalışır kodlarını indirmek için TIKLAYIN

Program C# ile yazılmış. Program açılışta ekrandaki gibi iki seçenekle başlar. Şifreleme yapılacaksa Şifrele butonuna tıklanır. Bu buton tıklandıktan sonra aşağıdaki gibi bir şifreleme penceresi açılır.

Açılan pencerede sol tarafa şifrelenecek metin yazıldıktan sonra Şifrele butonuna tıklanır. Burada dikkat edilmesi gereken nokta metin şifrelendikten sonra ortada yazan anahtar değerinin not edilmesidir zira bu anahtar değeri şifrelenmiş metinin çözümlenmesinde kullanılacak. Şifrelendikten sonra metnin şifrelenmiş halinin worde yazılması için onay penceresi açılır. Burada onay verildiği takdirde metin word dosyasına yazılır.

Metni çözümlemek için de üst tarafta yer alan İşlemler menüsünden Çözümle işlemi seçilir.

 

Çözümlenecek olan metin sol tarafa yazılıp ortada yer alan anahtar değeri alanına anahtar yazıldıktan sonra Çözümle butonuna tıklanır.