// This "client" program displays a set of cities and simulates dropping a // bomb that "blows up" some of the cities by encircling the cities that // would be blasted. // // This third version uses a Point constructor to initialize x and y values // and has moved the distance calculation into the point class. // // Expected output: // Blast site x? 100 // Blast site y? 100 // Blast radius? 75 import java.awt.*; import java.io.*; import java.util.*; public class TheBomb { public static void main(String[] args) throws FileNotFoundException { DrawingPanel panel = new DrawingPanel(200, 200); Graphics g = panel.getGraphics(); Scanner console = new Scanner(System.in); // read city data from file and draw them Scanner input = new Scanner(new File("cities.txt")); int numCities = input.nextInt(); Point[] cities = new Point[numCities]; for (int i = 0; i < numCities; i++) { int x = input.nextInt(); int y = input.nextInt(); cities[i] = new Point(x, y); cities[i].draw(g); } // prompt for bomb to drop System.out.print("Blast site x? " ); int blastX = console.nextInt(); System.out.print("Blast site y? " ); int blastY = console.nextInt(); System.out.print("Blast radius? " ); int blastRadius = console.nextInt(); // draw circle of cities affected by blast g.drawOval(blastX - blastRadius, blastY - blastRadius, blastRadius * 2, blastRadius * 2); // re-draw all bombed cities in red g.setColor(Color.RED); for (int i = 0; i < numCities; i++) { Point p = cities[i]; Point blast = new Point(blastX, blastY); double distance = p.distance(blast); if (distance < blastRadius) { p.draw(g); } } } }