Giriş
Bu oyunda, oyuncular ordularını diğer oyuncuların ordularıyla savaşmak, bölgeleri ele geçirmek ve ayakta kalan son kişi olmak için kullanıyorlar. Her turda, oyuncular ellerinde kullanmak üzere temel sayıda ordu alırlar. Bununla birlikte, belirli bölgelerdeki bölgeleri ele geçirerek, oyuncular bu sayıyı arttırarak oyunun ilerleyen bölümlerinde potansiyel bir avantaj sağlayabilirler. (Bu aslında Warlight ile aynıdır ).
Tüm botlar Java, C veya C ++ ile yazılmalıdır (Diğer dilleri içerirdim, ancak onlar için yazılım veya deneyime sahip değilim). Gönderinizin bir sınıfı genişletmesi gerekmez ve işlevler, sınıflar, arabirimler veya başka herhangi bir şey oluşturabilir ve standart API'lerde herhangi bir paket veya sınıf kullanabilirsiniz . Bir sınıf veya arayüz oluşturmayı planlıyorsanız, lütfen bir iç sınıf veya iç arayüz kullanmayı düşünün.
Lütfen bu yarışmadaki denetleyiciyi veya diğer gönderimleri programlı olarak değiştirmeye çalışmayın.
Oynanış
genel bakış
10x10'luk iki boyutlu bir dizi, her bir eleman / hücre bir "bölgeyi" temsil eden tahtayı simüle edecektir. 20 mermi ve her turda 1000 tur olacak. Her turda, oyunculara ilk olarak sahip oldukları orduları sahip oldukları bölgelere yerleştirecekler ve daha sonra, ordularını onlara saldırarak rakiplerinin topraklarını ele geçirmek amacıyla ordularını yakın bölgelere taşıma fırsatı verilecek. Oyuncular gerekir dağıtmak bütün ordularını ancak istenirse taşımak gerekmez.
Ordulara Saldırı / Aktarma
Oyuncu isterse, bir bölgeden bitişik sekiz bölgeden birine ordu gönderebilir. Yönetim kurulu "etrafını sarar", yani bir oyuncunun bölgesi bir tarafta ise, oradan gelen ordular diğer tarafta bulunan bitişik bir bölgeye aktarılabilir. Orduları bir bölgeden taşırken, o bölgede hala en az bir ordu kalmalıdır. Örneğin, bir bölgede beş ordu varsa, dörtten fazla farklı bir bölgeye taşınamaz; eğer bir bölge bir tane içeriyorsa, o ordu hareket edemez.
Eğer bir oyuncu n
bir bölgeden diğerine ordu gönderirse , o bölge n
ordu alır.
Diyelim ki bir oyuncu n
kendi topraklarından o
orduları ve içinde orduları olan bir karşı bölgeye gönderdiğini varsayalım . en yakın tam sayıya yuvarlanarak o
azalacaktır n * .6
; ancak, aynı zamanda, en yakın tamsayıya yuvarlanarak n
azalacaktır o * .7
. Karşı bölgenin yakalanıp yakalanmadığına ilişkin aşağıdaki kurallar geçerli olacaktır:
- Eğer
o
ulaşır sıfır VEn
0'dan büyük, oyuncu olacak toprakları, devralacakn
İçinde orduları. - Her ikisi de
n
veo
sıfıro
olursa, otomatik olarak 1 olarak ayarlanır ve bölge yakalanmaz. - Eğer
o
kalıntılar daha 0'dan, oyuncunun topraklarında ordularının sayısı artacakn
ve karşıt toprakları ele alınmayacaktır.
Bonuslar
Bir bonusu temsil etmek için bir grup bölge seçilecektir; bir oyuncu grubun parçası olan tüm bölgelere sahipse, o oyuncu tur başına fazladan ordu alır.
Bonuslar, bir oyuncunun alabileceği fazla sayıda orduyu temsil eden farklı olanları ve değerleri göstermek için kimlik numaralarına sahiptir. Her turda, bir bonusun değeri 5 ile 10 arasında rastgele bir sayı olacak ve her biri bonusa dahil edilen on bölge içeren on bonus mevcut olacaktır.
Örneğin, tur başına 5 ordu alan bir oyuncu, 8 değerinde bir bonus oluşturan tüm bölgelere sahipse, oyuncu bir sonraki dönüş ve sonraki dönüşlerde 13 ordu alır. Bununla birlikte, oyuncu bonusu oluşturan bir veya daha fazla bölgeyi kaybederse, tur başına sadece 5 ordu alacaktır.
Giriş çıkış
Programınız aşağıdaki biçime sahip komut satırı bağımsız değişkenleri aracılığıyla girdi almalıdır:
[id] [armies] [territories (yours and all adjacent ones)] [bonuses] ["X" (if first turn)]
id
vearmies
ikisi de tam sayıdır.id
kimliğinizdir vearmies
bölgenize dağıtmanız gereken ordu sayısıdır. Size verilen tüm orduları konuşlandırmalısınız - ne daha fazla ne daha az.territories
sahip olduğunuz bölgeleri ve sahip olmadığınız bölgeleri temsil eden bir dizeler dizisi. Dizeler şu biçimde:[row],[col],[bonus id],[player id],[armies]
row
vecol
bölgenin bulunduğu satır ve sütunubonus id
belirtin, bu bölgenin bir parçası olduğu bonusunplayer id
kimliği, bölgeye sahip olan oyuncunun kimliği ve bölgedekiarmies
orduların sayısıdır. Bunların hepsi sayılar.bonuses
tahtadaki bonuslardan yararlanabileceğiniz bir dizi dizedir. Dizeler şu biçimde:[id],[armies],[territories left]
id
bonusun kimliği, buarmies
bonusdaki tüm bölgelere sahip olarak alabileceğiniz ekstra orduların sayısı ve ekstra orduları almakterritories left
için yakalamanız gereken bölge sayısıdır.
Bir turun ilk turu ise ve kolaylık nedenleriyle kullanılabiliyorsa, beşinci bir argüman olan "X" ifadesinin görüneceğini lütfen unutmayın.
İlk dönüşte giriş örneği:
0 5 "7,6,7,-1,2 8,7,7,-1,2 7,7,7,0,5 6,6,7,-1,2 8,8,9,-1,2 6,7,7,-1,2 7,8,9,-1,2 6,8,9,-1,2 8,6,7,-1,2" "0,5,10 1,5,10 2,9,10 3,9,10 4,9,10 5,5,10 6,5,10 7,6,9 8,7,10 9,7,10" X
Programınız, yeni satırla ayrılmış iki dizge çıkarmalıdır; bunlardan ilki, ordu eklemek istediğiniz bölgelerin satırlarını ve sütunlarını ve ona eklemek istediğiniz ordu sayısını listeler; ikincisi de satırları listeler ve ordu göndermek istediğiniz bölgelerin sütunları ve göndermek istediğiniz orduların sayısı. Çıktı, arka boşluklar içerebilir.
Ordu eklemek istediğiniz bir bölge belirtmek için çıktınızın şu biçimi izlemesi gerekir:
[row],[col],[armies]
row
ve col
ordular eklemek istediğiniz bölgenin bulunduğu satır ve sütundur ve bölgeye eklemek istediğiniz orduların armies
sayısıdır.
Hangi bölgelere ordu göndermek istediğinizi belirtmek için çıktınızın şu biçimi izlemesi gerekir:
[srow],[scol],[drow],[dcol],[armies]
srow
ve scol
olduğu gelen bölge Eğer taşıma orduları istediğiniz satır ve sütun kurulu olan drow
ve dcol
bölge sensin için ordular göndermek istediğiniz kurulu satır ve sütun vardır ve armies
göndermek istediğiniz ordularının sayıdır . Herhangi bir orduyu taşımak istemiyorsanız, programınızın bir boşluk yazdırması gerektiğini unutmayın.
Örnek bir çıktı şu olabilir:
0,0,5
0,0,0,1,3 0,0,1,0,3 0,0,1,1,3
Bu durumda, oyuncu beş orduyu bölgeye 0,0 oranında dağıtır ve üç orduyu 0,0'dan 0,1'e taşır; üç, 0,0'dan 1,0'a; ve üçü 0,0 ile 1,1 arasındadır.
Yuvarlar ve Dönüşler
Her turun başlangıcında, tüm oyunculara tahtada rastgele bir noktada bulunan bir bölge verilecektir (iki veya daha fazla oyuncunun yan yana başlaması mümkündür). Bir bonus oluşturan bölgeler de değişebilir.
İlk sırada, her oyuncunun beş ordu içeren bir bölgesi olacak ve kullanabilecekleri beş ordu alacaklar (bu alabilecekleri minimum miktardır). Diğer tüm bölgeler, saldırı yapmayan NPC'lere ait olacaktır; bunların her biri iki ordu içerir ve bir kimliği vardır -1
.
Her tur programınız çalıştırılacak ve her iki çıktı parçası da toplanacaktır. Kontrolör, ilk çıkış parçasını derhal topraklara ordu ekleyerek uygular; ancak, denetleyici tüm oyuncular ikinci çıkışlarını, saldırı / transfer komutlarını verene kadar bekleyecektir. Bu tamamlandığında, komutlar rastgele karıştırılır ve sonra yürütülür. Programa çıktı sağlamak ve dönüşe katılmak için bir saniye veya daha kısa sürede son vermek gerekir.
Puanlama ve Kazanma
Herhangi bir turda, bir oyuncu kalırsa, o oyuncu 100 puan kazanır. Aksi takdirde, 1000 tur geçerse ve hala birden fazla oyuncu varsa, 100 puan geri kalan oyuncular arasında eşit olarak bölünecektir (yani kalan 3 oyuncu her biri 33 puan verir). 20 turun sonunda hangi oyuncu en çok puana sahip olursa kazanır.
gönderimler
Gönderiniz bot için bir ad, yazıldığı dil, kısa bir açıklaması ve çalıştırmak için kullanılan kodu içermelidir. Örnek bir bot buraya örnek olarak gönderilecek ve yarışmada kullanılacaktır. İstediğiniz kadar gönderebilirsiniz.
Diğer
Programın adı, dosya adı gönderiminiz için kullandığınız adla aynı olduğu sürece bir dosya oluşturabilir, yazabilir ve dosyadan okuyabilir. Bu dosyalar bir turnuvanın başlangıcından önce silinir, ancak mermiler arasında silinmez.
Aşağıdaki durumlarda sıranız atlanır:
- elenirsiniz (bölgeniz yok);
- programınız hiçbir şey yazdırmıyor;
- programınız bir saniye içinde sona ermez;
- bölgenize çok az sayıda ordu dağıtırsınız (sahip olmadığınız bölgelere ordu dağıtmak buna sayılır) veya çok fazla ordu; veya
- çıktınız denetleyicinin bir istisna atmasına neden olur.
Saldırı / aktarma komutunuz şu durumlarda yürütülmez:
- programınız doğru çıktı vermez;
- orduları sizden almak için bir bölge seçersiniz;
- bölgenizden sıfır veya negatif sayıda ordu taşıyorsunuz;
- bölgenizden çok fazla ordu taşıyorsunuz; veya
- orduları taşımak için seçtiğiniz bölgeye bitişik olmayan orduları göndermek için bir bölge seçersiniz.
Denetleyiciyi ve örnek bir botu burada bulabilirsiniz . Bot oyuna katılacak, ancak muhtemelen hiç tur kazanmayacak ( gerçekten şanslı olmadıkça ).
Sonuçlar
Bir hata düzeltmesini ittikten sonra denetleyiciyi çalıştıran WeSwarm, dikkate alınması gereken bir güç olmaya devam ediyor. Buna karşı bir şans elde etmek için harika bir stratejiyle bir bot alacak.
As of 25-08-15, 04:40 UTC
1: WeSwarm 1420
2: java Player 120
java LandGrab 120
java Hermit 120
java Castler 120
6: java RandomHalver 80
Farkına varmak!
Zsw tarafından keşfedilen ve ordularını diğerlerinden sonra oyunda potansiyel bir avantaja sahip kılan bölgelere neden olan bir hata giderildi. Denetleyiciye bir düzenleme yapıldı, bu yüzden lütfen yukarıdaki bağlantıyı kullanarak bulunan mevcut sürümü kullanın.