import java.awt.*; import java.net.*; import java.lang.Math; import java.io.*; import java.lang.*; import java.awt.Color; import java.awt.Graphics; import java.awt.image.*; public class phi3 extends java.applet.Applet implements Runnable{ Thread Test,statenow; Image track; boolean threadSuspended = true; Font font; char charArray[]; float dataBuffer[][]; Scrollbar slidev,slideh,slidev2,slidev3; Choice leftcolor,rightcolor,leftshape,rightshape; int maxFontsz = 50; public static int delayval = 75; public int b,v,corn1,corn2; public int[] triax1,triax2,triay1,triay2; Color Lcolor=Color.red,Rcolor=Color.green; public int Lshape=1,Rshape=1; int oldx1=145,oldx2=325,olds=30,oldy1,oldy2; boolean firstcall=true; boolean lefton=true; boolean righton=false; boolean rightnext=false; boolean smearon=false; private boolean doubleBuffer=true; private Image buf; private Graphics gBuf; public static int num = 1; Button Startit,Stopit; Button Ex1,Ex2,Ex3,Ex4,Ex5,Ex6; Panel p,buttonpanel; Checkbox smeared; public void init() { triax1 = new int[3]; //make new triangle x-value arrays triax2 = new int[3]; triay1 = new int[3]; //make new triangle y-value arrays triay2 = new int[3]; font=new java.awt.Font("TimesRoman", Font.PLAIN,18); Panel p = new Panel(); Panel buttonpanel = new Panel(); leftshape=new Choice(); leftshape.addItem("rectangle"); leftshape.addItem("circle"); leftshape.addItem("triangle"); rightshape=new Choice(); rightshape.addItem("rectangle"); rightshape.addItem("circle"); rightshape.addItem("triangle"); leftcolor=new Choice(); leftcolor.addItem("red"); leftcolor.addItem("black"); leftcolor.addItem("blue"); leftcolor.addItem("gray"); leftcolor.addItem("green"); leftcolor.addItem("yellow"); leftcolor.addItem("orange"); leftcolor.addItem("white"); rightcolor=new Choice(); rightcolor.addItem("red"); rightcolor.addItem("black"); rightcolor.addItem("blue"); rightcolor.addItem("gray"); rightcolor.addItem("green"); rightcolor.addItem("yellow"); rightcolor.addItem("orange"); rightcolor.addItem("white"); //create buttons Startit = new Button("Start"); Stopit = new Button("Stop"); Ex1 = new Button("1"); Ex2 = new Button("2"); Ex3 = new Button("3"); Ex4 = new Button("4"); Ex5 = new Button("5"); Ex6 = new Button("6"); //Configure buttons Startit.setForeground(Color.black); Stopit.setForeground(Color.black); Startit.setBackground(Color.lightGray); Stopit.setBackground(Color.lightGray); //add buttons and stuff this.add(Startit); this.add(Stopit); this.add(Ex1); this.add(Ex2); this.add(Ex3); this.add(Ex4); this.add(Ex5); this.add(Ex6); this.add(leftcolor); this.add(rightcolor); this.add(leftshape); this.add(rightshape); leftcolor.select("green"); rightcolor.select("green"); leftshape.select("rectangle"); rightshape.select("rectangle"); slidev = new Scrollbar(Scrollbar.VERTICAL,40,5,20,50); add(slidev); slideh = new Scrollbar(Scrollbar.HORIZONTAL,75,10,-150,150); add(slideh); slidev2 = new Scrollbar(Scrollbar.VERTICAL,150,10,100,300); add(slidev2); slidev3 = new Scrollbar(Scrollbar.VERTICAL,0,10,-80,80); add(slidev3); track = this.getImage(this.getCodeBase(),this.getParameter("image")); state3 statenow = new state3(); statenow.setPriority(5); statenow.start(); if (doubleBuffer) { Dimension d = size(); buf = createImage(d.width, d.height); gBuf = buf.getGraphics(); } smeared = new Checkbox("Smear"); smeared.setState(false); this.add(smeared); } public Color interpretcol(java.lang.Object thecolor) { if (thecolor=="red") { return Color.red; }else if (thecolor=="black") { return Color.black; } else if (thecolor== "blue") { return Color.blue; } else if (thecolor== "gray") { return Color.gray; } else if (thecolor== "green") { return Color.green; } else if (thecolor== "yellow") { return Color.yellow; } else if (thecolor== "orange") { return Color.orange; } else if (thecolor== "white") { return Color.white; } else return Color.red; //return default } public int interpretshape(java.lang.Object theshape) { if (theshape=="rectangle") { return 1; } else if (theshape=="circle") { return 2; } else if (theshape=="triangle") { return 3; } else return 1; } public boolean handleEvent(Event event) { switch(event.id) { case Event.ACTION_EVENT: if (event.target == leftcolor) { Lcolor = interpretcol(event.arg); } else if (event.target == rightcolor) { Rcolor = interpretcol(event.arg); } else if (event.target == leftshape) { Lshape = interpretshape(event.arg); } else if (event.target == rightshape) { Rshape = interpretshape(event.arg); } else if (event.target == Startit) { phi3.num=1; } else if (event.target == Stopit) { phi3.num = 5; } else if (event.target == smeared) { smearon = smeared.getState(); } else if (event.target == Ex1) { exercise(1); } else if (event.target == Ex2) { exercise(2); } else if (event.target == Ex3) { exercise(3); } else if (event.target == Ex4) { exercise(4); } else if (event.target == Ex5) { exercise(5); } else if (event.target == Ex6) { exercise(6); } return true; default: return false; } } public void exercise(int number) { //normalize settings leftcolor.select("green"); Lcolor = Color.green; rightcolor.select("green"); Rcolor = Color.green; leftshape.select("rectangle"); Lshape = 1; rightshape.select("rectangle"); Rshape = 1; smearon = false; slideh.setValues(75,10,-150,150); //centers 75 pixels offcenter slidev.setValues(40,5,20,50); //square side is 30 pixels slidev2.setValues(150,10,100,300); //delayval is 150 slidev3.setValues(0,10,-80,80); //vertical disparity is 0 lefton=false; //left not on rightnext=false; //left is next righton=false; //right not on phi3.num = 4; //state number 4 repaint(); switch(number) { case 1: break; case 2: rightcolor.select("white"); Rcolor = Color.white; break; case 3: rightcolor.select("red"); Rcolor=Color.red; break; case 4: leftcolor.select("blue"); Lcolor = Color.blue; rightcolor.select("yellow"); Rcolor = Color.yellow; break; case 5: slideh.setValues(0,10,-150,150); slidev3.setValues(70,10,-80,80); break; case 6: slideh.setValues(0,10,-150,150); leftshape.select("triangle"); Lshape=3; rightshape.select("circle"); Rshape=2; break; } repaint(); } public void destroy() { if (doubleBuffer) gBuf.dispose(); } public void start() { if (Test == null) { Test = new Thread(this); Test.start(); } } public void stop() { Test.stop(); } public void run() { Thread.currentThread().setPriority(Thread.MIN_PRIORITY); while(true) { try{ Test.sleep(100); } catch(InterruptedException e){} repaint(); } } public void update(Graphics g) { paint (g); switch(phi3.num){ case 1: // 1 0 0 --> 0 1 0 lefton=true; rightnext=false; righton=false; break; case 2: // 0 1 0 --> 0 0 1 lefton=false; rightnext=true; righton=false; break; case 3: // 0 0 1 --> 0 0 0 lefton=false; rightnext=false; righton=true; break; case 4: // 0 0 0 --> 1 0 0 lefton=false; rightnext=false; righton=false; break; case 5: lefton=true; rightnext=false; righton=true; break; } } public void paint (Graphics g) { if (doubleBuffer) { paintApplet(gBuf); g.drawImage(buf,0,0,this); } else paintApplet(g); } public void paintApplet (Graphics g) { Dimension d=size(); //setbackground g.setColor(Color.white); if(firstcall) { firstcall=false; g.fillRect(0,0,d.width, d.height); slideh.reshape(100, 380, 300, 15); //position scrollbars slidev.reshape(60, 330, 15, 145); slidev2.reshape(40,330, 15, 145); slidev3.reshape(80,330, 14, 145); leftcolor.reshape(100,405,80,28); //position other controls rightcolor.reshape(300,405,80,28); rightshape.reshape(300,440,80,28); leftshape.reshape(100,440,80,28); Startit.reshape(180,405,60,28); Stopit.reshape(240,405,60,28); smeared.reshape(200,440,80,28); Ex1.reshape(15,330,20,20); Ex2.reshape(15,355,20,20); Ex3.reshape(15,380,20,20); Ex4.reshape(15,405,20,20); Ex5.reshape(15,430,20,20); Ex6.reshape(15,455,20,20); } else { //clear old shapes g.fillRect((oldx1-corn1),(oldy1-corn1),(2*corn1),(2*corn1)); g.fillRect((oldx2-corn2),(oldy2-corn2),(2*corn2),(2*corn2)); if (smearon) { g.drawImage(track,150,75,this); } else { g.fillRect(150,75,250,40); } } olds=slidev.getValue(); //get new positions b=slideh.getValue(); delayval=slidev2.getValue(); v=slidev3.getValue(); oldx1=250-b; //calc stimuli centers oldx2=250+b; oldy1=130+v; oldy2=130-v; if(lefton) { g.setColor(Lcolor); //draw squares if(Lshape==2) { corn1=olds*23/40; g.fillOval((oldx1-corn1),(oldy1-corn1),(2*corn1),(2*corn1)); } else if (Lshape==1) { corn1=olds/2; g.fillRect((oldx1-corn1),(oldy1-corn1),(2*corn1),(2*corn1)); } else if (Lshape==3) { corn1=olds*85/100; triax1[0] =(oldx1-(olds*76/100)); triax1[1] =oldx1; triax1[2] =(oldx1 +(olds*76/100)); triay1[0] =(oldy1 + (olds/2)); triay1[1] =(oldy1 - (olds*82/100)); triay1[2] =(oldy1 + (olds/2)); g.fillPolygon(triax1,triay1,3); } } if(righton) { g.setColor(Rcolor); if(Rshape==2) { corn2=olds*23/40; g.fillOval((oldx2-corn2),(oldy2-corn2),(2*corn2),(2*corn2)); } else if (Rshape==1) { corn2=olds/2; g.fillRect((oldx2-corn2),(oldy2-corn2),(2*corn2),(2*corn2)); } else if (Rshape==3) { corn2=olds*85/100; triax2[0] =(oldx2-(olds*76/100)); triax2[1] =oldx2; triax2[2] =(oldx2 +(olds*76/100)); triay2[0] =(oldy2 + (olds/2)); triay2[1] =(oldy2 - (olds*82/100)); triay2[2] =(oldy2 + (olds/2)); g.fillPolygon(triax2,triay2,3); } } } }