Can Kick Oynayalım!
Moogie şu anki kazanan olmasına rağmen, herhangi biri tacını alabilirse bunu yapmaya teşvik edilir.
Tekme kutu bir çocuk oyunudur. Bir defans oyuncusu ve birden fazla saldırganı dahil etmek. Bugün artık böyle bir oyun değil! İşiniz, onu oynayan bir bot yazmak, tepenin kralı stilini kazanmak !
https://en.wikipedia.org/wiki/Kick_the_can
Bu oyunda bazı önemli farklılıklar var. İlk önemli fark, oyunun çok oyunculu (5v5) olmasıdır. İkinci önemli fark, her iki bot grubunun, hem mayın hem de atılan bombalarla düşman oyuncuları öldürebilmesi ve ortadan kaldırmasıdır! Botlar (mesafe ne olursa olsun) herhangi bir mayın veya beş bloktan daha uzaktaki oyuncuları göremez!
Harita aşağıdaki gibi bir labirenttir.
Bu labirent yordamsal olarak, önce derinlik ilk özyinelemeli geri izleme algoritması kullanılarak bir labirent oluşturularak oluşturulur. Ve sonra gösterilen deliklerin yerleştirilmesi (labirenti daha "kusurlu hale getirmenin yanı sıra). Labirent 65x65 blok genişliğinde ve sıfır indekslidir. Böylece mavi bayrak (kutu) 1,1 ve kırmızı bayrak (kutu) Mavi takım 2,2 ve 3,3 4,4'te ortaya çıkar. kırmızı takım 62,62 ve 61,61, 60,60 vb. de ortaya çıkar. Mavi bloklar mavi takımdaki botlardır ve macenta blokları kırmızı botlar.Oyun her zaman beşe karşı beştir.Takımda her bot kodunuzu kullanır (ancak durumları izlemek ve rolleri farklılaştırmak için başka örnek değişkenleri depolayabilir (veya yerel dosyalar oluşturabilir).
Oynanış
Madenler gri renkte gördüğünüz gibi yerleştirilebilir. Ve bombalar en fazla dört blok mesafeye atılabilir. Bunlar, duvarlara ve diğer oyunculara dört blok kadar seyahat eder ve sadece yolunuza çıkan düşmanları öldürür. Her adımdan sonra düşme şansı% 40'tır. Yani% 100 şansları var 1 menzil 60% 2 menzil 3% 36% ve üç menzil% 21.6 Bir mayın yerleştirmek veya bir bomba atmak bir takım cephane alır. Bu 0'dan başlar ve turuncu kutuları toplayarak arttırılabilir. Bu cephane önbelleklerinden dördünün (4) uygun bir şekilde ortalanacağını unutmayın. Botlar iki kırmızı ve iki mavi bir dizide sıralanmıştır. IE RRRRRBBBBB. Bayrağın verilmesine izin verilir, ancak bayrağın yakınında olmanın (yani beş bloktan daha az) yavaşlığa neden olduğunu ve sadece movente izin verdiğini unutmayın. her üç turda bir. Arena, her tur için rastgele bir başlangıç seçer. BEN.
Amaç
Beş botunuzu (her biri aynı sınıf dosyasına sahiptir) başarılı bir şekilde labirentte gezinmek ve rakip kutuya dokunarak kazara kendi kutularını devirmemeye veya bir mayına basmamaya dikkat edin.
Programlama
Arena ve bot girişleri şu anda Java'dadır, ancak diğer diller için bir stdin / out sarmalayıcısı bulunmaktadır.
Arena kodu kullanıma sunulacak ancak işte ilgili ayrıntılar.
Bot Sınıfı
public class YourUniqueBotName extends Bot{
public YourUniqueBotName(int x , int y, int team){
super(x,y,team);
//optional code
}
public Move move(){//todo implement this method
//it should output a Move();
//A move has two paramaters
//direction is from 0 - 3 as such
// 3
// 2-I-0
// 1
// a direction of 4 or higher means a no-op (i.e stay still)
//And a MoveType. This movetype can be
//MoveType.Throw
//MoveType.Mine
//MoveType.Defuse defuse any mine present in the direction given
//MoveType.Move
}
}
Mevcut Temel Yöntemler
Genelde erişiminiz olmaması gereken verileri değiştirmek veya bunlara erişmek için herhangi bir teknik kullanmanıza izin verilmediğini ve diskalifiye ile sonuçlanacağını unutmayın.
Arena.getAmmo()[team];//returns the shared ammo cache of your team
Arena.getMap();//returns an integer[] representing the map. Be careful since all enemies more than 5 blocks away (straight line distance) and all mines are replaced with constant for spaces
//constants for each block type are provided such as Bot.space Bot.wall Bot.mine Bot.redTeam Bot.blueTeam Bot.redFlag Bot.blueFlag
Arena.getAliveBots();//returns the number of bots left
getX();//returns a zero indexed x coordinate you may directly look at (but not change X)
getY();//returns a zero indexed y coordinate (y would work to, but do not change y's value)
//Although some state variables are public please do not cheat by accessing modifying these
StdIn / Out sarıcı Arabirim Özellikleri
Arayüz iki moddan oluşur: başlatma ve çalıştırma.
Başlatma modu sırasında, stdout yoluyla tek bir INIT çerçevesi gönderilir. Bu çerçevenin özellikleri aşağıdaki gibidir:
INIT
{Team Membership Id}
{Game Map}
TINI
Burada: {Takım Üyeliği Kimliği} tek bir karakterdir: R veya B. B mavi takım, R kırmızı takım anlamına gelir.
{Oyun Haritası}, haritanın bir satırını temsil eden bir dizi ascii karakter dizisidir. Aşağıdaki ascii karakterleri geçerlidir: F = mavi bayrak G = kırmızı bayrak O = açık alan W = duvar
Oyun daha sonra her bota stdout üzerinden oyun çerçeveleri göndermeye devam edecektir:
FRAME
{Ammo}
{Alive Bot Count}
{Bot X},{Bot Y}
{Local Map}
EMARF
Nerede:
{Cephane} bir rakam dizesidir, değer 0 veya daha büyük olacaktır {Canlı Bot Sayısı} bir rakam dizesidir, değer 0 veya daha büyük olacaktır {Kutu X}, botun X koordinatını temsil eden bir rakam dizisidir harita üzerinde. Değer 0 <= X <Harita Genişliği olacaktır. {Kutu Y}, oyun haritasındaki botun Y koordinatını temsil eden bir rakam dizisidir. Değer 0 <= Y <Harita Yüksekliği olacaktır. {Yerel Harita}, botu çevreleyen tüm haritayı temsil eden bir dizi ascii karakter dizisidir. Aşağıdaki ascii karakterleri geçerlidir: F = mavi bayrak G = kırmızı bayrak O = açık alan W = duvar R = kırmızı takım bot B = mavi takım bot M = mayın A = cephane
Kontrolör, botunuzun daha sonra şu biçimde tek bir satır yanıtı vermesini bekler:
{Action},{Direction}
Nerede:
{Eylem} şunlardan biri: Hareket Ettirme Mayın Atma
{Yön}, 0 ile 4 (dahil) arasında tek bir basamaktır. (daha önce yön bilgilerine bakın)
NOT: tüm dizeler \ n Satır Sonu karakteri ile sınırlandırılacaktır.Bu bir eleme turnuvası olacak. Örnek botlarım dolgu maddesi olarak katılacak, ancak kendimi kazanmayacağım. Botlarımdan birinin zafer kazanması durumunda, unvan ikinci üyeye gider ve benimkilerden biri olmayan bir bot olana kadar devam eder. Her maç 11 vuruş tekme kutu oluşur. Her iki takım da tek bir maç kazanamazsa ikisi de elenir. Sıfır olmayan bir beraberlik varsa, bir beraberlik kırıcı maçı oynanacaktır. Bir kravat kalırsa her ikisi de elimine edilir. Daha sonraki turlar daha fazla eşleşmeden oluşabilir. Turnuvanın tohumlanması 7/31/16 (tarih değişebilir) itibariyle upvotes sayısına göre yapılacaktır.
Her maç 4096 tur sürer. Bir zafer bir puan kazandırır. Beraberlik veya kayıp sıfır puan verir. İyi şanslar!
Bu GitHub Repo'da koda bakmaktan ya da eleştirmekten çekinmeyin.
https://github.com/rjhunjhunwala/BotCTF/blob/master/src/botctf/Arena.java
Bilgisayarımda çok fazla dil için tercümanım olmadığını ve simülasyonu bilgisayarlarında çalıştırmak için gönüllülere ihtiyacım olabileceğini unutmayın. Veya dil tercümanını indirebilirim. Lütfen botlarınızın olduğundan emin olun.
- Makul bir sürede yanıt verin (diyelim 250 ms)
- Ana makineme zarar vermeyecek