import java.applet.*; import java.awt.*; import java.io.*; import java.util.*; public class ps8e3 extends Applet implements Runnable { int vect[][][] = new int[26][4][8]; int polyx[] = new int[4]; int polyy[] = new int[4]; int syllIndex[][] = new int[2][12]; int syllSize[][] = new int[2][12]; int syllTotal[] = new int[2]; int syllDelay[][] = new int[2][12]; int blurbnum; int clipx, clipy, clipwidth, clipheight; int asciival,lettercount; int xo, yo,xorig, yorig, xoffset, yoffset, scalefac, delayfac, thickness, distort, i, ii, j, jj, k, kk, x1,y1,x2,y2; String inStr, str1; boolean active; Image bufimage; AudioClip audioClip; Thread animator = null; //TextField tf1 = new TextField(25); Choice blurbSelect = new Choice(); Choice delaySelect = new Choice(); Label lab1 = new Label("Blurb:"); Label lab2 = new Label("Delay:"); Button btn1 = new Button(" activate "); public void init() { // initialize array for (int i = 0; i< 26; i++) { for(int j = 0; j < 8; j++) { vect[i][0][j] = 999; vect[i][1][j] = 999; vect[i][2][j] = 999; vect[i][3][j] = 999; } } //old A //vect[0][0][0]=4; vect[0][1][0]=0; vect[0][2][0]=0; vect[0][3][0]=10; //vect[0][0][1]=4; vect[0][1][1]=0; vect[0][2][1]=8; vect[0][3][1]=10; //vect[0][0][2]=2; vect[0][1][2]=5; vect[0][2][2]=6; vect[0][3][2]=5; //new A vect[0][0][0]=0; vect[0][1][0]=10; vect[0][2][0]=0; vect[0][3][0]=2; vect[0][0][1]=0; vect[0][1][1]=2; vect[0][2][1]=4; vect[0][3][1]=0; vect[0][0][2]=4; vect[0][1][2]=0; vect[0][2][2]=8; vect[0][3][2]=2; vect[0][0][3]=8; vect[0][1][3]=2; vect[0][2][3]=8; vect[0][3][3]=10; vect[0][0][4]=0; vect[0][1][4]=4; vect[0][2][4]=8; vect[0][3][4]=6; //B vect[1][0][0]=0; vect[1][1][0]=0; vect[1][2][0]=0; vect[1][3][0]=10; vect[1][0][1]=0; vect[1][1][1]=0; vect[1][2][1]=6; vect[1][3][1]=0; vect[1][0][2]=6; vect[1][1][2]=0; vect[1][2][2]=7; vect[1][3][2]=2; vect[1][0][3]=7; vect[1][1][3]=2; vect[1][2][3]=6; vect[1][3][3]=4; vect[1][0][4]=6; vect[1][1][4]=4; vect[1][2][4]=0; vect[1][3][4]=4; vect[1][0][5]=6; vect[1][1][5]=4; vect[1][2][5]=7; vect[1][3][5]=8; vect[1][0][6]=7; vect[1][1][6]=8; vect[1][2][6]=6; vect[1][3][6]=10; vect[1][0][7]=6; vect[1][1][7]=10; vect[1][2][7]=0; vect[1][3][7]=10; //C vect[2][0][0]=8; vect[2][1][0]=2; vect[2][2][0]=4; vect[2][3][0]=0; vect[2][0][1]=4; vect[2][1][1]=0; vect[2][2][1]=0; vect[2][3][1]=2; vect[2][0][2]=0; vect[2][1][2]=2; vect[2][2][2]=0; vect[2][3][2]=8; vect[2][0][3]=0; vect[2][1][3]=8; vect[2][2][3]=4; vect[2][3][3]=10; vect[2][0][4]=4; vect[2][1][4]=10; vect[2][2][4]=8; vect[2][3][4]=8; //D vect[3][0][0]=0; vect[3][1][0]=0; vect[3][2][0]=6; vect[3][3][0]=0; vect[3][0][1]=6; vect[3][1][1]=0; vect[3][2][1]=8; vect[3][3][1]=6; vect[3][0][2]=8; vect[3][1][2]=6; vect[3][2][2]=6; vect[3][3][2]=10; vect[3][0][3]=6; vect[3][1][3]=10; vect[3][2][3]=0; vect[3][3][3]=10; vect[3][0][4]=0; vect[3][1][4]=10; vect[3][2][4]=0; vect[3][3][4]=0; //E vect[4][0][0]=8; vect[4][1][0]=0; vect[4][2][0]=0; vect[4][3][0]=0; vect[4][0][1]=0; vect[4][1][1]=0; vect[4][2][1]=0; vect[4][3][1]=10; vect[4][0][2]=0; vect[4][1][2]=10; vect[4][2][2]=8; vect[4][3][2]=10; vect[4][0][3]=0; vect[4][1][3]=4; vect[4][2][3]=6; vect[4][3][3]=4; //F vect[5][0][0]=8; vect[5][1][0]=0; vect[5][2][0]=0; vect[5][3][0]=0; vect[5][0][1]=0; vect[5][1][1]=0; vect[5][2][1]=0; vect[5][3][1]=10; vect[5][0][2]=0; vect[5][1][2]=4; vect[5][2][2]=6; vect[5][3][2]=4; //G vect[6][0][0]=8; vect[6][1][0]=2; vect[6][2][0]=4; vect[6][3][0]=0; vect[6][0][1]=4; vect[6][1][1]=0; vect[6][2][1]=0; vect[6][3][1]=2; vect[6][0][2]=0; vect[6][1][2]=2; vect[6][2][2]=0; vect[6][3][2]=8; vect[6][0][3]=0; vect[6][1][3]=8; vect[6][2][3]=4; vect[6][3][3]=10; vect[6][0][4]=4; vect[6][1][4]=10; vect[6][2][4]=8; vect[6][3][4]=8; vect[6][0][5]=8; vect[6][1][5]=8; vect[6][2][5]=8; vect[6][3][5]=6; vect[6][0][6]=8; vect[6][1][6]=6; vect[6][2][6]=6; vect[6][3][6]=6; //H vect[7][0][0]=0; vect[7][1][0]=0; vect[7][2][0]=0; vect[7][3][0]=10; vect[7][0][1]=0; vect[7][1][1]=4; vect[7][2][1]=8; vect[7][3][1]=6; vect[7][0][2]=8; vect[7][1][2]=0; vect[7][2][2]=8; vect[7][3][2]=10; //I vect[8][0][0]=5; vect[8][1][0]=0; vect[8][2][0]=5; vect[8][3][0]=10; //J vect[9][0][0]=8; vect[9][1][0]=0; vect[9][2][0]=8; vect[9][3][0]=8; vect[9][0][1]=8; vect[9][1][1]=8; vect[9][2][1]=4; vect[9][3][1]=10; vect[9][0][2]=4; vect[9][1][2]=10; vect[9][2][2]=0; vect[9][3][2]=8; //K vect[10][0][0]=0; vect[10][1][0]=0; vect[10][2][0]=0; vect[10][3][0]=10; vect[10][0][1]=0; vect[10][1][1]=4; vect[10][2][1]=8; vect[10][3][1]=0; vect[10][0][2]=4; vect[10][1][2]=2; vect[10][2][2]=8; vect[10][3][2]=10; //L vect[11][0][0]=0; vect[11][1][0]=0; vect[11][2][0]=0; vect[11][3][0]=10; vect[11][0][1]=0; vect[11][1][1]=10; vect[11][2][1]=8; vect[11][3][1]=10; //M vect[12][0][0]=0; vect[12][1][0]=10; vect[12][2][0]=0; vect[12][3][0]=0; vect[12][0][1]=0; vect[12][1][1]=0; vect[12][2][1]=4; vect[12][3][1]=2; vect[12][0][2]=4; vect[12][1][2]=2; vect[12][2][2]=8; vect[12][3][2]=0; vect[12][0][3]=8; vect[12][1][3]=0; vect[12][2][3]=8; vect[12][3][3]=10; //N vect[13][0][0]=0; vect[13][1][0]=10; vect[13][2][0]=0; vect[13][3][0]=0; vect[13][0][1]=0; vect[13][1][1]=0; vect[13][2][1]=8; vect[13][3][1]=10; vect[13][0][2]=8; vect[13][1][2]=10; vect[13][2][2]=8; vect[13][3][2]=0; //O vect[14][0][0]=0; vect[14][1][0]=2; vect[14][2][0]=4; vect[14][3][0]=0; vect[14][0][1]=4; vect[14][1][1]=0; vect[14][2][1]=8; vect[14][3][1]=2; vect[14][0][2]=8; vect[14][1][2]=2; vect[14][2][2]=8; vect[14][3][2]=8; vect[14][0][3]=8; vect[14][1][3]=8; vect[14][2][3]=4; vect[14][3][3]=10; vect[14][0][4]=4; vect[14][1][4]=10; vect[14][2][4]=0; vect[14][3][4]=8; vect[14][0][5]=0; vect[14][1][5]=8; vect[14][2][5]=0; vect[14][3][5]=2; //P vect[15][0][0]=0; vect[15][1][0]=10; vect[15][2][0]=0; vect[15][3][0]=0; vect[15][0][1]=0; vect[15][1][1]=0; vect[15][2][1]=6; vect[15][3][1]=0; vect[15][0][2]=6; vect[15][1][2]=0; vect[15][2][2]=7; vect[15][3][2]=2; vect[15][0][3]=7; vect[15][1][3]=2; vect[15][2][3]=6; vect[15][3][3]=4; vect[15][0][4]=6; vect[15][1][4]=4; vect[15][2][4]=0; vect[15][3][4]=4; //Q vect[16][0][0]=0; vect[16][1][0]=2; vect[16][2][0]=4; vect[16][3][0]=0; vect[16][0][1]=4; vect[16][1][1]=0; vect[16][2][1]=8; vect[16][3][1]=2; vect[16][0][2]=8; vect[16][1][2]=2; vect[16][2][2]=8; vect[16][3][2]=8; vect[16][0][3]=8; vect[16][1][3]=8; vect[16][2][3]=4; vect[16][3][3]=10; vect[16][0][4]=4; vect[16][1][4]=10; vect[16][2][4]=0; vect[16][3][4]=8; vect[16][0][5]=0; vect[16][1][5]=8; vect[16][2][5]=0; vect[16][3][5]=2; vect[16][0][6]=4; vect[16][1][6]=8; vect[16][2][6]=8; vect[16][3][6]=10; //R vect[17][0][0]=0; vect[17][1][0]=10; vect[17][2][0]=0; vect[17][3][0]=0; vect[17][0][1]=0; vect[17][1][1]=0; vect[17][2][1]=6; vect[17][3][1]=0; vect[17][0][2]=6; vect[17][1][2]=0; vect[17][2][2]=7; vect[17][3][2]=2; vect[17][0][3]=7; vect[17][1][3]=2; vect[17][2][3]=6; vect[17][3][3]=4; vect[17][0][4]=6; vect[17][1][4]=4; vect[17][2][4]=0; vect[17][3][4]=4; vect[17][0][5]=4; vect[17][1][5]=4; vect[17][2][5]=8; vect[17][3][5]=10; //S vect[18][0][0]=8; vect[18][1][0]=2; vect[18][2][0]=4; vect[18][3][0]=0; vect[18][0][1]=4; vect[18][1][1]=0; vect[18][2][1]=0; vect[18][3][1]=2; vect[18][0][2]=0; vect[18][1][2]=2; vect[18][2][2]=0; vect[18][3][2]=4; vect[18][0][3]=0; vect[18][1][3]=4; vect[18][2][3]=8; vect[18][3][3]=6; vect[18][0][4]=8; vect[18][1][4]=6; vect[18][2][4]=8; vect[18][3][4]=8; vect[18][0][5]=8; vect[18][1][5]=8; vect[18][2][5]=4; vect[18][3][5]=10; vect[18][0][6]=4; vect[18][1][6]=10; vect[18][2][6]=0; vect[18][3][6]=8; //T vect[19][0][0]=0; vect[19][1][0]=0; vect[19][2][0]=8; vect[19][3][0]=0; vect[19][0][1]=4; vect[19][1][1]=0; vect[19][2][1]=4; vect[19][3][1]=10; //U vect[20][0][0]=0; vect[20][1][0]=0; vect[20][2][0]=0; vect[20][3][0]=8; vect[20][0][1]=0; vect[20][1][1]=8; vect[20][2][1]=4; vect[20][3][1]=10; vect[20][0][2]=4; vect[20][1][2]=10; vect[20][2][2]=8; vect[20][3][2]=8; vect[20][0][3]=8; vect[20][1][3]=8; vect[20][2][3]=8; vect[20][3][3]=0; //old V //vect[21][0][0]=0; vect[21][1][0]=0; vect[21][2][0]=4; vect[21][3][0]=10; //vect[21][0][1]=4; vect[21][1][1]=10; vect[21][2][1]=8; vect[21][3][1]=0; //new V vect[21][0][0]=0; vect[21][1][0]=0; vect[21][2][0]=0; vect[21][3][0]=4; vect[21][0][1]=0; vect[21][1][1]=4; vect[21][2][1]=4; vect[21][3][1]=10; vect[21][0][2]=4; vect[21][1][2]=10; vect[21][2][2]=8; vect[21][3][2]=4; vect[21][0][3]=8; vect[21][1][3]=4; vect[21][2][3]=8; vect[21][3][3]=0; //W vect[22][0][0]=0; vect[22][1][0]=0; vect[22][2][0]=0; vect[22][3][0]=10; vect[22][0][1]=0; vect[22][1][1]=10; vect[22][2][1]=4; vect[22][3][1]=8; vect[22][0][2]=4; vect[22][1][2]=8; vect[22][2][2]=8; vect[22][3][2]=10; vect[22][0][3]=8; vect[22][1][3]=10; vect[22][2][3]=8; vect[22][3][3]=0; //X vect[23][0][0]=0; vect[23][1][0]=0; vect[23][2][0]=8; vect[23][3][0]=10; vect[23][0][1]=0; vect[23][1][1]=10; vect[23][2][1]=8; vect[23][3][1]=0; //Y vect[24][0][0]=0; vect[24][1][0]=0; vect[24][2][0]=4; vect[24][3][0]=2; vect[24][0][1]=4; vect[24][1][1]=2; vect[24][2][1]=8; vect[24][3][1]=0; vect[24][0][2]=4; vect[24][1][2]=2; vect[24][2][2]=4; vect[24][3][2]=10; //Z vect[25][0][0]=0; vect[25][1][0]=0; vect[25][2][0]=8; vect[25][3][0]=0; vect[25][0][1]=8; vect[25][1][1]=0; vect[25][2][1]=0; vect[25][3][1]=10; vect[25][0][2]=0; vect[25][1][2]=10; vect[25][2][2]=8; vect[25][3][2]=10; scalefac = 3; // scale characters to desired size for (int i = 0; i< 26; i++) { for(int j = 0; j < 8; j++) { if (vect[i][0][j] != 999) { vect[i][0][j] = vect[i][0][j] * scalefac; vect[i][1][j] = vect[i][1][j] * scalefac; vect[i][2][j] = vect[i][2][j] * scalefac; vect[i][3][j] = vect[i][3][j] * scalefac; } } } // initialize syllable arrays syllIndex[0][0]=1;syllIndex[1][0]=0; syllIndex[0][1]=4;syllIndex[1][1]=3; syllIndex[0][2]=7;syllIndex[1][2]=6; syllIndex[0][3]=10;syllIndex[1][3]=13; syllIndex[0][4]=13;syllIndex[1][4]=16; syllIndex[0][5]=20;syllIndex[1][5]=23; syllIndex[0][6]=22;syllIndex[1][6]=26; syllIndex[0][7]=27;syllIndex[1][7]=30; syllIndex[0][8]=30;syllIndex[1][8]=33; syllIndex[0][9]=34; syllIndex[0][10]=39; syllIndex[0][11]=42; syllSize[0][0]=3; syllSize[1][0]=3; syllSize[0][1]=2; syllSize[1][1]=2; syllSize[0][2]=3; syllSize[1][2]=5; syllSize[0][3]=2; syllSize[1][3]=3; syllSize[0][4]=6; syllSize[1][4]=6; syllSize[0][5]=1; syllSize[1][5]=2; syllSize[0][6]=4; syllSize[1][6]=3; syllSize[0][7]=2; syllSize[1][7]=3; syllSize[0][8]=4; syllSize[1][8]=5; syllSize[0][9]=3; syllSize[0][10]=3; syllSize[0][11]=4; syllTotal[0]=12; syllTotal[1]=9; syllDelay[0][0]=5;syllDelay[1][0]=5; syllDelay[0][1]=5;syllDelay[1][1]=5; syllDelay[0][2]=15;syllDelay[1][2]=10; syllDelay[0][3]=10;syllDelay[1][3]=50; syllDelay[0][4]=15;syllDelay[1][4]=15; syllDelay[0][5]=15;syllDelay[1][5]=50; syllDelay[0][6]=15;syllDelay[1][6]=10; syllDelay[0][7]=15;syllDelay[1][7]=10; syllDelay[0][8]=20;syllDelay[1][8]=15; syllDelay[0][9]=10; syllDelay[0][10]=100; syllDelay[0][11]=10; delayfac = 1; active=false; add(lab1); add(blurbSelect); blurbSelect.addItem(" Peter Piper picked a peck of pickled peppers"); blurbSelect.addItem("Sally sells seashells at the seashore"); add(btn1); add(lab2); add(delaySelect); delaySelect.addItem("1"); delaySelect.addItem("2"); delaySelect.addItem("5"); delaySelect.addItem("10"); delaySelect.addItem("20"); xo = 30; yo = 70; lettercount=0; Dimension d = this.size(); bufimage = this.createImage(d.width,d.height); } public void paint(Graphics g) { thickness = 3; xorig = 30; yorig = 70; xoffset= 35; yoffset = 50; g.setColor(Color.white); g.fillRect(1,51,497,218); // if (active == false)g.setColor(new Color(0,0,0)); g.drawRect(0,50,499,220); // draw each letter for (i = 0; i < lettercount; i++) { str1 = inStr.substring(i,i+1); k = ((int)str1.charAt(0)) - 65; if ((k >= 0) && (k <= 25)) { g.setColor(new Color(130,130,130)); if(active == true) { if (str1.equals("P")|| str1.equals("B")|| str1.equals("T")|| str1.equals("D")|| str1.equals("G")|| str1.equals("Q")|| str1.equals("K")) g.setColor(new Color(143,150,187)); else if (str1.equals("F")|| str1.equals("V")|| str1.equals("S")|| str1.equals("H")) g.setColor(new Color(143,187,150)); else if (str1.equals("J")) g.setColor(new Color(143,187,187)); else if (str1.equals("M")|| str1.equals("NG")|| str1.equals("N")) g.setColor(new Color(145,187,123)); else if (str1.equals("L")|| str1.equals("R")) g.setColor(new Color(157,135,124)); else if (str1.equals("Y")|| str1.equals("WH")|| str1.equals("W")) g.setColor(new Color(200,135,100)); else g.setColor(Color.black); } //draw the polygons that make up the letter for (j=0;j <8; j++) { if (vect[k][0][j] != 999) { x1 = vect[k][0][j]+xorig; y1 = vect[k][1][j]+yorig; x2 = vect[k][2][j]+xorig; y2 = vect[k][3][j]+yorig; polyx[0] = x1 - thickness; polyy[0] = y1 + thickness; polyx[1] = x1 + thickness; polyy[1] = y1 - thickness; polyx[2] = x2 + thickness - distort; polyy[2] = y2 - thickness + distort; polyx[3] = x2 - thickness + distort; polyy[3] = y2 + thickness - distort; // g.drawLine(x1,y1,x2,y2); if (yorig <=250) g.fillPolygon(polyx,polyy,4); } } } xorig = xorig + xoffset; if (xorig >= 460) { xorig = 30; yorig = yorig + yoffset; } } } public boolean action(Event evt, Object o) { // simply display the blurb, no effects if (evt.target == blurbSelect) { active=false; distort = 0; inStr = blurbSelect.getSelectedItem(); inStr = inStr.toUpperCase(); lettercount = inStr.length(); repaint(); } // take in delay factor if (evt.target == delaySelect) delayfac = (delaySelect.getSelectedIndex() +1) * (delaySelect.getSelectedIndex() +1) ; // apply effects to displayed blurb if (evt.target == btn1) { active = true; blurbnum = blurbSelect.getSelectedIndex(); animator = new Thread(this); if (blurbnum == 0) audioClip = getAudioClip(getCodeBase(), "peter.au"); else audioClip = getAudioClip(getCodeBase(), "sally.au"); audioClip.play(); animator.start(); } return true; } public void run() { for (int i = 0; i < syllTotal[blurbnum]; i++) { try {Thread.sleep(syllDelay[blurbnum][i] * delayfac);} catch (InterruptedException e){}; for (distort = 20 ; distort >=0; distort--) { //find clip area to avoid repainting the whole image clipx = xo -3 + xoffset * (syllIndex[blurbnum][i] - (syllIndex[blurbnum][i]/13)*13); clipwidth = xoffset * syllSize[blurbnum][i]; clipy = yo - 10 + (yoffset * ((int)((float)syllIndex[blurbnum][i]/(float)12))); clipheight = yoffset; //double buffering stuff Graphics gg = bufimage.getGraphics(); gg.clipRect(clipx,clipy,clipwidth,clipheight); System.out.println("calling paint"); gg.setColor(Color.white); gg.fillRect(clipx,clipy,clipwidth,clipheight); gg.setColor(Color.red); paint(gg); gg = this.getGraphics(); gg.clipRect(clipx,clipy,clipwidth,clipheight); gg.drawImage(bufimage,0,0,this); try {Thread.sleep(5);} catch (InterruptedException e){}; distort--; } } } }