-
-
Save MauMaGau/4205693 to your computer and use it in GitHub Desktop.
Maumagau strikes again
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
//FightCode can only understand your robot | |
//if its class is called Robot | |
var Robot = function(robot) { | |
//robot.clone(); | |
enemyWallbot = false; | |
onWall = false | |
}; | |
Robot.prototype.onIdle = function(ev) { | |
var robot = ev.robot; | |
robot.stop(); | |
robot.listen('onScannedRobot'); | |
robot.listen('onHitByBullet'); | |
if(! enemyWallbot) | |
{ | |
robot.turn(-1); | |
robot.ahead(-2); | |
robot.rotateCannon(-10); | |
} | |
else | |
{ | |
robot.ahead(1); | |
if(onWall){ | |
if(robot.cannonRelativeAngle != 180){ | |
robot.rotateCannon(1) | |
} | |
} | |
} | |
}; | |
Robot.prototype.onScannedRobot = function(ev) { | |
var robot = ev.robot; | |
var sr = ev.scannedRobot; | |
robot.listen('onHitByBullet'); | |
//console.log('aX:'+robot.arenaWidth) | |
//console.log('aY:'+robot.arenaHeight) | |
//console.log('X:'+sr.position.x) | |
//console.log('Y:'+sr.position.y) | |
robot.stop() | |
robot.fire(); | |
if(isEnemy(robot, sr)){ | |
// Detect those pesky wallbots | |
if(sr.position.x < 30 || sr.position.x > (robot.arenaWidth - 30) || sr.position.y < 30 || sr.position.y > (robot.arenaHeight - 30)){ | |
enemyWallbot = true; | |
console.log('enemy wallbot detected'); | |
if(onWall){ | |
robot.rotateCannon(5); | |
robot.rotateCannon(-5); | |
robot.ahead(80); | |
robot.rotateCannon(10); | |
robot.rotateCannon(-20); | |
}else{ | |
robot.ignore('onScannedRobot'); | |
robot.ahead(10); | |
robot.rotateCannon(10); | |
robot.rotateCannon(-15); | |
robot.fire(); | |
robot.rotateCannon(-25); | |
robot.rotateCannon(5); | |
robot.fire(); | |
robot.listen('onScannedRobot'); | |
robot.ahead(260); | |
} | |
}else{ | |
enemyWallbot = false; | |
robot.rotateCannon(5); | |
robot.rotateCannon(-5); | |
robot.rotateCannon(10); | |
robot.rotateCannon(-10); | |
//robot.fire() | |
robot.ahead(15); | |
robot.rotateCannon(20); | |
robot.rotateCannon(-20); | |
//robot.fire(); | |
if(robot.parentId) | |
{ | |
robot.rotateCannon(40); | |
} | |
else | |
{ | |
robot.rotateCannon(-40); | |
} | |
} | |
} | |
}; | |
Robot.prototype.onWallCollision = function(ev) { | |
var robot = ev.robot; | |
robot.listen('onScannedRobot'); | |
robot.listen('onHitByBullet'); | |
robot.stop() | |
if(enemyWallbot){ | |
// Become the enemy - stick to the wall | |
var x = (90+ev.bearing); | |
for(i=0;i<x;i++){ | |
robot.turn(1); | |
robot.rotateCannon(-1); | |
} | |
if( ! onWall){ | |
//robot.rotateCannon( robot.angle + 90) | |
} | |
onWall = true; | |
/*if(robot.onWall){ | |
robot.turn(90); | |
}else{ | |
robot.turn(ev.bearing); | |
robot.onWall = true; | |
console.log('onWall'+robot.onWall); | |
}*/ | |
}else{ | |
for(i=0;i<90;i++){ | |
robot.turn(1); | |
robot.rotateCannon(-1) | |
} | |
}; | |
}; | |
Robot.prototype.onHitByBullet = function(ev) { | |
var robot = ev.robot; | |
robot.stop() | |
console.log('hit at'+ev.bearing+'angle:'+robot.angle); | |
robot.ignore('onScannedRobot'); | |
robot.ignore('onHitByBullet'); | |
//90 degrees - the difference between my angle and incoming angle | |
var perpendicular = 90 - ev.bearing; | |
console.log('perp:'+perpendicular); | |
// Check robot isnt already fairly perpendicular | |
// RUN! | |
robot.ahead(50); | |
robot.listen('onScannedRobot'); | |
robot.listen('onHitByBullet'); | |
// SCAN | |
// Rotate cannon to face enemy | |
// angle of tank | |
// bearing of hit | |
// bearing of cannon | |
// rotate cannon to face front and keep moving to avoid more bullets | |
if(robot.cannonRelativeAngle > 0){ | |
var x = robot.cannonRelativeAngle | |
for(i=0;i<x;i++){ | |
robot.rotateCannon(1); | |
robot.ahead(1); | |
} | |
}else{ | |
var x = robot.cannonRelativeAngle | |
for(i=0;i<x;i++){ | |
robot.rotateCannon(-1); | |
robot.ahead(1); | |
} | |
} | |
// rotate cannon to face enemy | |
robot.rotateCannon( ev.bearing ) | |
robot.rotateCannon(-10) | |
robot.rotateCannon(10) | |
// EVADE! | |
robot.turn( perpendicular ); | |
robot.ahead(50); | |
}; | |
Robot.prototype.onRobotCollision = function(ev) { | |
var robot = ev.robot; | |
var cr = ev.collidedRobot; | |
robot.listen('onScannedRobot'); | |
robot.ignore('onRobotCollision') | |
if(isEnemy(robot, cr)){ | |
if(robot.cannonRelativeAngle > 0 && robot.cannonRelativeAngle < 180){ | |
robot.rotateCannon( - robot.cannonRelativeAngle); | |
}else{ | |
robot.rotateCannon( robot.cannonRelativeAngle); | |
} | |
robot.rotateCannon(ev.bearing); | |
robot.turn(15) | |
if (ev.bearing > -90 && ev.bearing < 90) { | |
robot.back(100); | |
} | |
else | |
{ | |
robot.ahead(100); | |
} | |
robot.listen('onRobotCollision') | |
// trying to run away | |
} | |
}; | |
function isEnemy(my, their){ | |
if(their.id === my.parentId || their.parentId === my.id){ | |
return false; | |
} | |
return true; | |
}; |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment