<< Line of coin I >>

import java.applet.Applet;
import java.awt.*;
import java.awt.event.*;

public class l_coin extends Applet implements Runnable{

   Thread th = null;
   Image os;
   Graphics og;
   int r = 15,h = 26;
   int td[][] = {{0,0,0,0,0,0,0,0,0,0},
                  {0,0,0,0,0,0,0,0,0,0},
                 {0,0,0,0,0,0,0,0,0,0},
                  {0,0,0,0,0,0,0,0,0,0},
                 {0,0,0,0,1,1,0,0,0,0},
                  {0,0,0,1,0,1,0,0,0,0},
                 {0,0,0,0,1,1,0,0,0,0},
                  {0,0,0,0,0,0,0,0,0,0},
                 {0,0,0,0,0,0,0,0,0,0},
                  {0,0,0,0,0,0,0,0,0,0},
                 {0,0,0,0,0,0,0,0,0,0}};
   int px,py,sx,sy,rx,ry,mx,my;
   int fg = 0 , rs;

   public void init(){
      setBackground(new Color(200,250,250));
      os = createImage(320,308);
      og = os.getGraphics();
      addMouseListener(
         new MouseAdapter(){
            public void mousePressed(MouseEvent e){
               py = e.getY() / h;
               px = (e.getX() - (py%2)*r) / (2*r);
               if(td[py][px] == 1){
                  sx = px ; sy = py;
                  td[py][px]=0;
                  mx = e.getX() ; my = e.getY();
                  fg = 1;
               }
               repaint();
            }
            public void mouseReleased(MouseEvent e){
               ry = e.getY() / h;
               rx = (e.getX() - (ry%2)*r) / (2*r);
               if((rx > 0) && (rx < 9) && (ry > 0) && (ry < 10) && (fg == 1)){
                  rs = td[ry-1][rx-1+(ry%2)] + td[ry-1][rx+(ry%2)]+td[ry][rx-1]+td[ry][rx+1]+td[ry+1][rx-1+(ry%2)] + td[ry+1][rx+(ry%2)];
                  if((rs > 1) && (td[ry][rx] == 0)){
                     td[ry][rx] = 1;
                  }else{
                     td[sy][sx] = 1;
                  }
               }else if(fg == 1){
                  td[sy][sx] = 1;
               }
               fg = 0;
               repaint();
            }
         }
      );
      addMouseMotionListener(
         new MouseMotionAdapter(){
            public void mouseDragged(MouseEvent e){
               mx = e.getX();
               my = e.getY();
               repaint();
            }
         }
      );
   }

   public void paint(Graphics g){
      og.setColor(new Color(200,250,250)); 
      og.fillRect(0,0,320,308);

      for(int i = 0 ; i < 9 ; i++){
         for(int j = 0 ; j < 10 ; j++){
            if(i*j != 0){
               og.setColor(Color.gray);
               og.fillOval(i*2*r+(j%2)*r+15,j*h+15,3,3);
            }
            if(td[j][i] == 1){
               coin(i*2*r+(j%2)*r,j*h);
            }
         }
      }

      if(fg == 1){
         coin(mx - 15,my - 13);
      }

      g.drawImage(os,0,0,this );
   }

   public void coin(int x,int y){
      og.setColor(new Color(255,153,0));
      og.fillOval(x,y,2*r,2*r);
      og.setColor(new Color(50,50,50));
      og.drawOval(x,y,2*r,2*r);
      for(int c = 0 ; c < 15 ; c ++){
         og.setColor(new Color(c*10+100,c*10+100,c*10+100));
         og.drawOval(x+5+c,y+5+c,2*r-10-2*c,2*r-10-2*c);
      }
      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 ) ;
   }

}


<< Line of coin II >>

import java.applet.Applet;
import java.awt.*;
import java.awt.event.*;

public class l_coin2 extends Applet implements Runnable{

