Bu yazıyı, okuyan kişinin temel seviyede Python bilgisine sahip olduğunu baz alarak yazdım.
Dosya ve Taslak Oluşturma

Öncelikle bir klasör ve onun altına bir Python dosyası oluşturuyoruz. (bkz. Fotoğraf 1) Bu dosya, yapay zekâmızın ana kodlarını kapsayacak.

Oluşturduğumuz dosyanın içerisine, fonksiyonlarımızı belirteceğimiz sınıfımızı ve temel __init__ fonksiyonumuzu kodlayalım. (bkz. Fotoğraf 2)

__init__ fonksiyonumuzaysa, 'game status'ü (oyun durumunu), 'lunge order'ı (hamle sırasını) ve 'chessboard'ı (satranç tahtasını) içeren değişkenlerimizi 'None' (Hiçbiri) olarak tanımlayalım. (bkz. Fotoğraf 3)
Satranç tahtası 8 satır ve sütundan oluşan 64 karelik bir nesne olduğundan, bir liste içerisine 8 ayrı liste ekleyerek ve her birine 8'er tane eleman tanımlayarak sanal bir tahta oluşturabiliriz. Bu, tahtadaki her kareye ulaşabilmemize yarayacak. Örneğin bir kareyi liste indeksleme yöntemiyle çağırmak istediğimizde, normal bir satranç tahtasına benzer olarak, belirteceğimiz ilk değer satırı, ikincisiyse sütunu (bir başka değişle o satırın x elemanını) ifade edecek.
En sol üstteki 'bC' nesnesine ulaşabilmemiz için chessboard[0][0] kodunu yazmalıyız. Yani 0. satırın, 0. sütunu (bir başka değişle belirtilen satırın 0 elemanı).
Tahtadaki boş kareleri boşlukla, dolu kareleri de, karede bulunan taşı temsil edecek harflerle doldurdum. Örneğin black castle (siyah kale) -> bC, ya da white queen (beyaz vezir) -> wQ şeklinde.

Devamında, döngüyü başlatmamıza (loop), oyun durumunu kontrol etmemize (check_game_status), hamle sırası verisini içeren değişkenimizi değiştirmemize (change_turn) ve hamle yapmamıza (lunge) olanak tanıyacak fonksiyonları kodluyoruz. (bkz. Fotoğraf 4)

Şimdi de, döngüyü başlatıp sürdürecek olan loop fonksiyonumuzun içerisinde, fonksiyon çalışmaya başladığında yürütülecek döngü taslağını kodlayalım. (bkz. Fotoğraf)
- Döngü while döngüsüyle yenilecek ve başlangıca her dönüşünde oyun durumunu belirten değişkenin değerini kontrol edecek. Durum eğer 'None'dan farklıysa döngü duracak, aksi halde yürütülmeye devam edecek. (Detay için bkz. son madde)
- while koşulu sağlandığında öncelikle mevcut hamle sırası verisi değişecek. (Başlangıçta none'dan beyaz, sonrasındaysa beyazdan siyah olabilmesi için.)
- Değişen hamle sırası verisinden sonra sıra kimdeyse o tarafın hamle yapabilmesi adına lunge fonksiyonu oynatılacak.
- Hamle yapıldıktan sonraysa, döngü başa dönmeden hemen önce mevcut oyun durumunu kontrol edip oyun durum bilgisini barındıran değişkeni güncellemesi için check_game_status fonksiyonu çağrılacak.

Geri kalan fonksiyonları tamamlamamız gerekirse:
check_game_status
Bu, öncesinde tanımlanması gereken birçok fonksiyon ve değişkenden sonra yazılabilecek bir fonksiyon. Bu sebeple bu bölümde pas geçeceğim.
change_turn
True beyazı, False siyahı, None hiçbir şeyi temsil ediyor.
Hamle sırasını 'None' olarak tanımlamıştık. Döngü başında sırayı beyaza vermemiz gerektiği fikrini de işin içine katarak; 'None' veya 'False' koşullarında sıranın 'True'a dönmesini, aksi halde 'False'un tanımlanmasını istiyoruz. (bkz. Fotoğraf 6)
lunge
Aslında bu fonksiyonu yazabilmemiz için de öncelikle elimizde, tanımlanmış taşlara ihtiyacımız var. Bunu bu bölümde yapmayacak da olsak, fonksiyonunu tanımlayabiliriz. define_moves fonksiyonun, içerisinde hamleleri barındırdığı bir liste döndürdüğünü düşünerek taslağımızı tanımlayacağız.
(Fonksiyonun döndürdüğü örnek liste ->[ ( (0, 1), (2, 0) ), ( (1, 1), (3, 1) ) ])
Bir süre, elde ettiğimiz listeden bir elemen seçebilmek için random modülünün choice fonksiyonunu kullanacağız. Bu fonksiyon, verilen listeden rastgele bir değer seçer ve bu değer belirtilen değişkene atanır.
Elde ettiğimiz listenin ( (0, 1), (2, 0) ) olduğunu varsaydığımızda pieIndex ve movIndex olarak belirttiğimiz değişkenlerin sırayla (0, 1) ve (2, 0) olacağını görebiliriz.
Bu değişken verileriyle, satranç tahtamızdaki (chessboard) verileri değiştirebiliriz. Yapmamız gereken (0, 1) indekslerindeki karede buluna taşı (2, 0) indekslerindeki kareye taşımak. Bunu basit bir şekilde değişken atama yöntemiyle yapacağız. chessboard'ın 0. indeksindeki listenin 1. indeksindeki eleman değerini (taşı), yine chessboard'ın 2. indeksindeki listenin 0. elemanına (kareye) atıyoruz. (bkz. Fotoğraf 6)
Sonuç
Sonuç olarak, elimizdeki kod şu an için çalışmıyor da olsa taslağımızı oluşturmayı başardık. Bu kod dosyası, kenarda köşede oluşturduğunuz klasör içerisinde kalabilir ve ben yeni bölüm yayınlayana değin bizleri bekleyebilir diye düşünüyorum. :)
Görüşmek üzere!
En İyi Cevap