The first think you will need is RobocodeGLV014.
Then do as follows:
1. Import the following libraries. import java.awt.geom.Point2D; import java.awt.geom.Line2D; import robocode.robocodeGL.system.GLRenderer; import robocode.robocodeGL.PointGL; import robocode.robocodeGL.LineGL; import java.awt.Color; 2. Declare the following variables. static int n,m; static Line2D[] ps = new Line2D[100000]; 3. On your scan event add the following code (targetBearing is the absolute bearing to the target). ps[n] = new Line2D.Double(getX(),getY(),getX()+eGetDistance*Math.sin(targetBearing),getY()+eGetDistance*Math.cos(targetBearing)); 4. Before firing, call the method calculateGunBearings(); (see below) 5. When firing (probably in your scan event) add (note that predBearing is the relative bearing to target for firing): PointGL pt4 = new PointGL(); pt4.setPosition(getTime(),50+50*predBearing); pt4.setSize(2); pt4.setColor(Color.green); GLRenderer.getInstance().addRenderElement(pt4); 6. At the end of your scan event, add: n++; 7. The method is as follows: public void calculateGunBearings() { for (int i=m+1; i<((int)n-1); i++) { Line2D gun = new Line2D.Double(ps[i].getP1(),ps[i].getP2()); int j = 0; while (j*11.0 < gun.getP1().distance(gun.getP2())-20.0 && i+j<n ) { j++; gun.setLine(gun.getP1(),ps[i+j].getP2()); } if (i+j < n) { double angle = bearings[m] = normalRelativeAngle(Math.atan2(gun.getX2()-gun.getX1(),gun.getY2()-gun.getY1()) - Math.atan2(ps[i].getX2()-gun.getX1(),ps[i].getY2()-gun.getY1())); double tolerance = Math.asin(50/ps[i].getP1().distance(ps[i].getP2())); PointGL pme = new PointGL(); pme.setPosition(getTime()-n+m,50+angle*50+tolerance*50); pme.setColor(Color.white); GLRenderer.getInstance().addRenderElement(pme); PointGL pme2 = new PointGL(); pme2.setPosition(getTime()-n+m,50+angle*50-tolerance*50); pme2.setColor(Color.white); GLRenderer.getInstance().addRenderElement(pme2); m++; } } }
-- Albert