import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.ItemEvent;
import java.awt.event.ItemListener;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;import javax.swing.JButton;
import javax.swing.JPanel;
public class Link extends javax.swing.JFrame {
    private javax.swing.JComboBox change;
    private static javax.swing.JPanel play;
    private javax.swing.JButton start;
    private static int PX=500;
    private static int PY=PX;
    private static int spit=10;
    private static int d=PX/spit;
    private static Graphics g;
    private static int level=0;
    private static int[] linea=new int[2];
    private static int[] lineb=new int[2];
    
    private static Point[][] pointList=new Point[spit][spit];
    public Link() {
     linea[0]=-1;linea[1]=-1;
     lineb[0]=-1;lineb[1]=-1;
     initComponents();
        this.g=play.getGraphics();
        for(int i=0;i<spit;i++)
         for(int t=0;t<spit;t++)
         pointList[i][t]=new Point();
        setVisible(true);
        setSize(PX+100, PY+100);
        change.addItemListener(new ItemListener() {
public void itemStateChanged(ItemEvent e) {
       level=change.getSelectedIndex();  
}
});
        start.addActionListener(new startListener());
        
    }
    public class startListener implements ActionListener{ public void actionPerformed(ActionEvent e) {
       int number=level*10+10;
       for(int m=0;m<spit;m++)
        for(int k=0;k<spit;k++)
        pointList[k][m].status=0;
       int g1x=(int)(Math.random()*spit),g1y=(int)(Math.random()*spit),
        g2x=(int)(Math.random()*spit),g2y=(int)(Math.random()*spit);
       char n='A'-1;
       for(int i=1;i<=number;i++){
        n++;                  
        while(pointList[g1x][g1y].status==1)
        {g1x=(int)(Math.random()*spit);
         g1y=(int)(Math.random()*spit);    
        }
        while(pointList[g2x][g2y].status==1){
        g2x=(int)(Math.random()*spit);
            g2y=(int)(Math.random()*spit);
        }
        //System.out.println(g1x+" "+g1y+" "+g2x+" "+g2y);
        pointList[g1x][g1y].status=1;pointList[g1x][g1y].s=n;
        pointList[g2x][g2y].status=1;pointList[g2x][g2y].s=n;
       }
       play.repaint();
}
    
    }
    
    private void initComponents() {        play = new Play(pointList);
        change = new javax.swing.JComboBox();
        start = new javax.swing.JButton();        setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);        play.setBorder(new javax.swing.border.SoftBevelBorder(javax.swing.border.BevelBorder.RAISED));
        play.setCursor(new java.awt.Cursor(java.awt.Cursor.DEFAULT_CURSOR));
        play.setPreferredSize(new java.awt.Dimension(PX, PY));        javax.swing.GroupLayout playLayout = new javax.swing.GroupLayout(play);
        play.setLayout(playLayout);
        playLayout.setHorizontalGroup(
            playLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGap(0, 494, Short.MAX_VALUE)
        );
        playLayout.setVerticalGroup(
            playLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGap(0, 494, Short.MAX_VALUE)
        );        change.setModel(new javax.swing.DefaultComboBoxModel(new String[] { "easy", "normall", "hard" }));
        /*change.addActionListener(new java.awt.event.ActionListener() {
            //public void actionPerformed(java.awt.event.ActionEvent evt) {
            //    changeActionPerformed(evt);
            //}
        });*/        start.setText("start");        javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
        getContentPane().setLayout(layout);
        layout.setHorizontalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()
                .addContainerGap()
                .addComponent(play, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 21, Short.MAX_VALUE)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING, false)
                    .addComponent(change, 0, 0, Short.MAX_VALUE)
                    .addComponent(start, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
                .addContainerGap())
        );
        layout.setVerticalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addContainerGap()
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addComponent(play, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addGroup(layout.createSequentialGroup()
                        .addComponent(change, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                        .addComponent(start)))
                .addContainerGap(28, Short.MAX_VALUE))
        );        java.awt.Dimension screenSize = java.awt.Toolkit.getDefaultToolkit().getScreenSize();
        setBounds((screenSize.width-612)/2, (screenSize.height-572)/2, 612, 572);
    }

