Asimetrik KOTH: Kediyi Yakala
GÜNCELLEME : Controller.java özel durumları yakalamadığından (yalnızca hatalar) gist dosyaları güncellenir (yeni alt bölümler dahil). Artık hataları ve istisnaları yakalar ve yazdırır.
Bu zorluk iki iplikten oluşur, bu kedi ipliğidir, yakalayıcı iplik burada bulunabilir .
Kontrolör indirilebilir burada .
Bu asimetrik bir KOTH: Her başvuru ya bir kedi ya da bir avcıdır . Her bir kedinin her çifti ve bir avcı arasında oyunlar var. Kediler ve avcıların ayrı sıralamaları vardır.
yakalayan şey
Altıgen ızgarada bir kedi var. Göreviniz onu mümkün olduğunca hızlı yakalamak. Her turda, kedinin oraya gitmesini önlemek için bir ızgara hücresine bir su kovası yerleştirebilirsiniz. Ancak kedi (belki de) o kadar aptal değildir ve bir kova yerleştirdiğinizde kedi başka bir ızgara hücresine hareket eder. Izgara altıgen olduğundan, kedi 6 farklı yöne gidebilir. Amacınız kediyi su kovalarıyla çevrelemek, ne kadar hızlı o kadar iyi.
Kedi
Yakalayıcının, etrafınıza su kovaları koyarak sizi yakalamak istediğini biliyorsunuz. Elbette kaçmaya çalışıyorsunuz, ama tembel bir kedi olduğunuzda (kediler gibi) o anda tam olarak bir adım atıyorsunuz. Bu, sizinle aynı yerde kalamayacağınız anlamına gelir, ancak çevredeki altı noktadan birine taşınmanız gerekir. Yakalayıcının yeni bir su kovası yerleştirdiğini her gördüğünüzde başka bir hücreye gidersiniz. Tabii ki mümkün olduğunca uzun süre kaçmaya çalışıyorsunuz.
Kafes
Izgara altıgen, ancak altıgen veri yapılarımız olmadığından, 11 x 11
kare 2d dizisi alıyoruz ve kedinin sadece 6 yönde hareket edebileceği altıgen 'davranışı' taklit ediyoruz :
Topoloji toroidaldir, yani dizinin 'dışında' bir hücreye basarsanız, dizinin diğer tarafındaki ilgili hücreye aktarılırsınız.
oyun
Kedi ızgarada belirli bir pozisyonda başlar. Yakalayıcı ilk hareketi yapabilir, sonra kedi ve yakalayıcı kedi yakalanana kadar alternatif olarak hareket eder. Adım sayısı o oyunun skorudur. Kedi mümkün olduğunca büyük bir puan almaya çalışır, yakalayıcı mümkün olduğunca düşük bir puan almaya çalışır. Katıldığınız tüm oyunların ortalama toplamı, başvurunuzun puanı olacaktır. Biri kedi, diğeri yakalayıcılar için olmak üzere iki ayrı sıralama vardır.
kontrolör
Verilen denetleyici Java ile yazılmıştır. Bir yakalayıcı ya da kedi olarak, her biriniz bir Java sınıfını (zaten bazı ilkel örnekler vardır) uygulamanız ve players
pakete yerleştirmeniz (ve Controller sınıfındaki kedi / yakalayıcıların listesini güncellemeniz) gerekir, ancak ayrıca yazabilirsiniz. bu sınıf içindeki ek işlevler. Kontrolör, basit kediler / yakalayıcı sınıflarının her iki çalışma örneğiyle birlikte gelir.
Alan, hücrelerin geçerli durumlarının değerlerini depolayan bir 11 x 11
2D int
dizisidir. Bir hücre boşsa, değeri 0
vardır, bir kedi varsa değeri vardır -1
ve bir kova varsa bir vardır 1
.
Kullanabileceğiniz birkaç işlev vardır: isValidMove()
/ isValidPosition()
hamle (cat) / pozisyonunuzun (catcher) geçerli olup olmadığını kontrol etmek içindir.
Sıra size geldiğinde, fonksiyonunuz takeTurn()
çağrılır. Argüman read(i,j)
, hücrenin okunması gibi yöntemlerin (i,j)
yanı sıra isValidMove()/ isValidPosition()
cevabınızın geçerliliğini kontrol eden mevcut ızgaranın bir kopyasını içerir . Bu, toroidal topolojinin sarılmasını da yönetir, yani ızgara sadece 11 x 11 olsa bile, hücreye erişebilirsiniz (-5,13).
Yöntem int
, olası hareketleri temsil eden iki öğeden oluşan bir dizi döndürmelidir . Kediler için bunlar {-1,1},{0,1},{-1,0},{1,0},{0,-1},{1,-1}
kedinin nereye gitmek istediği göreceli konumunu temsil eder ve yakalayıcılar bir kova yerleştirmek istedikleri yerin mutlak koordinatlarını döndürür {i,j}
.
Metodunuz geçersiz bir hamle üretirse, gönderiminiz diskalifiye edilecektir. Hedefiniz zaten bir kova ise veya harekete izin verilmiyorsa / hedef zaten işgal edilmişse (kedi olarak) veya zaten bir kova / kedi (yakalayıcı olarak) varsa, taşıma geçersiz kabul edilir. Verilen fonksiyonlarla elden önce kontrol edebilirsiniz.
Gönderiminiz oldukça hızlı olmalıdır. Metodunuz her adım için 200 ms'den uzun sürerse, diskalifiye edilir. (Tercihen çok daha az ...)
Programların adımlar arasında bilgi depolamasına izin verilir.
gönderimler
- İstediğiniz sayıda başvuru yapabilirsiniz.
- Lütfen daha önce gönderdiğiniz gönderileri önemli ölçüde değiştirmeyin.
- Lütfen her bir gönderiyi yeni bir yanıtla gönderin.
- Her gönderinin tercihen benzersiz bir adı olmalıdır.
- Gönderme, sınıfınızın kodunun yanı sıra gönderiminizin nasıl çalıştığını bize açıklayan bir açıklamadan oluşmalıdır.
<!-- language: lang-java -->
Otomatik sözdizimi vurgulaması için kaynak kodunuzdaki satırı yazabilirsiniz .
puanlama
Tüm kediler tüm avcılara aynı sayıda yarışır . Mevcut puanları sık sık güncellemeye çalışacağım, etkinlik azaldığında kazananlar belirlenecektir.
Bu meydan okuma bu eski flash oyundan esinlenmiştir
Test ve yapıcı geri bildirimde bulunduğunuz için @PhiNotPi'ye teşekkür ederiz.
Güncel Skorlar (Maç başına 100 oyun)
Name Score Rank Author
RandCatcher 191962 8 flawr
StupidFill 212688 9 flawr
Achilles 77214 6 The E
Agamemnon 74896 5 The E
CloseCatcher 54776 4 randomra
ForwordCatcher 93814 7 MegaTom
Dijkstra 47558 2 TheNumberOne
HexCatcher 48644 3 randomra
ChoiceCatcher 43834 1 randomra
RandCat 77490 9 flawr
StupidRightCat 81566 6 flawr
SpiralCat 93384 5 CoolGuy
StraightCat 80930 7 CoolGuy
FreeCat 106294 3 randomra
RabidCat 78616 8 cain
Dijkstra's Cat 115094 1 TheNumberOne
MaxCat 98400 4 Manu
ChoiceCat 113612 2 randomra
main.Controller
, çağırmasını getCatchers()
ve benzetmesini / sabote etmesini ne engeller takeTurn
?