package bayen; import robocode.*; import java.awt.Color; import java.util.*; import java.awt.geom.*; /** * _________ .__ .__ * / _____/ ________ __|__|_____________ ____ | | * \_____ \ / ____/ | \ \_ __ \_ __ \_/ __ \| | * / < <_| | | / || | \/| | \/\ ___/| |__ * /_______ /\__ |____/|__||__| |__| \___ >____/ * \/ |__| \/ * ii....;;..iiii.. * ffLLffGGffLLff.. * iiGGLLffLLffLLffffttii.. * ..ttffjjttiiiiiittttLLLLtt * ttGGttttii;;;;;;;;;;;;ttLLLL.. * ..LLttiiii,,..........;;;;ttfftt * ttttii;;;;;;......;;::;;;;iiLLLL * .. ..ii;;;;;;;;;;::;;iiiiiiii;;iiffDDii * ..iittiitt;;iitttt;;;;;;;;;;LLttttLLLLttttttGGff * iiiittiitt;;;;ffii....;;;;ff.. ..ffLLGGLLDDtt * ;;ttiiii;;tt;;ttii::..;;;;LL,, ;;DDDDEE;; * ttiiiiiittttii;;ff;;......jjii LLKKGG * ;;LLiiffLLiitt,,LL;;;;....;;iiff.. ;;DDjj * ;;ffttiiiiLLtt;;LL;;,,......;;iiGG;; ff.. * iiffttKK##LL;;iiffjj;;....::;;ttjjtt.. ;; * ttff##WWffii....;;LL;;......iiLLGGii * ..iiKKLLLLGGii......tttt;;......iijjtt * ;;iiffLLLLttjjtt..;;..,,ttii......;;iiff * ffffffLLLLtt..ttiiffttii;;tt,,......;;LL * iiffLLffjjiiLLffttff;;::tttt;;....,,;;jj.. * jjjjLLiiffjj;;ttLL......;;ffjj....;;;;ff.. * ..ttjj;;......iiii......,,iiff;;,,;;ttLL * ttiiii......tt;;......,,ttffttiittffff * tt;;tt......tt;;......::ttLLffffLLGG;; * iiiiff;;....tttt;;..;;;;jjDDGGGGGGii * ..jjGGLLttiittGGttiiGGLLLLGGKKEE;; * ;;ttttLLGGii;;......iijj;; * ffLLLLGGttii;;ttii;;;; * ....;;ttjjffii.. * ...... * * __________ __________ * \______ \___.__. \______ \_____ ___.__. ____ ____ * | | _< | | | | _/\__ \< | |/ __ \ / \ * | | \\___ | | | \ / __ \\___ \ ___/| | \ * |______ // ____| |______ /(____ / ____|\___ >___| / * \/ \/ \/ \/\/ \/ \/ */ public class Squirrel extends AdvancedRobot { AcornSlingshot slingshot; FleetFeet feet; /** * run: Squirrel's default behavior */ public void run() { setBodyColor(Color.lightGray); setGunColor(Color.lightGray); setRadarColor(Color.darkGray); setScanColor(Color.red); setBulletColor(Color.green); slingshot = new AcornSlingshot(this); feet = new FleetFeet(this); setAdjustGunForRobotTurn(true); setAdjustRadarForGunTurn(true); turnRadarRight(Double.POSITIVE_INFINITY); } /** * onScannedRobot: What to do when you see another robot */ public void onScannedRobot(ScannedRobotEvent e) { slingshot.onScannedRobot(e); feet.onScannedRobot(e); setTurnRadarLeft(getRadarTurnRemaining()); } /** * onHitByBullet: What to do when you're hit by a bullet */ public void onHitByBullet(HitByBulletEvent e) { feet.onHitByBullet(e); } public void onHitWall(HitWallEvent e) { feet.onHitWall(e); } public void onHitRobot(HitRobotEvent e) { feet.onHitRobot(e); } } package bayen; import robocode.*; import java.util.*; import java.awt.geom.*; /** * AcornSlingshot - Squirrel's gun */ public class AcornSlingshot { AdvancedRobot Squirrel; ScannedRobotEvent lastScan; public AcornSlingshot(AdvancedRobot robot) { Squirrel = robot; } public void onScannedRobot(ScannedRobotEvent e) { double lastEnemyHeading = lastScan.getHeadingRadians(); double w=e.getHeadingRadians()-lastEnemyHeading; double absbearing=e.getBearingRadians()+ Squirrel.getHeadingRadians(); double eX=e.getDistance()*Math.sin(absbearing); double eY=e.getDistance()*Math.cos(absbearing); double db=0; double ww=lastEnemyHeading; do{ db+=11; double dx=e.getVelocity()*Math.sin(ww); double dy=e.getVelocity()*Math.cos(ww); ww+=w; eX+=dx; eY+=dy; }while (db< Point2D.distance(0,0,eX,eY)); Squirrel.setTurnGunRightRadians(Math.asin (Math.sin(Math.atan2(eX, eY) - Squirrel.getGunHeadingRadians()))); Squirrel.setFire(3); lastScan = e; } private double normalRelativeAngle(double angle) { angle = Math.toRadians(angle); return Math.toDegrees(Math.atan2( Math.sin(angle), Math.cos(angle))); } } package bayen; import robocode.*; import java.util.*; import java.awt.geom.*; /** * FleetFeet - Squirrel's movement */ public class FleetFeet { AdvancedRobot Squirrel; double dir = 1; ScannedRobotEvent lastScan; public FleetFeet(AdvancedRobot robot) { Squirrel = robot; } public void onScannedRobot(ScannedRobotEvent e) { if(e.getDistance()<=151){ double dif = lastScan.getEnergy() - e.getEnergy(); if(dif<=3 && dif>0) dir=-dir; } Squirrel.setTurnRight(normalRelativeAngle( e.getBearing()+90-20*dir* (e.getDistance()<(75+Math.random()*75)?-1:1))); Squirrel.setAhead(100*dir); lastScan = e; } public void onHitWall(HitWallEvent e) { dir=-dir; } public void onHitRobot(HitRobotEvent e) { dir=-dir; } public void onHitByBullet(HitByBulletEvent e) { System.out.println("hit"); } private double normalRelativeAngle(double angle) { angle = Math.toRadians(angle); return Math.toDegrees(Math.atan2( Math.sin(angle), Math.cos(angle))); } }
|