AIBots ²¤¶

1.           ¤¶²Ð

AIBots ¬OA.I. Warsªº Perl ª©¥»¡A´£¨ÑTk¹Ï§Î¬É­±¤Î¤å¦r¬É­±¡C

 

±Ò°Ê°Ñ¼Æ

aibots [-c -s -m -o -r] [Map] [Bot1 Bot2 ¡K]

³q±`¤£»Ý¥[¥ô¦ó°Ñ¼Æ¡C

-c: ¯Â¤å¦r¼Ò¦¡, -s: ÀR­µ, -m: ­I´º­µ¼Ö, -o: ¶ÈÅã¥Ü°T®§, -r ¶ÈÅã¥Üµ²ªG.

2.           ¨Ï¥Î¬É­±»P¾Þ§@

³]©w¦C

¦a¹Ï¿ï³æ

¥ª¤U¨¤ªº¤U©Ô¦¡¿ï³æ¡A¦C¥X©Ò¦³¥i¥Îªº¦a¹Ï¨Ñ¨Ï¥ÎªÌ¿ï¨ú¡C

¥Î¤è¬A¸¹¬A°_¨Óªº¦a¹Ï(¦p[Solania])ªí¥Ü¤@­Ó¡uÃö¥d¡v¡C

¤@¶}©lª±ªº¤H¥i¥H±qOpen©ÎArena¦a¹Ï¥Xµo¡C

§ó´«­I´º ()

³sÄò«ö³o­Ó¶s¥i¥H«ö´«­I´º¹Ï¡C

­I´º¹Ï¹ï¹CÀ¸¹ê»Ú¶i¦æ¨ÃµL¼vÅT¡C

°ÑÁÉBot¿ï³æ

¦b¦a¹Ï¿ï³æ¥kÃä©M¤U¤èªº¤E­ÓBots¿ï³æ¡A¦C¥X©Ò¦³¥i¥ÎªºBotÀÉ¡C

«ö¤@¤UªÅ¥Õªº¿ï³æ´N¥i¥H·s¼W°ÑÁɪ̡C±N²{¦³ªº°ÑÁɪ̧ï¿ï¦¨³Ì¤W­±ªºªÅ¥Õ¿ï¶µ´N¥i¥H§R°£¡C

ºÊ¬Ý()

¦b¤ñÁɶi¦æ¤¤¥i¥H«ö¨C­ÓBot¥ªÃ䪺ºÊ¬Ý¶s¡A±NºÊ¬Ý¥Ø¼Ð¤Á´«¦Ü¸ÓBot¡C³QºÊ¬ÝªºBot¸ê®Æ·|Åã¥Ü¦b¥ª¤W¤èªºª¬ºA¦C¤¤¡C

Ãö©ó¦¹µ{¦¡()

Åã¥Ü§@ªÌ¤Îµ{¦¡ª©¥»¸ê°T¡C

¾Þ§@¦C

±Ò°Ê(*) / ¼È°±(*)

¿ï¦n¦a¹Ï¤Î°ÑÁɪ̫á¡A±Ò°Ê¶s·|«G°_¨Ó¡C«ö¤@¤U¡A¤ñÁÉ´N·|¶}©l¡C¨C­ÓBot·|¨Ì·Óµ{¦¡¦Û¤v¨M©w¦æ°Ê¡A¨Ï¥ÎªÌ¤£¶·±±¨î¡C

¦b¤ñÁɤ¤ÀH®É¥i¥H«ö¤U¼È°±¡F¦A«ö¤@¦¸´NÄ~Äò¡C

°±¤î()

¤ñÁɳq±`¶i¦æ¨ì½L­±¤W¯­³Ñ¦P¤@¶¤ªºBot®Éµ²§ô¡C¦pªG¦b¦¹¤§«e³Ó­t¤w¸g¤À¾å¡B¨Ï¥ÎªÌ§P©wBots©¼¦¹¦A¤]¹J¤£¨ì¡A©Î°ò©ó¥ô¦ó§Oªº­ì¦]¡A³£¥i¥H«ö°±¤î¶s¤¤¤î¹CÀ¸¡C

³t«×()

¦b½wºC¡B¤¤µ¥¡B§Ö³t°õ¦æ¶¡¤Á´«¡C¦b±µªñ¾Ô®É¥i¥H½Õ¾ã¦¨¡uºC°Ê§@¡v¼½©ñ¡A¦ÓµL²áªº¬q¸¨§Ö³t±²¹L¥h¡C

­µ®Ä()

¦pªG¦w¸Ë¤FWin32::Sound¼Ò²Õ¡AAIBotsÁÙ¥i¥H¼½©ñ­µ®Ä¡C¤£·QÅ¥®É¥i¥H«ö­µ®Ä¶s®ø­µ¡C¦A«ö¤@¦¸¦^´_¡C

