当前位置:编程学习 > JAVA >>

自己做的连连看 欢迎大家来测试

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);
    }
--------------------编程问答--------------------
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;
    }*/
--------------------编程问答--------------------
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]+" ");
    }

  
   
}
--------------------编程问答-------------------- --------------------编程问答-------------------- 由于太长,不能一次发,大家复制编译一下试试吧 --------------------编程问答-------------------- --------------------编程问答-------------------- --------------------编程问答-------------------- OK,
刚copy完  试试~~~~~~~~~~ --------------------编程问答-------------------- 不错,不错,楼主,很NB --------------------编程问答-------------------- 大家有测试到bug的吗? --------------------编程问答-------------------- 不错, --------------------编程问答-------------------- --------------------编程问答-------------------- 真不错 --------------------编程问答-------------------- 不错的说 --------------------编程问答-------------------- wo hai  bu hui wan .. --------------------编程问答-------------------- 刚运行了一下,很不错了。我还写不出这样的程序。呵呵。还在努力学习中。 感觉经常点下去会没反应。看下能改进不。 --------------------编程问答--------------------
引用 15 楼 yzw19932010 的回复:
刚运行了一下,很不错了。我还写不出这样的程序。呵呵。还在努力学习中。 感觉经常点下去会没反应。看下能改进不。


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

    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]+" ");
    }

  
   
}
--------------------编程问答-------------------- --------------------编程问答-------------------- 17,18楼是修改了一些bug之后的改进版 --------------------编程问答-------------------- --------------------编程问答-------------------- 运行了一下,确实不错,必须顶啊 --------------------编程问答-------------------- 确定所以的都能消完吗??? --------------------编程问答-------------------- 运行了一下,很不错,现在才知道自己的差距啊 --------------------编程问答-------------------- 牛人~ --------------------编程问答-------------------- 贴下图看看 --------------------编程问答-------------------- 截个图看看啊 --------------------编程问答-------------------- --------------------编程问答-------------------- 没有注释的代码,结构很差! --------------------编程问答-------------------- 哥們,這代碼COPY真費不少勁, --------------------编程问答-------------------- 哥们,你这找的路线也太"舍近求远"了吧,需要优化呀!
代码也太多了吧 ?不过还是支持你

给个比你写的好一点给你看,

三百行搞定 --------------------编程问答--------------------              缺注释, 结构还需优化, --------------------编程问答--------------------
补充:Java ,  Java SE
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,