做了个差不多的,因为刚开始学的java做的还不完整,望高手指点下,判断输赢的我还没写出来,就是扫描谁先有了五个连一起import java.awt.*;
import java.awt.event.*;
public class MyQP extends Frame
implements MouseListener 
{
 int d = 25;
 int jj = 30;
 int hl = 15;
 int bk =hl*jj; 
 int y = 5;
 int x = 5; 
 int num = 16;
 
 int qz[][] = new int[num][num];//0表示无子,1表示白子,2表示黑子
 boolean b = true;
 MenuBar bt = new MenuBar();
 Menu t1 = new Menu("游戏");
 Menu t2 = new Menu("帮助");
 MenuItem t3 = new MenuItem("开局");
 MenuItem t4 = new MenuItem("悔棋");
 MenuItem t5 = new MenuItem("关闭");
 MenuItem t6 = new MenuItem("关于五子棋");
 public MyQP()
 {
  
  this.setTitle("五子棋");
  this.setMenuBar(bt);
  bt.add(t1);
  bt.add(t2);
  t1.add(t3);
  t1.add(t4);
  t1.add(t5);
  t2.add(t6);
  this.setBounds(100,100,bk+40+20,bk+40+60);
  this.setResizable(false);
  this.addMouseListener(this);
  this.addWindowListener(new MyApd());
  this.setBackground(new Color(128,128,64));
  this.setVisible(true);
 }
 public void mouseReleased(MouseEvent e){}
 public void mouseClicked(MouseEvent e)
 {
  
 }
 public void mouseEntered(MouseEvent e)
 {
  
 }
 public void mouseExited(MouseEvent e)
 {
  
 }
 public void mousePressed(MouseEvent e)
 {
  System.out.println(e.getX()+":"+e.getY());//打印X,Y的坐标
  x=(e.getX()-30+jj/2-1)/jj;//减一归前面,加一归后面
  y=(e.getY()-60+jj/2-1)/jj;
  if(x<0||x>=16||y<0||y>=16)//是否下在棋盘外
  {
   return;//不让在棋盘外落子
  }
  System.out.println(x+":"+y);
  
  b=!b;
  if(qz[x][y]!=0)
  {
   return;
  }
  
  if(b)
  {
   qz[x][y] = 1;
  
  }else
  {
   qz[x][y] = 2;
  
  }
  
  this.repaint();
 }
 public void paint(Graphics g)
 {
  
      g.setColor(new Color(128,128,64));
 
   g.fillRect(10,40,bk+40,bk+40);
   g.setColor(Color.BLACK);
  for(int i =0;i<=hl;i++)
 
  {
   g.drawLine(30,60+i*jj,30+hl*jj,60+i*jj);
      g.drawLine(30+i*jj,60,30+i*jj,60+hl*jj);
  }
 
    
  Graphics2D g2d=(Graphics2D)g;
  g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING,
                        RenderingHints.VALUE_ANTIALIAS_ON);
         
 
 for(int i=0;i<num;i++)//扫看棋盘上
 {
   for(int j=0;j<num;j++)
  { 
   switch(qz[i][j])//当数组的值为1时画白子,为2时黑子
      {
    case 1:g.setColor(Color.white);break;
    case 2:g.setColor(Color.black);break;
      } 
      if(qz[i][j]!=0)
       {
         g.fillOval(30-d/2+i*jj,60-d/2+j*jj,d,d);
       }
    
  }
 }
  
 } public static void main(String args[])
 {
  new MyQP();
 }
}
class MyApd extends WindowAdapter
{
 public void windowClosing(WindowEvent e)
 {
  System.exit(0);
 }
}

解决方案 »

  1.   

    MLDN有一个五子棋的视频教程,里面有,建议看下
      

  2.   

    LZ参考下,可能还存在边界问题/**
     * 判赢操作
     * @param x 当前所下棋子的x坐标
     * @param y 当前所下棋子的y坐标
     * @return
     */
    private boolean isWon(int x,int y){
    return isWon(qz[x][y],x,y);
    }

    /**
     * 
     * @param qizi
     * @param x
     * @param y
     * @return
     */
    private boolean isWon(int qizi,int x,int y){
    int qzCount = 5;
    int x_start = x - qzCount + 1 > 0 ? x - qzCount + 1 : 0 ;
    int x_end = x + qzCount >= num ? num - qzCount : x + qzCount - 1;
    //横向五子
    for(int i = x_start ; i < num - qzCount && i <= x_end ; i ++){
    if( (qz[i][y] == qizi) && (qz[i+1][y] == qizi) && (qz[i+2][y] == qizi) && (qz[i+3][y] == qizi) && (qz[i+4][y] == qizi) )
    return true ;
    }
    int y_start = y - qzCount + 1 > 0 ? y - qzCount + 1 : 0 ;
    int y_end = y + qzCount >= num ? num - 5 : y + qzCount - 1;
    //纵向五子
    for(int j = y_start ; j < num - qzCount && j <= y_end ; j ++){
    if( (qz[x][j] == qizi) && (qz[x][j+1] == qizi) && (qz[x][j+2] == qizi) && (qz[x][j+3] == qizi) && (qz[x][j+4] == qizi))
    return true;
    }
    // 斜向右下五个棋子
    for(int i = x_start ; i<= num - qzCount && i <= x_end; i ++){
    for(int j = y_start; j <=num - qzCount && j <= y_end; j++){
    if( (qz[i][j] == qizi) && (qz[i+1][j+1] == qizi) && (qz[i+2][j+2] == qizi) && (qz[i+3][j+3] == qizi) && (qz[i+4][j+4] == qizi) )
    return true;
    }
    }
    x_start = x + qzCount >= num ? num - 1 : x + qzCount - 1;
    x_end = x - qzCount + 1 > 0 ? x : qzCount - 1 ; 
    // 斜向左下五个棋子
    for(int i = x_start; i >= qzCount - 1 && i >= x_end ; i --){
    System.out.print(" x is :"+ i);
    for(int j = y_start ; j<= num - qzCount && j <= y_end ; j++){
    System.out.print(" y is :"+j);
    if( (qz[i][j] == qizi) && (qz[i-1][j+1] == qizi) && (qz[i-2][j+2] == qizi) && (qz[i-3][j+3] == qizi) && (qz[i-4][j+4] == qizi) )
    return true;
    }
    System.out.println();
    }
    return false;
    }