¼ÐÃD¦C

ºÊ¬Ý¤Îª¬ºA

¦b¹CÀ¸¶i¦æ®É¡A¥ª¤W¨¤ªº¶Â¦â«ö¶s·|Åã¥Ü¥Ø«e¥¿¦bºÊ¬ÝªºBot¡F¨Ï¥ÎªÌ¥i¥H«ö¸Ó«ö¶s¤Á´«¥Ø¼Ð¡C

³QºÊ¬ÝªºBot®ÇÃä·|¦³¹Ï§Î³ò¦í¡A¥¦ªº¥Ø«eª¬¯à¤]·|Åã¥Ü¦b¤W¤èªºª¬ºA¦C¤W¡A¨Ò¦p¦b¶}³õ®É¡G

[Mage-2] Score: 0 Ammo: 30 Life: 10 Fuel: 2499 [Turn Right]

¤À§Oªí¥ÜBotªººØÃþ(Mage)¡B½s¸¹(2)¡B¥Ø«e±o¤À(0)¡B³Ñ¾l¼uÃÄ(30)¡B¥Í©R­È(10)¡Bªo®Æ(2499)¡B¦¹¦^¦Xªº¦æ°Ê(¦V¥kÂà)¡C

¥t¥~¡Aµøµ¡¼ÐÃD·|Åã¥Ü(Tick: 1)¡Aªí¥Ü³o¬O²Ä¤@¦^¦X¡C

3.           ­p¤À¤Î¹CÀ¸³W«h

°ò¥»·§©À

¦bAIBots¤¤¡A¨Ï¥ÎªÌ¤ñªº¤£¬O¤ÏÀ³¡A¦Ó¬O©¼¦¹¼gµ{¦¡ªº¯à¤O¡C

¤@³õ¹CÀ¸ªº³Ó­t¡A¬O¾aBots²Ö¿nªº¤À¼Æ¨M©w¡CÀò±o¤À¼Æ³Ì¥D­nªº¤è¦¡´N¬O¹ï§O¶¤ªºBots³y¦¨¶Ë®`¡C¥t¥~¡A³Ì«á¦s¬¡ªºBot¦³500¤Àªº¼ú¤À¡C

­n³y¦¨¶Ë®`»Ý­nªZ¾¹¡CBotsµo®g¤@¯ëªZ¾¹(¯à¶qªi°£¥~)»Ý­n¼uÃÄ¡CBotªº¥Í©R­È¥Nªí¥i¥H©Ó¨üªº¶Ë®`¡A±¼¨ì¹s´N°}¤`¤F¡AÅܦ¨¤@­±ºX¤l¡C

BotªºÂà¦V¡B²¾°Ê¤Îµo®g­¸¼u³£»Ý­nªo®Æ¡Cªo®Æ¯ÓºÉ®É¡A³o¨Ç°Ê§@³£¤£¯à¶i¦æ¡CBot¨ü¶Ë·U­«¡A¯Óªo²v·U¤j¡C

¥Í©RÂI¼Æ©M¼uÃĤ£·|¦Û¤v­«¥Í¡A¦ý¯à¦bBot¨«¨ìºX¤l¡B¼uÃÄ®w¡B¾Ô²¤­nÂIµ¥¯S®íª««~¤W®É¸É¥R¡C

¨C­Ó¦^¦X(Tick)¦b³õªº©Ò¦³Bots¦U½ü¬y°õ¦æ¤@­Ó¦æ°Ê©R¥O¡A¦A´«¤U­Ó¦^¦X¡C

½L­±¤¸¯À

* bot(¾÷¾¹¤H) [^>v<]

¨C­ÓBotªºÀY¦V¨M©wµo®gªZ¾¹¡B«e¶i¤Î«á°hªº¤è¦V¡C

Bot¤£·|Å|¦b¤@°_¡C¨«¨ì§OªºBot¤W·|¸I¾À(bump)¡C

* spawn(¶i¤JÂI) [1..9@]

¹CÀ¸¶}©l®É¡ABotsÀH¾÷¥X²{©ó¶i¤JÂI¤W¡C

¦³¨Ç¶i¤JÂI¥i¥H¯S§O«ü©úµ¹¬Y­ÓBot.

¶i¤JÂI¦b¹CÀ¸¶}®É«áµø¦PªÅ¦a¡A¤£°_§@¥Î¡C

* wall(¥ÛÀð) [#]

¥ÛÀ𤣯à¬ï³z¡A¤£¯àÀ»¯}¡C

* fence(¸GÀð) [+]

¸GÀ𤣯à¬ï³z¡A¥i¥H¥Î¥ô¦óªZ¾¹À»¯}¡C

* flag(ºX¤l) [P]

