import java.awt.*; import java.applet.Applet; import java.net.*; public class IQPuzzle1 extends Applet { Frame window; Completed_puzzle completed_puzzle; Uncompleted_puzzle uncompleted_puzzle; TextField statusline; TextField timeslot; String s; Thread timerthread; Button restartbutton; Choice newpuzzlebutton; Button showwinnersbutton; Button startbutton; Panel canvasPanel; URL theURL; public void init() { setLayout(new FlowLayout()); Panel titlePanel = new Panel(); startbutton = new Button("Start"); titlePanel.add (startbutton); newpuzzlebutton = new Choice(); newpuzzlebutton.addItem("Puzzle1"); newpuzzlebutton.addItem("Puzzle2"); newpuzzlebutton.addItem("Puzzle3"); titlePanel.add (newpuzzlebutton); showwinnersbutton = (new Button("Show Winners")); titlePanel.add (showwinnersbutton); restartbutton = (new Button("ReStart")); titlePanel.add (restartbutton); setLayout(new FlowLayout()); canvasPanel = new Panel(); completed_puzzle = new Completed_puzzle(); uncompleted_puzzle = new Uncompleted_puzzle(this,s); canvasPanel.add (completed_puzzle); canvasPanel.add (uncompleted_puzzle); setLayout(new FlowLayout()); Panel footerPanel = new Panel(); footerPanel.add(new Label("Status", Label.LEFT)); statusline = new TextField(s,40); timeslot =new TextField(" 00:00 "); statusline.setEditable(false); timeslot.setEditable(false); footerPanel.add(statusline); footerPanel.add(timeslot); setLayout(new BorderLayout()); this.add("North", titlePanel); this.add("Center", canvasPanel); this.add("South", footerPanel); } public boolean action(Event evt, Object arg) { if (evt.target == startbutton) { System.out.print(" Start button pressed\n"); return true; } if (evt.target == showwinnersbutton) { System.out.print(" show winners button pressed\n"); return true; } if (evt.target == restartbutton) { System.out.print(" restart button pressed\n"); uncompleted_puzzle.restart(); return true; } if (evt.target == newpuzzlebutton) { System.out.print(" new puzzle button pressed\n"); if (newpuzzle.getSelectedItem() == "Puzzle2") { String urladdress = "http://cs.millersv.edu/~dashaffe/java_progs/assign2/IQPuzzle2.html"; try {theURL = new URL(urladdress);} catch (MalformedURLException e) {} getAppletContext().showDocument(theURL); } return true; } return true; } // public void start(){ // //Create a window with a menu at the top. // window = new MyWindow("Dave's Little App"); // window.pack(); // Rectangle bounds = bounds(); // Rectangle wbounds = window.bounds(); // //window.move(bounds.x + (bounds.width - wbounds.width)/2, // //bounds.y + (bounds.height - wbounds.height)/2); // window.move(bounds.x + bounds.width + 15, bounds.y); // window.show(); // } } class Completed_puzzle extends Canvas { public void paint(Graphics g) { int w = size().width; int h = size().height; g.drawRect(0, 0, w - 1, h - 1); g.drawString("Completed Puzzle", (w - g.getFontMetrics().stringWidth("Canvas"))/2, 10); g.setFont(new Font("Helvetica", Font.PLAIN, 8)); g.fillRect(100,25,4,4); g.fillRect(50,75,4,4); g.fillRect(150,75,4,4); g.fillRect(50,150,4,4); g.fillRect(150,150,4,4); g.fillRect(100,25,4,4); g.drawLine(102,27,52,77); g.fillRect(50,75,4,4); g.drawLine(102,27,152,77); g.fillRect(150,75,4,4); g.drawLine(52,77,152,77); g.fillRect(50,150,4,4); g.drawLine(52,77,52,152); g.fillRect(150,150,4,4); g.drawLine(52,77,152,152); g.drawLine(152,77,152,152); g.drawLine(152,77,52,152); g.drawLine(52,152,152,152); } public Dimension minimumSize() { return new Dimension(200,200); } public Dimension preferredSize() { return minimumSize(); } } class Uncompleted_puzzle extends Canvas { final Point A = new Point(102,27); final Point B = new Point(52,77); final Point C = new Point(152,77); final Point D = new Point(52,152); final Point E = new Point(152,152); boolean Edge_A_B = false; boolean Edge_A_C = false; boolean Edge_B_C = false; boolean Edge_B_D = false; boolean Edge_B_E = false; boolean Edge_C_D = false; boolean Edge_C_E = false; boolean Edge_D_E = false; final int MAXLINES = 8; Point starts[] = new Point[MAXLINES]; Point ends[] = new Point[MAXLINES]; Point anchor = new Point(-1,-1); Point currentpoint; int currline = 0; Circle c; IQPuzzle1 outerparent; Uncompleted_puzzle(IQPuzzle1 target, String statmessage) { this.outerparent = target; } public void paint(Graphics g) { int w = size().width; int h = size().height; g.drawRect(0, 0, w - 1, h - 1); g.drawString("Solve Puzzle", (w - g.getFontMetrics().stringWidth("Canvas"))/2, 10); g.setFont(new Font("Helvetica", Font.PLAIN, 8)); g.fillRect(100,25,4,4); g.fillRect(50,75,4,4); g.fillRect(150,75,4,4); g.fillRect(50,150,4,4); g.fillRect(150,150,4,4); //draw existing lines for (int i= 0; i < currline; i++) { g.drawLine(starts[i].x, starts[i].y, ends[i].x, ends[i].y); } //draw current line if (currentpoint != null) g.drawLine(anchor.x,anchor.y ,currentpoint.x ,currentpoint.y); } public void restart() { Edge_A_B = false; Edge_A_C = false; Edge_B_C = false; Edge_B_D = false; Edge_B_E = false; Edge_C_D = false; Edge_C_E = false; Edge_D_E = false; currline = 0; anchor.x = -1; anchor.y = -1; currentpoint = null; String s; s = " "; showMessage(s); repaint(); } public boolean mouseUp(Event evt, int x, int y) { c = new Circle(); int userpoint = c.check((double)x,(double)y); if (userpoint > 0) { if (userpoint == 1) { x = 102; y = 27; } else if (userpoint == 2) { x = 52; y = 77; } else if (userpoint == 3) { x = 152; y = 77; } else if (userpoint == 4) { x = 52; y = 152; } else if (userpoint == 5) { x = 152; y = 152; } if (anchor.x == -1) { // first point anchor.x = x; anchor.y = y; String s; s = " "; showMessage(s); return true; } else { currentpoint = new Point(x,y); if (check_line(anchor,currentpoint)) { String s; s = " "; showMessage(s); addline(x,y); return true; } else { currentpoint = null; String s; s = "Cannot draw that line"; showMessage(s); System.out.print(" bad line\n"); return true; } } } else { String s; s = "Click on a valid point"; showMessage(s); System.out.print(" bad point\n"); return true; } } boolean check_line (Point anchor, Point end) { if ((anchor.x == A.x) && (anchor.y == A.y)) { if ((end.x == B.x)&&(end.y == B.y)) { if (Edge_A_B == false) { Edge_A_B = true; return true; } else { return false; } } if ((end.x==C.x)&&(end.y==C.y)) { if (Edge_A_C == false) { Edge_A_C = true; return true; } else { return false; } } } // end outermost if else if ((anchor.x == B.x) && (anchor.y == B.y)) { if ((end.x == A.x)&&(end.y == A.y)) { if (Edge_A_B == false) { Edge_A_B = true; return true; } else { return false; } } if ((end.x==C.x)&&(end.y==C.y)) { if (Edge_B_C == false) { Edge_B_C = true; return true; } else { return false; } } if ((end.x == D.x)&&(end.y == D.y)) { if (Edge_B_D == false) { Edge_B_D = true; return true; } else { return false; } } if ((end.x==E.x)&&(end.y==E.y)) { if (Edge_B_E == false) { Edge_B_E = true; return true; } else { return false; } } } // end else if else if ((anchor.x == C.x) && (anchor.y == C.y)) { if ((end.x == A.x)&&(end.y == A.y)) { if (Edge_A_C == false) { Edge_A_C = true; return true; } else { return false; } } if ((end.x==B.x)&&(end.y==B.y)) { if (Edge_B_C == false) { Edge_B_C = true; return true; } else { return false; } } if ((end.x == D.x)&&(end.y == D.y)) { if (Edge_C_D == false) { Edge_C_D = true; return true; } else { return false; } } if ((end.x==E.x)&&(end.y==E.y)) { if (Edge_C_E == false) { Edge_C_E = true; return true; } else { return false; } } } // end else if else if ((anchor.x == D.x) && (anchor.y == D.y)) { if ((end.x==B.x)&&(end.y==B.y)) { if (Edge_B_D == false) { Edge_B_D = true; return true; } else { return false; } } if ((end.x == C.x)&&(end.y == C.y)) { if (Edge_C_D == false) { Edge_C_D = true; return true; } else { return false; } } if ((end.x==E.x)&&(end.y==E.y)) { if (Edge_D_E == false) { Edge_D_E = true; return true; } else { return false; } } } // end else if else if ((anchor.x == E.x) && (anchor.y == E.y)) { if ((end.x==B.x)&&(end.y==B.y)) { if (Edge_B_E == false) { Edge_B_E = true; return true; } else { return false; } } if ((end.x == C.x)&&(end.y == C.y)) { if (Edge_C_E == false) { Edge_C_E = true; return true; } else { return false; } } if ((end.x==D.x)&&(end.y==D.y)) { if (Edge_D_E == false) { Edge_D_E = true; return true; } else { return false; } } } return false; } void showMessage (String message) { outerparent.statusline.setText(message); } void addline (int x, int y) { starts[currline] = anchor; ends[currline] = new Point(x,y); currline++; repaint(); anchor = currentpoint; if (currline == MAXLINES) { String s; s = "CONGRATULATIONS!!! Puzzle Solved "; showMessage(s); } } public Dimension minimumSize() { return new Dimension(200,200); } public Dimension preferredSize() { return minimumSize(); } } class Circle { final Point A = new Point(102,27); final Point B = new Point(52,77); final Point C = new Point(152,77); final Point D = new Point(52,152); final Point E = new Point(152,152); public Circle() { } double r = 5.0; // is point (a,b) inside this circle? public int check(double a, double b) { if (isInside(a,b,A)) return 1; if (isInside(a,b,B)) return 2; if (isInside(a,b,C)) return 3; if (isInside(a,b,D)) return 4; if (isInside(a,b,E)) return 5; return 0; } public boolean isInside(double a, double b,Point thepoint) { double dx = a - thepoint.x; double dy = b - thepoint.y; double distance = Math.sqrt(dx*dx + dy*dy); if (distance < r) return true; else return false; } } //class MyWindow extends Frame { // final String FILEDIALOGMENUITEM = "File dialog..."; // MyWindow(String title) { // super("Dave's Little App"); // MenuBar mb = new MenuBar(); // Menu m = new Menu("Menu"); // m.add(new MenuItem("Cars")); // m.add(new CheckboxMenuItem("Women")); // m.add(new MenuItem("More Women")); // m.add(new MenuItem("-")); // m.add(new MenuItem(FILEDIALOGMENUITEM)); // mb.add(m); // setMenuBar(mb); // MenuBar mb2 = new MenuBar(); // Menu m2 = new Menu("People"); // m2.add(new MenuItem("Chris")); // m2.add(new CheckboxMenuItem("Dave")); // m2.add(new MenuItem("Beavis")); // m2.add(new MenuItem("Butt-Head")); // m2.add(new MenuItem("Nikki")); // mb2.add(m2); // setMenuBar(mb2); // //Put a list in the window. // List l = new List(3, false); // l.addItem("List item 1"); // l.addItem("List item 2"); // l.addItem("List item 3"); // l.addItem("List item 4"); // l.addItem("List item 5"); // l.addItem("List item 6"); // l.addItem("List item 7"); // add("Center", l); // }