Deneyimlerim
Aslında bu düşünceye aylar önce karar kılmıştım ancak bazı sebeplerden ötürü ara vermek durumunda kaldım. Programlama adına yeni yeni deneyim kazanmaya başlayan biri olarak kodlar bir tık karışmaya başlamıştı ki bu işi tekrardan ele almam gerektiği konusunda bir düşünce edindim.
Deneyimsiz olmanın eksikliklerinden biri de bu; gereksiz bir yığın kod yazabilirsiniz ve en kötüsü de bunları asla fark edemeyebilirsiniz. (Bu da algoritmanın karışmasına sebebiyet verir.) Bu yüzden bu konu hakkındaki çalışmamı, yaptığım araştırmalarımla bir arada götürmeye çabalıyorum. Yani bir nevi bir yandan öğrenirken diğer yandan hedeflediğim şeyi yapmaya çalışıyorum. Yeni bir şeyler öğrendiğimdeyse bunları eskileriyle değiştiriyorum. Tabii tasarımı öyle yapmış olmalıyım ki bu değişimler sırasında bir karmaşa meydana gelmesin.

Başlangıç (Algoritma Oluşturmak)
Birkaç ay öncesindeki deneyimlerimden de yola çıkarak şu an için diyebilirim ki bir satranç motoru oluşturabilmek için öncelikle bir algoritma inşa etmeliyiz. (Gerçi bu programlama mantığında her bir program için geçerli olan bir şeydi 🙃) Peki ya algoritma neydi?
"Algoritma, belli bir problemi çözmek veya belirli bir amaca ulaşmak için tasarlanan yoldur." Yani öncelikle bu programı çalıştırdığımızda nelerin gerçekleşmesini istediğimizi bir liste şeklinde sıralayacağız.
Kısa olarak bir şeylerden bahsetmek istiyorum. Şu anda tam anlamıyla bir satranç motorundan farklı olarak yalnızca hamlelerin belirli kurallar dahilinde sürekli olarak yapıldığı bir program yapma hedefindeyim. Satranç içerisinde yer alan şah, açmaz ve mat gibi durumları kodlamak bana şu an için oldukça karmaşık geliyor. Bu yüzden ilerleyen zamanlarda bu verileri eklemeyi düşünüyorum.

İzin verin yukarıdaki resimde bulunan maddeleri belli bir düzenle açıklayayım:
- İlk maddede yaptığımız şey yalnızca programımızı çalıştırmak.
- İkincisindeyse program içerisinde kullanacağımız verileri tanımlamak. Bunlara örnek olarak satranç tahtasını veya satranç taşlarını verebiliriz. Şöyle düşünün; bir grup çalışanla ayrıcalıklı bir iş yapacağımızı varsayalım. Eğer yapacağımız işi, çalışanlara bu iş hakkında önceden bilgi vermeksizin yapmaya başlarsak, çalışanlar bu konu hakkında bilgi sahibi değillerse karşılarına çıkan sorunları nasıl çözümleyeceklerini bilemezler. İşte buna benzer bir mantıkla programın işleyeceği verilerin arasına daha önceden tanımlamadığımız bir nesneyi katamayız. Böyle bir durumda program hata verir.
- Sonraki adım olarak üçüncü adımda da oyun döngüsünü başlatıyoruz. Bundan sonra, hamle sırası gelen taraf için tahtada mevcut taşlarımızı tanımlıyoruz. Buradaki 'HS' kavramı hamle sırası gelen tarafı temsil ediyor. Ardından elimizdeki bu taşlar arasından birini seçip, seçilen taşın gidebileceği tüm kareleri bir değişkene listeliyoruz. Değişkene listelemekten kastım bir veri olarak kaydetmek anlamına geliyor. Örneğin; a2 piyonu için [a3, a4] kareleri gidilebilir karelerdir.
- Şimdiyse belirlediğimiz taşın yapabildiği hamleler arasından birini seçip o hamleyi yapıyoruz. (Ek olarak satranç tahtasında da uyguluyoruz)
- Son olarak ise hamle sırasını değiştirip (beyazdaysa siyaha, siyahdaysa beyaza çevirmek gibi), oynanan son hamle için satranç tahtasını ekrana yazdırdıktan sonra programı birkaç saniye bekletip (bizlerin görebilmesi için) oyun döngüsüne geri dönüyoruz.
- Tüm bu işlemler sürekli olarak devam eder. Ta ki programı durdurmak için gerekli koşulların sağlanacağı süreye dek. Bunun için dördüncü ve altıncı maddelerde var olan parantez içerine bakalım. Dördüncü adımda diyoruz ki; eğer hamle sırası gelen kişinin tahtada herhangi bir taşı yoksa programı durdur. Çünkü kişinin tahtada hamle yapacak bir taşı kalmamıştır.
- Altıncı adımda ise beşinci adımda seçtiğimiz taşın gidebildiği kareleri belirlememiz gerekiyor. Ve diyoruz ki; eğer oynanacak hiçbir hamle yoksa öncelikle tahtada sahip olduğumuz tüm taşları sırayla gez ve yapabilecekleri bir hamle var mı bak. Eğer bu durum sağlanmıyorsa yani sahip olduğumuz hiçbir taş hiçbir hamle yapamıyorsa bu durumda programı kapat.
Sonuç Olarak
Sanırım bugün için bu kadarıyla kalsak daha iyi olacak. Bu bölümde, yapacağımız satranç motoru için algoritmanın tanımını ve nasıl işlediğini az da olsa öğrenmiş olduk. Sonraki yazımda da sanıyorum ki bu öğrendiklerimizi uygulamalı bir şekilde kod satırına nasıl dökeceğimiz konusu üzerine konuşuruz.
Yukarıda da bahsettiğim üzere normal bir satranç motorundan ziyade daha basitleştirilmiş bir sistem yapma çabası içerisindeyim. Bir şeyleri yeni yeni öğrenen biri olarak hem kendi açımdan hem de sizin açınızdan anlaşılması ve uygulanması kolay olması için basitten başlayıp durumu yavaş yavaş zorlaştırmam daha iyi olacaktır diye düşünüyorum.
Ayrıca demek isterim ki bu taslak için kafanıza takılan herhangi bir durumu fazla önemsemeyin. Bu çok seçeneğimiz olduğu bir konu. Taslağın tasarımını kendi yorumumla bu hale getirdim diyebilirim. Yani maddelerin içeriği ve de sıralanışı açısından değişmez bir olguyla karşı karşıya değilsiniz. Tam olarak kavrayamadığınız şeyleri emin olun uygulamalı olarak yaptığımız zamanlarda daha iyi anlayacaksınız. Daha sonra görüşmek üzere hoşça kalın!
Aşk İlişkileri
Kadın Emeği
Gündem
Dünya Kupası
Güzellik & Bakım
Alışveriş & Hediyeler
Kızlar Bir Adım Öne
Tatil & Seyahat
Arabalar
Astroloji & Burçlar
Eğitim & Kariyer
Gamer
Moda & Stil
Spor
Evcil Hayvanlar
Müzik & Etkinlik
Kültür & Sanat
Para & Ekonomi
Magazin
Diziler & Filmler
Cilt Bakım
Kişilik & Karakter
Saç Bakım
Çocuk & Ebeveyn
Yeme & İçme
İnternet & Teknoloji
Ev & Yaşam
Özel Günler & Hijyen
Cinsel Yaşam
Aile & Toplum
Diyet & Beslenme
Sağlık
YKS2026
Diğer