¨«¨ìºX¤l¤WªºBot­Y¤w¨ü¶Ë¡A¦Y±¼ºX¤l¥i¸Éº¡¥Í©R­È¡B¥[30ÂI¼uÃÄ¡B350ÂIªo®Æ¡F­Y¥Í©R­È¬°º¡¡A«h¦Y±¼ºX¤l·|¨Ï¥Í©R­È´î5ÂI¡C

* mine(¦a¹p) [O]

¨«¨ì¦a¹p¤WªºBot¥Í©R­È´î5ÂI¡A¿Uªo²v¼W¥[5¡C¦pªG¬O¼Ä¤è§Gªº¹p¡A§G¹pªÌ¥[400¤À¡C

* vault(¼uÃÄ®w) [A]

¨«¨ì¼uÃÄ®w¤WªºBot¥[20ÂI¼uÃÄ¡C

¥ô¦óªZ¾¹¥´¨ì¼uÃÄ®w³£·|³y¦¨Ãz¬µ¡A¹ï¶gÃä¤@®æ¤ºªºBot¦U¶Ë3ÂI¡A¿Uªo²v¼W¥[3¡C

Â\¦b¤@°_¼uÃÄ®w·|³sÂêÃz¬µ¡C

 snode(¾Ô²¤­nÂI) [*]

°±¦b¾Ô²¤­nÂI¤WªºBot¨C5¦^¦X¥[1ÂIªo®Æ¡A10¦^¦X¥[1ÂI¼uÃÄ¡A15¦^¦X¥[¤@ÂI¥Í©R­È¡C¥Í©R­È¸Éº¡¬°¤î¡C

ªZ¾¹

* laser(¹p®g)

¹p®g¬O³Ì°ò¥»ªºªZ¾¹¡A®ø¯Ó1ÂI¼uÃÄ¡A®gµ{¬°«e¤è¤­®æ¡A¥´¨ìªF¦è´N°±¤î¡C

¨S¶}Å@¬ÞªºBot¦b5®æ¤º·|¨ü(6-¶ZÂ÷)ÂI¶Ë®`¡C¶}Å@¬ÞªºBot¯­¦³¦b³Ìªñªº2®æ¨ü(3-¶ZÂ÷)ÂI¶Ë®`¡C

¹p®g³y¦¨ªº¿Uªo¶Ë®`»P¥Í©R­È¶Ë®`¬Û¦P¡C

* bazooka(¤õ½b¬¶)

®ø¯Ó10ÂI¼uÃĤÎ300ÂIªo®Æ¡Aµo®g«á¥H¨C¦^¦X¤@®æªº³t¦V«e¤è­¸¡A¥´¨ìªF¦è´NÃz¬µ¡A¹ï¶gÃä¤@®æ¤ºªºBot³y¦¨7(µLÅ@¬Þ)©Î4(¦³Å@¬Þ)ÂI¶Ë®`¡C

³Qª½À»ªºBot¨ü9©Î6ÂI¶Ë®`¡AµøÅ@¬Þª¬ºA¨M©w¡C

¿Uªo¶Ë®`»P¥Í©R­È¶Ë®`¬Û¦P¡C

* grenade(ºh¼u¬¶)

®ø¯Ó5ÂI¼uÃĤÎ200ÂIªo®Æ¡Aµo®g«á¥H¨C¦^¦X¤@®æªº³t¦V«e¤è­¸¡A¥´¨ìªF¦è´NÃz¬µ¡A¹ï¶gÃä¤@®æ¤ºªºBot³y¦¨5(µLÅ@¬Þ)©Î2(¦³Å@¬Þ)ÂI¶Ë®`¡C

³Qª½À»ªºBot¨ü7©Î4ÂI¶Ë®`¡AµøÅ@¬Þª¬ºA¨M©w¡C

ª½À»¿Uªo¶Ë®`¬°12©Î9ÂI¡Aªi¤Î®É4©Î1ÂI¡C

 energy (¯à¶qªi)

¯à¶qªi®ø¯Ó1ÂI¥Í©R­È¡A¹ï©P³ò¤@®æ¤ºªº©Ò¦³Bot³y¦¨2ÂI¶Ë®`¤Î2ÂI¿Uªo¶Ë®`¡C

¯à¶qªi¬O±©¤@¥i¥H®ø°£¶gÃä¦a¹p¤ÎºX¤lªºªZ¾¹¡C

 destruct (¦ÛÃz)

¦ÛÃz¹ï©P³ò¤@®æ¤ºªº©Ò¦³Bot³y¦¨¬Û¦P©ó³Ñ¾l¥Í©R­Èªº¶Ë®`¡A¤Î¦Pµ¥ªº¿Uªo¶Ë®`¡C

¦ÛÃz«áªºBot¤£·|Åܦ¨ºX¤l¡C

¨¾¨ã

* shield (Å@¬Þ)

Å@¬Þ¥i³B©óª@°_(enable)©Î¸¨¤U(disable)ª¬ºA¡C

ª@°_®É¨üªº¶Ë®`·|´î¤Ö¡A¦ý¤£¯àµo®g°£¯à¶qªi¥~ªºªZ¾¹¡C·íµM¥i¥H¦ÛÃz¡C

* laymine (§G¹p)

¶}±Ò(enable)§G¹pªºBot·|¦b¤§«á²¾°Ê®É©ó­ì¥ý©Ò¦b¦ì¸m§G¹p¡A¨C¦¸»Ý®ø¯Ó5ÂI¼uÃÄ¡C

* cloak (Áô§Î)

¶}±Ò(enable)Áô§ÎªºBot¤£·|³Q¨ä¦oBotªº$enemy_[x/y/h]¤Î$friend[x/y/h]°»´ú¨ì¡C

Áô§Î¨C¦^¦X®ø¯Ó10ÂIªo®Æ¤Î2ÂI¼uÃÄ¡C

­p¤À³W«h

§ðÀ»±o¤À

Bazooka/¤õ½b¬¶      ª½À»: µLÅ@¬Þ+500, ¦³Å@¬Þ+300.         ªi¤Î: µLÅ@¬Þ+400, ¦³Å@¬Þ+200.

Grenade/ºh¼u¬¶      ª½À»: µLÅ@¬Þ+500, ¦³Å@¬Þ+300.         ªi¤Î: µLÅ@¬Þ+200, ¦³Å@¬Þ+100.

Laser/¹p®g               ¹ê»Ú¶Ë®` * 20

Destruct/¦ÛÃz          ¹ê»Ú¶Ë®` * 50

Energy/¯à¶qªi +100

Vault/¤ÞÃz¼uÃÄ®w    +200

Mine/§G¹p               +400

½L²×¼ú¤À

Ø           ¨C1ÂI¥Í©R­È¥[50¤À, §C©ó¹s¨C1ÂI¦©50¤À

Ø           ¦]¶Ë®`³y¦¨ªº¯Óªo²v(burn rate) ¨C1ÂI¦©1¤À

Ø           ³Ì«á¦s¬¡ªº¶¤¥î¦¨­û¥­¤À500¤À

4.           ¦p¦ó¼¶¼gBots

¨t²ÎÅܼÆ

¦Û­q¸ê°T

$name, $author

$team

$pic

¥Ø«eª¬ºA

$shield, $laymine, $cloak

$bumped, $found

$score, $burn

¸ê·½¦s¶q

$fuel, $max_fuel

$ammo, $max_ammo

$life, $max_life

®y¼Ð¤Î¤è¦V

$x, $y, $h

$enemy_x, $enemy_y, $enemy_h

$friend_x, $friend _y, $friend_h

$snode_x, $snode_y

¤º³¡ÅܼÆ

$id, $botcount

$lastcmd

$state, $line

¦æ°Ê«ü¥O

±½ºË

scan front, scan left, scan right;

scan perimeter;

scan cross, scan corner;

scan longrange;

scan position [1..9];

scan relative [1..9];

scan gps $x, $y;

²¾°Ê

move forward, move backward;

turn left, turn right;

§ðÀ»

fire energy;

fire laser;

fire bazooka;

fire grenade, fire grenade $d;

±Ò¥Î¤Î°±¥Î

enable/disable shield;

enable/disable laymine;

enable/disable cloak;

Âø¶µ

attempt repair;

attempt destruct;

beam fuel/ammo/command;

¤º©w¨ç¦¡

°»´ú¨ä¦oBots

&nearst(¡§friend¡¨|¡¨enemy¡¨)

&inperim(¡§friend¡¨|¡¨enemy¡¨)

&headto(¡§friend¡¨|¡¨enemy¡¨)

«ü¥Oµ²ªGÀˬd

&found(¡§$obj1|$obj2|¡K¡¨)

&bumped(¡§$obj1|$obj2|¡K¡¨)

¥Ø«eª¬ºA

&damaged()

&ready($weapon)

&onnode()

Âø¶µ

&turnto(2|4|6|8)

&distance($x, $y)

&toggle()

¬yµ{±±¨î

±ø¥ó§PÂ_

if ($condition) {¡K}

unless($condition) {¡K}

elsif ($condition) {¡K}

else {¡K}

¡K if/unless ($condition)

°Æµ{¦¡¾Þ§@

LABEL: {¡K}

redo;

goto LABEL;

call LABEL;

return;

5.           ¦Û­q¦a¹Ï¤Îµe­±

¦a¹ÏÀÉ (maps¥Ø¿ý)

«e¸mµù¸Ñ

=background ­I´º

=bot[1..9] ¤º©wBot

=sound ¶}³õÁn­µ

=snode x, y¾Ô²¤­nÂI®y¼Ð