ফলাফল আছে, প্রতিযোগিতা শেষ।
বিজয়ী হলেন আরশাজির অ্যাভিলবট ১৩ টি জয়ের সাথে নব্য-বটের সাথে ১৩ টি জয় এবং সেন্ট্রেবট এবং লাস্টস্ট্যান্ডের সাথে ১১ টি জয়ের সাথে।
চূড়ান্ত রান থেকে স্কোর
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)
এটি এক পাহাড়ের চ্যালেঞ্জ। উদ্দেশ্য হ'ল এমন একটি বট লিখুন যা অন্য যে কোনও বোটের তুলনায় আরও বেশি পরাজিত করবে।
খেলাাটি
প্রতিস্থাপকের নিজস্ব শক্তি 0 থেকে কমিয়ে 0 নামানোর আগে প্রতিপক্ষের শক্তি 10 থেকে 0 কমিয়ে দেওয়ার জন্য 10x10 অঙ্গনে একসাথে 2 টি একে অপরের বিরুদ্ধে বিস্ফোরিত হবে।
প্রতিটি ম্যাচ 5 টি আউটআউট নিয়ে গঠিত। ম্যাচের বিজয়ী সর্বাধিক বাউন্ডের বিজয়ী। মোট ম্যাচ জিত এবং বাউত জয়ের সংখ্যা নিয়ন্ত্রণ প্রোগ্রাম দ্বারা সংরক্ষণ করা হবে এবং প্রতিযোগিতার সামগ্রিক বিজয়ী নির্ধারণ করতে ব্যবহৃত হবে। বিজয়ী বড় সবুজ টিক এবং জনসাধারণের কাছে আনন্দিত হয়।
প্রতিটি লড়াইটি বিভিন্ন রাউন্ডে এগিয়ে যাবে। প্রতিটি রাউন্ডের শুরুতে আখড়ার বর্তমান অবস্থা প্রতিটি বটকে দেওয়া হবে এবং বট তার পরে কী করতে চায় তা নির্ধারণের জন্য একটি আদেশের সাথে প্রতিক্রিয়া জানাবে। কন্ট্রোল প্রোগ্রাম দ্বারা উভয় কমান্ড প্রাপ্ত হয়ে গেলে উভয় কমান্ড একই সময়ে কার্যকর করা হয় এবং নতুন রাজ্যকে প্রতিফলিত করতে আখড়া এবং বট শক্তির স্তর আপডেট করা হয়। যদি উভয় বোটে এখনও খেলা চালিয়ে যাওয়ার যথেষ্ট শক্তি থাকে তবে পরবর্তী রাউন্ডে যায়। চিরকুট যাতে কোনও লড়াই না হয় তা নিশ্চিত করার জন্য প্রতি আউট 1000 রাউন্ডের সীমা থাকবে এবং যদি এই সীমাটি বিজয়ীর কাছে পৌঁছে যায় তবে সর্বাধিক শক্তির বট হবে। যদি উভয় বটের সমান শক্তি থাকে তবে লড়াইটি ড্র হয় এবং বট দুটিই জয়ের জন্য একটি পয়েন্ট পায় না (এটি এমন হবে যেন তারা উভয়ই হেরে গেছে)।
অস্ত্র
প্রতিটি বোটের হাতে বেশ কয়েকটি অস্ত্র থাকবে:
- গুলি ছিদ্র গুলি। এইগুলি একবারে 3 স্কোয়ার ভ্রমণ করে এবং 1 টি পাওয়ার পয়েন্টের ক্ষতি করে।
- মিসাইল। এইগুলি একবারে 2 স্কোয়ার ভ্রমণ করে এবং প্রভাবের স্থানে 3 টি বিদ্যুৎ বিন্দুর ক্ষয়ক্ষতি ঘটায় এবং আশেপাশের সমস্ত স্কোয়ারগুলিতে 1 টি ক্ষতি হয়।
- ল্যান্ডমাইন। এগুলি বটকে ঘিরে সঙ্গে সঙ্গে একটি স্কোয়ারে ফেলে দেওয়া হয় এবং পদক্ষেপ নেওয়ার সময় 2 টি পাওয়ার পয়েন্টের ক্ষতি এবং তত্ক্ষণাত্ আশেপাশের স্কোয়ারগুলির মধ্যে যে কোনও একটি স্থানে দাঁড়িয়ে থাকা 1 টি পাওয়ার পয়েন্টের ক্ষতি করে।
- বৈদ্যুতিন চৌম্বকীয় নাড়ি। উভয় বোটের চলাচল সার্কিটকে 2 টি টার্নের জন্য ত্রুটিযুক্ত করে তোলে যার অর্থ তারা চলাচল করতে পারে না। তবে তারা এখনও অস্ত্র মোতায়েন করতে পারে (হ্যাঁ আমি জানি এটি বাস্তববাদী নয়, তবে এটি একটি খেলা It's এটি বাস্তব জীবন হওয়ার কথা নয়)। সম্পাদনা করুন: প্রতিটি ইএমপি মোতায়েনের জন্য যে বট এটি ব্যবহার করে তার জন্য একটি শক্তি পয়েন্ট ব্যয় করতে হবে।
বুলেট / ক্ষেপণাস্ত্রগুলি কেবল বট বা দেয়াল দিয়ে প্রভাব ফেলতে পারে। তারা যে স্কোয়ারের মধ্য দিয়ে যে কোনও স্কোয়ারের যে কোনও বটকে আঘাত করবে। তারা কিছু আঘাত করার পরে তারা অদৃশ্য হয়ে যায়।
সব ক্ষেত্রে immediately surrounding squares
8 টি স্কোয়ারের অর্থ বট তার পরবর্তী পদক্ষেপে যেতে পারে - মুর পাড়া।
আদেশগুলি
0
কিছু করনা.N
,NE
,E
,SE
,S
,SW
,W
,NW
সব দিক কমান্ড হয় এবং প্রদত্ত দিক বট বর্গ সরানো। স্কয়ারে প্রাচীর বা অন্য একটি বট রয়েছে বলে বটটি যদি সেদিকে যেতে না পারে তবে বটটি যেখানে রয়েছে সেখানেই রয়েছে। ইতিমধ্যে একটি বুলেট বা ক্ষেপণাস্ত্র রয়েছে এমন স্কোয়ারে স্থানান্তর করা নিরাপদ কারণ বুলেট / ক্ষেপণাস্ত্রটি ইতিমধ্যে সেই বর্গক্ষেত্রের বাইরে যাওয়ার পথে বিবেচিত হবে।B
তারপরে একটি স্পেস এবং তারপরে একটি দিক নির্দেশ কমান্ড সেই দিকে একটি বর্ম ছিদ্রকারী বুলেটটিকে গুলি করে।M
তারপরে একটি স্পেস এবং তারপরে কোনও দিক নির্দেশের একটি দিক দিয়ে একটি ক্ষেপণাস্ত্র চালিত।L
তারপরে একটি স্পেস এবং তারপরে একটি দিক নির্দেশ কমান্ড বটের পাশে that স্কোয়ারে একটি ল্যান্ড মাইন ফেলে দেয়। বর্গটি ইতিমধ্যে কোনও প্রাচীর বা বট দ্বারা দখল করা থাকলে, আদেশটি উপেক্ষা করা হবে। যদি একটি ল্যান্ডমাইন অন্য ল্যান্ডমাইনটিতে ফেলে দেওয়া হয়, তবে এটি বিস্ফোরণ ঘটায়। এটি ড্রপিং করা বটকে এবং আসল ল্যান্ডমাইনের সীমার মধ্যে অন্য কোনও বটকে ক্ষতিগ্রস্থ করবে।P
EMP গুলি।
যেহেতু প্রতি রাউন্ডে কেবল একটি কমান্ড দেওয়া যেতে পারে, একটি বট কেবল একটি অস্ত্র সরিয়ে বা গুলি চালাতে / মোতায়েন করতে পারে, একই সাথে উভয়ই না করে।
আদেশের আদেশ
উভয়ই বটের চলাচল সর্বদা প্রথমে আসবে এবং অন্য বটটি পথে চলতে থাকলেও উপায়টি থেকে বেরিয়ে যাওয়ার জন্য সমস্ত নড়াচড়া দু'বার চেষ্টা করা হবে।
উদাহরণ
- বট 1 সরানোর চেষ্টা করে
E
তবে বট 2 ইতিমধ্যে সেই স্কোয়ারে রয়েছে - কন্ট্রোল প্রোগ্রাম বট 2 এ চলে যায়।
- বট 2 চলাচল করার চেষ্টা করে
S
এবং সফল হয় কারণ কিছুই কিছুই নেই। - বোট 1 এর পদক্ষেপটি নিয়ে দ্বিতীয় চেষ্টা পায়। এই সময় এটি সফল এবং Bot1 প্যাচসমূহ
E
।
একবার বটগুলি তাদের তৈরি করতে চান এমন কোনও আন্দোলন শুরু করলে, অস্ত্রগুলি চালিত করা হবে এবং সমস্ত প্রজেক্টেলগুলি (নতুন এবং পূর্বে নিক্ষেপ করা হয়েছে) তাদের পূর্বনির্ধারিত সংখ্যার স্কোয়ার স্থানান্তরিত করবে।
আখড়া
প্রতিটি রাউন্ডের শুরুতে বট প্রোগ্রামটির একমাত্র কমান্ড লাইনের যুক্তি হিসাবে বর্তমান খেলার অবস্থাটি গ্রহণ করবে:
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
10 টি অক্ষরের 10 টি লাইন নিয়ে প্রথমে আখড়াটি আসে। এটি দেয়াল দিয়ে ঘিরে রয়েছে যা প্রদর্শিত হয়নি। অক্ষরের অর্থ নীচে রয়েছে:
.
একটি খালি বর্গ প্রতিনিধিত্ব করেY
আপনার বট প্রতিনিধিত্ব করেX
প্রতিপক্ষের বট প্রতিনিধিত্ব করে।L
একটি ল্যান্ডমাইন উপস্থাপন করে।B
ফ্লাইট একটি বুলেট প্রতিনিধিত্ব করে।M
ফ্লাইটে একটি ক্ষেপণাস্ত্র প্রতিনিধিত্ব করে।
এটি বোটের বাকী শক্তি অনুসরণ করে, প্রতি লাইনে একটি বট। কেবলমাত্র একটি স্থান বট শনাক্তকারীকে তার শক্তি স্তর থেকে পৃথক করবে। আখড়ার মতো, Y
আপনার বট X
প্রতিনিধিত্ব করে এবং আপনার প্রতিপক্ষকে উপস্থাপন করে। পরিশেষে প্রজেক্টিলেস এবং ল্যান্ডমাইনগুলি, তাদের অবস্থান এবং (উপযুক্ত হলে) শিরোনামগুলির একটি তালিকা আসে, আবার প্রতি লাইনে একটি করে।
নিয়ন্ত্রণ প্রোগ্রাম
#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';
}
}
কন্ট্রোল প্রোগ্রাম কমান্ড লাইন থেকে আপনার বট কল করবে। এই কারণে, কমান্ড লাইন থেকে কল করা যাবে না এমন প্রোগ্রামগুলি অবৈধ বলে বিবেচিত হবে । যাদের কাছে পছন্দের ভাষা সেভাবে কাজ করে না তাদের কাছে আমি ক্ষমাপ্রার্থী, তবে প্রতিটি ম্যাচ ম্যানুয়ালি করা অনুচিত হবে।
ইন্টেক্স 13 কিছু বাগ বাগের সাহায্যে কন্ট্রোল প্রোগ্রামের আরও দৃ version় সংস্করণ লিখেছিল যা আপনি এখানে দেখতে পাচ্ছেন ।
নিয়ন্ত্রণ প্রোগ্রামে উন্নতি বা বাগ-সমাধানের পরামর্শগুলি স্বাগত।
পরীক্ষা বট
কোনটি পরীক্ষা বট এর স্কোরিং রানে অন্তর্ভুক্ত করা হবে। তারা কেবল পরীক্ষার উদ্দেশ্যে।
ডডলি ডনউট (সি)
int main(int argc, char *argv)
{
printf("0");
}
পরিস্থিতি নির্বিশেষে কিছুই করে না। বেশি জয়ের আশা করা যায় না।
হিউজিবট (পিএইচপি)
<?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);
}
?>
প্রতিপক্ষের ঠিক পাশেই যাওয়ার চেষ্টা করে। ল্যান্ডমাইনগুলির পক্ষে ক্ষতিগ্রস্থ কারণ এটি তাদের সন্ধান করে না। প্রতিপক্ষ যখন লক্ষ্য অর্জন করে তখন গুলি চালানোর ক্ষেপণাস্ত্রগুলি কম কার্যকর কৌশল করে তোলে।
ফলাফলগুলো
চূড়ান্ত স্কোরিং রান 24 শে মার্চ 2014 এ 23:59 এর পরে করা হবে । আমি নিয়মিত পরীক্ষার রান চালাতাম যাতে প্রবেশকারীরা দেখতে পান যে তাদের বट्स কীভাবে বর্তমান বিরোধী দলের বিরুদ্ধে সজ্জিত করছে।
এন্ট্রি
এন্ট্রিগুলিতে আপনার বটের উত্স এবং কমান্ড লাইন যুক্তিটি এটি চালাতে ব্যবহার করা উচিত। আপনার পছন্দমতো আলাদা আলাদা পোস্ট পোস্ট করা আপনাকে স্বাগত জানায় তবে প্রতিটি উত্তরে কেবল একটি বট থাকা উচিত ।
গুরুত্বপূর্ণ
মনে হচ্ছে কিছু এন্ট্রি রানের মাঝে কিছুটা স্থিতি বজায় রাখতে ডিস্কে লিখতে চায়। এগুলি ডিস্কে লেখার বিষয়ে নতুন নিয়ম।
- আপনি নিজের বোটের উত্স পরিবর্তন করতে পারেন। অন্য যে কোনও বটকে সংশোধন করা প্রতারণা করছে এবং ফলস্বরূপ আপত্তিকর বটকে অযোগ্য ঘোষণা করা হবে।
- আপনি রাষ্ট্র সংরক্ষণের উদ্দেশ্যে তৈরি করা কোনও ফাইলে লিখতে পারেন। এই ফাইলটি অবশ্যই আপনার বট যেখানে রয়েছে সেই ডিরেক্টরিটির একটি উপ-ডিরেক্টরিতে অবশ্যই সংরক্ষণ করতে হবে। উপ-ডিরেক্টরিটির নামকরণ করা হবে
state
। ফাইল সিস্টেমের অন্য কোনও অংশে (আপনার নিজস্ব উত্স ব্যতীত) লেখার অনুমতি নেই।