import javax.swing.*;
import java.awt.event.*;
import java.awt.*;public class GamePanel extends JPanel {
int X=0;
int Y=0;
private int x=0,y=0;
private int[][] Chess=new int[8][8];
int playflag=1;
int count=0;
public void paintComponent(Graphics g){//draw chess

super.paintComponent(g);
//画棋盘
g.drawRect(0,0,600,600);
g.setColor(Color.CYAN);
g.fillRect(0, 0, 600, 600);
g.setColor(Color.BLACK);
for(int i=10;i<=540;i+=60){
g.drawLine(i,10,i,490);
}
for(int i=10;i<=540;i+=60){
g.drawLine(10,i,490,i);
}
//画棋子
for(int i=0;i<8;i++){
for(int j=0;j<8;j++){
if(Chess[i][j]==1){
g.setColor(Color.BLACK);
g.drawOval(i*60+15,j*60+15,50,50);
g.fillOval(i*60+15,j*60+15,50,50);

}
if(Chess[i][j]==2){
g.setColor(Color.white);
g.drawOval(i*60+15,j*60+15,50,50);
g.fillOval(i*60+15,j*60+15,50,50);
}
}
}
}

class DrChListener implements MouseListener{
public void mouseClicked(MouseEvent e){}
public void mouseDragged(MouseEvent e){}
public void mouseMoved(MouseEvent e){}
public void mouseExited(MouseEvent e) {}
public void mousePressed(MouseEvent e){
x=e.getX();
y=e.getY();
X=x/60;
Y=y/60;
//先判断该位置有无棋子
if(playflag==1){
if(Chess[X][Y]==0){
 heicheck();
playflag=2;
}
}
if(playflag==2){
if(Chess[X][Y]==0){
baicheck();
playflag=1;
}
}
repaint();
}
public void mouseEntered(MouseEvent e){}
public void mouseReleased(MouseEvent e){}
}

public GamePanel(){
setPreferredSize(new Dimension(500,500));
addMouseListener(new DrChListener());
for(int i=0;i<=7;i++){
for(int j=0;j<=7;j++){
Chess[i][j]=0;
}
}
Chess[3][3]=1;
Chess[4][4]=1;
Chess[3][4]=2;
Chess[4][3]=2;

}

  //下黑棋
public void heicheck(){

  heicheckl(X,Y);
  if(count>0&&Chess[X-1][Y]==2){
  for(int i=0;i<=count;i++){
  Chess[X-i][Y]=1;
  }
  count=0;
  }
 
 
  heichecklu(X,Y);
  if(count>0&&Chess[X-1][Y-1]==2){
  for(int i=0;i<=count;i++){
  Chess[X-i][Y-i]=1;
  }
  count=0;
  }
 
 
  heichecku(X,Y);
  if(count>0&&Chess[X][Y-1]==2){
  for(int i=0;i<=count;i++){
  Chess[X][Y-i]=1;
  }
  count=0;
  }
 
 
  heicheckru(X,Y);
  if(count>0&&Chess[X+1][Y-1]==2){
  for(int i=0;i<=count;i++){
  Chess[X+i][Y-i]=1;
  }
  count=0;
  }
 
 
  heicheckr(X,Y);
  if(count>0&&Chess[X+1][Y]==2){
  for(int i=0;i<=count;i++){
  Chess[X+i][Y]=1;
  }
  count=0;
  }
 
  heicheckrd(X,Y);
 
  if(count>0&&Chess[X+1][Y+1]==2){
  for(int i=0;i<=count;i++){
  Chess[X+i][Y+i]=1;
  }
  count=0;
  }
 
 
  heicheckd(X,Y);
  if(count>0&&Chess[X][Y+1]==2){
  for(int i=0;i<=count;i++){
  Chess[X][Y+i]=1;
  }
  count=0;
  }
 
 
  heicheckld(X,Y);
  if(count>0&&Chess[X-1][Y+1]==2){
  for(int i=0;i<=count;i++){
  Chess[X-i][Y+i]=1;
  }
  count=0;
  }
 
  }


public void heicheckl(int x,int y){
if(x==-1){
 count=-9;
 return;
 }
else if(Chess[x][y]==1){
 count=0;
return;}
 heicheckl(x-1,y);
     count++;
}
public void heichecklu(int x,int y){
if(y==-1||x==-1){
count=-9;
return;}
else if(Chess[x][y]==1){
count=0;
return;}
heichecklu(x-1,y-1); 
count++; } public void heichecku(int x,int y){
if(y==-1){
count=-9;
return;}
if(Chess[x][y]==1){
count=0;
return;}
 heichecku(x,y-1);
 count++;
}

public void heicheckru(int x,int y){
if(x==8||y==-1){
count=-9;
return;}
else if(Chess[x][y]==1){
count=0;
return;}
 heicheckru(x+1,y-1);
 count++;
}
public void heicheckr(int x,int y){
if(x==8){
count=-9;
return;}
else if(Chess[x][y]==1){
count=0;
return;}
 heicheckr(x+1,y);
 count++;
}
public void heicheckrd(int x,int y){
if(x==8||y==8){
count=-9;
return;}
else if(Chess[x][y]==1){
count=0;
return;}
 heicheckrd(x+1,y+1);
 count++;
}
public void heicheckd(int x,int y){
  if(y==8){
  count=-9;
  return;}
  else if(Chess[x][y]==1){
count=0;
return;}
 heicheckd(x,y+1);
 count++;
}
public void heicheckld(int x,int y){
if(x==-1||y==8){
count=-9;
return;}
else if(Chess[x][y]==1){
count=0;
return;}
 heicheckld(x-1,y+1);
 count++;
}

//下白棋
public void baicheck (){

  baicheckl(X,Y);
  if(count>0&&Chess[X-1][Y]==1){
  for(int i=0;i<=count;i++){
  Chess[X-i][Y]=2;
  }
  count=0;
  }
  count=0;
 
  baichecklu(X,Y);
  if(count>0&&Chess[X-1][Y-1]==1){
  for(int i=0;i<=count;i++){
  Chess[X-i][Y-i]=2;
  }
  count=0;
  }
  count=0;
 
  baichecku(X,Y);
  if(count>0&&Chess[X][Y-1]==1){
  for(int i=0;i<=count;i++){
  Chess[X][Y-i]=2;
  }
  count=0;
  }
  count=0;
 
  baicheckru(X,Y);
  if(count>0&&Chess[X+1][Y-1]==1){
  for(int i=0;i<=count;i++){
  Chess[X+i][Y-i]=2;
  }
  count=0;
  }
  count=0;
 
  baicheckr(X,Y);
  if(count>0&&Chess[X+1][Y]==1){
  for(int i=0;i<=count;i++){
  Chess[X+i][Y]=2;
  }
  count=0;
  }
  count=0;
 
  baicheckrd(X,Y);
  if(count>0&&Chess[X+1][Y+1]==1){
  for(int i=0;i<=count;i++){
  Chess[X+i][Y+i]=2;
  }
  count=0;
  }
  count=0;
 
  baicheckd(X,Y);
  if(count>0&&Chess[X][Y+1]==1){
  for(int i=0;i<=count;i++){
  Chess[X][Y+i]=2;
  }
  count=0;
  }
  count=0;
 
  baicheckld(X,Y);
  if(count>0&&Chess[X-1][Y+1]==1){
  for(int i=0;i<=count;i++){
  Chess[X-i][Y+i]=2;
  }
  count=0;
  }
  count=0;
  }


public void baicheckl(int x,int y){
if(x==-1){
 count=-9;
 return;
 }
else if(Chess[x][y]==2){
 count=0;
return;}
 baicheckl(x-1,y);
     count++;
}
public void baichecklu(int x,int y){
if(y==-1||x==-1){
count=-9;
return;}
else if(Chess[x][y]==2){
count=0;
return;}
baichecklu(x-1,y-1); 
count++; }
public void baichecku(int x,int y){
if(y==-1){
count=-9;
return;}
if(Chess[x][y]==2){
count=0;
return;}
 baichecku(x,y-1);
 count++;
}
public void baicheckru(int x,int y){
if(x==8||y==-1){
count=-9;
return;}
else if(Chess[x][y]==2){
count=0;
return;}
baicheckru(x+1,y-1);
 count++;
}
public void baicheckr(int x,int y){
if(x==8){
count=-9;
return;}
else if(Chess[x][y]==2){
count=0;
return;}
 baicheckr(x+1,y);
 count++;
}
public void baicheckrd(int x,int y){
if(x==8||y==8){
count=-9;
return;}
else if(Chess[x][y]==2){
count=0;
return;}
 baicheckrd(x+1,y+1);
 count++;
}
public void baicheckd(int x,int y){
  if(y==8){
  count=-9;
  return;}
  else if(Chess[x][y]==2){
count=0;
return;}
 baicheckd(x,y+1);
 count++;
}
public void baicheckld(int x,int y){
if(x==-1||y==8){
count=-9;
return;}
else if(Chess[x][y]==2){
count=0;
return;}
 baicheckld(x-1,y+1);
 count++;
}

}算法