Roket Botları KOTH


11

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 Botsınıfı genişletmelidir . fireRocketYö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, disalana 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 curSlotalanı 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

Herhangi bir bot RNG kullanıyorsa, sipariş önemli değil, o zaman koşuyu maç başına 1000 katına çıkaracağım
Cain

1
Rakip karakterin yok olup olmadığını kontrol etmenin bir yolu var mı? getSlot (int) sadece slotlarımız içindir, değil mi?
Katenkyo

1
@Cain Yıkılan bir yuvaya herhangi bir roket fırlatmamak ilginç olabilir: 3
Katenkyo

1
@Manu bir hata değil, tahtaya yanınızdan bakıyorsunuz, bu yüzden sol yuvalar göreceli
Katenkyo

1
Çok üzgünüm, bu hatayı zaten düzelttim, itmeyi unuttum!
Cain

Yanıtlar:


3

savunma oyuncusu

Defender yeni bir savunma türü kullanıyor: Roketler yuvaların önünde devriye geziyor . Bu büyük bir avantaj sağlar, çünkü roketler 5 tur yerine 100 tur yaşar (patlamalar gibi).

package bots;

import java.util.LinkedList;
import mechanics.*;

public class Defender extends Bot {
    int turn = 0;

    @Override
    public String name() {
        return "Defender";
    }

    @Override
    public LinkedList<Integer> fireRocket(Rocket[][] grid) {
        LinkedList<Integer> command = new LinkedList<Integer>();
        for (int i = 0; i < 3; i++) {
            if ((grid[0][6+i] == null || grid[0][6+i].getDis().equals("v")) && (grid[1][6+i] == null || grid[1][6+i].getDis().equals("v")) && getSlot(i)) {
                curSlot = i;
                command.push(0);
                for (int j = 0; j < 50; j++) {
                    command.push(0);
                    command.push(4);
                }
                break;
            }
        }

        if (command.isEmpty()) {
            if ((grid[0][9] == null || grid[0][9].getDis().equals("v")) && (grid[0][10] == null || grid[0][10].getDis().equals("v")) && (grid[1][10] == null || grid[1][10].getDis().equals("v")) && getSlot(2)) {
                curSlot = 2;
                command.push(1);
                command.push(1);
                command.push(4);
                for (int i = 0; i < 50; i++) {
                    command.push(6);
                    command.push(2);
                }
            } else if ((grid[0][5] == null || grid[0][5].getDis().equals("v")) && (grid[0][4] == null || grid[0][4].getDis().equals("v")) && (grid[1][4] == null || grid[1][4].getDis().equals("v")) && getSlot(0)) {
                curSlot = 0;
                command.push(7);
                command.push(7);
                command.push(4);
                for (int i = 0; i < 50; i++) {
                    command.push(2);
                    command.push(6);
                }
            }

        }

        if (command.isEmpty()) {
            if (turn % 2 == 0 && getSlot(0)){
                curSlot = 0;
                command.push(7);
                command.push(7);
                for (int i = 0; i < 7; i++) {
                    command.push(0);
                }
                command.push(2);
                for (int i = 0; i < 2; i++) {
                    if (Math.random() < 0.2) command.push(2);
                }
                command.push(1);
            } else {
                curSlot = 2;
                command.push(1);
                command.push(1);
                for (int i = 0; i < 7; i++) {
                    command.push(0);
                }
                command.push(6);
                for (int i = 0; i < 2; i++) {
                    if (Math.random() < 0.5) command.push(6);
                }
                command.push(7);
            }
        }

        turn++;
        return command;
    }
}

Vay canına +1. Harika bot. Ama dediğin gibi, bot diğer tarafta olduğunda iyi oynayamaz.
Spikatrix

1
Oldukça kusursuz oyun, tebrikler
Cain

6

Zigzagoon

Dış yuvalar (hafifçe) genişler, sonra öne doğru ilerler ve düşman yuvalarına geri döner. Ortadaki yuva ortada bir zikzak deseni çeker.

Diğer her turda (3 tur), savunma moduna girer ve sadece kendi yuvalarımın yakınında bazı roketler patlar. Saldırı modu roketleri sonra onları dolaşmak. Çok süslü bir şey yok, sadece yarışmayı başlatmak ve çalıştırmak için bir şey.

package bots;import java.util.*;import mechanics.*;

