Yapay Zekalar Birbirlerine Meydan Okudular

Yapay Zekalar Birbirlerine Meydan Okudular

Önce Codex ve Claude’a bir oyun yaptırdık. İşleri aralarında paylaştırdık: Codex oyun altyapısını kodladı, Claude ise grafikleri ve Blender animasyonlarını hazırladı. Ortaya oynanabilir bir Street Fighter prototipi çıkınca bu kez ikisinden de kendi yaptıkları oyunu oynamalarını istedik.

Bu fikir bizi Claude’un 2–0 kazandığı bir karşılaşmaya götürdü. Ama sonuca gelmeden önce anlatmaya değer birkaç şey yaşandı. İki modelin oyunu nasıl kontrol etmeye çalıştığı, en az skor kadar ilgimizi çekti.

İsteğimiz açıktı: oyun penceresini kullanarak oynayın. Codex başlangıçta bunu doğru anladı. Claude önce bir script yazmaya yöneldi; daha sonra Codex de script kullandı. Bu noktada testi durdurduk. İki tarafın da yalnızca Computer Use kullanacağı şekilde yeniden başladık. Burada anlattığımız 2–0 sonucu, o ikinci karşılaşmaya ait.

İlk modellerimiz

İlk karakterlerimiz Kaan ve Mira’ydı. Claude’un Blender çalışmalarından kalan bu görsellerde onları yürürken, zıplarken, yumruk ve tekme atarken görüyoruz. Oyunun bugünkü görünümünden önce, karakterlerin hareketlerini bu modellerle denedik.

05-ilk-model-kaan.png

Kaan’ın ilk hareket denemeleri.

06-ilk-model-mira.png

Mira’nın ilk hareket denemeleri.

Oyun yavaş yavaş ortaya çıktı

Karakterler hazırlanırken sahne de oluşmaya başladı. Aşağıda ilk sokak tasarımını ve daha sonra Ryu ile Ken’in yer aldığı oyun ekranını görebilirsiniz. Codex’in kodladığı altyapıyla bu görsel çalışmalar birleşince, karşılaşmayı başlatabileceğimiz bir oyun ortaya çıktı.

07-ilk-sahne.png

Blender’da hazırlanan ilk sokak sahnesi.

08-oyun-ekrani.jpg

Ryu ve Ken’in yer aldığı oyun ekranı. Geliştirme önizlemesi; 2–0 biten maçtan alınmış bir sonuç görüntüsü değil.

Oyunu oynamalarını istediğimizde

Codex pencereyi açtı Claude script yazmaya yöneldi

Oyunun bağlantısını verdik ve açık pencere üzerinden oynamalarını istedik. Codex bağlantıyı açtı, oyun odasını oluşturdu ve rakibinin katılmasını tarayıcıdan takip etti. İlk hareketlerini de klavye komutlarıyla yaptı. Başlangıçta beklediğimiz yolu izliyordu.

Claude ise kontrol için bir script yazmaya yöneldi. Böylece oyun penceresiyle etkileşmek yerine komutları doğrudan gönderebilecekti. Bizim görmek istediğimiz, ekrana bakarak nasıl oynayacağıydı. Bu girişimi durdurup Computer Use kullanmasını istedik.

Doğru başlamak maçı kazanmaya yetmedi

Codex’in ilk isteğimizi doğru anlaması olumlu bir başlangıçtı. Yine de bu, oyunu daha iyi oynayacağı anlamına gelmiyordu. Claude da başlangıçta istediğimiz yöntemi seçmemiş olsa bile, yönlendirmeden sonra oyunu pencere üzerinden oynayabildi. Karşılaşmanın sonunda bu fark daha belirgin hale geldi.

Testi neden yeniden başlattık

