import java.applet.*; import java.awt.*; import java.awt.event.*; public class f_four extends Applet implements Runnable{ Thread th = null; Image os; Graphics og; String mf[] = {"{","{","|","|","~","","i","j","","I"}; String form[] = {"S","S","S","S","","","","","",""}; String fo[] = new String[10]; String ca[] = new String[10]; String cb[] = new String[10]; String sf[] = new String[8]; int msw[] = new int[10]; int asw[] = new int[30]; Font f1 = new Font("",Font.BOLD,30); Font f2 = new Font("",Font.BOLD,20); FontMetrics fm; int cs,sq=-1,aa; int px; int k1=-1,k2=-1; public void init(){ os = createImage(360,260); og = os.getGraphics(); d_set(); addMouseListener( new MouseAdapter(){ public void mousePressed(MouseEvent e){ if((e.getY()>105)&&(e.getY()<135)){ cs = (e.getX() - 15)/30; }else if((e.getY()>30)&&(e.getY()<60)){ px = (e.getX() - 30)/30; if(msw[px] == 0){ for(int rt = 0;rt<10-cs-1;rt ++){ fo[10-rt-1] = fo[10-rt-2]; } fo[cs] = mf[px]; msw[px] = 1; cs ++; } }else if((e.getY()>75)&&(e.getY()<95)){ if((e.getX()>90)&&(e.getX()<150)){ d_set(); }else if((e.getX()>210)&&(e.getX()<270)){ for(int c1 = 0;c1 < 10;c1 ++){ ca[c1] = "";cb[c1] = "";cb[c1] = fo[c1]; } k1 = -1;k2 = -1; for(int ch = 0;ch < 10;ch ++){ if(cb[ch] == "i")k1 = ch; if(cb[ch] == "j")k2 = ch; } if((k1 >= 0)&&(k2 > 0)&&(k1 < k2)){ for(int c1 = k1+1;c1 < k2;c1 ++){ ca[c1-k1-1] = cb[c1]; } calc(); if(ca[1] == ""){ cb[k1] = ca[0]; for(int c1 = k1+1;c1 < 10;c1 ++){ if((c1-k1+k2)<10){ cb[c1] = cb[c1-k1+k2]; }else{ cb[c1] = ""; } } } } for(int c1 = 0;c1 < 10;c1 ++){ ca[c1] = cb[c1]; } calc(); if(ca[1] ==""){ if((Integer.parseInt(ca[0])>0)&&(Integer.parseInt(ca[0])<31))asw[Integer.parseInt(ca[0])-1] = 1; sq = Integer.parseInt(ca[0])-1; }else{ sq = -1; } } } repaint(); } } ); } public void paint(Graphics g){ og.setColor(Color.white); og.fillRect(0,0,360,260); og.setFont(f1); fm = getFontMetrics(f1); for(int dr = 0;dr < 10;dr ++){ if(msw[dr] == 0){ og.setColor(Color.lightGray); }else{ og.setColor(Color.gray); } og.fill3DRect(30*dr+30,30,30,30,true); og.setColor(Color.black); og.drawString(fo[dr],30*dr+30+(30-fm.stringWidth(fo[dr]))/2,135); og.drawString(mf[dr],30*dr+30+(30-fm.stringWidth(mf[dr]))/2,56); } og.setFont(f2); fm = getFontMetrics(f2); for(int dr = 0;dr < 30;dr ++){ if(asw[dr] == 0){ og.setColor(Color.lightGray); }else{ og.setColor(Color.blue); } og.drawString(""+(dr+1),30*(dr%10)+30+(30-fm.stringWidth(Integer.toString(dr+1)))/2,176+(dr/10)*30); } og.setColor(Color.blue); og.drawRoundRect(90,75,60,20,5,5); if((sq >= 0)&&(sq < 30))og.drawRoundRect(sq%10*30+30,sq/10*30+153,30,30,10,10); og.setColor(Color.black); og.drawString("reset",90+(60-fm.stringWidth("reset"))/2,92); og.drawString("check",210+(60-fm.stringWidth("check"))/2,92); og.setColor(Color.gray); og.drawLine(cs*30+30,110,cs*30+30,140); og.setColor(Color.red); og.drawRoundRect(210,75,60,20,5,5); aa = 1; for(int c1 = 0;c1 < 30;c1 ++){ aa = aa * asw[c1]; } if(aa == 1){ og.setFont(new Font("",Font.BOLD,60)); og.setColor(Color.black); og.drawString("complete!!",50,220); og.setColor(Color.red); og.drawString("complete!!",45,215); } g.drawImage(os,0,0,this); } public void d_set(){ for(int dr = 0;dr < 10;dr ++){ fo[dr] = form[dr]; msw[dr] = 0; } cs = 0; } public void calc(){ for(int c1 = 0;c1 < 9;c1 ++){ if((ca[c1] == "S")&&(ca[c1+1]) == "S"){ if((c1 < 8)&&(ca[c1+2] == "S")){ if((c1 < 7)&&(ca[c1+3] == "S")){ ca[c1] = "SSSS"; for(int c2 = c1+1;c2 < 10;c2 ++)ca[c2] = ""; }else{ cs = c1; ca[cs] = "SSS"; for(int c2 = cs+1;c2 < 8;c2 ++){ ca[c2] = ca[c2+2]; } ca[8] = "";ca[9] = ""; } }else{ cs = c1; ca[cs] = "SS"; for(int c2 = cs+1;c2 < 9;c2 ++){ ca[c2] = ca[c2+1]; } ca[9] = ""; } } } for(int c1 = 0;c1 < 9;c1 ++){ if(ca[c1] == ""){ if((ca[c1+1] == "S")||(Integer.parseInt(ca[c1+1]) == 16)){ cs = c1; if(ca[c1+1] == "S")ca[cs] = "Q"; if(Integer.parseInt(ca[c1+1]) == 16)ca[cs] = "S"; for(int c2 = cs+1;c2 < 9;c2 ++){ ca[c2] = ca[c2+1]; } ca[9] = ""; } } } for(int c1 = 0;c1 < 10;c1 ++){ if(ca[c1] == "I"){ if((c1 > 0)&&(ca[c1-1] == "S")){ cs = c1-1; ca[cs] = "QS"; for(int c2 = cs+1;c2 < 9;c2 ++){ ca[c2] = ca[c2+1]; } ca[9] = ""; } } } for(int c1 = 0;c1 < 10;c1 ++){ if((ca[c1] == "~")||(ca[c1] == "")){ if((c1 > 0)&&(c1 < 9)){ if((ca[c1-1] != "{")&&(ca[c1-1] != "|")&&(ca[c1-1] != "~")&&(ca[c1-1] != "")&&(ca[c1+1] != "{")&&(ca[c1+1] != "|")&&(ca[c1+1] != "~")&&(ca[c1+1] != "")){ cs = c1 - 1; if(ca[c1] == "~"){ ca[cs] = Integer.toString(Integer.parseInt(ca[cs])*Integer.parseInt(ca[cs+2])); for(int c2 = cs+1;c2 < 8;c2 ++){ ca[c2] = ca[c2+2]; } ca[8]="";ca[9] = ""; c1 --; }else{ if(Integer.parseInt(ca[cs])%Integer.parseInt(ca[cs+2]) == 0){ ca[cs] = Integer.toString(Integer.parseInt(ca[cs])/Integer.parseInt(ca[cs+2])); for(int c2 = cs+1;c2 < 8;c2 ++){ ca[c2] = ca[c2+2]; } ca[8]="";ca[9] = ""; c1 --; } } } } } } for(int c1 = 0;c1 < 10;c1 ++){ if((ca[c1] == "{")||(ca[c1] == "|")){ if((c1 > 0)&&(c1 < 9)){ if((ca[c1-1] != "{")&&(ca[c1-1] != "|")&&(ca[c1+1] != "{")&&(ca[c1+1] != "|")){ cs = c1 - 1; if(ca[c1] == "{"){ ca[cs] = Integer.toString(Integer.parseInt(ca[cs])+Integer.parseInt(ca[cs+2])); for(int c2 = cs+1;c2 < 8;c2 ++){ ca[c2] = ca[c2+2]; } ca[8]="";ca[9] = ""; c1 --; }else{ ca[cs] = Integer.toString(Integer.parseInt(ca[cs])-Integer.parseInt(ca[cs+2])); for(int c2 = cs+1;c2 < 8;c2 ++){ ca[c2] = ca[c2+2]; } ca[8]="";ca[9] = ""; c1 --; } } } } } } 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(100); } catch (InterruptedException e){ } } } public void update( Graphics g ){ paint( g ) ; } }