public class Zigzagoon extends Bot{
    String[] evenMoves = {"7000000001","0170710170","1000000007"};
    String[] oddMoves = {"0","00","0"};
    boolean even = true;
    public String name(){return "Zigzagoon";}

    public LinkedList<Integer> fireRocket(Rocket[][] g){
        curSlot = (curSlot+1)%3;
        if(curSlot<1)even=!even;
        String[] moves = even?evenMoves:oddMoves;
        LinkedList<Integer> command = new LinkedList<Integer>();
        for(int i=0;i<moves[curSlot].length();i++)
            command.push(moves[curSlot].charAt(i)-'0');
        return command;
    }
}

Düzeltildi, farkın çoğu, doğru ya da yanlış başlamış olsa bile geldi. Botlar artık her maçtan önce yeniden inşa ediliyor.
Cain

Ah, bu mantıklı. Değişkenlerin sıfırlanmadığını bile düşünmedim. Teşekkürler :)
Geobits

5

terminatör

Terminator'ü sunmaktan gurur duyuyorum !!!

Her bir roket ortadan sola / sağa hareket eder ve bir düşman yuvasına geri döner. Her iki turda bir savunma roketi fırlatılır ve korumak için yuvanın yakınında patlar.

package bots;

import java.util.LinkedList;
import mechanics.Bot;
import mechanics.Rocket;

public class Terminator extends Bot {

    int n = 0;
    String[] moves = {"000", "0111107777", "00", "0077700111", "00", "0777701111"};

    public String name() {
        return "Terminator";
    }

    @Override
    public LinkedList<Integer> fireRocket(Rocket[][] g) {
        curSlot = (n+1) % 3;

        LinkedList<Integer> commands = loadCommands(moves[n % moves.length]);
        n++;

        return commands;
    }

    protected LinkedList<Integer> loadCommands(String commands) {
        LinkedList<Integer> linkedList = new LinkedList<Integer>();

        for (int i = 0; i < commands.length(); i++) {
            linkedList.push(commands.charAt(i) - 48);
        }

        return linkedList;
    }

}

3

HatTrickBot

Ben bir kez iki kez vurmak CodeBot 3 için DoubleTapBot vardı, İşte HatTrickBot geliyor: Aynı anda tüm 3 noktalar isabet!

Nereye düşeceğini biliyorsanız, bir roketin çarpmasını önlemek her zaman mümkündür. Ama yuvalarını 3 roket saldırısına karşı koruyabilecek pek çok bot olduğunu düşünmüyorum.

Bu arada, evet, tekrarlanan anahtarla başka bir şey görmek korkunç. Yuvaların durumunun ve turnConter'ın her kombinasyonu için benzersiz değerlerle açmak için bir var yaratabilirdim. Ama okumak daha zor olurdu (Bir yorumda değerlerin anlamını korumak zorundayım ... sıkıcı!) :)

package bots;
import java.util.LinkedList;
import mechanics.*;
/*
 * HatTrickBot always tries to destroy all the enemy slots at once
 * In order to achieve this, each slot needs extrem concentration and coordination
 * It explain why they need some turns to re-synchronized the rockets after one of them dies.
 */
