AIBots 是A.I. Wars的 Perl 版本,提供Tk圖形界面及文字界面。
aibots [-c -s -m -o -r] [Map] [Bot1 Bot2 …]
通常不需加任何參數。
-c: 純文字模式, -s: 靜音, -m: 背景音樂, -o: 僅顯示訊息, -r 僅顯示結果.
左下角的下拉式選單,列出所有可用的地圖供使用者選取。
用方括號括起來的地圖(如[Solania])表示一個「關卡」。
一開始玩的人可以從Open或Arena地圖出發。
連續按這個鈕可以按換背景圖。
背景圖對遊戲實際進行並無影響。
在地圖選單右邊和下方的九個Bots選單,列出所有可用的Bot檔。
按一下空白的選單就可以新增參賽者。將現有的參賽者改選成最上面的空白選項就可以刪除。
在比賽進行中可以按每個Bot左邊的監看鈕,將監看目標切換至該Bot。被監看的Bot資料會顯示在左上方的狀態列中。
顯示作者及程式版本資訊。
選好地圖及參賽者後,啟動鈕會亮起來。按一下,比賽就會開始。每個Bot會依照程式自己決定行動,使用者不須控制。
在比賽中隨時可以按下暫停;再按一次就繼續。
比賽通常進行到盤面上祗剩同一隊的Bot時結束。如果在此之前勝負已經分曉、使用者判定Bots彼此再也遇不到,或基於任何別的原因,都可以按停止鈕中止遊戲。
在緩慢、中等、快速執行間切換。在接近戰時可以調整成「慢動作」播放,而無聊的段落快速捲過去。
如果安裝了Win32::Sound模組,AIBots還可以播放音效。不想聽時可以按音效鈕消音。再按一次回復。
在遊戲進行時,左上角的黑色按鈕會顯示目前正在監看的Bot;使用者可以按該按鈕切換目標。
被監看的Bot旁邊會有
圖形圍住,它的目前狀能也會顯示在上方的狀態列上,例如在開場時:
[Mage-2] Score: 0 Ammo: 30 Life: 10 Fuel: 2499 [Turn Right]
分別表示Bot的種類(Mage)、編號(2)、目前得分(0)、剩餘彈藥(30)、生命值(10)、油料(2499)、此回合的行動(向右轉)。
另外,視窗標題會顯示(Tick: 1),表示這是第一回合。
在AIBots中,使用者比的不是反應,而是彼此寫程式的能力。
一場遊戲的勝負,是靠Bots累積的分數決定。獲得分數最主要的方式就是對別隊的Bots造成傷害。另外,最後存活的Bot有500分的獎分。
要造成傷害需要武器。Bots發射一般武器(能量波除外)需要彈藥。Bot的生命值代表可以承受的傷害,掉到零就陣亡了,變成一面旗子。
Bot的轉向、移動及發射飛彈都需要油料。油料耗盡時,這些動作都不能進行。Bot受傷愈重,耗油率愈大。
生命點數和彈藥不會自己重生,但能在Bot走到旗子、彈藥庫、戰略要點等特殊物品上時補充。
每個回合(Tick)在場的所有Bots各輪流執行一個行動命令,再換下個回合。
每個Bot的頭向決定發射武器、前進及後退的方向。
Bot不會疊在一起。走到別的Bot上會碰壁(bump)。
遊戲開始時,Bots隨機出現於進入點上。
有些進入點可以特別指明給某個Bot.
進入點在遊戲開時後視同空地,不起作用。
石牆不能穿透,不能擊破。
矮牆不能穿透,可以用任何武器擊破。
走到旗子上的Bot若已受傷,吃掉旗子可補滿生命值、加30點彈藥、350點油料;若生命值為滿,則吃掉旗子會使生命值減5點。
走到地雷上的Bot生命值減5點,燃油率增加5。如果是敵方佈的雷,佈雷者加400分。
走到彈藥庫上的Bot加20點彈藥。
任何武器打到彈藥庫都會造成爆炸,對週邊一格內的Bot各傷3點,燃油率增加3。
擺在一起彈藥庫會連鎖爆炸。
停在戰略要點上的Bot每5回合加1點油料,10回合加1點彈藥,15回合加一點生命值。生命值補滿為止。
雷射是最基本的武器,消耗1點彈藥,射程為前方五格,打到東西就停止。
沒開護盾的Bot在5格內會受(6-距離)點傷害。開護盾的Bot祗有在最近的2格受(3-距離)點傷害。
雷射造成的燃油傷害與生命值傷害相同。
消耗10點彈藥及300點油料,發射後以每回合一格的速向前方飛,打到東西就爆炸,對週邊一格內的Bot造成7(無護盾)或4(有護盾)點傷害。
被直擊的Bot受9或6點傷害,視護盾狀態決定。
燃油傷害與生命值傷害相同。
消耗5點彈藥及200點油料,發射後以每回合一格的速向前方飛,打到東西就爆炸,對週邊一格內的Bot造成5(無護盾)或2(有護盾)點傷害。
被直擊的Bot受7或4點傷害,視護盾狀態決定。
直擊燃油傷害為12或9點,波及時4或1點。
energy (能量波)能量波消耗1點生命值,對周圍一格內的所有Bot造成2點傷害及2點燃油傷害。
能量波是惟一可以消除週邊地雷及旗子的武器。
自爆對周圍一格內的所有Bot造成相同於剩餘生命值的傷害,及同等的燃油傷害。
自爆後的Bot不會變成旗子。
護盾可處於昇起(enable)或落下(disable)狀態。
昇起時受的傷害會減少,但不能發射除能量波外的武器。當然可以自爆。
開啟(enable)佈雷的Bot會在之後移動時於原先所在位置佈雷,每次需消耗5點彈藥。
開啟(enable)隱形的Bot不會被其她Bot的$enemy_[x/y/h]及$friend[x/y/h]偵測到。
隱形每回合消耗10點油料及2點彈藥。
Bazooka/火箭炮 直擊: 無護盾+500, 有護盾+300. 波及: 無護盾+400, 有護盾+200.
Grenade/榴彈炮 直擊: 無護盾+500, 有護盾+300. 波及: 無護盾+200, 有護盾+100.
Laser/雷射 實際傷害 * 20
Destruct/自爆 實際傷害 * 50
Energy/能量波 +100
Vault/引爆彈藥庫 +200
Mine/佈雷 +400
Ø 每1點生命值加50分, 低於零每1點扣50分
Ø 因傷害造成的耗油率(burn rate) 每1點扣1分
Ø 最後存活的隊伍成員平分500分
$name, $author
$team
$pic
$shield, $laymine, $cloak
$bumped, $found
$score, $burn
$fuel, $max_fuel
$ammo, $max_ammo
$life, $max_life
$x, $y, $h
$enemy_x, $enemy_y, $enemy_h
$friend_x, $friend _y, $friend_h
$snode_x, $snode_y
$id, $botcount
$lastcmd
$state, $line
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;
&nearst(“friend”|”enemy”)
&inperim(“friend”|”enemy”)
&headto(“friend”|”enemy”)
&found(“$obj1|$obj2|…”)
&bumped(“$obj1|$obj2|…”)
&damaged()
&ready($weapon)
&onnode()
&turnto(2|4|6|8)
&distance($x, $y)
&toggle()
if ($condition) {…}
unless($condition) {…}
elsif ($condition) {…}
else {…}
… if/unless ($condition)
LABEL: {…}
redo;
goto LABEL;
call LABEL;
return;
=background 背景
=bot[1..9] 內定Bot
=sound 開場聲音
=snode x, y戰略要點座標