package session2; import robocode.*; public class MyFirstRobotHannah extends Robot { double distanceToEnemy; double enemyEnergy; double distanceToTop; double distanceToRight; double distanceToBottom; double distanceToLeft; public void run() { setAdjustGunForRobotTurn(true); setAdjustRadarForGunTurn(true); enemyEnergy = 100; double bearingToWall = EpgyUtil.bearingToLocation(getX(), getY(), 0, getY()); turnTo(bearingToWall); double distanceToWall = EpgyUtil.distanceTo(getX(), getY(), 0, getY()); ahead(distanceToWall); while (true) { distanceToTop = EpgyUtil.distanceTo(getX(), getY(), getX(), getBattleFieldHeight()); moveAlongLeft(); distanceToRight = EpgyUtil.distanceTo(getX(), getY(), getBattleFieldWidth(), getY()); turnTo(90); moveAlongTop(); distanceToBottom = EpgyUtil.distanceTo(getX(), getY(), getX(), 0); turnTo(180); moveAlongRight(); distanceToLeft = EpgyUtil.distanceTo(getX(), getY(), 0, getY()); turnTo(270); moveAlongBottom(); } } private void turnTo(double degrees) { turnRight(degrees - getHeading()); } private void turnRadarTo(double degrees) { turnRadarRight(degrees - getRadarHeading()); } public void onScannedRobot(ScannedRobotEvent e) { double enemyBearing = e.getBearing(); double absoluteBearing = enemyBearing + getHeading(); turnGunRight(absoluteBearing - getGunHeading()); fire(1); double enemyEnergyDifference = enemyEnergy - e.getEnergy(); enemyEnergy = e.getEnergy(); double enemyVelocity = e.getVelocity(); if (enemyVelocity == 0) { fire(3); }else{ turnGunRight(absoluteBearing - getGunHeading()); fire(2); } if (enemyEnergyDifference >= 0.1 && enemyEnergyDifference <= 3.0) { System.out.println("Enemy fired."); back(100); } scan(); } private void moveAlongLeft() { while (distanceToTop >= 25) { turnTo(0); ahead(5); turnRadarTo(0); turnRadarRight(180); turnRadarLeft(90); distanceToTop = EpgyUtil.distanceTo(getX(), getY(), getX(), getBattleFieldHeight()); } } private void moveAlongTop() { while (distanceToRight >= 25) { ahead(5); turnRadarTo(90); turnRadarRight(180); turnRadarLeft(90); distanceToRight = EpgyUtil.distanceTo(getX(), getY(), getBattleFieldWidth(), getY()); } } private void moveAlongRight() { while (distanceToBottom >= 25) { ahead(5); turnRadarTo(180); turnRadarRight(180); turnRadarLeft(90); distanceToBottom = EpgyUtil.distanceTo(getX(), getY(), getX(), 0); } } private void moveAlongBottom() { while (distanceToLeft >= 25) { ahead(5); turnRadarTo(90); turnRadarRight(180); turnRadarLeft(90); distanceToLeft = EpgyUtil.distanceTo(getX(), getY(), 0, getY()); } } }