
Bu yazımda Python ile EasyAI kütüphanesini kullanarak TicTacToe oyunu yapacağız ve yapay zeka ile karşılıklı olarak oynayacağız.
İlk olarak EasyAI ve kullanılan parametrelerden bahsetmek istiyorum.
EasyAI Yapay Zekaya karşı Yapay Zeka veya Yapay Zekaya karşı İnsan şeklinde basit oyunlar yapmak için oluşturulmuş Negamax algoritmasını kullanan anlaşılır ve kullanışlı bir Python Kütüphanesidir.
Şimdi EasyAI de bulunan genel parametrelere ve fonksiyonlara bakalım ;
init(self, players, …) | : | Oyunu başlatacağımız kısmı temsil eder. |
possible_moves(self) | : | Yaptığınız oyun üzerinde bulunan İnsan ve Yapay Zeka için gerçekleştirile bilecek hareketleri döndürür. |
make_move(self, move) | : | Oyunda bir taraf hareket yaptığı zaman gerçekleşecek eylemi belirtir. |
is_over(self) | : | Oyunun bitip bitmediğini veya hangi durumlarda biteceğini kontrol edebileceğimiz fonksiyon. |
show(self) | : | Oyunda yapılan hareketleri ekranda gösterebileceğimiz kısım. |
scoring(self) | : | Mevcut oyunda Yapay Zeka için bir skor tanımlar. Bu skora göre Yapay Zeka bir dahaki oyunda kendini geliştirebilir. |
unmake_move(self, move) | : | Yapay Zeka için yaptığı bir hamleyi nasıl geri çekeceği ile ilgili. |
self.player veya self.players | : | Oyundaki oyuncu veya oyuncuları tanımlar. |
self.nplayer | : | Oyuna ilk olarak hangi numaralı oyuncunun başlayacağını belirtir. |
EasyAI kütüphanesini yüklemek için aşağıdaki komutu kullanıyoruz.
1 2 3 4 |
pip install easyAI veya Eğer kütüphane kurulum dosyaları elinizdeyse. python setup.py install |
Kodumuz ;
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 |
from easyAI import TwoPlayersGame, AI_Player, Negamax from easyAI.Player import Human_Player class TicTacToeOyunu(TwoPlayersGame): def __init__(self, Oyuncular): self.players = Oyuncular # Oyuncularımız self.nplayer = 1 # Oyuna Hangi Oyuncu Başlyacak ? self.board = [0 for i in range(9)] # Oyunumuz İçin Tahtamızı Çiziyoruz. def possible_moves(self): # Tahta Üzerinde Seçim Yapabileceğimiz Boş Alanlar. return [x + 1 for x, y in enumerate(self.board) if y == 0] def make_move(self, move): # Seçimi Yaptığımızda Tahtamız Üzerinde İlgili Alana Oyuncumuzu Atıyoruz. self.board[int(move) - 1] = self.nplayer def umake_move(self, move): # Yapay Zeka İçin Hamle Geri Alma Metodu. self.board[int(move) - 1] = 0 def condition_for_lose(self): # Hangi Durumda Kaybedeceğimiz. possible_combinations = [[1,2,3], [4,5,6], [7,8,9], [1,4,7], [2,5,8], [3,6,9], [1,5,9], [3,5,7]] # Tahta Üzerinde Bir Oyuncu Hangi Alan Kombinasyonuna Ulaşırsa Kazanır. return any([all([(self.board[z-1] == self.nopponent) for z in combination]) for combination in possible_combinations]) def is_over(self): return (self.possible_moves() == []) or self.condition_for_lose() def show(self): # Tahtamızın Herhamleden Sonra Gösterilmesini Sağlayan Fonksiyonumuz. print('\n'+'\n'.join([' '.join([['.', 'O', 'X'][self.board[3*j + i]] # Tahtamızı Çiziyoruz. for i in range(3)]) for j in range(3)])) def scoring(self): # Oyun İçin Yapay Zeka İçin Bir Skor Döndürüyoruz. return -100 if self.condition_for_lose() else 0 if __name__ == "__main__": Algoritma = Negamax(7) # Negamax algoritmasını kullanıyoruz. TicTacToeOyunu([Human_Player(), AI_Player(Algoritma)]).play() |