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:
- Oyun tahtasını temsil edecek veri yapısını oluşturma.
- Tahtayı komut satırına yazdırma fonksiyonunu oluşturma.
- Oyuncuların hamlelerini alma ve doğrulama fonksiyonunu oluşturma.
- Taşların hareketlerini tanımlama ve geçerli hamleleri kontrol etme fonksiyonlarını oluşturma.
- Oyunun bitip bitmediğini (şah mat, pat vb.) kontrol etme fonksiyonunu oluşturma.
- 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.