package davidalves.sample; import robocode.*; import java.util.*; import java.awt.*; import java.awt.geom.Point2D; import java.io.*; public class DrawingBot extends TeamRobot{ public DrawingBot(){ renderables = new Vector(); } private static abstract class Renderable{ public abstract void render(Graphics2D g); private static class Circle extends Renderable{ Point2D.Double center; double radius; Color color; public Circle(Point2D.Double center, double radius, Color color){ this.center = center; this.radius = radius; this.color = color; } public void render(Graphics2D g) { g.setColor(color); g.drawOval( (int)Math.round(center.x - radius), (int)Math.round(center.y - radius), (int)Math.round(2 * radius), (int)Math.round(2 * radius)); } } private static class Dot extends Renderable{ Point2D.Double point; double radius; Color color; public Dot(Point2D.Double point, Color color){ this.point = point; this.radius = 2; this.color = color; } public void render(Graphics2D g) { g.setColor(color); g.fillOval( (int)Math.round(point.x - radius), (int)Math.round(point.y - radius), (int)Math.round(2 * radius), (int)Math.round(2 * radius)); } } private static class Line extends Renderable{ Point2D.Double p1, p2; Color color; double radius; public Line(Point2D.Double p1, Point2D.Double p2, Color color){ this.p1 = p1; this.p2 = p2; this.color = color; } public void render(Graphics2D g) { g.setColor(color); g.drawLine( (int)Math.round(p1.x), (int)Math.round(p1.y), (int)Math.round(p2.x), (int)Math.round(p2.y)); } } private static class Text extends Renderable{ String text; double x, y; Color color; double radius; public Text(String text, double x, double y, Color color){ this.text = text; this.x = x; this.y = y; this.color = color; } public void render(Graphics2D g) { g.setColor(color); g.drawString(text, (float)x, (float)y); } } } public static Vector renderables; public void onPaint(Graphics2D g){ Iterator i = renderables.iterator(); while(i.hasNext()){ Renderable r = (Renderable) i.next(); r.render(g); } renderables.clear(); } public static void drawLine(Point2D.Double p1, Point2D.Double p2, Color color){ renderables.add(new Renderable.Line(p1, p2, color)); } public static void drawCircle(Point2D.Double center, double radius, Color color){ renderables.add(new Renderable.Circle(center, radius, color)); } public static void drawPoint(Point2D.Double p1, Color color){ renderables.add(new Renderable.Dot(p1, color)); } public static void drawText(String text, double x, double y, Color color){ renderables.add(new Renderable.Text(text, x, y, color)); } }