   Thread th = null;
   Image os;
   Graphics og;
   int r = 15,h = 30;
   int td[][] = {{0,0,0,0,0,0,0,0,0,0,0},
                 {0,0,0,0,0,0,0,0,0,0,0},
                 {0,0,0,0,0,0,0,0,0,0,0},
                 {0,0,0,0,0,0,0,0,0,0,0},
                 {0,0,0,0,0,0,0,0,0,0,0},
                 {0,0,0,0,0,0,0,0,0,0,0},
                 {0,0,0,0,0,0,0,0,0,0,0},
                 {0,0,0,0,0,0,0,0,0,0,0},
                 {0,1,2,3,4,5,6,7,8,9,0},
                 {0,0,0,0,0,0,0,0,0,0,0},
                 {0,0,0,0,0,0,0,0,0,0,0}};
   int dx[] = {1,2,3,4,5,6,7,8,9};
   int dy[] = {8,8,8,8,8,8,8,8,8};
   int px,py,sx,sy,rx,ry,mx,my;
   int fg = 0 , rs , ss ,ll;

   public void init(){
      setBackground(new Color(200,250,250));
      os = createImage(360,360);
      og = os.getGraphics();
      addMouseListener(
         new MouseAdapter(){
            public void mousePressed(MouseEvent e){
               py = e.getY() / h;
               px = e.getX() / h;
               if(td[py][px] != 0){
                  rs = td[py][px];
                  sx = px ; sy = py;
                  td[py][px]=0;
                  mx = e.getX() ; my = e.getY();
                  fg = 1;
               }
               repaint();
            }
            public void mouseReleased(MouseEvent e){
               ry = e.getY() / h;
               rx = e.getX() / h;
               if((rx > 0) && (rx < 11) && (ry > 0) && (ry < 11) && (fg == 1)){
                  if(td[ry][rx] == 0){
                     td[ry][rx] = rs;
                     dx[rs-1] = rx ; dy[rs-1] = ry ;
                  }else{
                     td[sy][sx] = rs;
                     dx[rs-1] = sx ; dy[rs-1] = sy ;
                  }
                  fg = 0;
               }

               fg = 0;
               repaint();
            }
         }
      );
      addMouseMotionListener(
         new MouseMotionAdapter(){
            public void mouseDragged(MouseEvent e){
               mx = e.getX();
               my = e.getY();
               repaint();
            }
         }
      );
   }

   public void paint(Graphics g){
      og.setColor(new Color(200,250,250)); 
      og.fillRect(0,0,360,360);

      for(int i = 0 ; i < 11 ; i++){
         for(int j = 0 ; j < 11 ; j++){
            if(i*j != 0){
               og.setColor(Color.gray);
               og.fillOval(i*h+15,j*h+15,3,3);
            }
            if(td[j][i] != 0){
               coin(i*h,j*h);
            }
         }
      }
      if(fg == 1){
         coin(mx - 15,my - 13);
      }
      ll = 0;
      for(int c1 = 0;c1 < 9;c1 ++){
         for(int c2 = 0;c2 < 9;c2 ++){
         ss = 0;
            if(c1 != c2){
               for(int c3 = 0;c3 < 9;c3 ++){
                  if((c1 != c2) && (c2 != c3) && (c3 != c1)){
                     if((dy[c1]-dy[c2])*(dx[c1]-dx[c3])-(dx[c1]-dx[c2])*(dy[c1]-dy[c3]) == 0){
                       ss ++;
                     }
                  }
               }
               if(ss == 1){
                  og.setColor(Color.blue);
                  og.drawLine(dx[c1]*h+15,dy[c1]*h+15,dx[c2]*h+15,dy[c2]*h+15);
                  ll ++;
               }
            }
         }
      }
      if(ll/6 == 10){
         og.setColor(Color.blue);
      }else{
         og.setColor(Color.red);
      }
      og.setFont(new Font("Century",Font.PLAIN,20));
      og.drawString(""+ll/6+" lines",150,25);
      g.drawImage(os,0,0,this );
   }

   public void coin(int x,int y){
      og.setColor(new Color(255,153,0));
      og.fillOval(x,y,2*r,2*r);
      og.setColor(new Color(50,50,50));
      og.drawOval(x,y,2*r,2*r);
      for(int c = 0 ; c < 15 ; c ++){
         og.setColor(new Color(c*10+100,c*10+100,c*10+100));
         og.drawOval(x+5+c,y+5+c,2*r-10-2*c,2*r-10-2*c);
      }
      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 ) ;
   }

}