Dana önceden Bilge Adam intro projelerinden olan Kart Dağıtımı uygulamasını yaptığımızı bir çok kişi hatırlar herhalde. O uygulama görsel ve her oyuncuya 5’er kart dağıtımına dayanan, toplam 4 oyuncu olan bir uygulama idi. Şimdi yine bir uygulama yapalım ama console uygulaması olarak yapacağım. Amacım benim dizi mantığını iyice kavratmak. Buradaki amacım ise yine 4 tane oyuncuya iskambil kağıtlarını dağıtmak. Yani her bir oyuncuya 13 kart gelecek. Kartları program kodlarımda oluşturacağım ve dağıtımı rasgele yapıp aynı kartın bir diğer oyuncuya gelmemesini sağlayacağım. Şimdi bu genel açıklamamın ardından detaya geçiyorum.
Şimdi uygulamamda dizimde referans type kullanacağım yani object oriented baz alarak kartları oluşturmak için class yolu ile kodlarımı yazacağım. Yani iskambil kağıtlarını oluşturmak ve bunları rasgele dağıtabilmek için bir sınıf yazacağım. Şimdi iskambil kağıtlarını hayal edelim, 4 grup kart mevcut. Nedir bunlar? Maça, Sinek, Karo, Kupa. Her bir grup içinde ise 13 kart var, bunlar ise : AS, ikili, üçlü, dörtlü, beşli, altılı, yedili, sekizli, dokuzlu, onlu, bacak, kız, papaz gibi.
Şimdi ben bu kartları oluşturabilmek için projemde Kart isminde bir class oluşturacağım. Visual Studio üzerinde console uygulaması açtım bu arada. Projeme Kart adında bir class ekliyorum.
Şimdi önce yazalım kodlarımızı sonra açıklayalım. Zaten kod yanlarında da mümkün olduğunca açıklama satırlarımı ekliyorum.
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace KartDagitim { public class Kart { private string Deger; //kart değerini burada tutacağım private string Grup; //kart grubunu da burada tutacağım //iki paremetreli constructor oluşturuyorum, //buradaki değerler ile kartlarımı oluşturuyorum public Kart(string KartDeger, string KartGrup) { Deger = KartDeger; //KartDegeri çalıştırılıyor Grup = KartGrup; //KartGrubu çalıştırılıyor } //Burada kart constructor sonlanıyor //Aşağıdaki metodum ile kartın değerini yazdırıyorum public override string ToString() { return Grup + " " + Deger; } //ToString metodunu burada sonlandırıyorum } //Kart classı burada sonlanıyor }
Böyelikle Kart oluşturmak için sınıfımı oluşturdum. Görüleceği üzere sınıf içinde hem constructor mevcut, hem de metot mevcut. Açıklama satırlarını da yanlarına ekledim. Şimdi de bu sınıfı kullanarak her bir kartın nasıl oluşturulacağını yazmam gerekiyor. Bunun içinde yeni bir sınıf (class) oluşturacağım.
Bu class adı da KartGrubu olsun. Projeme bir adet daha class dosyası ekliyorum.
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace KartDagitim { public class KartGrup { private Kart[] KartGrubu; //Kart nesnesinden bir dizi oluşturuyorum private int GuncelKart; //KartGrubu dizisindeki elemanların indeksi için kullanacağım private const int Kart_Sayisi = 52; //Kartların toplam sayısını sabit bir değişkene aldım private Random RastgeleSayi; //Rastgele sayı oluşturmak için değişken oluşturdum //Kartların gruplarını oluşturmak için bir constructor yazıyorum public KartGrup() { //değerler dizisini ve gruplar dizisini oluşturuyorum string[] degerler = {"AS","İkili","Üçlü","Dörtlü","Beşli","Altılı","Yedili","Sekizli", "Dokuzlu","Onlu","Vale","Kız","Papaz"}; string[] gruplar = { "Kupa", "Karo", "Sinek", "Maça" }; //Kart sınıfımdan nesnemi alıyorum. KartGrubu = new Kart[Kart_Sayisi]; GuncelKart = 0; RastgeleSayi = new Random(); //Kartlarımı oluşturuyorum for (int sayac = 0; sayac < KartGrubu.Length; sayac++) { KartGrubu[sayac] = new Kart(degerler[sayac % 13], gruplar[sayac / 13]); } } //constructor sonu public void KartKaristir() { //Her karıştırma sonrası GuncelKart değerini sıfırdan başlatıyorum GuncelKart = 0; //her bir kart için rastgele karıştırma işlemi for (int birinci = 0; birinci < KartGrubu.Length; birinci++) { //0 ile 51 arasında rastgele sayı oluşturuyorum int ikinci = RastgeleSayi.Next(Kart_Sayisi); //GuncelKart değerini rastgele seçilen kart değeri ile değiştiriyorum Kart gecici = KartGrubu[birinci]; KartGrubu[birinci] = KartGrubu[ikinci]; KartGrubu[ikinci] = gecici; } // for döngüsü sonu } //KartKaristir metodu sonu //Kart paylaştırma metodum public Kart KartPaylas() { if (GuncelKart < KartGrubu.Length) return KartGrubu[GuncelKart++]; //dizideki güncelkart değerini geri döner else return null; } //KartPaylas metodu sonu } }
Görüleceği üzere bu sınıfımda da kartlarımı Kart sınıfından alarak oluşturuyorum. Ayrıca KartKaristir metodu ve KartPaylas metodu ile de kartlarımı karıştırıyorum ve 4 oyuncuya paylaştırıyorum. Gerekli açıklamaları kodlarımın yanında yazdım.
Şimdi de programın ana metninde bu sınıfları ve metotları kullanarak kartlarımı dağıtayım.
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace KartDagitim { class Program { public static void Main(string[] args) { KartGrup kartlarimiz = new KartGrup(); kartlarimiz.KartKaristir(); for (int i = 0; i < 52; i++) { Console.Write("{0,-19}", kartlarimiz.KartPaylas()); if ((i + 1) % 4 == 0) Console.WriteLine(); } Console.ReadLine(); } } }
Sonucu görelim :
Uygulamayı indirmek için aşağıdaki linki kullanabilirsiniz.