public class HatTrickBot extends Bot
{
    // Default moves are at [0]
    // moves at [1] are used when there's only 2 slots remaining
    // moves  [2-4] are here for when there's only 1 slot remaining
    // it panicks, and can't establish how to fire to do a hat trick.
    // So he will just spamm every ennemy position, one at a time
    String[] rightSlot = {  "770002000020",
                            "0000000001",
                            "0000000000",
                            "0000000001",
                            "0000000011"};
    String[] midSlot   = {  "0000000000",
                            "11000060000",
                            "0000000000",
                            "0000000010",
                            "0000000700"};
    String[] leftSlot  = {  "11000060007",
                            "777702000020",
                            "0000000000",
                            "0000007000",
                            "0000077000"};
    int turnCounter=-1;
    public String name(){return "HatTrickBot";}
    public LinkedList<Integer> fireRocket(Rocket[][] g)
    {
        turnCounter=(turnCounter+1)%3;
        String[][] moves = {rightSlot,midSlot,leftSlot};
        LinkedList<Integer> ll = new LinkedList<Integer>();
        boolean slotL=getSlot(0),slotM=getSlot(1),slotR=getSlot(2);
        int movePoint=0;
        if(slotL&&slotM&&slotR)
        {
            switch(turnCounter)
            {
            case 0: curSlot=0;
                break;
            case 1: curSlot=2;
                break;
            case 2: curSlot=1;
                break;
                default:break;
            }
            movePoint=0;

        }
        else if(!slotM&&slotL&&slotR)
        {
            switch(turnCounter)
            {
            case 0: curSlot=0;
                    movePoint=0;
                break;
            case 1: curSlot=2;
                    movePoint=0;
                break;
            case 2: curSlot=0;
                    movePoint=1;
                break;
                default:break;
            }
        }
        else if(!slotL&&slotM&&slotR)
        {
            switch(turnCounter)
            {
            case 0: curSlot=0;
                    movePoint=0;
                break;
            case 1: curSlot=1;
                    movePoint=1;
                break;
            case 2: curSlot=0;
                    movePoint=1;
                break;
                default:break;
            }
        }
        else if(!slotR&&slotM&&slotL)
        {

            switch(turnCounter)
            {
            case 0: curSlot=2;
                    movePoint=1;
                break;
            case 1: curSlot=1;
                    movePoint=1;
                break;
            case 2: curSlot=1;
                    movePoint=0;
                break;
                default:break;
            }
        }
        else
        {
            if(slotR)curSlot=0;
            if(slotM)curSlot=1;
            if(slotL)curSlot=2;
            movePoint = 2+turnCounter;
        }
        for(int i=0;i<moves[curSlot][movePoint].length();i++)
            ll.push(Integer.parseInt(moves[curSlot][movePoint].charAt(i)+""));
        return ll;
    }
}

Roketler sadece her turda ateş eder, bu yüzden bu tam bir Hat Trick vuruşu yapmaz. Yine de son derece etkili
Cain

@ Hoa Ho, her 2 turda bir üzücü: /. Her neyse, ilk turun sonucunu göreceğim ve eğer geliştirebileceğini düşünürsem gerçek bir HatTrick yapmak için değiştireceğim :)
Katenkyo

FireRocket () her çağrıldığında roketler iki kez hareket eder. Yani şimdi, hepsi hala bir dönüşle birbirinden uzak. Eşleşmenin görsel bir temsilini görmek için denetleyicideki test dosyasını kullanabilirsiniz.
Cain

@Cain Bu botları yazarken işteydim, bu yüzden onları sadece spesifikasyonlara
dayandım

Vay canına, bunu test yapmadan yazmayı başardığın için çok etkilendim. Daha net hale getirmek için özellikleri güncelledim
Cain

2

Tosbağa

Tüm üslerimi korursam 3 puanım olur. Tabanı ancak 5 noktadan saldırabilirim. Roket sahaya 5 dönüş sürüyor ...

Bu bot, tüm bunları hedefine uyacak şekilde kullanır: cebindeki noktaların en az% 50'si ile hayatta kalmak. 3 roket atıyor, sonra kendini koruyor

package bots;

import java.util.LinkedList;

public class Tortoise extends Bot
{
    int turnCounter=-1;
    boolean attacked=false;
    int[] moves={7,0,0,0,1};
    public String name(){return "Tortoise";}
    public LinkedList<Integer> fireRocket(Rocket[][] g)
    {
         LinkedList<Integer> rocket = new LinkedList<Integer>();
         turnCounter++;
         if(!attacked)
         {
             curSlot=turnCounter;
             for(int i=0;i<11;i++)
                 rocket.push(0);
             if(turnCounter==2)
                 attacked=true;
             return rocket;
         }
         turnCounter%=5;
         switch(turnCounter)
         {
         case 0:
         case 1:curSlot=0;break;
         case 2:curSlot=1;break;
         case 3:
         case 4:curSlot=2;break;
            default:break;
         }
         rocket.push(moves[turnCounter]);
         return rocket;
    }
}

Roketler sadece her iki turda da ateş ediyor, bu yüzden gerçekten sadece 2 buçuk duvar koruyabilirsiniz
Cain

@Cain Oh, bu yüzden gerçek bir sığınak olacak şekilde değiştireceğim :)
Katenkyo

2

SideShooter

