Sen kontrolü altındaki toprağı büyütmek isteyen girişimci bir nokta . Bu oldukça basittir - şu anki arazinizin dışına çıkın ve kendi ülkenize geri dönün ve bu ilmeğindeki her şey artık size aittir. Ama bir çekişme var. Eğer başka bir nokta bir şekilde döngünüzü bulup geçerse, ölürsünüz.
Henüz denemediyseniz, Splix.io'ya gidin ve bir oyun deneyin. Hareketlerinizi kontrol etmek için ok tuşlarını kullanın.
GIF
Kredi: http://splix.io/
Ayrıntılı Bilgiler
Tüm oyuncular 200x200'lük bir tahtada rastgele pozisyonlarda başlar. (Bunu değiştirme hakkını saklı tutarım :). Mümkün olan en fazla puan toplamak için belirli miktarda hamle yapacaksınız. Puanlar tarafından hesaplanır:
- Öldürdüğünüz oyuncu sayısı 300
- Tur sonunda sahip olduğunuz arazi miktarı
Bu, başkalarının toprağınızı çalabileceği noktasını ortaya çıkarır. Ülkenizden bazılarıyla kesişen bir döngü başlatırlarsa, talep edebilirler. Tur boyunca ölürseniz, o tur için tüm puanları kaybedersiniz.
Her turda rastgele seçilen bir oyuncu grubu vardır (en fazla 5 benzersiz oyuncu) (değişebilir). Her oyuncu eşit sayıda yarışmaya katılır. Botunuzun final puanı, oyun başına ortalama puanı ile belirlenir. Her oyun 2000 turdan oluşur (ayrıca değişebilir). Tüm botlar aynı anda hareketlerini yapıyor.
Ölüm vakası
Kafa popo
Her iki oyuncu da birbirlerine vurduğunda ölür. Bu, her iki oyuncu da kendi alanın kenarında olduğunda bile geçerlidir.
Ancak, oyunculardan sadece biri topraklarındayken, diğer oyuncu ölür.
Çizgi çapraz
Bu durumda, sadece mor oyuncu ölür.
Kendi çizgini geçemezsin.
Kuruldan çıkma
Bir oyuncu tahtadan çıkmaya çalışırsa, ölür ve tüm puanlarını kaybeder.
Yakalama alanı
Bir oyuncu, izi kaldığında alanı ele geçirir ve tekrar kendi topraklarına girer.
Kırmızı, iki kırmızı çizginin arasına girer. Bir oyuncunun doldurmadığı tek durum, başka bir oyuncunun döngünün içinde olduğu durumdur. Açık olmak gerekirse, bu yalnızca diğer oyuncunun kendisi döngüdeyken geçerlidir, sadece kendisine ait arazi değildir. Bir oyuncu başka bir kişiden arazi alabilir. Bir oyuncu parkurunun etrafındaki alanı dolduramazsa, parkur doğrudan normal topraklara dönüştürülür. Başka bir oyuncu toprak döngüsünün içindeki oyuncu ölürse, bu döngüdeki alan doldurulur. Bir oyuncu her öldüğünde, tahta doldurulabilecek bir alan için yeniden incelenir.
Denetleyici ayrıntıları
Kontrolör burada . Orijinal oyuna çok benzer, ancak bunu KotH ve teknik nedenlerle daha uygun hale getirmek için küçük değişiklikler yapıldı. O ile inşa edilmiştir @NathanMerrill 'ın KotHComm kütüphanesinde ve @NathanMerrill gelen önemli yardımıyla da. Lütfen bana sohbet odasındaki kumanda cihazında bulduğunuz hataları bildirin . KotHComm ile tutarlı olmak için, denetleyici boyunca Eclipse koleksiyonlarını kullandım, ancak botlar yalnızca Java Koleksiyonlar kütüphanesini kullanarak yazılabilir.
Her şey github bültenleri sayfasındaki bir uberjar içinde paketlenir . Kullanmak için indirin ve projenize ekleyin, böylece otomatik tamamlama için kullanabilirsiniz ( IntelliJ , Eclipse için talimatlar ). Gönderilerinizi test etmek için, küpü birlikte çalıştırın java -jar SplixKoTH-all.jar -d path\to\submissions\folder
. path\to\submissions\folder
Bunun adında bir alt klasör olduğundan emin olun java
ve tüm dosyalarınızı oraya yerleştirin. Paket isimlerinizi botlarınızda kullanmayın (KotHComm ile mümkün olsa da, sadece biraz daha fazla sorun). Tüm seçenekleri görmek için kullanın --help
. Tüm botları yüklemek için kullanın --question-id 126815
.
Bot yazmak
Bir bot yazmaya başlamak için, uzatmanız gerekir SplixPlayer
.
Direction makeMove(ReadOnlyGame game, ReadOnlyBoard board)
- Botunuzun hangi hamleyi yapmasını istediğinize karar verirsiniz. Boş döndürmemelisiniz.
HiddenPlayer getThisHidden()
HiddenPlayer
Sürümünü alınthis
. Botunuzu tahta ile karşılaştırmak için kullanışlıdır.
enum Direction
- Değerler
East
(x = 1; y = 0)West
(x = -1; y = 0)North
(x = 0; y = 1)South
(x = 0; y = -1)
Direction leftTurn()
- Alın
Direction
size bir sola yapılmış eğer alacağı.
- Alın
Direction RightTurn()
- Alın
Direction
size bir sağa dönüş yaptı eğer alacağı.
- Alın
ReadOnlyBoard
Tahtaya eriştiğiniz sınıf budur. Tahtanın gösterilen oyuncu konumlarıyla ilgili yerel bir görünümünü (20x20) ya da yalnızca tahtanın üzerinde kimin sahip olduğunu ve hak talebinde bulunduğunu gösteren bilgileri içeren genel bir görünümü (tüm pano) elde edebilirsiniz. Burası da pozisyonunuzu aldığınız yer.
SquareRegion getBounds()
- Tahtanın boyutunu alın.
MutableMap<com.nmerrill.kothcomm.game.maps.Point2D,ReadOnlySplixPoint> getGlobal()
- Tahtanın global haritasını alın.
MutableMap<com.nmerrill.kothcomm.game.maps.Point2D,ReadOnlySplixPoint> getView()
- Aynı şekilde
getGlobal()
, oynatıcınızın etrafındaki 20x20'lik bir alanla sınırlı olması ve oyuncu konumlarını göstermesi dışında.
- Aynı şekilde
Point2D getPosition(SplixPlayer me)
- Oyuncunun pozisyonunu al. Olarak kullanın
board.getPosition(this)
.
- Oyuncunun pozisyonunu al. Olarak kullanın
Point2D getSelfPosition(ReadOnlyBoard)
- Tahtandaki pozisyonunu al. Kullanımı:
Point2D mypos = getSelfPosition(board)
- Tahtandaki pozisyonunu al. Kullanımı:
ReadOnlyGame
ReadOnlyGame
sadece oyunda kalan dönüş sayısına erişim sağlar int getRemainingIterations()
.
ReadOnlySplixPoint
HiddenPlayer getClaimer()
HiddenPlayer
Bir noktayı talep eden versiyonunu alın - talep etmek = bir iz.
HiddenPlayer getOwner()
- Kim bir noktaya sahip olsun.
HiddenPlayer getWhosOnSpot()
- Müzikçalar bu noktaya yerleştirilmişse, gizli versiyonunu döndür. Sadece işe yarıyor
getLocal()
.
- Müzikçalar bu noktaya yerleştirilmişse, gizli versiyonunu döndür. Sadece işe yarıyor
Point2D
Buradaki diğer sınıfların aksine, Point2D
KotHComm kütüphanesinde bulunur.com.nmerrill.kothcomm.game.maps.Point2D
Point2D(int x, int y)
int getX()
int getY()
Point2D moveX(int x)
Point2D moveY(int y)
Point2D wrapX(int maxX)
x
Değeri aralığında olacak şekilde sarınmaxX
.
Point2D wrapY(int maxY)
y
Değeri aralığında olacak şekilde sarınmaxY
.
int cartesianDistance(Point2D other)
- Bu, bir oyuncunun a noktasından b noktasına hareket etmesinin kaç tur alacağı anlamına gelir.
Clojure desteği
Clojure derleyicisi ile birlikte gelir SplixKoTH-all.jar
, böylece Clojure'u botunuz için kullanabilirsiniz! random_bot
Nasıl kullanılacağını görmek için bana bakın .
Bir botta hata ayıklama
Kontrolör, test stratejilerine yardımcı olmak için bir hata ayıklayıcı ile birlikte gelir. Başlamak için, hazneyi --gui
seçenek ile çalıştırın .
Senin kavanoza hata ayıklayıcı eklemek için takip bu talimatları intellij için veya bu talimatları Eclipse için (denenmemiş Eclipse versiyonu).
Kodunuzla bir hata ayıklayıcı kullanıyorsanız, botunuzun ne gördüğünü görselleştirmek için bunu kullanabilirsiniz. Botunuzun başında bir kesme noktası belirleyin makeMove
ve yalnızca geçerli iş parçacığını duraklattığından emin olun. Ardından, kullanıcı arayüzündeki başlat düğmesini tıklayın ve kodunuzu girin.
Şimdi hepsini bir araya getirmek için:
Koşu botları
Botlarınızı diğerleriyle birlikte çalıştırmak için, kavanozu bültenleri sayfasında çalıştırmanız gerekir. İşte bayrakların listesi:
--iterations
(-i
) <=int
(varsayılan500
)- Çalıştırılacak oyun sayısını belirtin.
--test-bot
(-t
) <=String
- Sadece botun içinde bulunduğu oyunları çalıştırın.
--directory
(-d
) <= Yol- Gönderilerin çalıştırılacağı dizin. Botlarınızı çalıştırmak için bunu kullanın. Botlarınızın, adlandırılmış yolun bir alt klasöründe olduğundan emin olun
java
.
- Gönderilerin çalıştırılacağı dizin. Botlarınızı çalıştırmak için bunu kullanın. Botlarınızın, adlandırılmış yolun bir alt klasöründe olduğundan emin olun
--question-id
(-q
) <=int
(sadece kullanım126815
)- Siteden diğer gönderileri indirin ve derleyin.
--random-seed
(-r
) <=int
(varsayılan olarak rasgele bir sayı)- Koşucuya bir tohum verin ki rasgele kullanan botlar sonuçların çoğalmasını sağlayabilir.
--gui
(-g
)- Bir turnuva yapmak yerine hata ayıklayıcı kullanıcı arayüzünü çalıştırın. En iyisi ile kullanılır
--test-bot
.
- Bir turnuva yapmak yerine hata ayıklayıcı kullanıcı arayüzünü çalıştırın. En iyisi ile kullanılır
--multi-thread
(-m
) <=boolean
(varsayılantrue
)- Çoklu iş parçacığı modunda bir turnuva çalıştırın. Bilgisayarınızda birden fazla çekirdek varsa, bu daha hızlı bir sonuç sağlar.
--thread-count
(-c
) <=int
(varsayılan4
)- Çok iş parçacığına izin veriliyorsa çalıştırılacak iş parçacığı sayısı.
--help
(-h
)- Buna benzer bir yardım mesajı yazdırın.
Bu sayfadaki tüm gönderileri çalıştırmak için kullanın java -jar SplixKoTH-all.jar -q 126815
.
Yayınınızı biçimlendirme
Kontrol cihazının tüm botları indirebilmesini sağlamak için bu formatı izlemelisiniz.
[BotName], Java // this is a header
// any explanation you want
[BotName].java // filename, in the codeblock
[code]
Ayrıca, bir paket bildirimi kullanmayın.
sayı tahtası
+------+--------------+-----------+
| Rank | Name | Score |
+------+--------------+-----------+
| 1 | ImNotACoward | 8940444.0 |
| 2 | TrapBot | 257328.0 |
| 3 | HunterBot | 218382.0 |
+------+--------------+-----------+
Lütfen kuralların herhangi bir bölümü net değilse veya sohbet odasında denetleyicide herhangi bir hata bulursanız bana bildirin .