Deniyor 1 ay

Python'la Satranç Motoru Yapmak (Başlangıç Seviyesi)

Cyloc

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.

Pythonla Satranç Motoru Yapmak (Başlangıç Seviyesi)

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.

Pythonla Satranç Motoru Yapmak (Başlangıç Seviyesi)

İ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!

Python'la Satranç Motoru Yapmak (Başlangıç Seviyesi)
8
24
Görüşünü yaz
8Kız Görüşü
24Erkek Görüşü

Diğer Görüşler İçin Aşağı Kaydır

Kızlar & Erkekler Ne Diyor?

824
  • lloves
    Çok güzel bir yazı olmuş yazılım okuyan birisi olarak söylüyorum fakat çok basit olmamış mı başlangıç seviyesi bile olsa çünkü satranç botu bir taş yiyebileceği zaman onu yer ama bu kodlarda gördüğüm kadarı ile yanlış okumadıysam yapabileceği hamlelerden rastgele birini yapıyor yani fille rakibin taşını yemek yerine piyonda açabilir , tabii başlangıç olduğu için ve amaç satranç yapmak değilde Python öğrenmek veya öğretmek amacı ile yapıldıysa gayet güzel bir aktivite yazın için tebrik ederim.
    • lloves

      kusura bakma reis alttaki yazıları okumamışım direkt kodlara bakıp geçtim benim hatam seviliyorsun💜😀

    • Cyloc

      Destekleyici yorumun için ben teşekkür ediyorum. <3

  • Çok güzel açıklamışsın satrancı bilmiyordum ama tek okuyuşta 3-5 bir şey aklıma yattı eline sağlık 😊
  • UDixon
    Güzel olmuş algoritmayı iyi anlarsan gerisi geliyor zaten önemli olan planlama yapmak.
  • sadediter
    Kral bende senden gordum aklımda da kalmıstı, pythonla ugrasmayıda bırakmıstım bayadır. d tekrar etmek icin giristim bu ise, ortaya bu cıktı. 600 satır falan... Simdiki goruntusu profilimde var valla hic beklemiyordum yapabilmeyi.

    Şu an sadece Rok yapma olayı kaldı, onuda yarın yazarım sanırım. Piyonların terfi etmesi, gecerken alma gibi seyler yordu zaten beynim sulandı. d

    Bi 3d gibi olmasa da güzel bea D
    • sadediter

      Bu arada renkleri kırmızı ve mavi yaptım cunku siyah terminalde pek gostermiyordu kendini siyah taslar. Ve sana ipucu veriyor program, mesela FIL sectin sana gidebilecegin kareleri beyaz yaparak gosteriyor coğ guzel akljhdsa

    • Cyloc

      Oo, güzelmiş. Tebrik ederim. Ben de buradan bağımsız olarak yapmaya çabalıyorum. Kuralları işlemek oldukça zahmetli. Tüm kuralları işleyebildin mi? Kod düzeni bu durumda çok önemli, öbür türlü gerçekten patates oluyor insan. :) Ayrıca, tüm kuralları işleyip işlemediğini anlayabilmek için; ekstra olarak, satranç konusunda derinlemesine bir bilgiye sahip değilsen, profilimde yer alan 'Satranç Nasıl Oynanır?' adlı 'bence'mdeki kurallara bakınabilirsin.

    • sadediter

      Bütün kurallar işlendi, Rok dışında, chess sitesinden baktım ona göre yazdım. Bi de seninkine bakayım kral

    • Hepsini Göster
  • EmirAdakul
    Pyhton öğrendikten sonra uygulama yapılabilecek en iyi programalrdan biri
  • Captainpricexx
    İlginç bir bilgi. Denemek istiyorum. satranç ilgi çekici ya
  • postmodernpokemon
    Faydalı bilgiler , teşekkürler.
  • sadececengiz
    Zor işler
    • Cyloc

      Üzerinde durdukça ve bu bilgiler içerisinde zaman geçirdikçe bu işin pek de zor olmadığını anlayacaksınız. Önemli olan sabırla beklemek ve istikrarla devam etmek.

  • LacivertGandalf
    İşme yarar
  • Ben_arıza
    güzel faydalı
  • BeyazAtlıBirPrens
    Güzel paylaşım
    • Cyloc

      Teşekkür ederim.

  • staybehind2
    hiç denemedim nedesem boş
  • Wlesya
    Teşekkürler bilgi için.
    • Cyloc

      Rica ediyorum.

  • Sine_
    Güzel paylaşım
  • bensherlock
    Satrancı az çok biliyorum alınca bol bol oynarım
  • xhgahsdas
    Güzel
  • neoluyoranlamadım
    Eline sağlık çok güzel
    • Cyloc

      Teşekkür ederim.

  • cattyperry
    Teşekkürler
  • AyşeNurr35
    Denemekte fayda var, teşekkürler :D
  • geceningölge
    Bilgilendirici olmuş
  • MutsuzAdamxx
    iyiymiş
  • Elspartacus
    Uzun ama güzel paylaşım
  • carlito44
    brovo kardeşim++
  • Beniaskainandirrr
    Gizel
  • Gizli Üye
    anlatımın çok akıcıydı
    • Cyloc

      Teşekkür ederim.

  • Gizli Üye
    Değişik
  • Gizli Üye
    Programlama zor is zeka ve caba istiyor
    • + sabır

    • Cyloc

      Aslında her insan, bilgisi olmadığı konuda zorlanır. Yazılım, günümüzde, Türkiye içersinde pek gündemde olmadığı için, alaka bakımından uzakta olduğumuz şeyler bize zor geliyor.
      Einstein: "Çok zeki olduğumdan değil, sorunlarla uğraşmaktan vazgeçmediğimden başarıyorum."

    • Gizli Üye

      Proglamlama bildiğim için zor dedim gerçekten zordu sadece bilgi ile çözemezsin sabır lazim cana lazim dizayn yeteneği lazim analitik zeka ister sadece çalışarak öğrenerek çözülecek is degil

    • Hepsini Göster
  • Gizli Üye
    Fransız kaldım.🙄
    • Cyloc

      Bu tür konulara ilgiliniz varsa, okudukça zaman içerisinde elbet bir şeyleri anlamaya başlayacaksınızdır.

  • Gizli Üye
    tesekkürler..
  • Gizli Üye
    Bilgilendirici olmuş teşekkürler
  • Gizli Üye
    Güzel bi paylaşım teşekkürler
  • Gizli Üye
    Güzel paylaşım
YÜKLENİYOR...