İlk olarak ilk (en sağdaki) taretten iki farklı şekilde vuruyor. Ardından, son (en soldaki) taretten iki farklı yoldan biriyle ateş eder. Sonra her taretin önünde roketler patlatarak ikinci (orta) taretle bir "duvar" yapar. Bu işlem tekrarlanır.

Oyun 30 turdan fazla sürerse, SideShooter sıkılır ve küçük bir şekilde değişir. İkinci (orta) taretle bir "duvar" yapmak yerine, düz ateş eder. Diğer kuleler de aynı şekilde davranıyor.

import java.util.LinkedList;

public class SideShooter extends Bot {

    int[] launcher = new int[]{1, 3, 2, 2, 2};
    String[] right = {"1100000077", "100000007"};
    String[] left  = {"7700000011", "700000001"}; 
    int position = -1;
    int turns = 0;

    public String name(){
        return "SideShooter";
    }

    public LinkedList<Integer> fireRocket(Rocket[][] g){
      LinkedList<Integer> directions = new LinkedList<Integer>();

      if(getSlot(0) || getSlot(1) || getSlot(2))      
          do{
              position = (position + 1) % 5;
              curSlot = launcher[position] - 1;
          }while(!getSlot(curSlot));

      if(position == 0)
      {
          String shoot = left[((int) (Math.random() * left.length))];
          for(int i=0; i < shoot.length(); i++)
              directions.push(shoot.charAt(i)-'0');
      }else if(position == 1)
      {
          String shoot = right[((int) (Math.random() * right.length))];
          for(int i=0; i < shoot.length(); i++)
              directions.push(shoot.charAt(i)-'0');
      }else
      {
          if(turns < 30)
          {
            if(position == 2 )
                directions.push(0);
            else if(position == 3)
                directions.push(1);
            else if(position == 4)
                directions.push(7);
          }else
              for(int i=0; i < 10; i++)
                  directions.push(0); 
      }
      turns ++;
      return directions;
    }

}

do...whileifadesi ... sonsuz döngü yapmak
guy777

@ guy777, Hayır değil. Kırık olmayan bir taret bulana kadar ilmek yapar.
Spikatrix

tamam ! iki ilk kez tüm botlar, SideShooter ve diğer bot (hangisi bilmiyorum) ile oyunu başlatmak edemez kodunu başlatmak !!!
guy777

Bazı oyunlar bitemez. Kontrolörün bir dönüş limiti olmalıdır.
guy777

1
@CoolGuy Düzenlemesini onaylamak için oy kullandım. Kendiniz gözden geçirdiğinizden / test ettiğinizden emin olun.
mbomb007

2

Keskin nisanci

Keskin nişancı ilk önce iki tarafını engeller ve sonra düz atış yapmaya başlar.

import java.util.LinkedList;

public class Sniper extends Bot {

    int[] launcher = new int[]{1, 3, 1, 2, 3};
    String[] moves = {"7", "1", "0000000000", "0000000000", "0000000000"}; 
    int position = -1, move = 0;

    public String name(){
        return "Sniper";
    }

    public LinkedList<Integer> fireRocket(Rocket[][] g){
        LinkedList<Integer> directions = new LinkedList<Integer>();

        if(getSlot(0) || getSlot(1) || getSlot(2))
        do{
            position = (position + 1) % launcher.length;
            curSlot = launcher[position] - 1;
        }while(!getSlot(curSlot));

        for(int i=0; i < moves[move].length(); i++)
            directions.push(moves[move].charAt(i)-'0');

        move = (move + 1) % moves.length;

        return directions;
    }

}

SideShooter'ın yorumlarına bakın, aynı sorun burada.
Cain

2

Üç Çekim

Uçan bazı tuhaf çekimlerimiz var. Gerçek bir savunma yok, ama desen öyle ki, bu tuhaf füze doludan ateş etmek zor olacak. (veya fikir budur. büyük olasılıkla işe yaramayacaktır.)

package bots;import java.util.*;import mechanics.*;

public class ThreeShot extends Bot{
    public String name(){state = 0;return "3 Shot";}
    private int state;

