Mustafa Aferin
Özgün ve farklı içerikler üreten python, linux ve teknoloji haberleri okumayı seven birisi

Python ile İki Kişilik Satranç Oyunu Geliştirme: Adım Adım Rehber

Python ile İki Kişilik Satranç Oyunu Geliştirme: Adım Adım Rehber

Satranç, yüzyıllardır zekayı ve stratejiyi temsil eden köklü bir oyundur. Bu rehberde, Python programlama dilini kullanarak iki kişilik, komut satırından oynanabilen basit bir satranç oyunu geliştireceğiz. Bu proje, Python'a yeni başlayanlar için harika bir öğrenme fırsatı sunarken, daha deneyimli geliştiriciler için de eğlenceli bir meydan okuma olacaktır.

Gerekli Ön Bilgiler

Bu projeye başlamadan önce Python programlama dilinin temel kavramlarına (değişkenler, döngüler, fonksiyonlar, listeler) aşina olmanız faydalı olacaktır. Ayrıca, satranç oyununun kurallarını da bilmeniz gerekmektedir.

Proje Yapısı

Oyunumuzu geliştirmek için aşağıdaki adımları izleyeceğiz:

  1. Oyun tahtasını temsil edecek veri yapısını oluşturma.
  2. Tahtayı komut satırına yazdırma fonksiyonunu oluşturma.
  3. Oyuncuların hamlelerini alma ve doğrulama fonksiyonunu oluşturma.
  4. Taşların hareketlerini tanımlama ve geçerli hamleleri kontrol etme fonksiyonlarını oluşturma.
  5. Oyunun bitip bitmediğini (şah mat, pat vb.) kontrol etme fonksiyonunu oluşturma.
  6. Oyun döngüsünü oluşturma.

1. Oyun Tahtasını Temsil Etme

Oyun tahtasını temsil etmek için bir liste (list) kullanacağız. Bu liste, 8x8'lik bir matrisi temsil edecek ve her bir eleman, tahtadaki bir kareyi temsil edecektir. Her karede bir taş olabilir veya boş olabilir. Taşları temsil etmek için aşağıdaki kısaltmaları kullanacağız:

  • 'p': Piyon
  • 'r': Kale
  • 'n': At
  • 'b': Fil
  • 'q': Vezir
  • 'k': Şah
  • ' ': Boş kare

Büyük harfler beyaz taşları, küçük harfler siyah taşları temsil edecektir.


def create_board():
    board = [
        ['r', 'n', 'b', 'q', 'k', 'b', 'n', 'r'],
        ['p', 'p', 'p', 'p', 'p', 'p', 'p', 'p'],
        [' ', ' ', ' ', ' ', ' ', ' ', ' ', ' '],
        [' ', ' ', ' ', ' ', ' ', ' ', ' ', ' '],
        [' ', ' ', ' ', ' ', ' ', ' ', ' ', ' '],
        [' ', ' ', ' ', ' ', ' ', ' ', ' ', ' '],
        ['P', 'P', 'P', 'P', 'P', 'P', 'P', 'P'],
        ['R', 'N', 'B', 'Q', 'K', 'B', 'N', 'R']
    ]
    return board

2. Tahtayı Yazdırma

Oyun tahtasını komut satırına yazdırmak için bir fonksiyon oluşturacağız. Bu fonksiyon, tahtayı görsel olarak anlaşılır bir şekilde gösterecektir.


def print_board(board):
    for row in board:
        print(' '.join(row))

3. Oyuncu Hamlelerini Alma ve Doğrulama

Oyuncuların hamlelerini alıp doğrulamak için bir fonksiyon oluşturacağız. Bu fonksiyon, kullanıcılardan hamlelerini (başlangıç ve bitiş koordinatları) isteyecek ve hamlenin geçerli olup olmadığını kontrol edecektir.


def get_move(board, player):
    while True:
        try:
            move = input(f"{player}'s turn (e.g., a2 a4): ")
            start_col = ord(move[0]) - ord('a')
            start_row = 8 - int(move[1])
            end_col = ord(move[3]) - ord('a')
            end_row = 8 - int(move[4])

            if not (0 <= start_row < 8 and 0 <= start_col < 8 and 0 <= end_row < 8 and 0 <= end_col < 8):
                print("Invalid coordinates. Please enter coordinates between a1 and h8.")
                continue

            piece = board[start_row][start_col]

            if piece == ' ':
                print("No piece at starting position.")
                continue

            # TODO: Add more validation logic here (e.g., check if the move is legal for the selected piece)

            return start_row, start_col, end_row, end_col

        except (ValueError, IndexError):
            print("Invalid input format. Please enter coordinates in the format 'a2 a4'.")

