import java.applet.Applet; import java.awt.*; import java.awt.event.*; public class alphametics extends Applet implements Runnable{ Thread th = null; Image os; Graphics og; String bua[][] = {{"E","N","O","S","U","Y","","","",""}, {"D","E","M","N","O","R","S","Y","",""}, {"A","E","H","I","R","S","T","V","Y",""}, {"E","F","I","N","O","R","S","T","X","Y"}, {"E","F","H","I","L","N","R","T","V","Y"}, {"E","H","I","N","R","S","T","V","Y",""}, {"A","E","F","H","I","N","R","T","U","W"}, {"A","E","L","N","O","P","R","S","T","U"}}; int bnt[][] = {{-1,-1,-1,-1,-1,-1,-1,-1,-1,-1}, { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9}}; int btd[][][] = {{{ 1, 2, 2, 3,-1,-1,-1,-1},{ 4, 2, 5,-1,-1,-1,-1,-1},{ 0, 0, 3,-1,-1,-1,-1,-1},{-1,-1,-1,-1,-1,-1,-1,-1},{-1,-1,-1,-1,-1,-1,-1,-1}}, {{ 7, 1, 3, 4, 2,-1,-1,-1},{ 1, 5, 4, 2,-1,-1,-1,-1},{ 0, 3, 1, 6,-1,-1,-1,-1},{-1,-1,-1,-1,-1,-1,-1,-1},{-1,-1,-1,-1,-1,-1,-1,-1}}, {{ 8, 5, 0, 1,-1,-1,-1,-1},{ 8, 4, 1, 7,-1,-1,-1,-1},{ 5, 3,-1,-1,-1,-1,-1,-1},{ 5, 3, 2, 6,-1,-1,-1,-1},{-1,-1,-1,-1,-1,-1,-1,-1}}, {{ 9, 7, 8, 2, 6,-1,-1,-1},{ 3, 0, 7,-1,-1,-1,-1,-1},{ 3, 0, 7,-1,-1,-1,-1,-1},{ 9, 7, 5, 4, 1,-1,-1,-1},{-1,-1,-1,-1,-1,-1,-1,-1}}, {{ 9, 7, 6, 3, 2, 7,-1,-1},{ 5, 0, 8, 0, 4, 0,-1,-1},{ 0, 5, 3, 5,-1,-1,-1,-1},{ 0, 8, 3, 1,-1,-1,-1,-1},{ 0, 8, 3, 1,-1,-1,-1,-1}}, {{ 8, 6, 4, 2, 1, 6,-1,-1},{ 3, 0, 7, 0, 5,-1,-1,-1},{ 3, 0, 7, 0, 5,-1,-1,-1},{ 3, 0, 7, 0, 5,-1,-1,-1},{ 0, 3, 2, 3,-1,-1,-1,-1}}, {{ 1, 6, 8, 7, 0, 5,-1,-1},{ 6, 1, 7, 0, 9,-1,-1,-1},{ 1, 6, 4, 2,-1,-1,-1,-1},{ 6, 4, 0,-1,-1,-1,-1,-1},{ 3, 7, 6, 0, 1,-1,-1,-1}}, {{ 7, 8, 1, 3, 0, 2, 5,-1},{ 4, 8, 9, 2, 5,-1,-1,-1},{ 1, 3, 9, 8, 5, 1, 3,-1},{ 7, 9, 3, 0, 6, 9,-1,-1},{ 3, 6, 9, 8, 0, 7,-1,-1}}}; String ua[] = new String[10]; int nt[][] = new int[2][10]; int td[][] = new int[5][8]; int px,py,sx,sy,pn = 0; int fg = 0,ch = 0,ps,as,sw; Font f = new Font("Century",Font.PLAIN,40); FontMetrics fm = getFontMetrics(f); int fw; int tr1x[] = {22,55,55,22},tr1y[] = {180,160,200,180},tr2x[] = {385,418,385,385},tr2y[] = {160,180,200,160}; public void init(){ setBackground(new Color(255,204,255)); os = createImage(550,450); og = os.getGraphics(); R_set(); addMouseListener( new MouseAdapter(){ public void mousePressed(MouseEvent e){ px = (e.getX() - 20) / 40; py = (e.getY() - 280) / 40; if(fg == 0){ if((px>=0)&&(px<=9)&&(py>=0)&&(py<=1)){ sx = px ; sy = py ; fg = 1 ; } }else if(fg == 1){ if((px>=0)&&(px<=9)&&(py>=0)&&(py<=1)){ sw = nt[py][px] ; nt[py][px] = nt[sy][sx] ; nt[sy][sx] = sw ; fg = 0; } } if((px==0)&&(py==-2)){ pn = pn - 1; if(pn < 0){pn = 0;} R_set(); } if((px==9)&&(py==-2)){ pn = pn + 1; if(pn > 7){pn = 7;} R_set(); } repaint(); } } ); } public void paint(Graphics g){ og.setColor(new Color(255,204,255)); og.fillRect(0,0,550,450); og.setColor(new Color(255,255,255)); og.fillRect(58,18,324,204); og.setColor(new Color(0,0,0)); og.drawRect(58,18,324,204); og.setColor(new Color(0,0,204)); og.fillPolygon(tr1x,tr1y,4); og.fillPolygon(tr2x,tr2y,4); og.setColor(new Color(0,0,153)); og.drawPolygon(tr1x,tr1y,4); og.drawPolygon(tr2x,tr2y,4); og.setColor(new Color(0,0,0)); for(int i = 0 ; i < 10 ; i ++){ for(int j = 0 ; j < 2 ; j ++){ og.setColor(new Color(255,255,255)); og.fillRect(20+i*40,240+j*40,39,39); } } for(int ix = 0 ; ix < 8 ; ix ++){ for(int iy = 0 ; iy < 5 ; iy ++){ if(td[iy][ix] != -1){ og.setColor(new Color(0,0,0)); if(nt[0][td[iy][ix]] != -1){ og.setColor(new Color(0,0,255)); og.setFont(new Font("Century",Font.BOLD,16)); og.drawString(""+ua[td[iy][ix]],340-ix*40,195-iy*40); og.setColor(new Color(0,0,0)); og.setFont(f); og.drawString(""+nt[0][td[iy][ix]],350-ix*40,215-iy*40); }else{ fw = fm.stringWidth(ua[td[iy][ix]]); og.setColor(new Color(0,0,0)); og.setFont(f); og.drawString(""+ua[td[iy][ix]],340-ix*40+((40-fw)/2),215-iy*40); } } } } for(int ix = 0 ; ix < 10 ; ix ++){ for(int iy = 0 ; iy < 2 ; iy ++){ if(nt[iy][ix] != -1){ og.setColor(new Color(228,228,255)); og.fill3DRect(21+40*ix,281+iy*40,36,36,true); og.setColor(new Color(24,24,102)); og.setFont(f); og.drawString(""+nt[iy][ix],30+40*ix,312+iy*40); } } } for(int i = 0 ; i < 10 ; i ++){ og.setColor(new Color(0,0,0)); og.setFont(f); fw = fm.stringWidth(ua[i]); og.drawString(""+ua[i],20+i*40+((40-fw)/2),275); } ch = 1; for(int i = 0 ; i < 10 ; i ++){ if((ua[i] != "") && (nt[0][i] == -1)){ ch = 0; } } ps = 0 ; as = 0; if(ch == 1){ for(int i = 0 ; i < 8 ; i ++){ for(int j = 1 ; j < 5 ; j ++){ if(td[j][i] != -1){ ps = ps + nt[0][td[j][i]]*(int)Math.pow(10,(double)i); } } if(td[0][i] != -1){ as = as + nt[0][td[0][i]]*(int)Math.pow(10,(double)i); } } } if((ps == as) && (ps != 0)){ og.setColor(new Color(0,0,255)); }else{ og.setColor(new Color(255,0,0)); } og.drawLine(70,180,370,180); og.drawLine(70,181,370,181); og.drawRect(60,20,320,200); og.drawRect(61,21,318,198); og.drawLine(70,150,100,150); og.drawLine(70,151,100,151); og.drawLine(85,135,85,165); og.drawLine(86,135,86,165); if(fg == 1){ og.setColor(new Color(255,0,0)); og.drawRect(sx*40+21,sy*40+281,36,36); } og.setColor(new Color(228,228,250)); og.fill3DRect(65,25,60,30,true); og.setColor(new Color(0,0,153)); og.setFont(new Font("Century",Font.ITALIC,24)); og.drawString("No."+(pn+1),70,49); g.drawImage(os,0,0,this ); } public void R_set(){ for(int i = 0 ; i < 10 ; i ++){ for(int j = 0 ; j < 2 ; j ++){ nt[j][i] = bnt[j][i]; } ua[i] = bua[pn][i]; } for(int i = 0 ; i < 8 ; i ++){ for(int j = 0 ; j < 5 ; j ++){ td[j][i] = btd[pn][j][i]; } } return; } public void start(){ if(th == null){ th = new Thread(this); th.start(); } } public void stop(){ th = null; } public void run(){ while (th != null){ try { Thread.sleep(30); } catch (InterruptedException e){ } } } public void update( Graphics g ){ paint( g ) ; } }