    public LinkedList<Integer> fireRocket(Rocket[][] g){
        LinkedList<Integer> command = new LinkedList<Integer>();
        if(state < 2){
           state++;
           return fireLeft();
        }
        if(state < 4){
           state++;
           return fireCenter();
        }
        state=(state+1)%6;
        return fireRight();
    }
    LinkedList<Integer> fireCenter(){
        LinkedList<Integer> command = new LinkedList<Integer>();
        curSlot = 1;
        while(command.size()<90){
            command.push(1);
            command.push(7);
            command.push(6);
            command.push(1);
        }
        return command;
    }
    LinkedList<Integer> fireRight(){
        LinkedList<Integer> command = new LinkedList<Integer>();
        curSlot = 2;
        command.push(1);
        for(int i=0;i<8;i++){
            command.push(0);
        }
        command.push(7);
        return command;
    }
    LinkedList<Integer> fireLeft(){
        LinkedList<Integer> command = new LinkedList<Integer>();
        curSlot = 0;
        command.push(7);
        for(int i=0;i<8;i++){
            command.push(6);
            command.push(1);
        }
        command.push(1);
        return command;
    }
}

Not


2

MoreDakka

Dakka durmadan beş yönde ateş ediyor (taretler diğer füzeler tarafından harap oluncaya kadar).

import java.util.LinkedList;

public class MoreDakka extends Bot
{
    String[] moves={"70000000001", "0000000000", "0000000000", "0000000000", "1000000007"};
    int[] launcher = new int[]{0, 0, 1, 2, 2};
    int position = -1;

    public String name(){
        return "MoreDakka";
    }

    public LinkedList<Integer> fireRocket(Rocket[][] g)
    {
         LinkedList<Integer> directions = new LinkedList<Integer>();

         if(getSlot(0) || getSlot(1) || getSlot(2))
            do{
                position = (position + 1) % launcher.length;
                curSlot = launcher[position];
            }while(!getSlot(curSlot));

         for(int i=0; i < moves[position].length(); i++)
            directions.push(moves[position].charAt(i)-'0');

         return directions;
    }
}

1

StraightShot

Sadece onlara ateş et.

package bots;import java.util.*;import mechanics.*;

public class StraightShot extends Bot{
    public String name(){return "StraightShot";}

    public LinkedList<Integer> fireRocket(Rocket[][] g){
        LinkedList<Integer> command = new LinkedList<Integer>();
        curSlot = (curSlot+1)%3;
        for(int i=0;i<100;i++)
            command.push(0);
        return command;
    }
}

1
Farkında değilseniz, bu temel olarak denetleyicide bulunan örnek botlardan biri olan WaveBot ile aynıdır .
Geobits

@Geobits Örnek botların var olduğu hakkında hiçbir fikrim yoktu.
MegaTom

Sample Bot'ları daha kolay görülebilecek bir yere koymamam kötü. Sadece WaveBot'u sileceğim ve bu girişin durmasına izin vereceğim
Cain

1

İşte kendi girişim

WALLE

Bazı ofset roketleri vuruyor, kenarlarında ve merkezinde duvarlar inşa ediyor. 100 tur sonra ortadaki yuvayı hedeflemeye başlar.

package bots;

import java.util.LinkedList;
import java.util.Random;

import mechanics.*;


public class WallE extends Bot {

    int turn = 2;

    public String name(){
        return "Wall-E";
    }

    public LinkedList<Integer> fireRocket(Rocket[][] g){
        turn++;
        LinkedList<Integer> moves = new LinkedList<Integer>();
        curSlot = 1;
        switch(turn%4){
        case 0: 
            //Check the right wall
            if(getSlot(2)){
                curSlot = 2;
                moves.push(1);
                return moves;
            }
        case 1:
            //Check the left wall
            if(getSlot(0)){
                curSlot = 0;
                moves.push(7);
                return moves;
            }
        case 2:
            //Check the center wall
            if(getSlot(1)){
                curSlot = 1;
                moves.push(0);
                return moves;
            }
            break;
        default:
            //Fire a sneaky rocket
            Random rand = new Random();
            int direction = rand.nextInt(2);
            int back = 0;
            if(direction == 0 && getSlot(2)){ direction = 1; back = 7; curSlot = 2;}
            else{ direction = 7; back = 1; curSlot = 0; }
            moves.push(0);
            moves.push(direction);
            moves.push(direction);
            for(int i = 0; i < 5; i++){
                moves.push(0);
            }

            //Go for the center after turn 100
            if(turn > 104){
                moves.pop();
                moves.push(back);
            }
            moves.push(back);
            moves.push(back);


        }

        return moves;










    }

}
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.