Sonuçlar geldi, yarışma bitti.
Kazanan Arshajii's EvilBot , 14 galibiyetle Neo-Bot'tan 13 galibiyetle, CentreBot ve LastStand ise 11 galibiyetle kazandı.
Final döneminden skorlar
Results:
java Rifter: 9 match wins (45 total bout wins)
java EvadeBot: 10 match wins (44 total bout wins)
java EvilBot: 14 match wins (59 total bout wins)
java LastStand: 11 match wins (43 total bout wins)
java UltraBot: 9 match wins (40 total bout wins)
python ReadyAimShoot.py: 8 match wins (36 total bout wins)
./SpiralBot: 0 match wins (1 total bout wins)
python DodgingTurret.py: 8 match wins (43 total bout wins)
ruby1.9 TroubleAndStrafe.rb: 8 match wins (41 total bout wins)
./RandomBot: 1 match wins (6 total bout wins)
python StraightShooter.py: 8 match wins (41 total bout wins)
python mineminemine.py: 3 match wins (14 total bout wins)
./CamperBot: 5 match wins (20 total bout wins)
python3.3 CunningPlanBot.py: 3 match wins (15 total bout wins)
node CentreBot.js: 11 match wins (44 total bout wins)
node Neo-Bot.js: 13 match wins (59 total bout wins)
python NinjaPy.py: 3 match wins (19 total bout wins)
Bu bir tepenin kralı mücadelesi. Amaç, diğer botlardan diğerlerinden daha çok yenecek bir bot yazmak.
Oyun
Botlar, kendi enerjileri 0'a düşürülmeden önce rakibin enerjisini 10'dan 0'a düşürme görevi ile 10x10 arenada bir anda 2'ye karşı oyulacak.
Her maç 5 maçtan oluşacak. Maçın galibi en çok kazananların galibidir. Maçın toplam kazanma ve toplam kazanma sayısı kontrol programı tarafından depolanacak ve yarışmanın genel kazananı belirlenmesinde kullanılacaktır. Kazanan büyük yeşil kene ve kitlelerin beğenisini kazanıyor.
Her maç birkaç turda ilerleyecektir. Her turun başında, arenadaki mevcut durum her bir bota verilecek ve daha sonra ne yapmak istediğini belirleyen bir komutla cevap verilecektir. Her iki komut kontrol programı tarafından alındıktan sonra, her iki komut aynı anda yürütülür ve arena ve bot enerji seviyeleri yeni durumu yansıtacak şekilde güncellenir. Her iki bot da hala devam etmek için yeterli enerjiye sahipse oyun bir sonraki tura geçer. Sonsuza dek devam etmeyeceğinden emin olmak için butik başına 1000 mermi limiti olacak ve bu limite ulaşılması durumunda kazanan en fazla enerjili bot olacak. Her iki bot da eşit enerjiye sahipse, but bir beraberliktir ve hiçbiri bot galibiyet için puan kazanmaz (sanki ikisi de kaybedilmiş gibi).
Silahlar
Her botun emrinde birkaç silah olacaktır:
- Zırh delici mermiler. Bunlar bir seferde 3 kare hareket eder ve 1 enerji hasarına neden olur.
- Füzeler. Bunlar aynı anda 2 kare hareket eder ve çarpma anında 3 enerji hasarına ve hemen çevresindeki tüm meydanlarda 1 puanlık hasara neden olur.
- Mayınlar. Bunlar, botu hemen çevreleyen karelerden birine düşürülür ve üzerine basıldığında 2 enerji hasar noktasına ve hemen çevreleyen karelerden birinde duran herhangi bir şeyin 1 enerji hasarına neden olur.
- Elektromanyetik nabız. Her iki botun da hareket devrelerinin 2 tur boyunca arıza yapmasına neden olur, yani hareket edemezler. Bununla birlikte, hala silahları dağıtabilirler (evet, bunun gerçekçi olmadığını biliyorum, ama bu bir oyun. Gerçek bir yaşam olması gerekmiyor). Düzenleme: Her bir EMP dağıtımı onu kullanan bot için bir enerji noktasına mal olacak.
Mermiler / füzeler sadece botlarla veya duvarlarla etkileyebilir. Seyahat ettikleri karelerden herhangi birinin içindeki botları vuracaklar. Bir şeye çarptıklarında kaybolurlar.
Her durumda immediately surrounding squares
, botun bir sonraki hamlesinde (Moore mahallesi) hareket edebileceği 8 kare anlamına gelir.
Komutları
0
hiçbir şey yapma.N
,NE
,E
,SE
,S
,SW
,W
,NW
Tüm yön komutları ve belli bir yönde, bot bir kare hareket. Bot bu yönde hareket edemiyorsa, meydanda bir duvar veya başka bir bot olduğu için, bot olduğu yerde kalır. Bir mermi veya füze içeren bir kareye taşınmak, mermi / füzenin zaten o kareden çıkmakta olduğu düşünüldüğü için güvenlidir.B
ardından bir boşluk ve ardından yön komutlarından biri bu yönde bir zırh delici mermi atar.M
ardından bir boşluk ve ardından yön komutlarından biri bu yönde bir füze fırlatır.L
ardından bir boşluk ve ardından yön komutlarından biri botun yanındaki o meydanda bir kara mayını damlatıyor. Kare zaten bir duvar veya bot tarafından kullanılıyorsa, komut dikkate alınmaz. Eğer bir mayın başka bir mayına düşerse, onu patlatır. Bu, bırakma işlemi yapan bota ve orijinal mayın tarlası dahilindeki diğer botlara zarar verecektir.P
EMP'yi ateşler.
Her turda sadece bir komut verilebileceği için, bir bot yalnızca aynı anda yapamaz, sadece bir silahı hareket ettirebilir veya ateşleyebilir / açabilir.
Komutların sırası
Her iki botun hareketi de her zaman önce gelir ve tüm hareketler başka bir botun yolunda olduğu, ancak yoldan çekildiğini açıklamak için iki kez denenir.
Örnek
- Bot1 hareket etmeye çalışır,
E
ancak Bot2 zaten o karede - Kontrol programı Bot2'ye geçer.
- Bot2 hareket etmeye
S
ve başarılı olmaya çalışır çünkü hiçbir şey yolunda değildir. - Bot1, hamlesini yapma konusunda ikinci bir girişimde bulundu. Bu sefer başarılı ve Bot1 hareket eder
E
.
Robotlar yapmak istedikleri herhangi bir hareketi yaptıklarında, silahlar ateşlenecek ve tüm mermiler (yeni ve önceden ateşlenmiş) önceden tanımlanmış karelerinin sayısını taşıyacaktır.
Arena
Her turun başında bot mevcut oyun durumunu programın tek komut satırı argümanı olarak alır:
X.....LLL.
..........
..........
..........
M.........
..........
..........
..........
..........
...B.....Y
Y 10
X 7
B 3 9 W
M 0 4 S
L 6 0
B 3 9 S
L 7 0
L 8 0
Arena ilk 10 karakterden 10 karakterden oluşuyor. Gösterilmeyen duvarlarla çevrilidir. Karakterlerin anlamları aşağıdaki gibidir:
.
boş bir kareyi temsil ederY
botunu temsil ediyor.X
Rakip botu temsil eder.L
bir mayını temsil eder.B
uçuştaki bir mermiyi temsil eder.M
uçuşta bir füze temsil eder.
Bunu, hat başına kalan bir bot olan botların kalan enerjisi izler. Sadece bir boşluk bot tanımlayıcısını enerji seviyesinden ayıracaktır. Arenada olduğu gibi Y
botunuzu X
temsil eder ve rakibinizi temsil eder. Sonunda mermilerin ve kara mayınlarının, konumlarının ve (uygunsa) başlıkların, her bir satırda birer tane olmak üzere bir listesi gelir.
Kontrol programı
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <stdbool.h>
#define NUMBOTS 2
#define BOUTSPERMATCH 5
#define ROUNDSPERBOUT 1000
#define MAXFILENAMESIZE 100
#define MAXWEAPONS 100
#define DISPLAYBOUTS true
typedef struct
{
int x, y, energy;
char cmd[5];
} Bot;
int getxmove(char cmd[5]);
int getymove(char cmd[5]);
int newposinbounds(int oldx, int oldy, int dx, int dy);
int directhit(Bot bot, int landmine[2]);
int landminecollision(int landmine1[2], int landmine2[2]);
int inshrapnelrange(Bot bot, int landmine[2]);
int directiontoint(char direction[5], char directions[8][3]);
void deployweapons(Bot *bot, Bot *enemy, int bullets[MAXWEAPONS][3], int missiles[MAXWEAPONS][3], int landmines[MAXWEAPONS][2], char directions[8][3]);
void cleararena(char arena[10][11]);
int main()
{
FILE *fp;
Bot b1, b2;
int bot1, bot2, bot1bouts, bot2bouts;
int bout, round, loop, totalprojectiles, dx, dy;
char bots[NUMBOTS][MAXFILENAMESIZE]=
{
"./donowt ",
"php -f huggybot.php "
};
char directions[8][3]={"N", "NE", "E", "SE", "S", "SW", "W", "NW"};
char openstring[5000], argumentstring[4000], bot1string[6], bot2string[6];
int matcheswon[NUMBOTS],boutswon[NUMBOTS];
int missiles[MAXWEAPONS][3];
int bullets[MAXWEAPONS][3];
int landmines[MAXWEAPONS][2];
int paralyzedturnsremaining=0;
bool bot1moved;
char arena[10][11];
char projectiles[300][10];
for(loop=0;loop<NUMBOTS;loop++)
{
matcheswon[loop]=0;
boutswon[loop]=0;
}
srand(time(NULL));
for(bot1=0;bot1<NUMBOTS-1;bot1++)
{
for(bot2=bot1+1;bot2<NUMBOTS;bot2++)
{
bot1bouts=bot2bouts=0;
printf("%s vs %s ",bots[bot1],bots[bot2]);
for(bout=0;bout<BOUTSPERMATCH;bout++)
{
printf("%d ",bout);
//setup the arena for the bout
b1.x=1;b1.y=1;
b2.x=9;
//b1.y=rand()%10;
b2.y=rand()%10;
b1.energy=b2.energy=10;
//clear the previous stuff
memset(missiles, -1, sizeof(missiles));
memset(bullets, -1, sizeof(bullets));
memset(landmines, -1, sizeof(landmines));
for(round=0;round<ROUNDSPERBOUT;round++)
{
//draw the arena based on current state
cleararena(arena);
totalprojectiles=0;
for(loop=0;loop<MAXWEAPONS;loop++)
{
if(bullets[loop][0]!= -1)
{
arena[bullets[loop][1]][bullets[loop][0]]='B';
sprintf(projectiles[totalprojectiles], "%c %d %d %s\n", 'B', bullets[loop][0], bullets[loop][1], directions[bullets[loop][2]]);
totalprojectiles+=1;
}
if(missiles[loop][0]!= -1)
{
arena[missiles[loop][1]][missiles[loop][0]]='M';
sprintf(projectiles[totalprojectiles], "%c %d %d %s\n", 'M', missiles[loop][0], missiles[loop][1], directions[missiles[loop][2]]);
totalprojectiles+=1;
}
if(landmines[loop][0]!= -1)
{
arena[landmines[loop][1]][landmines[loop][0]]='L';
sprintf(projectiles[totalprojectiles], "%c %d %d\n", 'L', landmines[loop][0], landmines[loop][1]);
totalprojectiles+=1;
}
}
//send the arena to both bots to get the commands
// create bot1's input
arena[b1.y][b1.x]='Y';
arena[b2.y][b2.x]='X';
sprintf(bot1string, "Y %d\n", b1.energy);
sprintf(bot2string, "X %d\n", b2.energy);
strcpy(argumentstring, "'");
strncat(argumentstring, *arena, 10*11);
strcat(argumentstring, bot1string);
strcat(argumentstring, bot2string);
for(loop=0;loop<totalprojectiles;loop++)
{
strcat(argumentstring, projectiles[loop]);
}
strcat(argumentstring, "'");
sprintf(openstring, "%s %s", bots[bot1], argumentstring);
// send it and get the command back
fp=popen(openstring, "r");
fgets(b1.cmd, 5, fp);
fflush(NULL);
pclose(fp);
// create bot2's input
arena[b2.y][b2.x]='Y';
arena[b1.y][b1.x]='X';
sprintf(bot2string, "Y %d\n", b2.energy);
sprintf(bot1string, "X %d\n", b1.energy);
strcpy(argumentstring, "'");
strncat(argumentstring, *arena, 10*11);
strcat(argumentstring, bot2string);
strcat(argumentstring, bot1string);
for(loop=0;loop<totalprojectiles;loop++)
{
strcat(argumentstring, projectiles[loop]);
}
strcat(argumentstring, "'");
sprintf(openstring, "%s %s", bots[bot2], argumentstring);
// send it and get the command back
fp=popen(openstring, "r");
fgets(b2.cmd, 5, fp);
fflush(NULL);
pclose(fp);
if(DISPLAYBOUTS)
{
arena[b1.y][b1.x]='A';
arena[b2.y][b2.x]='B';
printf("\033c");
printf("Round: %d\n", round);
printf("%s", arena);
sprintf(bot1string, "A %d\n", b1.energy);
sprintf(bot2string, "B %d\n", b2.energy);
printf("%s%s", bot1string, bot2string);
}
//do bot movement phase
if(paralyzedturnsremaining==0)
{
// move bot 1 first
bot1moved=false;
dx=dy=0;
dx=getxmove(b1.cmd);
dy=getymove(b1.cmd);
if(newposinbounds(b1.x, b1.y, dx, dy))
{
if(!(b1.x+dx==b2.x) || !(b1.y+dy==b2.y))
{
bot1moved=true;
b1.x=b1.x+dx;
b1.y=b1.y+dy;
}
}
// move bot 2 next
dx=dy=0;
dx=getxmove(b2.cmd);
dy=getymove(b2.cmd);
if(newposinbounds(b2.x, b2.y, dx, dy))
{
if(!(b2.x+dx==b1.x) || !(b2.y+dy==b1.y))
{
b2.x=b2.x+dx;
b2.y=b2.y+dy;
}
}
if(!bot1moved) // if bot2 was in the way first time, try again
{
dx=dy=0;
dx=getxmove(b1.cmd);
dy=getymove(b1.cmd);
if(newposinbounds(b1.x, b1.y, dx, dy))
{
if(!(b1.x+dx==b2.x) || !(b1.y+dy==b2.y))
{
b1.x=b1.x+dx;
b1.y=b1.y+dy;
}
}
}
//check for landmine hits
for(loop=0;loop<MAXWEAPONS;loop++)
{
if(landmines[loop][0]!= -1)
{
if(directhit(b1, landmines[loop]))
{
b1.energy-=2;
if(inshrapnelrange(b2, landmines[loop]))
{
b2.energy-=1;
}
landmines[loop][0]= -1;
landmines[loop][1]= -1;
}
if(directhit(b2, landmines[loop]))
{
b2.energy-=2;
if(inshrapnelrange(b1, landmines[loop]))
{
b1.energy-=1;
}
landmines[loop][0]= -1;
landmines[loop][1]= -1;
}
}
}
}
else
{
paralyzedturnsremaining-=1;
}
//do weapons firing phase
if(strcmp(b1.cmd, "P")==0)
{
paralyzedturnsremaining=2;
b1.energy--;
}
else if(strcmp(b2.cmd, "P")==0)
{
paralyzedturnsremaining=2;
b2.energy--;
}
deployweapons(&b1, &b2, bullets, missiles, landmines, directions);
deployweapons(&b2, &b1, bullets, missiles, landmines, directions);
//do weapons movement phase
int moves;
for(loop=0;loop<MAXWEAPONS;loop++)
{
dx=dy=0;
if(bullets[loop][0]!= -1)
{
dx=getxmove(directions[bullets[loop][2]]);
dy=getymove(directions[bullets[loop][2]]);
for(moves=0;moves<3;moves++)
{
if(newposinbounds(bullets[loop][0], bullets[loop][1], dx, dy))
{
bullets[loop][0]+=dx;
bullets[loop][1]+=dy;
if(directhit(b1, bullets[loop]))
{
b1.energy-=1;
bullets[loop][0]= -1;
bullets[loop][1]= -1;
bullets[loop][2]= -1;
}
if(directhit(b2, bullets[loop]))
{
b2.energy-=1;
bullets[loop][0]= -1;
bullets[loop][1]= -1;
bullets[loop][2]= -1;
}
}
else
{
bullets[loop][0]= -1;
bullets[loop][1]= -1;
bullets[loop][2]= -1;
dx=dy=0;
}
}
}
};
for(loop=0;loop<MAXWEAPONS;loop++)
{
dx=dy=0;
if(missiles[loop][0]!= -1)
{
dx=getxmove(directions[missiles[loop][2]]);
dy=getymove(directions[missiles[loop][2]]);
for(moves=0;moves<2;moves++)
{
if(newposinbounds(missiles[loop][0], missiles[loop][1], dx, dy))
{
missiles[loop][0]+=dx;
missiles[loop][1]+=dy;
if(directhit(b1, missiles[loop]))
{
b1.energy-=3;
if(inshrapnelrange(b2, missiles[loop]))
{
b2.energy-=1;
}
missiles[loop][0]= -1;
missiles[loop][1]= -1;
missiles[loop][2]= -1;
}
if(directhit(b2, missiles[loop]))
{
b2.energy-=3;
if(inshrapnelrange(b1, missiles[loop]))
{
b1.energy-=1;
}
missiles[loop][0]= -1;
missiles[loop][1]= -1;
missiles[loop][2]= -1;
}
}
else
{
if(inshrapnelrange(b1, missiles[loop]))
{
b1.energy-=1;
}
if(inshrapnelrange(b2, missiles[loop]))
{
b2.energy-=1;
}
missiles[loop][0]= -1;
missiles[loop][1]= -1;
missiles[loop][2]= -1;
dx=dy=0;
}
}
}
}
//check if there's a winner
if(b1.energy<1 || b2.energy<1)
{
round=ROUNDSPERBOUT;
}
}
// who has won the bout
if(b1.energy<b2.energy)
{
bot2bouts+=1;
boutswon[bot2]+=1;
}
else if(b2.energy<b1.energy)
{
bot1bouts+=1;
boutswon[bot1]+=1;
}
}
if(bot1bouts>bot2bouts)
{
matcheswon[bot1]+=1;
}
else if(bot2bouts>bot1bouts)
{
matcheswon[bot2]+=1;
}
printf("\n");
}
}
// output final scores
printf("\nResults:\n");
printf("Bot\t\t\tMatches\tBouts\n");
for(loop=0;loop<NUMBOTS;loop++)
{
printf("%s\t%d\t%d\n", bots[loop], matcheswon[loop], boutswon[loop]);
}
}
int getxmove(char cmd[5])
{
int dx=0;
if(strcmp(cmd, "NE")==0)
dx= 1;
else if(strcmp(cmd, "E")==0)
dx= 1;
else if(strcmp(cmd, "SE")==0)
dx= 1;
else if(strcmp(cmd, "SW")==0)
dx= -1;
else if(strcmp(cmd, "W")==0)
dx= -1;
else if(strcmp(cmd, "NW")==0)
dx= -1;
return dx;
}
int getymove(char cmd[5])
{
int dy=0;
if(strcmp(cmd, "N")==0)
dy= -1;
else if(strcmp(cmd, "NE")==0)
dy= -1;
else if(strcmp(cmd, "SE")==0)
dy= 1;
else if(strcmp(cmd, "S")==0)
dy= 1;
else if(strcmp(cmd, "SW")==0)
dy= 1;
else if(strcmp(cmd, "NW")==0)
dy= -1;
return dy;
}
int newposinbounds(int oldx, int oldy, int dx, int dy)
{
return (oldx+dx>=0 && oldx+dx<10 && oldy+dy>=0 && oldy+dy<10);
}
int directhit(Bot bot, int landmine[2])
{
return (bot.x==landmine[0] && bot.y==landmine[1]);
}
int landminecollision(int landmine1[2], int landmine2[2])
{
return ((landmine1[1]==landmine2[1]) && abs(landmine1[0]==landmine2[0]));
}
int inshrapnelrange(Bot bot, int landmine[2])
{
return (abs(bot.x-landmine[0])<2 && abs(bot.y-landmine[1])<2);
}
int directiontoint(char direction[5], char directions[8][3])
{
int loop,returnval=8;
for(loop=0;loop<8;loop++)
{
if(strcmp(directions[loop], direction)==0)
returnval=loop;
}
return returnval;
}
void deployweapons(Bot *bot, Bot *enemy, int bullets[MAXWEAPONS][3], int missiles[MAXWEAPONS][3], int landmines[MAXWEAPONS][2], char directions[8][3])
{
int loop;
if(strlen(bot->cmd)>2)
{
if(bot->cmd[0]=='B')
{
int weaponslot=0;
while(bullets[weaponslot][0]!= -1)
weaponslot+=1;
bullets[weaponslot][0]=bot->x;
bullets[weaponslot][1]=bot->y;
bullets[weaponslot][2]=directiontoint(bot->cmd+2, directions);
if(bullets[weaponslot][2]>7)
{
// direction wasn't recognized so clear the weapon
bullets[weaponslot][0]= -1;
bullets[weaponslot][1]= -1;
bullets[weaponslot][2]= -1;
}
}
if(bot->cmd[0]=='M')
{
int weaponslot=0;
while(missiles[weaponslot][0]!= -1)
weaponslot+=1;
missiles[weaponslot][0]=bot->x;
missiles[weaponslot][1]=bot->y;
missiles[weaponslot][2]=directiontoint(bot->cmd+2, directions);
if(missiles[weaponslot][2]>7)
{
// direction wasn't recognized so clear the weapon
missiles[weaponslot][0]= -1;
missiles[weaponslot][1]= -1;
missiles[weaponslot][2]= -1;
}
}
if(bot->cmd[0]=='L')
{
int weaponslot=0;
while(landmines[weaponslot][0]!= -1)
weaponslot+=1;
if(newposinbounds(bot->x, bot->y, getxmove(bot->cmd+2), getymove(bot->cmd+2)))
{
landmines[weaponslot][0]=bot->x+getxmove(bot->cmd+2);
landmines[weaponslot][1]=bot->y+getymove(bot->cmd+2);
//check for landmine hits
for(loop=0;loop<MAXWEAPONS;loop++)
{
if(landmines[loop][0]!= -1)
{
if(landminecollision(landmines[weaponslot], landmines[loop]) && weaponslot!=loop)
{
if(inshrapnelrange(*bot, landmines[loop]))
{
bot->energy-=1;
}
if(inshrapnelrange(*enemy, landmines[loop]))
{
enemy->energy-=1;
}
landmines[loop][0]= -1;
landmines[loop][1]= -1;
landmines[weaponslot][0]= -1;
landmines[weaponslot][1]= -1;
}
}
}
}
}
}
}
void cleararena(char arena[10][11])
{
int loop;
memset(arena, '.', 110);
for(loop=0;loop<10;loop++)
{
arena[loop][10]='\n';
}
}
Kontrol programı botunuzu komut satırından arayacaktır. Bu nedenle, komut satırından aranamayan programlar geçersiz sayılır . Seçtiği dili bu şekilde çalışmayanlardan özür dilerim, ancak her eşleşmeyi elle yapmak pratik olmazdı.
intx13 , kontrol programının daha sağlam bir versiyonunu burada bulabileceğiniz bazı hata düzeltmeleriyle birlikte yazmıştır .
Kontrol programındaki iyileştirmeler veya hata düzeltmeleri için önerilerde bulunabilirsiniz.
Test botları
Test botlarının hiçbiri puanlama çalışmalarına dahil edilmeyecek. Onlar sadece test amaçlı.
Dudley DoNowt (C)
int main(int argc, char *argv)
{
printf("0");
}
Durumdan bağımsız olarak hiçbir şey yapmaz. Çok kazanması beklenmiyor.
HuggyBot (PHP)
<?php
$arena=$argv[1];
list($meX, $meY)=findMe($arena);
list($oppX, $oppY)=findOpp($arena);
if($meY<$oppY)
{
if($meX<$oppX)
echo "SE";
elseif($meX==$oppX)
echo "S";
else
echo "SW";
}
elseif($meY==$oppY)
{
if($meX<$oppX)
echo "E";
else
echo "W";
}
else
{
if($meX<$oppX)
echo "NE";
elseif($meX==$oppX)
echo "N";
else
echo "NW";
}
function findMe($arena)
{
return find("Y", explode("\n", $arena));
}
function findOpp($arena)
{
return find("X", explode("\n", $arena));
}
function find($char, $array)
{
$x=0;
$y=0;
for($loop=0;$loop<10;$loop++)
{
if(strpos($array[$loop], $char)!==FALSE)
{
$x=strpos($array[$loop], $char);
$y=$loop;
}
}
return array($x, $y);
}
?>
Rakibinin hemen yanında almaya çalışır. Kara mayınlarına karşı savunmasız oldukları için onları aramıyor. Hedefine ulaştığında, füzelerin atılmasını rakip için daha az etkili bir taktik yapar.
Sonuçlar
Nihai puanlama çalışması 24 Mart 2014 tarihinde 23: 59'dan sonra yapılacaktır . Test çalışmalarını düzenli olarak yapacağım, böylece katılımcıların botlarının mevcut muhalefet karşısında nasıl toplandıklarını görebilecekler.
Girdileri
Girişler botunuzun kaynağını ve onu çalıştırmak için kullanmam gereken komut satırı argümanını içermelidir. İstediğiniz kadar farklı giriş gönderebilirsiniz, ancak her cevap yalnızca bir bot içermelidir .
Önemli
Bazı girdiler, çalıştırmalar arasındaki bazı durumları korumak için diske yazmak istiyor gibi görünüyor. Bunlar diske yazmaya ilişkin yeni kurallar.
- Kendi botunuzun kaynağını değiştirebilirsiniz. Başka bir botun değiştirilmesi hile yapmakta ve rahatsız edici botun diskalifiye edilmesine yol açacaktır.
- Devleti saklamak amacıyla oluşturulan bir dosyaya yazabilirsiniz. Bu dosya, botunuzun bulunduğu dizinin bir alt dizininde depolanmalıdır. Alt dizin isimlendirilecektir
state
. Dosya sisteminin başka bir kısmına (kendi kaynağınız dışında) yazmanıza izin verilmez.