解决方案 »

  1.   

    private static boolean pointIsConnect(int ax,int ay,int bx,int by){              
         if(ax==bx||by==ay){
         pointList[ax][ay].status=0;
         pointList[bx][by].status=0;
         if(lineIsConnect(ax, ay, bx, by)){
         linea[0]=ax;linea[1]=ay;
    lineb[0]=bx;lineb[1]=by;
         return true;
         }
         pointList[ax][ay].status=1;
         pointList[bx][by].status=1;}
        
         int[] field=getFiled(ax, ay, bx, by);
         System.out.println(field[0]+" "+field[1]+" "+field[2]+" "+field[3]+" \n");
        
         pointList[ax][ay].status=0;
         pointList[bx][by].status=0;
         if(field[0]>=0)
         for(int m=field[0];m<=field[1];m++)
         if(lineIsConnect(ax, m, bx, m)){    
         linea[0]=ax;linea[1]=m;
         lineb[0]=bx;lineb[1]=m;
         pointList[ax][ay].s=' ';
              pointList[bx][by].s=' ';
         return true;
         }
         if(field[2]>=0)
         for(int m=field[2];m<=field[3];m++)
         if(lineIsConnect(m,ay,m,by)){    
         linea[0]=m;linea[1]=ay;
         lineb[0]=m;lineb[1]=by;
         pointList[ax][ay].s=' ';
              pointList[bx][by].s=' ';
         return true;
         }
         pointList[ax][ay].status=1;
         pointList[bx][by].status=1;
         return false;
        }
        
        public static int[] getFiled(int ax,int ay,int bx,int by){    
         int[] field=new int[4];
         int[] f1=lockFiled(ax, ay);
         int[] f2=lockFiled(bx, by);
         System.out.println(f1[0]+" "+f1[1]+" "+f1[2]+" "+f1[3]+" \n");
         System.out.println(f2[0]+" "+f2[1]+" "+f2[2]+" "+f2[3]+" \n");
            int[] m=getUni(f1[0], f1[1], f2[0], f2[1]);
            int[] k=getUni(f1[2], f1[3], f2[2], f2[3]);
        
            field[0]=m[0];field[1]=m[1];
            field[2]=k[0];field[3]=k[1];
         return field;
        }
        
        public static int[] getUni(int at,int ab,int bt,int bb){
         int[] t=new int[2];
         if(ab<bt){t[0]=-1;t[1]=-1;}
         else if(ab==bt)t[0]=t[1]=ab;
         else if(ab>bt&&ab<=bb){
            if(at<bt){t[0]=bt;t[1]=ab;}
            else if(at>=bt){t[0]=at;t[1]=ab;}
         }
         else if(ab>bb){
            if(at<=bt){t[0]=bt;t[1]=bb;}
            else if(at>bt&&at<bb){t[0]=at;t[1]=bb;}
            else if(at==bb){t[0]=t[1]=bb;}
            else if(at>bb){t[0]=t[1]=-1;}
         }
        
        
         return t;
        }
       
        public static int[] lockFiled(int x,int y){
         int[] t=new int[4];  
         for(int m=y+1;;m++){
         if(m>spit-1){t[1]=spit-1;break;}
         if(pointList[x][m].status==1){t[1]=m-1;break;}
         }
         for(int m=y-1;;m--){
         if(m<0){t[0]=0;break;}
         if(pointList[x][m].status==1){t[0]=m+1;break;}
         }
        
         for(int m=x+1;;m++){
         if(m>spit-1){t[3]=spit-1;break;}
         if(pointList[m][y].status==1){t[3]=m-1;break;}
         }
         for(int m=x-1;;m--){
         if(m<0){t[2]=0;break;}
         if(pointList[m][y].status==1){t[2]=m+1;break;}
         }
         return t;
        }
        
        public static void disStatus(){
         for(int m=0;m<spit;m++){
         for(int k=0;k<spit;k++)
         System.out.print(pointList[k][m].status+" ");
         System.out.println();
         }
         }
        
        /*public static int[] getlocate(int x,int y){
         int[] t=new int[2];
         t[0]=x*d;t[1]=y*d;
         return t;
        }*/    /*public static int[] getindex(int x,int y){
         int[] t=new int[2];
         t[0]=x/d;t[1]=y/d;
         return t;
        }*/
      

  2.   

    public static boolean lineIsConnect(int ax,int ay,int bx,int by ){
         int maxx=ax<bx?bx:ax,minx=ax<bx?ax:bx;
         int maxy=ay<by?by:ay,miny=ay<by?ay:by;
         for(int m=minx;m<=maxx;m++)
         for(int k=miny;k<=maxy;k++)
         if(pointList[m][k].status==1)return false;
         return true;
        }
        
        
        public class Point{
         int status=0;
         char s=' ';
         public Point(){};
         public Point(int status,char s){
                   this.status=status;
                   this.s=s;
         }
         protected boolean equals(Point p){
         if(this.status==p.status&&this.s==p.s)return true;
         else return false;
         }
        }
       
        public class Play extends JPanel{
            Point[][] pointList;
            private int x1=-1,x2=-1,y1=-1,y2=-1;
            private int xi1,xi2,yi1,yi2;
            private int count=0;
            private boolean p=false;
            public Play(final Point[][] pointList){
             this.pointList=pointList;
             addMouseListener(new MouseListener(){
             Point[][] pointLPoints;
    public void mouseReleased(MouseEvent e) {
    }
    public void mousePressed(MouseEvent e) {

    }
    public void mouseExited(MouseEvent e) {

    }
    public void mouseEntered(MouseEvent e) {

    }
    public void mouseClicked(MouseEvent e) {
     count++;
     count=count%3;  
     if(count==1)
     {x1=(e.getX()/d)*d;y1=(e.getY()/d)*d;}  
     
     else if(count==2)
     {x2=(e.getX()/d)*d;y2=(e.getY()/d)*d;
     xi1=x1/d;xi2=x2/d;yi1=y1/d;yi2=y2/d;
      if((pointList[xi1][yi1].s)==(pointList[xi2][yi2].s)
      &&(pointList[xi1][yi1].status==1&&pointList[xi2][yi2].status==1)
      &&!(xi1==xi2&&yi1==yi2))
      {if(pointIsConnect(xi1, yi1, xi2, yi2)) {
      //disStatus();
      p=true;}
       
      }}
     
     else{x1=-1;x2=-1;y1=-1;y2=-1;}
         repaint();     
    }
    });
            }
    protected void paintComponent(Graphics g) {
    super.paintComponent(g);
    if(win()){
    p=false;count=0;x1=-1;x2=-1;
    g.drawString("you win", PX/2, PY/2);}
    else{
         for(int i=0;i<=PY;i+=d)
         g.drawLine(0, i, PX, i);
         for(int i=0;i<=PX;i+=d)
         g.drawLine(i, 0, i, PY);
         for(int m=0;m<spit;m++)
            for(int k=0;k<spit;k++)
            if(pointList[k][m].status==1)
            g.drawString(String.valueOf(pointList[k][m].s), k*d+10, m*d+20);
         paintSelect(g);
         if(xi1>=0&&p)paintPath(g);}
    }
    public void paintPath(Graphics g){
    g.setColor(Color.red);int t=d/2;
    int s1=xi1*d+t, s2=yi1*d+t, s3=xi2*d+t, s4=yi2*d+t;
    int r1=linea[0]*d+t,r2=linea[1]*d+t,r3=lineb[0]*d+t,r4=lineb[1]*d+t;
    g.drawLine(r1, r2, r3, r4);
    if(r1==s1||r2==s2){
    g.drawLine(r1, r2, s1, s2);
    g.drawLine(r3, r4, s3, s4);
    }
    else{
    g.drawLine(r1, r2, s3, s4);
    g.drawLine(r3, r4, s1, s2);
    }

    xi1=-1;
    p=false;
    }

    public boolean win(){
    for(int m=0;m<spit;m++)
    for(int k=0;k<spit;k++)
    if(pointList[k][m].status==1)return false;
    return true;
    }

    public  void paintSelect(Graphics g){
    g.setColor(Color.red);
    if(x1>=0)g.drawRect(x1, y1, d, d);
    if(x2>=0)g.drawRect(x2, y2, d, d);
    }
        }
        
        public static void main(String args[]) {
         new Link();
        
         /*
         pointList[0][1].status=1;
         pointList[1][0].status=1;
         pointList[2][1].status=1;
         pointList[3][1].status=1;
         pointList[3][2].status=1;
            pointList[3][3].status=1;
            pointList[3][6].status=1;
            pointList[5][5].status=1;
            pointList[7][8].status=1;
            pointList[9][9].status=1;
            pointList[9][8].status=1;
            pointList[8][9].status=1;
            pointList[8][8].status=1;
            pointList[8][7].status=1;
            
            pointList[3][4].status=1;
            pointList[3][5].status=1;
            pointList[3][7].status=1;
            pointList[3][8].status=1;
            pointList[3][7].status=1;
            
        
         pointList[0][1].s='T';
         pointList[1][0].s='P';
         pointList[2][1].s='H';
         pointList[3][1].s='T';
         pointList[3][2].s='I';
            pointList[3][3].s='F';
            pointList[3][6].s='P';
            pointList[5][5].s='I';
            pointList[7][8].s='O';
            pointList[9][9].s='O';
            pointList[9][8].s='F';
            pointList[8][9].s='E';
            pointList[8][8].s='E';
            pointList[8][7].s='R';
            
            pointList[3][4].s='R';
            pointList[3][5].s='G';
            
            pointList[3][8].s='G';
            pointList[3][7].s='H';*/
            
            disStatus();
            //int[] t=getFiled(7, 8, 8, 7);
            //System.out.println(t[0]+" "+t[1]+" "+t[2]+" "+t[3]+" ");
            //System.out.println(pointIsConnect(3, 4, 8, 7));
            //System.out.println(linea[0]+" "+linea[1]+" "+lineb[0]+" "+lineb[1]+" ");
        }  
       
    }
      

  3.   

    OK,
    刚copy完  试试~~~~~~~~~~
      

  4.   

    wo hai  bu hui wan ..
      

  5.   


    我自己测试了一下,发现原来我的鼠标监听器起作用的方法是clicked,之所以感觉没反应是因为你点击鼠标的时候稍微拖了一下,这时监听器就调用dragged方法而不是clicked,所以你吧public class Click implements MouseListener 里面的clicked方法里面的代码剪切到pressed方法里就行了
      

  6.   

    import java.awt.BorderLayout;
    import java.awt.Color;
    import java.awt.Dimension;
    import java.awt.Graphics;
    import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;
    import java.awt.event.ItemEvent;
    import java.awt.event.ItemListener;
    import java.awt.event.MouseEvent;
    import java.awt.event.MouseListener;import javax.swing.JButton;
    import javax.swing.JPanel;
    public class Link extends javax.swing.JFrame {
        private javax.swing.JComboBox change;
        private static javax.swing.JPanel play;
        private javax.swing.JButton start;
        private static int PX=500;
        private static int PY=PX;
        private static int spit=10;
        private static int d=PX/spit;
        private static Graphics gp;
        private static int level=0;
        private static int[] linea=new int[2];
        private static int[] lineb=new int[2];
        private int buttonStart=0;
        private static Point[][] pointList=new Point[spit][spit];
        public Link() {
         linea[0]=-1;linea[1]=-1;
         lineb[0]=-1;lineb[1]=-1;
         initComponents();
            
            //gp.drawLine(1, 1, 100, 100);
            for(int i=0;i<spit;i++)
             for(int t=0;t<spit;t++)
             pointList[i][t]=new Point();
            setVisible(true);
            setSize(PX+100, PY+100);
            change.addItemListener(new ItemListener() {
    public void itemStateChanged(ItemEvent e) {
           level=change.getSelectedIndex();  
    }
    });
            start.addActionListener(new startListener());
            
        }
        public class startListener implements ActionListener{
            
    public void actionPerformed(ActionEvent e) {
       ((Play)play).setClear();
       buttonStart++;
           int number=level*10+10;
           for(int m=0;m<spit;m++)
            for(int k=0;k<spit;k++)
            pointList[k][m].status=0;
           int g1x=(int)(Math.random()*spit),g1y=(int)(Math.random()*spit),
            g2x=(int)(Math.random()*spit),g2y=(int)(Math.random()*spit);
           char n='A'-1;
           for(int i=1;i<=number;i++){
            n++;                  
            while(pointList[g1x][g1y].status==1)
            {g1x=(int)(Math.random()*spit);
             g1y=(int)(Math.random()*spit);    
            }
            while(pointList[g2x][g2y].status==1){
            g2x=(int)(Math.random()*spit);
                g2y=(int)(Math.random()*spit);
            }
            //System.out.println(g1x+" "+g1y+" "+g2x+" "+g2y);
            pointList[g1x][g1y].status=1;pointList[g1x][g1y].s=n;
            pointList[g2x][g2y].status=1;pointList[g2x][g2y].s=n;
           }
           play.repaint();
    }
        
        }
                                               
        private void initComponents() {        play = new Play(pointList);
            change = new javax.swing.JComboBox();
            start = new javax.swing.JButton();        setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);        play.setBorder(new javax.swing.border.SoftBevelBorder(javax.swing.border.BevelBorder.RAISED));
            play.setCursor(new java.awt.Cursor(java.awt.Cursor.DEFAULT_CURSOR));
            play.setPreferredSize(new java.awt.Dimension(PX, PY));        javax.swing.GroupLayout playLayout = new javax.swing.GroupLayout(play);
            play.setLayout(playLayout);
            playLayout.setHorizontalGroup(
                playLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                .addGap(0, 494, Short.MAX_VALUE)
            );
            playLayout.setVerticalGroup(
                playLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                .addGap(0, 494, Short.MAX_VALUE)
            );        change.setModel(new javax.swing.DefaultComboBoxModel(new String[] { "easy", "normall", "hard" }));
            /*change.addActionListener(new java.awt.event.ActionListener() {
                //public void actionPerformed(java.awt.event.ActionEvent evt) {
                //    changeActionPerformed(evt);
                //}
            });*/        start.setText("start");        javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
            getContentPane().setLayout(layout);
            layout.setHorizontalGroup(
                layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()
                    .addContainerGap()
                    .addComponent(play, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 21, Short.MAX_VALUE)
                    .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING, false)
                        .addComponent(change, 0, 0, Short.MAX_VALUE)
                        .addComponent(start, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
                    .addContainerGap())
            );
            layout.setVerticalGroup(
                layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                .addGroup(layout.createSequentialGroup()
                    .addContainerGap()
                    .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                        .addComponent(play, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                        .addGroup(layout.createSequentialGroup()
                            .addComponent(change, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                            .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                            .addComponent(start)))
                    .addContainerGap(28, Short.MAX_VALUE))
            );        java.awt.Dimension screenSize = java.awt.Toolkit.getDefaultToolkit().getScreenSize();
            setBounds((screenSize.width-612)/2, (screenSize.height-572)/2, 612, 572);
        }
        
        
        private static boolean pointIsConnect(int ax,int ay,int bx,int by){              
         if(ax==bx||by==ay){
         pointList[ax][ay].status=0;
         pointList[bx][by].status=0;
         if(lineIsConnect(ax, ay, bx, by)){
         linea[0]=ax;linea[1]=ay;
    lineb[0]=bx;lineb[1]=by;
         return true;
         }
         pointList[ax][ay].status=1;
         pointList[bx][by].status=1;}
        
         int[] field=getFiled(ax, ay, bx, by);
         System.out.println(field[0]+" "+field[1]+" "+field[2]+" "+field[3]+" \n");
        
         pointList[ax][ay].status=0;
         pointList[bx][by].status=0;
         if(field[0]>=0)
         for(int m=field[0];m<=field[1];m++)
         if(lineIsConnect(ax, m, bx, m)){    
         linea[0]=ax;linea[1]=m;
         lineb[0]=bx;lineb[1]=m;
         pointList[ax][ay].s=' ';
              pointList[bx][by].s=' ';
         return true;
         }
         if(field[2]>=0)
         for(int m=field[2];m<=field[3];m++)
         if(lineIsConnect(m,ay,m,by)){    
         linea[0]=m;linea[1]=ay;
         lineb[0]=m;lineb[1]=by;
         pointList[ax][ay].s=' ';
              pointList[bx][by].s=' ';
         return true;
         }
         pointList[ax][ay].status=1;
         pointList[bx][by].status=1;
         return false;
        }
      

  7.   


        public static int[] getFiled(int ax,int ay,int bx,int by){    
         int[] field=new int[4];
         int[] f1=lockFiled(ax, ay);
         int[] f2=lockFiled(bx, by);
         System.out.println(f1[0]+" "+f1[1]+" "+f1[2]+" "+f1[3]+" \n");
         System.out.println(f2[0]+" "+f2[1]+" "+f2[2]+" "+f2[3]+" \n");
            int[] m=getUni(f1[0], f1[1], f2[0], f2[1]);
            int[] k=getUni(f1[2], f1[3], f2[2], f2[3]);
        
            field[0]=m[0];field[1]=m[1];
            field[2]=k[0];field[3]=k[1];
         return field;
        }
        
        public static int[] getUni(int at,int ab,int bt,int bb){
         int[] t=new int[2];
         if(ab<bt){t[0]=-1;t[1]=-1;}
         else if(ab==bt)t[0]=t[1]=ab;
         else if(ab>bt&&ab<=bb){
            if(at<bt){t[0]=bt;t[1]=ab;}
            else if(at>=bt){t[0]=at;t[1]=ab;}
         }
         else if(ab>bb){
            if(at<=bt){t[0]=bt;t[1]=bb;}
            else if(at>bt&&at<bb){t[0]=at;t[1]=bb;}
            else if(at==bb){t[0]=t[1]=bb;}
            else if(at>bb){t[0]=t[1]=-1;}
         }
        
        
         return t;
        }
       
        public static int[] lockFiled(int x,int y){
         int[] t=new int[4];  
         for(int m=y+1;;m++){
         if(m>spit-1){t[1]=spit-1;break;}
         if(pointList[x][m].status==1){t[1]=m-1;break;}
         }
         for(int m=y-1;;m--){
         if(m<0){t[0]=0;break;}
         if(pointList[x][m].status==1){t[0]=m+1;break;}
         }
        
         for(int m=x+1;;m++){
         if(m>spit-1){t[3]=spit-1;break;}
         if(pointList[m][y].status==1){t[3]=m-1;break;}
         }
         for(int m=x-1;;m--){
         if(m<0){t[2]=0;break;}
         if(pointList[m][y].status==1){t[2]=m+1;break;}
         }
         return t;
        }
        
        public static void disStatus(){
         for(int m=0;m<spit;m++){
         for(int k=0;k<spit;k++)
         System.out.print(pointList[k][m].status+" ");
         System.out.println();
         }
         }
        
        /*public static int[] getlocate(int x,int y){
         int[] t=new int[2];
         t[0]=x*d;t[1]=y*d;
         return t;
        }*/    /*public static int[] getindex(int x,int y){
         int[] t=new int[2];
         t[0]=x/d;t[1]=y/d;
         return t;
        }*/
        
        public static boolean lineIsConnect(int ax,int ay,int bx,int by ){
         int maxx=ax<bx?bx:ax,minx=ax<bx?ax:bx;
         int maxy=ay<by?by:ay,miny=ay<by?ay:by;
         for(int m=minx;m<=maxx;m++)
         for(int k=miny;k<=maxy;k++)
         if(pointList[m][k].status==1)return false;
         return true;
        }
        
        
        public class Point{
         int status=0;
         char s=' ';
         public Point(){};
         public Point(int status,char s){
                   this.status=status;
                   this.s=s;
         }
         protected boolean equals(Point p){
         if(this.status==p.status&&this.s==p.s)return true;
         else return false;
         }
        }
       
        public class Play extends JPanel{
            private Point[][] pointList;
            private int x1=-1,x2=-1,y1=-1,y2=-1;
            private int xi1,xi2,yi1,yi2;
            private int count=-4;
            private boolean p=false;
            public Play(Point[][] pointList){
             this.pointList=pointList;
             addMouseListener(new Click());
            }
            
            public void setClear(){
                count=0;
                x1=-1;x2=-1;
            }
            
            
             public class Click implements MouseListener{
        
    public void mouseReleased(MouseEvent e) {
    }
    public void mousePressed(MouseEvent e) {
     count++;
     count=count%3;
     //System.out.println(count);
     if(count==1)
     {x1=(e.getX()/d)*d;y1=(e.getY()/d)*d;}  
     
     else if(count==2)
     {x2=(e.getX()/d)*d;y2=(e.getY()/d)*d;
     xi1=x1/d;xi2=x2/d;yi1=y1/d;yi2=y2/d;
      if((pointList[xi1][yi1].s)==(pointList[xi2][yi2].s)
      &&(pointList[xi1][yi1].status==1&&pointList[xi2][yi2].status==1)
      &&!(xi1==xi2&&yi1==yi2))
      {if(pointIsConnect(xi1, yi1, xi2, yi2)) {
      //disStatus();
      p=true;}
       
      }}
     
     else{x1=-1;x2=-1;y1=-1;y2=-1;}
         repaint();     


    }
    public void mouseExited(MouseEvent e) {

    }
    public void mouseEntered(MouseEvent e) {

    }
    public void mouseClicked(MouseEvent e) {}
    }
            
    protected void paintComponent(Graphics g) {
    super.paintComponent(g);
    if(buttonStart==0){g.drawString("press star", PX/2, PY/2);}
    else if(win()){
    p=false;count=0;x1=-1;x2=-1;
    g.drawString("you win", PX/2, PY/2);}
    else{
         for(int i=0;i<=PY;i+=d)
         g.drawLine(0, i, PX, i);
         for(int i=0;i<=PX;i+=d)
         g.drawLine(i, 0, i, PY);
         for(int m=0;m<spit;m++)
            for(int k=0;k<spit;k++)
            if(pointList[k][m].status==1)
            g.drawString(String.valueOf(pointList[k][m].s), k*d+10, m*d+20);
         paintSelect(g);
         if(xi1>=0&&p)paintPath(g);}
    }
    public void paintPath(Graphics g){
    g.setColor(Color.red);int t=d/2;
    int s1=xi1*d+t, s2=yi1*d+t, s3=xi2*d+t, s4=yi2*d+t;
    int r1=linea[0]*d+t,r2=linea[1]*d+t,r3=lineb[0]*d+t,r4=lineb[1]*d+t;
    g.drawLine(r1, r2, r3, r4);
    if(r1==s1||r2==s2){
    g.drawLine(r1, r2, s1, s2);
    g.drawLine(r3, r4, s3, s4);
    }
    else{
    g.drawLine(r1, r2, s3, s4);
    g.drawLine(r3, r4, s1, s2);
    }

    xi1=-1;
    p=false;
    }

    public boolean win(){
    for(int m=0;m<spit;m++)
    for(int k=0;k<spit;k++)
    if(pointList[k][m].status==1)return false;
    return true;
    }

    public  void paintSelect(Graphics g){
    g.setColor(Color.red);
    if(x1>=0)g.drawRect(x1, y1, d, d);
    if(x2>=0)g.drawRect(x2, y2, d, d);
    }
        }
        
        public static void main(String args[]) {
         new Link();
        
         /*
         pointList[0][1].status=1;
         pointList[1][0].status=1;
         pointList[2][1].status=1;
         pointList[3][1].status=1;
         pointList[3][2].status=1;
            pointList[3][3].status=1;
            pointList[3][6].status=1;
            pointList[5][5].status=1;
            pointList[7][8].status=1;
            pointList[9][9].status=1;
            pointList[9][8].status=1;
            pointList[8][9].status=1;
            pointList[8][8].status=1;
            pointList[8][7].status=1;
            
            pointList[3][4].status=1;
            pointList[3][5].status=1;
            pointList[3][7].status=1;
            pointList[3][8].status=1;
            pointList[3][7].status=1;
            
        
         pointList[0][1].s='T';
         pointList[1][0].s='P';
         pointList[2][1].s='H';
         pointList[3][1].s='T';
         pointList[3][2].s='I';
            pointList[3][3].s='F';
            pointList[3][6].s='P';
            pointList[5][5].s='I';
            pointList[7][8].s='O';
            pointList[9][9].s='O';
            pointList[9][8].s='F';
            pointList[8][9].s='E';
            pointList[8][8].s='E';
            pointList[8][7].s='R';
            
            pointList[3][4].s='R';
            pointList[3][5].s='G';
            
            pointList[3][8].s='G';
            pointList[3][7].s='H';*/
            
            //disStatus();
            //int[] t=getFiled(7, 8, 8, 7);
            //System.out.println(t[0]+" "+t[1]+" "+t[2]+" "+t[3]+" ");
            //System.out.println(pointIsConnect(3, 4, 8, 7));
            //System.out.println(linea[0]+" "+linea[1]+" "+lineb[0]+" "+lineb[1]+" ");
        }  
       
    }
      

  8.   

    17,18楼是修改了一些bug之后的改进版
      

  9.   

    哥們,這代碼COPY真費不少勁,