#Blue Team - SphiNotPi3000 // Char 0: top or bottom ("T" or "B") // Char 1, 2: x/y coords // Char 3, move polarity // Char 4: offset (as codepoint - 128) var myself = 21487; var twin = 2867; var formpos = "B"; var tochar = String.fromCharCode; var movestat = (move % 2).toString(); var inbox = getMsg(twin); // Spoofing the message of a deceased partner if (inbox == "X"){ for (var j = 0; j < 7; j++) { for (var i = 0; i < eNear.length; i++){ var enemy = eNear[i]; var dx = enemy.x - x - selfdisp[j][0]; var dy = enemy.y - y - selfdisp[j][1]; if (dx == 0 && dy == 0){ var strpos = tochar(x + selfdisp[j][0]) + tochar(y + selfdisp[j][1]); setMsg(formpos + strpos + movestat + offset); return j; } } } inbox = "B" + tochar(x) + tochar(y+1) + ((move + 1) % 2).toString() + tochar(0); } var selfsafe = [9,10,10,10,10,10,10]; // Remove useless edge moves if (x == 0){ selfsafe[4] = 0; selfsafe[5] = 0; } if (x == 127){ selfsafe[3] = 0; selfsafe[6] = 0; } if (y == 0){ selfsafe[2] = 0; selfsafe[3] = 0; selfsafe[4] = 0; } if (y == 127){ selfsafe[1] = 0; selfsafe[6] = 0; selfsafe[5] = 0; } var selfdisp = [[0,0],[0,1],[0,-1],[1,-1],[-1,-1],[-1,1],[1,1]]; if (inbox == "") { // First move, pick anywhere safe for (j = 0; j < 7; j++) { for (var i = 0; i < eNear.length; i++){ var enemy = eNear[i]; var dx = enemy.x - x - selfdisp[j][0]; var dy = enemy.y - y - selfdisp[j][1]; if (dx * dx == 1 && dy >= -1 && dy <= 1) { selfsafe[j] = 0; } } if (selfsafe[j]) { var strpos = tochar(x + selfdisp[j][0]) + tochar(y + selfdisp[j][0]); var offset = tochar(Math.floor(Math.random() * 256)); setMsg(formpos + strpos + movestat + offset); return j; } } } else { var twinformpos = inbox.charAt(0); var twinx = inbox.charAt(1).charCodeAt(); var twiny = inbox.charAt(2).charCodeAt(); var twinmovestat = inbox.charAt(3); var offset = inbox.charAt(4); formpos = twinformpos == "T" ? "B" : "T"; var targetx = twinx; var targety = formpos == "T" ? (twiny - 1) : (twiny + 1); // If true, then this bot is either the second one to move or is not in position. Move into position. if (twinmovestat == movestat || x != targetx || y != targety) { var bestmove = 0; for (var j = 0; j < 7; j++) { for (var i = 0; i < eNear.length; i++){ var enemy = eNear[i]; var dx = enemy.x - x - selfdisp[j][0]; var dy = enemy.y - y - selfdisp[j][1]; if (dx * dx == 1 && dy >= -1 && dy <= 1) { selfsafe[j] = 0; } if (dx == 0 && dy == 0){ selfsafe[j] *= 2; } } selfsafe[j] -= Math.abs(x + selfdisp[j][0] - targetx) + Math.abs(y + selfdisp[j][1] - targety); if (selfsafe[j] > selfsafe[bestmove]) { bestmove = j; } } var strpos = tochar(x + selfdisp[bestmove][0]) + tochar(y + selfdisp[bestmove][1]); setMsg(formpos + strpos + movestat + offset); return bestmove; } else { // In formation, and is the leader this turn var topy = formpos == "T" ? y : (y - 1); var topx = x; var safe = [1,1,1,1,1,1,1,1,1]; var disp = [[0,0],[0,1],[0,-1],[1,-1],[-1,-1],[-1,1],[1,1],[1,0],[-1,0]]; var otherpos = formpos == "T" ? "B" : "T"; // Avoid dangerous squares and always kill if safe to do so for (var j = 0; j < 9; j++){ var ntopx = topx + disp[j][0]; var ntopy = topy + disp[j][1]; if (ntopx < 0 || ntopx > 127 || ntopy < 0 || ntopy > 126){ safe[j] = 0; continue; } for (var i = 0; i < eNear.length; i++){ var enemy = eNear[i]; var dx = enemy.x - ntopx; var dy = enemy.y - ntopy; if(dx * dx == 1 && dy >= -1 && dy <= 2){ safe[j] = 0; continue; } if(dx == 0 && dy >= 0 && dy <= 1){ // Kill! var strpos = tochar(x + disp[j][0]) + tochar(y + disp[j][1]); if (j > 6) { setMsg(otherpos + strpos + movestat + offset); if (formpos == "T"){return 13 - j;} return j - 4; } setMsg(formpos + strpos + movestat + offset); return j; } } } var pref = []; for (var i = 0; i < eNear.length; i++){ var enemy = eNear[i]; var dy = enemy.y - topy; var dx = enemy.x - topx; if (dy < 0 && dx == 0){ pref=[2,4,3,8,7,1,5,6,0]; } if (dy > 0 && dx == 0){ pref=[1,5,6,7,8,2,4,3,0]; } if (dy == 0 && dx > 0){ pref=[7,6,3,1,2,5,4,8,0]; } if (dy == 0 && dx < 0){ pref=[8,5,4,1,2,6,3,7,0]; } if (dy < 0 && dx < 0){ pref=[4,8,5,1,0,2,6,7,3]; } if (dy > 0 && dx < 0){ pref=[5,8,4,2,0,1,3,7,6]; } if (dy < 0 && dx > 0){ pref=[3,7,6,1,0,2,5,8,4]; } if (dy > 0 && dx > 0){ pref=[6,7,3,2,0,1,4,8,5]; } for (var k = 0; k < pref.length; k++) { if (safe[pref[k]]){ var strpos = tochar(x + disp[pref[k]][0]) + tochar(y + disp[pref[k]][1]); if (pref[k] > 6) { setMsg(otherpos + strpos + movestat + offset); if(formpos == "T"){return 13 - pref[k];} return pref[k] - 4; } setMsg(formpos + strpos + movestat + offset); return pref[k]; } } } var offsetint = offset.charCodeAt(); var offsetmove = move - 128 + offsetint; if (offsetmove % 900 < 30) { var targetx = 64 - (offsetmove % 30); var targety = 64 - (offsetmove % 30); } else if (offsetmove % 900 < 90) { var targetx = 34 + ((offsetmove - 30) % 60); var targety = 34; } else if (offsetmove % 900 < 150) { var targetx = 94; var targety = 34 + ((offsetmove - 30) % 60); } else if (offsetmove % 900 < 210) { var targetx = 94 - ((offsetmove - 30) % 60); var targety = 94; } else if (offsetmove % 900 < 270) { var targetx = 34; var targety = 94 - ((offsetmove - 30) % 60); } else if (offsetmove % 900 < 300) { var targetx = 34 + (offsetmove % 30); var targety = 34 + (offsetmove % 30); } else if (offsetmove % 900 < 360) { var targetx = 64 + (offsetmove % 60); var targety = 64 - (offsetmove % 60); } else if (offsetmove % 900 < 480) { var targetx = 124; var targety = 4 + (offsetmove % 120); } else if (offsetmove % 900 < 600) { var targetx = 124 - (offsetmove % 120); var targety = 124; } else if (offsetmove % 900 < 720) { var targetx = 4; var targety = 124 - (offsetmove % 120); } else if (offsetmove % 900 < 840) { var targetx = 4 + (offsetmove % 120); var targety = 4; } else { var targetx = 124 - (offsetmove % 60); var targety = 4 + (offsetmove % 60); } if (offsetint % 4 == 1) { var temp = targetx; var targetx = 127 - targety; var targety = temp; } else if (offsetint % 4 == 2) { var targetx = 127 - targetx; var targety = 127 - targety; } else if (offsetint % 4 == 3) { var temp = targetx; var targetx = targety; var targety = 127 - temp; } if ((offsetint >> 3) % 2) { var targetx = 127 - targetx; } var bestmove = 0; for (var j = 0; j < 9; j++) { safe[j] -= Math.abs(topx + disp[j][0] - targetx) + Math.abs(topy + disp[j][1] - targety); if (safe[j] > safe[bestmove]) { bestmove = j; } } var strpos = tochar(x + disp[bestmove][0]) + tochar(y + disp[bestmove][1]); if (bestmove > 6) { setMsg(otherpos + strpos + movestat + offset); if (formpos == "T"){return 13 - bestmove;} return bestmove - 4; } setMsg(formpos + strpos + movestat + offset); return bestmove; } } This bot forms a pair with [PhiNotPi's bot](http://codegolf.stackexchange.com/a/48435/21487). See Phi's post for a brief explanation of our strategy.