4. Taşların Hareketlerini Tanımlama ve Geçerli Hamleleri Kontrol Etme

Bu adım, oyunun en karmaşık kısmıdır. Her taş türü için (piyon, kale, at, fil, vezir, şah) hareket kurallarını tanımlamamız ve bir hamlenin taşın türüne göre geçerli olup olmadığını kontrol etmemiz gerekmektedir.

Örnek olarak piyonun hareketini kontrol eden bir fonksiyon:


def is_valid_pawn_move(board, start_row, start_col, end_row, end_col, player):
    piece = board[start_row][start_col]
    if player == 'white':
        if start_col == end_col and end_row == start_row - 1 and board[end_row][end_col] == ' ':
            return True
        elif start_col == end_col and start_row == 6 and end_row == start_row - 2 and board[end_row][end_col] == ' ' and board[start_row-1][start_col] == ' ':
            return True
        elif abs(end_col - start_col) == 1 and end_row == start_row - 1 and board[end_row][end_col] != ' ' and board[end_row][end_col].islower():
            return True
    elif player == 'black':
        if start_col == end_col and end_row == start_row + 1 and board[end_row][end_col] == ' ':
            return True
        elif start_col == end_col and start_row == 1 and end_row == start_row + 2 and board[end_row][end_col] == ' ' and board[start_row+1][start_col] == ' ':
            return True
        elif abs(end_col - start_col) == 1 and end_row == start_row + 1 and board[end_row][end_col] != ' ' and board[end_row][end_col].isupper():
            return True
    return False

Diğer taşlar için de benzer fonksiyonlar oluşturmanız gerekmektedir. Bu fonksiyonlar, taşın hareket kurallarını ve tahtadaki diğer taşların konumunu dikkate alarak hamlenin geçerli olup olmadığını kontrol edecektir.

5. Oyunun Bitip Bitmediğini Kontrol Etme

Oyunun bitip bitmediğini kontrol etmek için bir fonksiyon oluşturacağız. Bu fonksiyon, şah mat, pat veya diğer bitiş koşullarını kontrol edecektir.


def is_checkmate(board, player):
    # TODO: Implement checkmate detection logic
    return False


def is_stalemate(board, player):
    # TODO: Implement stalemate detection logic
    return False

6. Oyun Döngüsünü Oluşturma

Oyun döngüsü, oyunun ana kısmıdır. Bu döngü, oyun tahtasını yazdırma, oyuncuların hamlelerini alma, hamleleri doğrulama, tahtayı güncelleme ve oyunun bitip bitmediğini kontrol etme adımlarını tekrar tekrar gerçekleştirecektir.


def main():
    board = create_board()
    player = 'white'

    while True:
        print_board(board)

        start_row, start_col, end_row, end_col = get_move(board, player)

        # Basic move execution (without full validation)
        board[end_row][end_col] = board[start_row][start_col]
        board[start_row][start_col] = ' '

        if is_checkmate(board, player):
            print_board(board)
            print(f"{player} wins!")
            break

        if is_stalemate(board, player):
            print_board(board)
            print("Stalemate!")
            break

        player = 'black' if player == 'white' else 'white'

if __name__ == "__main__":
    main()

Tamamlanmamış Kısımlar ve Geliştirme Alanları

Bu rehberde, temel bir satranç oyununun nasıl geliştirileceğine dair bir başlangıç noktası sunulmuştur. Aşağıdaki kısımlar tamamlanmamıştır ve geliştirilmesi gerekmektedir:

  • Taşların tüm hareket kurallarının uygulanması (özellikle özel durumlar: rok, piyonun terfisi, vb.).
  • Şah, mat ve pat durumlarının doğru bir şekilde tespit edilmesi.
  • Hamlelerin yasal olup olmadığının tam olarak doğrulanması (örneğin, şah çekme durumunda hamle yapılmasına izin verilmemesi).
  • Kullanıcı arayüzünün geliştirilmesi (örneğin, grafiksel bir arayüz kullanılması).
  • Oyunun yapay zeka ile oynanabilmesi için bir yapay zeka algoritması eklenmesi.

Sonuç

Bu rehberde, Python kullanarak iki kişilik, komut satırından oynanabilen basit bir satranç oyunu geliştirdik. Bu proje, Python'a yeni başlayanlar için harika bir öğrenme fırsatı sunarken, daha deneyimli geliştiriciler için de eğlenceli bir meydan okuma olacaktır. Unutmayın, bu sadece bir başlangıç noktasıdır. Oyunu daha da geliştirmek ve daha karmaşık hale getirmek sizin elinizde.

Cevap bırakın

E-posta hesabınız yayımlanmayacak.