Hazırlık devam ederken Codex de HTTP üzerinden oyun girdileri gönderen bir script kullandı. Bunun üzerine testi durdurduk ve iki tarafta da script kullanımını sonlandırdık. Maçı yeniden başlattığımızda kural aynıydı: yalnızca Computer Use ile oyun penceresini kontrol etmek. Claude bu şartlarla oynanan karşılaşmayı 2–0 kazandı.

Testin bu akışını ve sonucu, karşılaşmayı yöneten ekip olarak aktarıyoruz. Hazırlık sırasında gördüğümüz sorunları aşağıda anlatıyoruz; fakat bunları ikinci maçın kesin kayıp nedenleri gibi okumamak gerekiyor. Yeniden başlayan maçın her hamlesini zamanıyla birlikte kaydetmediğimiz için, hangi kararın skora ne kadar etki ettiğini ölçemiyoruz.

İki taraf aynı kontrol yöntemini kullansa da Ryu ve Ken’in hareketleri farklıydı. Bu nedenle tek maçtan genel bir model sıralaması çıkarmıyoruz. Karakterleri değiştirip yeniden oynamak, sonuç hakkında daha sağlam bir fikir verebilir.

Hazırlık sırasında iki tarafta gördüklerimiz

Oyun ilerlerken son görüntüye göre hareket etmek

Codex rakibin odaya katıldığını gördü, bazı anlarda ekran görüntülerini ve sunucudaki oyun durumunu okudu. Fakat bu kontrollerin arasında oyun durmuyordu. Bir sonraki komut gönderildiğinde karakterler, son bakılan görüntüdeki yerlerinden çoktan ayrılmış olabiliyordu. Bu gözlemler, testi yeniden başlatmadan önceki oturuma ait.

Buradaki sorun, oyunu hiç görememesi değildi. Gördüğü durumu yeterince sık yenilemeden bazı komutları sürdürmesiydi. Gerçek zamanlı bir oyunda birkaç hamle önce işe yarayan hareket, aynı şekilde devam ettirildiğinde boşa çıkabiliyor.

Tuşa basmak saldırının işe yaradığını göstermiyor

İlk denemelerde kısa aralıklarla klavye komutları gönderildi. Ancak komutun gönderilmiş olması, yumruğun başladığını ya da rakibe değdiğini tek başına göstermiyordu. Oyunun girdiyi ne zaman aldığı ve karakterin önceki hareketini bitirip bitirmediği de önemliydi.

Codex her hareketten sonra saldırının gerçekleştiğini ve hasar verdiğini düzenli olarak kontrol etmedi. Bu yüzden ekranda gerçekten işe yarayan hamlelerle yalnızca gönderilmiş komutları ayırmak zorlaştı.

Script çalıştı ama aynı hareketler tekrarlandı

HTTP üzerinden kontrol başladığında girdiler yaklaşık 20 milisaniyede bir gönderiliyordu. Durum verilerinde saldırıların gerçekleştiğini, rakibin canının azaldığını ve güç barının dolduğunu gördük. Yani komutlar oyuna ulaşıyordu.

Buna rağmen hareket dizisi çoğunlukla aynı kaldı: sağa ilerle, yumruk at, tekme at; arada süper hareket kullan. Rakibin o anda nerede olduğuna göre bu dizinin düzenli biçimde değiştiğini görmedik. Komutların sıklaşması, kararların da duruma uyduğu anlamına gelmedi.

Claude görüntüye bakarak hamle yaptı

Claude tarafında ise ekibin gözlemine göre, oyun sürerken güncel görüntüler analiz edildi ve hamleler bu görüntülere göre yapıldı. Rakibin o anki konumunu ve ekrandaki hareketi takip ederek işlem yapması, hazırlıkta dikkat ettiğimiz noktalardan biriydi. Codex tarafında bazı komutlar son görüntü yenilenmeden devam ederken, Claude’un kontrolünde görüntüye yeniden bakıp ardından hareket etme akışı gördük. Bu farkı gözlemledik; iki tarafın tepki sürelerini sayısal olarak ölçmedik.