İçeriğe geç

Av ve hedef · olasılık yoğunluğu

Amiral Battı

Filonuzu yerleştirin, sonra sıra size geldikçe bilgisayarın sularına ateş edin. Zor seviyede bilgisayar, olası gemi konumlarının en çok üst üste geldiği hücreye ateş eder. Bilgisayar gemilerinizi ararken bu olasılık yoğunluğunu siz de izleyebilirsiniz.

Amiral Battı oyunu

Hazırlık

Kendi sularınız

Ok tuşlarıyla gezinin, Enter ile seçili gemiyi yerleştirin, R ile döndürün.

Zorluk

Olası gemi konumlarının en çok üst üste geldiği hücreye, yani olasılık yoğunluğunun en yüksek olduğu yere ateş eder.

Filonuz

Yatay

Gemiler seçtiğiniz hücreden sağa ya da aşağı doğru uzanır. Birbirine değebilir ama üst üste binemez.

Başlamak için beş geminin hepsini yerleştirin.

Oyun bitti

Siz

Atış
İsabet
İsabet oranı

Nasıl oynanır

Hazırlık

Listeden bir gemi seçin, sonra geminin başlayacağı hücreyi seçin. Gemi, yönüne göre bu hücreden sağa ya da aşağı doğru uzanır. Yönünü düğmeyle ya da R tuşuyla değiştirebilirsiniz. Gemiler birbirine değebilir ama üst üste binemez.

Bir gemiyi taşımak için onu tahtada ya da listede seçin, sonra yeni bir hücre seçin. Rastgele düğmesi bütün filoyu tek seferde yerleştirir.

Savaş

Bilgisayarla sırayla birer atış yaparsınız, ilk atış sizindir. Nokta ıskayı, çarpı isabeti gösterir. Bir geminin bütün hücreleri vurulunca gemi batar. Oyun hangi geminin battığını söyler ve geminin ana hatlarını gösterir. Kazanmak için beş gemiyi de batırın.

Klavye

  • Tab tuşuyla tahtalar ve düğmeler arasında geçiş yaparsınız. Tab her tahtada yalnızca bir kez durur.
  • Ok tuşlarıyla birer hücre ilerlersiniz. Home ve End tuşlarıyla satırın iki ucuna, Page Up ve Page Down tuşlarıyla sütunun iki ucuna atlarsınız.
  • Enter ya da Boşluk tuşu hazırlıkta seçili gemiyi yerleştirir, savaşta ateş eder.
  • R tuşu hazırlıkta gemiyi döndürür.

Ekran okuyucu kullanıyorsanız her hücrenin koordinatını ve durumunu (“C7, isabet” gibi) duyarsınız. Savaş günlüğü de her atışı size bildirir.

Bilgisayar nasıl nişan alır

Üç seviye de ancak sizin görebileceğiniz kadarını görür: nereye ateş ettiğini, neyi vurduğunu ve hangi gemilerin battığını.

  • Kolay, henüz denemediği hücrelerden rastgele birine ateş eder.
  • Normal, av ve hedef yöntemiyle oynar. Av sırasında yalnızca satır ve sütun numaralarının toplamı henüz batmamış en kısa geminin boyuna tam bölünen hücrelere ateş eder. Böylece o gemi atışların arasında saklanamaz. Bir isabetten sonra dört komşu hücreyi dener. İki isabet aynı hizaya gelince de o çizgiyi takip eder.
  • Zor, gemilerin nerede olabileceğini tahmin eder. Her atıştan önce, batmamış her geminin hâlâ durabileceği bütün konumları tek tek dolaşır. Bunlar yatay ya da dikey duran, tahtadan taşmayan, ıskaların ve batmış gemilerin üzerinden geçmeyen konumlardır. Sonra her hücre için bu konumlardan kaçının o hücreden geçtiğini sayar:

d(c) = ∑s ∑p ∈ Ps, c ∈ p wh(p)

Burada Ps, s gemisi için geriye kalan konumların kümesi; h(p), p konumunun üzerinden geçtiği ve henüz batmamış gemilere ait isabetlerin sayısı; w ise isabetsiz konumlardan gelebilecek her sayıdan büyük bir ağırlık (tam filoda 35). Böylece bir isabetten sonra sayım vurulan geminin üzerinde yoğunlaşır. Bilgisayar değeri en yüksek hücreye ateş eder; birden çok hücre eşitse aralarından rastgele birini seçer. Savaş sırasında ısı haritasını açıp kendi tahtanızdaki d değerlerini izleyebilirsiniz.

Her gemiyi ayrı saymak, gemilerin üst üste binemeyeceğini hesaba katmaz. Bütün filoyu birlikte ve tam olarak saymak ise çok büyük sayıda dizilimi tek tek dolaşmayı gerektirir. Bu yüzden genellikle her gemiyi ayrı sayan bu yaklaşık yöntem kullanılır. Rastgele dizilmiş filolara karşı oynanan 300 simülasyon oyununda Kolay seviye filoyu ortalama 95 civarında atışta batırdı. Normal seviye için bu sayı 51, Zor seviye için 44 civarındaydı.

Oyunun hikâyesi

Hikâye 2005 civarında başlıyor: Amiral Battı’yla o yıllarda hem kâğıtta hem de ekranda oynayarak tanıştım. Çocukken babamla oynadığım oyundu; kendi sürümümü tasarlamak istememin nedeni de bu.

İlk dijital denemem 2018’e, lise yıllarıma denk geliyor. Programlamada henüz acemiyken C#’la sade bir masaüstü oyunu yazdım ve bitirme projelerimden biri olarak sundum (kaynak kodu GitHub’da). Normal seviyenin kullandığı av ve hedef algoritması sonradan geldi.

2026’da oyunu sıfırdan yeniden yazdım; bu sayfada oynadığınız oyun o. TypeScript’le geliştirdiğim bu sürüm tarayıcıda çalışıyor, arayüzü de modern. Bilgisayar rakip nereye ateş edeceğine bir algoritmayla karar veriyor: Normal seviyede tahtayı dama deseniyle tarıyor, bir gemiyi vurunca da çevresini yokluyor; Zor seviyede ise olasılık yoğunluğu haritasında değeri en yüksek hücreye ateş ediyor. Bilgisayarın nasıl nişan aldığını bir blog yazısında adım adım anlattım.