// 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 second version of the program uses an instance method, draw, to // reduce redundancy and associate behavior with the Point object. // // 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++) { cities[i] = new Point(); Point p = cities[i]; p.x = input.nextInt(); p.y = input.nextInt(); p.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]; int dx = blastX - p.x; int dy = blastY - p.y; double distance = Math.sqrt(dx * dx + dy * dy); if (distance < blastRadius) { p.draw(g); } } } }