import java.awt.*; import java.applet.Applet; import java.net.*; public class IQPuzzle3 extends Applet { Frame f; MyWindow winnerwin; Completed_puzzle3 completed_puzzle3; Uncompleted_puzzle3 uncompleted_puzzle3; TextField statusline; TextField timeslot; String s; Button restartbutton; Choice newpuzzlebutton; Button showwinnersbutton; Button infobutton; Panel canvasPanel; URL theURL; public void init() { this.setBackground(Color.gray); setLayout(new FlowLayout()); Panel titlePanel = new Panel(); infobutton = new Button("Info"); titlePanel.add (infobutton); 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_puzzle3 = new Completed_puzzle3(); completed_puzzle3.setBackground(Color.yellow); uncompleted_puzzle3 = new Uncompleted_puzzle3(this,s); uncompleted_puzzle3.setBackground(Color.yellow); canvasPanel.add (completed_puzzle3); canvasPanel.add (uncompleted_puzzle3); 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 == infobutton) { System.out.print(" Start button pressed\n"); InfoDialog d = new InfoDialog(f, "IQPuzzle Designers", "Dave Shaffer & Chris Ly\n" + "Millersville University\n" + "CopyRight (c)1996"); d.show(); return true; } if (evt.target == showwinnersbutton) { System.out.print(" show winners button pressed\n"); winnerwin = new MyWindow("Frame"); winnerwin.show(); return true; } if (evt.target == restartbutton) { System.out.print(" restart button pressed\n"); uncompleted_puzzle3.restart(); return true; } if (evt.target == newpuzzlebutton) { System.out.print(" new puzzle button pressed\n"); if (newpuzzlebutton.getSelectedItem() == "Puzzle3") { return true; } if (newpuzzlebutton.getSelectedItem() == "Puzzle2") { String urladdress2 = "http://cs.millersv.edu/~dashaffe/java_progs/assign2/IQPuzzle2.html"; try {theURL = new URL(urladdress2);} catch (MalformedURLException e) {} getAppletContext().showDocument(theURL); return true; } if (newpuzzlebutton.getSelectedItem() == "Puzzle1") { String urladdress1 = "http://cs.millersv.edu/~dashaffe/java_progs/assign2/IQPuzzle1.html"; try {theURL = new URL(urladdress1);} catch (MalformedURLException e) {} getAppletContext().showDocument(theURL); return true; } } return true; } } class Completed_puzzle3 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(50,10,4,4); g.fillRect(190,10,4,4); g.fillRect(10,60,4,4); g.fillRect(150,60,4,4); g.fillRect(30,90,4,4); g.fillRect(170,90,4,4); g.fillRect(50,140,4,4); g.fillRect(190,140,4,4); g.fillRect(10,190,4,4); g.fillRect(150,190,4,4); g.drawLine(52,12,192,12); g.drawLine(52,12,12,62); g.drawLine(52,12,32,92); g.drawLine(52,12,52,142); g.drawLine(192,12,152,62); g.drawLine(192,12,172,92); g.drawLine(192,12,192,142); g.drawLine(12,62,152,62); g.drawLine(12,62,32,92); g.drawLine(12,62,12,192); g.drawLine(152,62,172,92); g.drawLine(152,62,152,192); g.drawLine(32,92,52,142); g.drawLine(32,92,12,192); g.drawLine(172,92,192,142); g.drawLine(172,92,152,192); g.drawLine(52,142,192,142); g.drawLine(52,142,10,192); g.drawLine(190,142,152,192); g.drawLine(12,192,152,192); } public Dimension minimumSize() { return new Dimension(200,200); } public Dimension preferredSize() { return minimumSize(); } } class Uncompleted_puzzle3 extends Canvas { final Point A = new Point(52,12); final Point B = new Point(192,12); final Point C = new Point(12,62); final Point D = new Point(152,62); final Point E = new Point(32,92); final Point F = new Point(172,92); final Point G = new Point(52,142); final Point H = new Point(192,142); final Point I = new Point(12,192); final Point J = new Point(152,192); boolean Edge_A_B = false; boolean Edge_A_C = false; boolean Edge_A_E = false; boolean Edge_A_G = false; boolean Edge_B_D = false; boolean Edge_B_F = false; boolean Edge_B_H = false; boolean Edge_C_D = false; boolean Edge_C_E = false; boolean Edge_C_I = false; boolean Edge_D_F = false; boolean Edge_D_J = false; boolean Edge_E_G = false; boolean Edge_E_I = false; boolean Edge_F_H = false; boolean Edge_F_J = false; boolean Edge_G_H = false; boolean Edge_G_I = false; boolean Edge_H_J = false; boolean Edge_I_J = false; final int MAXLINES = 20; Point starts[] = new Point[MAXLINES]; Point ends[] = new Point[MAXLINES]; Point anchor = new Point(-1,-1); Point currentpoint; int currline = 0; Circle3 c; IQPuzzle3 outerparent; Uncompleted_puzzle3(IQPuzzle3 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(50,10,4,4); g.fillRect(190,10,4,4); g.fillRect(10,60,4,4); g.fillRect(150,60,4,4); g.fillRect(30,90,4,4); g.fillRect(170,90,4,4); g.fillRect(50,140,4,4); g.fillRect(190,140,4,4); g.fillRect(10,190,4,4); g.fillRect(150,190,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_A_E = false; Edge_A_G = false; Edge_B_D = false; Edge_B_F = false; Edge_B_H = false; Edge_C_D = false; Edge_C_E = false; Edge_C_I = false; Edge_D_F = false; Edge_D_J = false; Edge_E_G = false; Edge_E_I = false; Edge_F_H = false; Edge_F_J = false; Edge_G_H = false; Edge_G_I = false; Edge_H_J = false; Edge_I_J = 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 Circle3(); int userpoint = c.check((double)x,(double)y); if (userpoint > 0) { if (userpoint == 1) { x = 52; y = 12; } else if (userpoint == 2) { x = 192; y = 12; } else if (userpoint == 3) { x = 12; y = 62; } else if (userpoint == 4) { x = 152; y = 62; } else if (userpoint == 5) { x = 32; y = 92; } if (userpoint == 6) { x = 172; y = 92; } else if (userpoint == 7) { x = 52; y = 142; } else if (userpoint == 8) { x = 192; y = 142; } else if (userpoint == 9) { x = 12; y = 192; } else if (userpoint == 10) { x = 152; y = 192; } 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); return true; } } } else { String s; s = "Click on a valid point"; showMessage(s); 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; } } if ((end.x == E.x)&&(end.y == E.y)) { if (Edge_A_E == false) { Edge_A_E = true; return true; } else { return false; } } if ((end.x == G.x)&&(end.y == G.y)) { if (Edge_A_G == false) { Edge_A_G = 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==D.x)&&(end.y==D.y)) { if (Edge_B_D == false) { Edge_B_D = true; return true; } else { return false; } } if ((end.x == F.x)&&(end.y == F.y)) { if (Edge_B_F == false) { Edge_B_F = true; return true; } else { return false; } } if ((end.x==H.x)&&(end.y==H.y)) { if (Edge_B_H == false) { Edge_B_H = 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==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; } } if ((end.x==I.x)&&(end.y==I.y)) { if (Edge_C_I == false) { Edge_C_I = 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==F.x)&&(end.y==F.y)) { if (Edge_D_F == false) { Edge_D_F = true; return true; } else { return false; } } if ((end.x == J.x)&&(end.y == J.y)) { if (Edge_D_J == false) { Edge_D_J = true; return true; } else { return false; } } } // end else if else if ((anchor.x == E.x) && (anchor.y == E.y)) { if ((end.x==A.x)&&(end.y==A.y)) { if (Edge_A_E == false) { Edge_A_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==G.x)&&(end.y==G.y)) { if (Edge_E_G == false) { Edge_E_G = true; return true; } else { return false; } } if ((end.x == I.x)&&(end.y == I.y)) { if (Edge_E_I == false) { Edge_E_I = true; return true; } else { return false; } } } else if ((anchor.x == F.x) && (anchor.y == F.y)) { if ((end.x==B.x)&&(end.y==B.y)) { if (Edge_B_F == false) { Edge_B_F = true; return true; } else { return false; } } if ((end.x == D.x)&&(end.y == D.y)) { if (Edge_D_F == false) { Edge_D_F = true; return true; } else { return false; } } if ((end.x==H.x)&&(end.y==G.y)) { if (Edge_F_H == false) { Edge_F_H = true; return true; } else { return false; } } if ((end.x == J.x)&&(end.y == J.y)) { if (Edge_F_J == false) { Edge_F_J = true; return true; } else { return false; } } } else if ((anchor.x == G.x) && (anchor.y == G.y)) { if ((end.x==A.x)&&(end.y==A.y)) { if (Edge_A_G == false) { Edge_A_G = true; return true; } else { return false; } } if ((end.x == E.x)&&(end.y == E.y)) { if (Edge_E_G == false) { Edge_E_G = true; return true; } else { return false; } } if ((end.x==H.x)&&(end.y==H.y)) { if (Edge_G_H == false) { Edge_G_H = true; return true; } else { return false; } } if ((end.x == I.x)&&(end.y == I.y)) { if (Edge_G_I == false) { Edge_G_I = true; return true; } else { return false; } } } else if ((anchor.x == H.x) && (anchor.y == H.y)) { if ((end.x==B.x)&&(end.y==B.y)) { if (Edge_B_H == false) { Edge_B_H = true; return true; } else { return false; } } if ((end.x == F.x)&&(end.y == F.y)) { if (Edge_F_H == false) { Edge_F_H = true; return true; } else { return false; } } if ((end.x==G.x)&&(end.y==G.y)) { if (Edge_G_H == false) { Edge_G_H = true; return true; } else { return false; } } if ((end.x == J.x)&&(end.y == J.y)) { if (Edge_H_J == false) { Edge_H_J = true; return true; } else { return false; } } } else if ((anchor.x == I.x) && (anchor.y == I.y)) { if ((end.x==C.x)&&(end.y==C.y)) { if (Edge_C_I == false) { Edge_C_I = true; return true; } else { return false; } } if ((end.x == E.x)&&(end.y == E.y)) { if (Edge_E_I == false) { Edge_E_I = true; return true; } else { return false; } } if ((end.x==G.x)&&(end.y==G.y)) { if (Edge_G_I == false) { Edge_G_I = true; return true; } else { return false; } } if ((end.x == J.x)&&(end.y == J.y)) { if (Edge_I_J == false) { Edge_I_J = true; return true; } else { return false; } } } else if ((anchor.x == J.x) && (anchor.y == J.y)) { if ((end.x==D.x)&&(end.y==D.y)) { if (Edge_D_J == false) { Edge_D_J = true; return true; } else { return false; } } if ((end.x == F.x)&&(end.y == F.y)) { if (Edge_F_J == false) { Edge_F_J = true; return true; } else { return false; } } if ((end.x==H.x)&&(end.y==H.y)) { if (Edge_H_J == false) { Edge_H_J = true; return true; } else { return false; } } if ((end.x == I.x)&&(end.y == I.y)) { if (Edge_I_J == false) { Edge_I_J = 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 Circle3 { final Point A = new Point(52,12); final Point B = new Point(192,12); final Point C = new Point(12,62); final Point D = new Point(152,62); final Point E = new Point(32,92); final Point F = new Point(172,92); final Point G = new Point(52,142); final Point H = new Point(192,142); final Point I = new Point(12,192); final Point J = new Point(152,192); public Circle3() { } 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; if (isInside(a,b,F)) return 6; if (isInside(a,b,G)) return 7; if (isInside(a,b,H)) return 8; if (isInside(a,b,I)) return 9; if (isInside(a,b,J)) return 10; 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); // }