Yalancı Zar , oldukça basit bir zar oyunudur. Kuralların birkaç farklı varyasyonunu gördüm, ancak burada en aşina olduğum sürüm:
- Her oyuncu 5d6 ile başlar
- Bir raundun sonundaki zarları okuduğunuzda, her oyuncu kendi zarlarını görebilir, ancak rakiplerinin hiçbirini göremez.
- Herhangi bir raundun başında, tüm oyuncular şu anda sahip oldukları zarları atarlar
- Daha sonra, bir oyuncu (genellikle bu, önceki turun galibidir VEYA son kez başlayan oyuncunun solundaki oyuncudur; bu turda ilk defa başlayan bir rastgele oyuncuyla bu KotH için eskiyi kullanacağız) Tabloda belirli bir sayının kaç tanesinin bulunduğunu tahmin eder (ONES AILD WILD)
- Teklif verme her zaman daha yüksek olacak şekilde sağa devam eder (örneğin; 3 beş, 3 altı ve 4 iki tanesi 3 dörtten daha yüksektir, ancak 3 üçlük değildir; 4 adet daha yüksektir, ancak bunlara teklif vermek muhtemelen size bir teklif verir.) dezavantaj); Herhangi bir oyuncu, onlardan önce bir yalancıyı çağırana kadar
- Bu noktada, tüm oyuncular zarlarını ortaya koyuyor ve masadaki son sayı teklifinin sayısını toplam olarak sayıyor
- Toplam teklifin altındaysa, teklifi veren oyuncu, onları yalancı çağıran oyuncuya bir kalıp vermelidir, aksi takdirde, teklifi veren kişiyi yalancı çağıran oyuncu, teklif sahibine bir kalıp vermelidir (teklif sahibi kazanır. eğer en azından teklif ettiği sayıdan daha fazlaysa, kesin sayıya gerek yoktur)
- Zar bittiğinde kaybedersin
- Son kalan oyuncu kazanır
Örneğin:
Oyuncu bir 1,1,2,4,6 İki oyuncu 1,2,2,3,5 Üç oyuncu 1,3,3,4,6 Oyuncu bir: üç altı. İkinci oyuncu: dört ikilik. Üçüncü oyuncu: dört üçlü. Oyuncu bir: beş iki. İkinci oyuncu: altı iki. Üçüncü oyuncu: altı üçlü. Birinci oyuncu: altı ayak. İkinci oyuncu: Yalancı! Zarlarını açığa çıkarırlar ve onlardan (çünkü onlar vahşidir) ve dörtten sayarlar. Aslında, tam olarak dört ayak olduğu ortaya çıktı. Yani ikinci oyuncu, birinci oyuncuya ölür. Yeniden koşarlar ve oyuncu bir sonraki tura başlar.
Bu oyunu oynamak için bir bot yazmalısın. Aşağıdaki soyut java sınıfını uygulamalıdır:
public abstract class Player {
public Player() {}
public String toString() {
return this.getClass().getSimpleName();
}
public abstract String bid(int yourId, int[] diceEachPlayerHas, int[] yourDice, String[] bids);
}
- Teklif yöntemini uygulamalısınız
- İlk argüman, botunuzun dönüş sırasındaki şu anki pozisyonudur, ikincisi, her oyuncunun (kendiniz dahil) şu anda kaç tane zar olduğunu gösteren bir dizidir, üçüncüsü, şu anda kendi zarlarınızda gösterilen değerleri gösteren bir dizidir ve dördüncü geçerli turun başlangıcından bu yana yapılan tüm tekliflerin bir dizisi - turun ilk teklifini yaparsanız 0 uzunluğuna sahip olacak
- Çıktı ya "sayı yüzü" biçiminde ya da "Yalancı!" Dizgisi olmalıdır. önceki teklifi verene yalancı çağırmak için.
- Çıktınız yasadışı olarak biçimlendirilmişse, yok edilirsiniz.
- ToString yöntemini geçersiz kılabilirsiniz, ancak buna gerek yoktur. Ancak, kontrol cihazının çıktısının okunabilirliğine müdahale eden herhangi bir şekilde düzenleyemezsiniz.
- Denetleyicinin diğer genel yöntemlerini çağırmanıza izin verilir, ancak ana yöntemi kullanamazsınız .
- Yalnızca çalışan dizindeki ve botunuzun kendi adıyla önceden belirlenmiş dosyaları okuyabilir ve düzenleyebilirsiniz.
- Başka bir kaynaktan girdi almanıza izin verilmiyor
- Örnek değişkenler her yeni oyunun başında sıfırlanır, ancak statik değişkenler değildir.
puanlama
- Her biri 3-5 oyuncudan oluşan 1000 oyundan oluşan bir set, her bot eklenişinde (üç veya daha fazla bot gönderildiğinde) kontrolör kaynağında gösterildiği gibi puanlandırılır (herhangi bir oyunda, Her bir dönüşünüzün başında 1, her bir kalıp yakaladığınızda 10 ve kazanırsanız 1.000 bonus kazanın); Her oyunda 5.000 TUR limit (tur değil) uygulanır.
- Botunuz en son oyun grubundan aldığı skorla puanlanır; Ayrıca, olumsuz değilse, oy puanının on katıdır. (İkincisi puan üzerinde önemli bir etkiye sahip olması muhtemel değildir)
Denetleyici kaynağı burada bulunabilir .
2015-06-19 tarihi itibariyle puanlar:
Badnomial: 434,924 + 6x10 = 424,984
Nobody: 282,329 + 6x10 = 282,389
StraightShooter: 265,205 + 5x10 = 265,255
MostlyHonestAbe: 158,958 + 4x10 = 158,998
The Pirate: 157,005 + 1x10 = 157,015
Statistician: 144,012 + 2x10 = 144,032
Fidelio: 49,973 + 2x10 = 49,993
Absurd Bot: 6,831
DrHouse: 2,638 + 3x10 = 2,668
diceEachPlayerHas[yourId]
= zar sayınız ve bids[yourId]
ilk teklifiniz (veya ilk sıranız ise null). Bu doğru mu?