Skip to content

Instantly share code, notes, and snippets.

@MauMaGau
Forked from folkien/robot.js
Created December 4, 2012 16:16
Show Gist options
  • Save MauMaGau/4205693 to your computer and use it in GitHub Desktop.
Save MauMaGau/4205693 to your computer and use it in GitHub Desktop.
Maumagau strikes again
//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