// GridMaker.java // TYPE YOUR NAME AND THE DATE /* NOTES: main and six helper methods are done already. The DISPLAY and QUIT cases are already handled too. Your job is to complete the seven methods that are supposed to handle the other cases: NEW, SET, BRIGHTEN, DARKEN, SETarea, BRIGHTENarea, and DARKENarea. See comment "YOUR WORK STARTS HERE" 147 lines below this line, but first study the code that is done for you. */ import java.awt.Color; import java.util.Scanner; public class GridMaker { private enum Command { NEW, SET, BRIGHTEN, DARKEN, SETarea, BRIGHTENarea, DARKENarea, DISPLAY, QUIT } private final static int MIN = 2, MAX = 400; public static void main(String[] args) { ColorGrid grid = new ColorGrid(); // default is 100x100, all white System.out.println("Accepting these commands:"); for (Command c : Command.values()) System.out.println(" " + c); Scanner input = new Scanner(System.in); while (input.hasNextLine()) { String line = input.nextLine(); Scanner parser = new Scanner(line); if (!parser.hasNext()) // means it's just a blank line continue; String firstToken = parser.next(); Command command = getCommand(firstToken); if (command == null) { printError("bad command", line); continue; } switch(command) { case NEW: grid = newGrid(parser, grid); break; case SET: set(parser, grid); break; case BRIGHTEN: brighten(parser, grid); break; case DARKEN: darken(parser, grid); break; case SETarea: setArea(parser, grid); break; case BRIGHTENarea: brightenArea(parser, grid); break; case DARKENarea: darkenArea(parser, grid); break; case DISPLAY: CS10Display.showGrid(grid.grid()); break; case QUIT: return; } } } // helper translates the String into one of the commands or null private static Command getCommand(String s) { s = s.toUpperCase(); // reuses parameter; does not change passed value for (Command c : Command.values()) if (s.equals(c.toString().toUpperCase())) return c; return null; // not one of the valid commands } // helper prints an error message private static void printError(String message) { System.out.println("ERROR: " + message); } // helper prints an error message with an errant input string private static void printError(String message, String echo) { printError(String.format("%s: \"%s\"", message, echo)); } // helper prints an error message with an errant input value private static void printError(String message, int value) { printError(message, String.valueOf(value)); } // helper gets an int in the range min to max // prints message and returns min-1 if input error private static int get(String what, Scanner from, int min, int max) { int result = min - 1; if (!from.hasNext()) printError("missing " + what); else if (!from.hasNextInt()) printError("bad " + what, from.next()); else { int input = from.nextInt(); if (input >= min && input <= max) result = input; else printError(what + " out of range", input); } return result; } // helper gets color values from user or returns null if user error private static Color getColor(Scanner s) { final int minVal = 0, maxVal = 255; int red = get("red value", s, minVal, maxVal); if (red < minVal) return null; // because get() returns min-1 if user error int green = get("green value", s, minVal, maxVal); if (green < minVal) return null; int blue = get("blue value", s, minVal, maxVal); if (blue < minVal) return null; return new Color(red, green, blue); } // YOUR WORK STARTS HERE // handles NEW case private static ColorGrid newGrid(Scanner s, ColorGrid existing) { // THIS METHOD DOES NOTHING NOW - IMPLEMENT FOR REAL return existing; } // handles SET case private static void set(Scanner s, ColorGrid grid) { // IMPLEMENT } // handles BRIGHTEN case private static void brighten(Scanner s, ColorGrid grid) { // IMPLEMENT } // handles DARKEN case private static void darken(Scanner s, ColorGrid grid) { // IMPLEMENT } // handles SETarea case private static void setArea(Scanner s, ColorGrid grid) { // IMPLEMENT } // handles BRIGHTENarea case private static void brightenArea(Scanner s, ColorGrid grid) { // IMPLEMENT } // handles DARKENarea case private static void darkenArea(Scanner s, ColorGrid grid) { // IMPLEMENT } }