Roket Botları
Yıl 3024. İnsanlar savaşta riske girmek için çok az kaynak haline geldi, bu yüzden savaş robotlara yöneldi. Senin görevin başka hiçbiri gibi bir bot inşa etmektir, kimin roketleri düşmanlarınızda yıkımı yağacak ve gelen tüm tehditleri vuracak.
Oynanış
botlar
Oyun 10x15 ızgara üzerinde gerçekleşir. Botunuz alt kenardan bulunur ve ızgaranın 6,7 ve 8 numaralı noktalarında üç yuva bulunur. Rakibiniz ızgaranın en üstünde, üç slot sizin tam tersi.
Roketler
Bu yuvaların herhangi birinden, yuvanın tahrip edilmediğini varsayarak bir roket ateşleyebilirsiniz. Bir roket, oluşturulduğunda kendisine verilen yönlerin bir listesinden oluşur ve bir kez ateşlendiğinde bu yönler değiştirilemez. Her turda, roket listenin en üstünü tüketecek ve bu yönde hareket edecektir. Roketler aynı anda hareket eder. İki roket aynı kiremitle biterse, ikisi de patlayacak. Bir roket komutları biterse patlayabilir. Bir roket yakıtı biterse, 100 hamleden sonra patlar. Bir roket patladığında, o karoda 5 tur kalarak oraya hareket eden diğer roketlerin de patlamasına neden olur.
Not: Eşzamanlı hareket nedeniyle, her ikisi de aynı döşemede bir dönüşe son vermedikleri sürece, iki roket patlamadan birbirini geçebilir.
Hedef
Her maçın amacı, hayatta kalırken rakiplerinizin yuvalarını yok etmektir. Bir roket, sahip olduğunuz herhangi bir canlı yuvadan ateşlenebilir ve ateşlenmeden önce sizin belirlediğiniz bir yol verilir. Her iki turda bir roket fırlatırsınız, yani roketler başka bir atış yapmadan önce iki kez hareket eder. Bir düello 200 tur sürer veya bir bot yuvası yok olana kadar sürer.
puanlama
Maçın sonunda, sahip olduğunuz her canlı slot için bir puan ve yok ettiğiniz her bir rakip slot için bir puan alırsınız. Bu, sıfır toplamlı bir oyun olduğu ve her maçta 6 puan verileceği anlamına gelir.
Her bot bir kez botla karşı karşıya gelecek şekilde yuvarlak bir robin çalıştırılacaktır. Herhangi bir bot RNG kullanıyorsa, her eşleşme bunun yerine 1000 düello olacaktır.
uygulama
Yarışma için kodu burada bulabilirsiniz: https://github.com/Cain93/RocketBots
Her sunum Bot
sınıfı genişletmelidir . fireRocket
Yöntemi geçersiz kılmalısınız . Bu yöntem Rocket[][]
, oyun tahtasını temsil eden bir Rockets dizisi alır . Her zaman noktalar yuvalara, ızgara alt kısmında bulunur [-1][6]
, [-1][7]
, [-1][8]
. Izgarada, boş lekeler ile temsil edilecektir null
. Bir döşemede bir roket varsa, dis
alana erişerek kime ait olduğunu belirleyebilirsiniz . "^" roketiniz ve "v" rakiplerinizdir.
Roketiniz için talimatlar veren bir LinkedList Tamsayı listesi döndürmelisiniz. Yukarı hareket etmek için 0 tuşunu kullanın. Yukarı ve sağa hareket etmek için 1, sadece sağ, 2 vb. Tuşlarını yukarı ve sola doğru kullanın. Roket, Tamsayıları ittiğiniz sırada hareket edecektir. Örneğin, aşağıdaki kod roketin birkaç tur yukarı doğru hareket etmesini, birkaç tur zig-zag yapmasını ve ardından patlamasını sağlayacaktır.
LinkedList<Integer> moves = new LinkedList<Integer>();
moves.push(0);
moves.push(0);
moves.push(0);
moves.push(1);
moves.push(7);
moves.push(1);
moves.push(7);
Roketi ateşleyecek yuvayı değiştirmek için curSlot
alanı değiştirin . 0 en soldaki alanınız ve 2 en sağdaki alanınızdır. Bir yuvanın yok edilip edilmediğini kontrol etmek için kullanın getSlot(int slotNumber)
.
Eğer bir roket bir yuvayı çevirirse, o slot imha edilir. Roketi manuel olarak patlatmanıza gerek yoktur.
Not: Roketler ateş edilen yerin bulunduğu yerde ortaya çıkar, ancak çarpışmalar değerlendirilmeden önce bir kez hareket eder. Bu nedenle, 0 yuvasından bir roket atarsanız ve ilk hamle doğruysa (2), o zaman kendi orta yuvanızı yok edersiniz. Ancak, yukarı ve sağ (1) güvenli bir harekettir.
Botunuzu adlandırmak istiyorsanız, name()
yöntemi geçersiz kılın .
Her düello için botlar yeniden inşa edilecek, böylece statik değişkenler sıfırlanacak.
İyi şanslar!
Roketleriniz gerçek uçsun ve rakipleriniz yanan metal hurdalarından başka bir şey olmasın.
İpucu:
Patlamaları oluşturmak için roketleri bilerek patlatmak, savunmak için rakip roketleri vurmaya çalışmaktan daha kolay bir yoldur.
Örnek Bot
package bots;
import java.util.LinkedList;
import mechanics.*;
public class SimpleBot extends Bot {
public String name(){
return "Simple";
}
public LinkedList<Integer> fireRocket(Rocket[][] g){
LinkedList<Integer> l = new LinkedList<Integer>();
for(int i = 0; i < 12; i++){
l.push(0);
}
return l;
}
}
Skorlar
6-24 arası puanlar
Simple: 900
Zigzagoon: 3654
Wall-E: 3606
Tortoise: 2248
3 Shot: 2334
HatTrickBot: 4287
Sniper: 2973
SideShooter: 2491
Terminator: 4835
StraightShot: 3378
Defender: 4570
MoreDakka: 4324