五子棋算法研究

/*仅供个人学习交流使用
  严禁任何商业用途,违者必究
*/
/** 五子棋程序
* @author ShuFeng An
* @author BeijingUiniversitiyOfChemicalTechnology
* @version 1.1
*/
import java.awt.image.BufferedImage;
import javax.swing.JFrame;
import java.awt.Image;
import java.io.IOException;
import javax.swing.JPanel;
import javax.imageio.ImageIO;
import java.awt.Graphics;
import java.awt.Dimension;
import java.io.File ;
import java.awt.event.MouseEvent;
import java.awt.event.MouseMotionAdapter;
import java.awt.event.MouseAdapter;
import javax.swing.JOptionPane;
import java.awt.HeadlessException;
 
public class WuZiQi
{
    //棋盘位图
    BufferedImage table;
    //黑色棋子位图
    BufferedImage black;
    //白色棋子位图
    BufferedImage white;
    //鼠标移动时候的选择框
    BufferedImage selected;
    //棋子类型,是五子棋还是六字棋......
    private final int TYPE = 5;
    //标志符号,一个人不能连走
    private static  long n = -1;
    //定义棋盘大小
    private static int BOARD_SIZE = 15;
    //定义棋盘宽高多少个像素
    private final int TABLE_WIDTH = 535;
    private final int TABLE_HETGHT = 536;
    //定义棋盘坐标的像素值和棋盘数组之间的比率
    private final int RATE = TABLE_WIDTH/BOARD_SIZE;
    //定义棋盘坐标的像素值和棋盘数组之间的偏移距
    private final int X_OFFSET = 5;
    private final int Y_OFFSET = 6;
    //结束标志d=TYPE结束
    private int d = 0;
    //定义一个二维数组来充当棋盘
    private String[][] board = new String[BOARD_SIZE][BOARD_SIZE];
    //五子棋的游戏窗口
    JFrame f = new JFrame("树峰五子棋");
    //五子棋游戏棋盘对应的Canvas组件
    ChessBoard chessBoard = new ChessBoard();
    //当前选中点的坐标
    private  int selectedX = -1;
    private  int selectedY = -1;
  
    public void init() throws Exception
    {
        table = ImageIO.read(new File("image/board.jpg"));
        black = ImageIO.read(new File("image/black.gif"));
        white = ImageIO.read(new File("image/white.gif"));
        selected = ImageIO.read(new File("image/selected.gif"));
       
        //把每个元素赋为"╋",用于在控制台画出棋盘
        for (int i = 0; i < BOARD_SIZE; i++)
        {
            for (int j = 0; j < BOARD_SIZE; j++)
            {
                board[i][j] = "╋";
            }
        }
       
        chessBoard.setPreferredSize(new Dimension(TABLE_WIDTH,
         TABLE_HETGHT));
        
        chessBoard.addMouseListener(new MouseAdapter()
        {
            public void mouseClicked(MouseEvent e)
            {
                //将用户鼠标事件的坐标转换成棋子数组的坐标
                int xPox = (int) ((e.getX() - X_OFFSET) / RATE);
                int yPos = (int) ((e.getY() - Y_OFFSET) / RATE);
                //如果鼠标单击点儿无子绘一个子且轮流绘黑白子
                if(n % 2 == 0 && board[xPox][yPos] == "╋")
                {
                    board[xPox][yPos] = "●";
                    n++;
                  
                }
                else if(board[xPox][yPos] == "╋")
                {
                     board[xPox][yPos] = "○";
                     n++;                  
                }
                chessBoard.repaint();
                //判断游戏是否结束
                overOrNot(xPox, yPos);
          }
          //当鼠标退出棋盘区后复位选中点坐标
          public void mouseExited(MouseEvent e)
          {
              selectedX =-1;
              selectedY = -1;
              chessBoard.repaint();
          }
        });
       
        //当用户单击退出按钮时退出
        f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
       
        //当鼠标移动时改变选中点坐标
        chessBoard.addMouseMotionListener(new MouseMotionAdapter()
        {
            public void mouseMoved(MouseEvent e)
            {
                selectedX = (int) ((e.getX() - X_OFFSET) / RATE);
                selectedY = (int)(e.getY() - Y_OFFSET) / RATE;
                chessBoard.repaint();
            }
        });
       
        f.add(chessBoard);
        //设置窗口图片为bfi
        Image bfi = null;
        try
        {
            bfi = ImageIO.read(new File("D://homework//image//myself.jpg"));
        }
        catch(IOException e)
        {
            e.printStackTrace();
        }       
        f.setIconImage(bfi);
        //设置窗口大小不可调
        f.setResizable(false);
        f.pack();
        f.setVisible(true);
       
    }
   
    public static void main(String[] args) throws Exception
    {
        System.out.println("欢迎使用树峰五子棋程序!");
        WuZiQi wzq = new WuZiQi();
        wzq.init();
    }
   
    public  void overOrNot(int a, int b)
    {
        int i = 0;
        //从左往右数有四个黑子
      if(d <= TYPE)                                  
     {
      for(i = a, d = 0;i <= a + 4; i++)                                                                       
      {
       if(board[i][b] == "●" && i < BOARD_SIZE)
        d++;
        else
        {
         d=0;
         break;
        }
        if(d == TYPE)
        {
            happyEndBlack();
            System.out.println("黑方胜出!树峰欢迎你下次光临!");
            System.exit(0);
        }
      }
     }
     //从右往左数有5个黑子
     if(d <= TYPE)
     {
      for(i = a, d = 0;i >= a-4; i--)                   
      {
       if(board[i][b] == "●" && i >= 0)
        d++;
       else
       {
        d = 0;
        break;
       }
       if(d == TYPE)
       {
           happyEndBlack();
           System.out.println("黑方胜出!树峰欢迎您的下次光临!");
           System.exit(0);
       }
      }
     }
     //从上往下数有5个黑子
     if(d <= TYPE)                                                                                                           
     {
      for(i = b, d = 0;i <= b + 4; i++)
      {
       if(board[a][i] == "●" && i < BOARD_SIZE)
        d++;
       else
       {  
           d = 0;
        break;
       }
       if(d == TYPE)
        {
            happyEndBlack();
            System.out.println("黑方胜出!树峰欢迎你下次光临!");
            System.exit(0);
        }
      }
     }
     //从下往上数有5个黑子
     if(d <= TYPE)
     {
      for(i = b, d = 0; i >= b-4; i--)                          
      {
       if(board[a][i] == "●" && i >= 0)
        d++;
       else
       {
        d = 0;
        break;
       }
       if(d == TYPE)
        {
            happyEndBlack();
            System.out.println("黑方胜出!树峰欢迎你下次光临!");
            System.exit(0);
        }
         }
     }
     //斜着往左下方数5个
     if(d <= TYPE)                                                                           
     {
      for(i = 0, d = 0; i <= 4; i++)
      {
       if(board[a-i][b+i] == "●" && (a-i) >=0
       && (b+i) < BOARD_SIZE)
        d++;
       else
       {
        d = 0;
        break;
       }
       if(d == TYPE)
        {
            happyEndBlack();
            System.out.println("黑方胜出!树峰欢迎你下次光临!");
            System.exit(0);
        }
         
      }
     }
     //斜着右上方有五个黑子
     if(d <= TYPE)
     {
      for(i = 0, d = 0; i <= 4; i++)
      {
       if(board[a+i][b-i] == "●" && (a+i) < BOARD_SIZE
        && (b-i) >= 0)
        d++;
       else
       {
        d = 0;
        break;
       }
       if(d == TYPE)
        {
            happyEndBlack();
            System.out.println("黑方胜出!树峰欢迎你下次光临!");
            System.exit(0);
        }
      }
     }
     //斜着右下方有5个子
     if(d <= TYPE)
     {
      for(i = 0, d = 0; i <= 4;i++)
      {
       if(board[a+i][b+i] == "●" && (a+i) < BOARD_SIZE
       && (b+i) < BOARD_SIZE)
        d++;
       else
       {
        d = 0;
        break;
       }
       if(d == TYPE)
        {
            happyEndBlack();
            System.out.println("黑方胜出!树峰欢迎你下次光临!");
            System.exit(0);
        }
      }
     }
     //斜着左上方有5个子
     if(d <= TYPE)
     {
      for(i = 0, d = 0; i <= 4; i++)
      {
       if(board[a-i][b-i] == "●" && (a-i) >= 0 && (b-i) >= 0)
        d++;
       else
       {
        d = 0;
        break;
       }
       if(d == TYPE)
        {
            happyEndBlack();
            System.out.println("黑方胜出!树峰欢迎你下次光临!");
            System.exit(0);
        }
      }
     }
     //此子正下方有一个正上方有三个一条纵线
     if(d<=TYPE)
     {
      for(i = 0,d = 1;i <= 3;i++)
      {
       if(board[a][b-i] == "●" && board[a][b+1] == "●" && (b-i) >= 0 && (b+1) < BOARD_SIZE)
        d++;
       else
       {
        d = 0;
        break;
       }
       if(d == TYPE)
        {
            happyEndBlack();
            System.out.println("黑方胜出!树峰欢迎你下次光临!");
            System.exit(0);
        }
      }
     }
     //此子正上方有一个正下方有三个黑子
     if(d <= TYPE)
     {
      for(i = 0, d = 1; i <= 3; i++)
      {
       if(board[a][b+i] == "●" && board[a][b-1] == "●"
       && (b+i) < BOARD_SIZE && (b-1) >= 0)
        d++;
       else
       {
        d = 0;
        break;
       }
       if(d == TYPE)
        {
            happyEndBlack();
            System.out.println("黑方胜出!树峰欢迎你下次光临!");
            System.exit(0);
        }
      }
     }
     //此子在正中间正上方有两个正下方有两个子
     if(d <= TYPE)
     {
      for(i = 0, d = 2; i <= 2; i++)
      {
       if(board[a][b-i] == "●" && board[a][b+i] == "●"
       &&( b-i) >= 0 &&( b+i) < BOARD_SIZE)
        d++;
       else
       {
        d = 0;
        break;
       }
       if(d == TYPE)
        {
            happyEndBlack();
            System.out.println("黑方胜出!树峰欢迎你下次光临!");
            System.exit(0);
        }
      }
     }
     //斜右向下有一个子斜左向上有三个
     if(d <= TYPE)
     {
      for(i = 0, d = 1; i <= 3; i++)
      {
       if(board[a-i][b-i] == "●" && board[a+1][b+1] == "●"
       && (a-i) >= 0 && (b-i) >= 0 && (a+1) < BOARD_SIZE
       && (b+1) < BOARD_SIZE)
        d++;
       else
       {
        d = 0;
        break;
       }
       if(d == TYPE)
        {
            happyEndBlack();
            System.out.println("黑方胜出!树峰欢迎你下次光临!");
            System.exit(0);
        }
      }
     }
     //此子斜左向上有两个子右向下有两个子
     if(d <= TYPE)
     {
      for(i = 0, d = 2; i <= 2; i++)
      {
       if(board[a-i][b-i] == "●" && board[a+i][b+i] == "●"
       &&(a-i) >= 0 && (b-i) >= 0 && (a+i) < BOARD_SIZE
       && (b+i) < BOARD_SIZE)
        d++;
       else
       {
        d = 0;
        break;
       }
       if(d == TYPE)
        {
            happyEndBlack();
            System.out.println("黑方胜出!树峰欢迎你下次光临!");
            System.exit(0);
        }
      }
     }
     //此子左斜向上有一子右向下有三个子
     if(d <= TYPE)
     {
      for(i = 0, d = 1; i <= 3; i++)
      {
       if(board[a+i][b+i] == "●" && board[a-1][b-1] == "●"
       && (a-1) >= 0 && (b-1) >= 0 && (a+i) < BOARD_SIZE
       && (b+i) < BOARD_SIZE)
        d++;
       else
       {
        d=0;
        break;
       }
       if(d == TYPE)
        {
            happyEndBlack();
            System.out.println("黑方胜出!树峰欢迎你下次光临!");
            System.exit(0);
        }
      }
     }
     //此子左向下有两个子右向上有两个子
     if(d <= TYPE)
     {
      for(i = 0, d = 2; i <= 2; i++)
      {
       if(board[a-i][b+i] == "●" && board[a+i][b-i] == "●"
       && (a-i) >= 0 && (b-i) >= 0 && ( b+i) < BOARD_SIZE
       && (a+i) < BOARD_SIZE)
        d++;
       else
       {
        d = 0;
        break;
       }
       if(d == TYPE)
        {
            happyEndBlack();
            System.out.println("黑方胜出!树峰欢迎你下次光临!");
            System.exit(0);
        }
      }
     }
     //此子右向上有一个子左向下有三个子
     if(d <= TYPE)
     {
      for(i = 0,d = 1; i <= 3;i++)
      {
       if(board[a-i][b+i] == "●" && board[a+1][b-1] == "●"
       && (a-i) >= 0 && (b-1) >= 0 && (b+i) < BOARD_SIZE
       && (a+1) < BOARD_SIZE)
        d++;
       else
       {
        d = 0;
        break;
       }
       if(d == TYPE)
        {
            happyEndBlack();
            System.out.println("黑方胜出!树峰欢迎你下次光临!");
            System.exit(0);
        }
      }
     }
     //斜右向下一个子斜左向上三个子
     if(d <= TYPE)
     {
      for(i = 0,d = 1; i <= 3; i++)
      {
       if(board[a+i][b-i] == "●" && board[a-1][b+1] == "●"
       && (a+i) < BOARD_SIZE && (b-i) >= 0 && (a-1)>=0
       && (b+1) < BOARD_SIZE)
        d++;
       else
       {
        d = 0;
        break;
       }
       if(d == TYPE)
        {
            happyEndBlack();
            System.out.println("黑方胜出!树峰欢迎你下次光临!");
            System.exit(0);
        }
      }
     }
     //与此子一条横线右边一个左边三个子
     if(d <= TYPE)
     {
      for(i = 0, d = 1; i <= 3; i++)
      {
       if(board[a-i][b] == "●" && board[a+1][b] == "●"
       && (a-i) >= 0 && (a+1) < BOARD_SIZE)
        d++;
       else
       {
        d = 0;
        break;
       }
       if(d == TYPE)
        {
            happyEndBlack();
            System.out.println("黑方胜出!树峰欢迎你下次光临!");
            System.exit(0);
        }
       
      }
     }
     //与此子一条横线左边两个右边两个
     if(d <= TYPE)
     {
      for(i = 0, d = 2; i <= 2; i++)
      {
       if(board[a-i][b] == "●" && board[a+i][b] == "●"
       && (a-i) >= 0 && (a+i)<BOARD_SIZE)
        d++;
       else
       {
        d = 0;
        break;
       }
       if(d == TYPE)
        {
            happyEndBlack();
            System.out.println("黑方胜出!树峰欢迎你下次光临!");
            System.exit(0);
        }
      }
     }
     //与此子一条横线左边一个右边三个
     if(d <= TYPE)
     {
      for(i = 0, d = 1; i <= 3; i++)
      {
       if(board[a+i][b] == "●" && board[a-1][b] == "●"
       && (a+i) < BOARD_SIZE && (a-1) >= 0)
        d++;
       else
       {
        d = 0;
        break;
       }
       if(d == TYPE)
        {
            happyEndBlack();
            System.out.println("黑方胜出!树峰欢迎你下次光临!");
            System.exit(0);
        }
      }
     }
     //与此子一条横线左边三个右边一个白子
     if(d <= TYPE)
     {
      for(i = 0, d = 1; i <= 3; i++)
      {
       if(board[a-i][b] == "○" && board[a+1][b] == "○"
       &&(a-i) >= 0 &&(a+1) < BOARD_SIZE)
        d++;
       else
       {
        d = 0;
        break;
       }
       if(d == TYPE)
        {
            happyEndWhite();
            System.out.println("白方胜出!树峰欢迎你下次光临!");
            System.exit(0);
        }
       
      }
     }
     //与此子一条纵线下边一个上边三个白子
     if(d <= TYPE)
     {
      for(i = 0, d = 1; i <= 3; i++)
      {
       if(board[a][b-i] == "○" && board[a][b+1 ] == "○"
       && (b-i) >= 0 && (b+1) < BOARD_SIZE)
        d++;
       else
       {
        d = 0;
        break;
       }
       if(d == TYPE)
        {
            happyEndWhite();
            System.out.println("白方胜出!树峰欢迎你下次光临!");
            System.exit(0);
        }
      }
     }
     //与此子一条纵线左边一个右边三个白子
     if(d <= TYPE)
     {
      for(i = 0, d = 1; i <= 3; i++)
      {
       if(board[a][b+i] == "○" && board[a][b-1] == "○"
       && (b+i) < BOARD_SIZE && (b-1) >= 0)
        d++;
       else
       {
        d = 0;
        break;
       }
       if(d == TYPE)
        {
            happyEndWhite();
            System.out.println("白方胜出!树峰欢迎你下次光临!");
            System.exit(0);
        }
      }
     }
     //与此子一条纵线左边两个右边两个白子
     if(d <= TYPE)
     {
      for(i = 0, d = 2; i <= 2; i++)
      {
       if(board[a][b-i] == "○" && board[a][b+i] == "○"
       && (b-i) >= 0 && (b+i) < BOARD_SIZE)
        d++;
       else
       {
        d = 0;
        break;
       }
       if(d == TYPE)
        {
            happyEndWhite();
            System.out.println("白方胜出!树峰欢迎你下次光临!");
            System.exit(0);
        }
      }
     }
     //此子斜右向下一个左向上三个白子
     if(d <= TYPE)
     {
      for(i = 0, d = 1; i <= 3; i++)
      {
       if(board[a-i][b-i] == "○" && board[a+1][b+1] == "○"
       && (a-i) >=0 && (b-i) >=0 && (a+1) < BOARD_SIZE
       && (b+1) < BOARD_SIZE)
        d++;
       else
       {
        d = 0;
        break;
       }
       if(d == TYPE)
        {
            happyEndWhite();
            System.out.println("白方胜出!树峰欢迎你下次光临!");
            System.exit(0);
        }
      }
     }
     //此子左向上两个右向下两个白子
     if(d <= TYPE)
     {
      for(i = 0, d = 2; i <= 2; i++)
      {
       if(board[a-i][b-i] == "○" && board[a+i][b+i] == "○"
       && (a-i) >= 0 &&(b-i) >= 0 && (a+i) < BOARD_SIZE
       && (b+i) < BOARD_SIZE)
        d++;
       else
       {
        d = 0;
        break;
       }
       if(d == TYPE)
        {
            happyEndWhite();
            System.out.println("白方胜出!树峰欢迎你下次光临!");
            System.exit(0);
        }
      }
     }
     //此子左向上一个右向下三个白子
     if(d<=TYPE)
     {
      for(i = 0, d = 1; i <= 3; i++)
      {
       if(board[a+i][b+i] == "○" && board[a-1][b-1] == "○"
       && (a+i) < BOARD_SIZE && (b+i) < BOARD_SIZE
       && (a-1) >= 0 && (b-1) >= 0)
        d++;
       else
       {
        d = 0;
        break;
       }
       if(d == TYPE)
        {
            happyEndWhite();
            System.out.println("白方胜出!树峰欢迎你下次光临!");
            System.exit(0);
        }
      }
     }
     //此子左向上两个右向下两个
     if(d <= TYPE)
     {
      for(i = 0, d = 2; i <= 2; i++)
      {
       if(board[a-i][b+i] == "○" && board[a+i][b-i] == "○"
       && (a-i) >= 0 && (b-i) >= 0 && (a+i) < BOARD_SIZE
       && (b+i) < BOARD_SIZE)
        d++;
       else
       {
        d = 0;
        break;
       }
       if(d == TYPE)
        {
            happyEndWhite();
            System.out.println("白方胜出!树峰欢迎你下次光临!");
            System.exit(0);
        }
      }
     }
     //此子右向上一个左向下三个
     if(d <= TYPE)
     {
      for(i = 0, d = 1; i <= 3; i++)
      {
       if(board[a-i][b+i] == "○" && board[a+1][b-1] == "○"
       &&(a-i) >= 0 && (b+i) < BOARD_SIZE && (a+1) < BOARD_SIZE
       &&(b-1) >= 0)
        d++;
       else
       {
        d = 0;
        break;
       }
       if(d == TYPE)
        {
            happyEndWhite();
            System.out.println("白方胜出!树峰欢迎你下次光临!");
            System.exit(0);
        }
      }
     }
     //此子左向上一个右向上三个白子
     if(d <= TYPE)
     {
      for(i = 0, d = 1; i <= 3; i++)
      {
       if(board[a+i][b-i] == "○" && board[a-1][b-1] == "○"
       && (a+i) < BOARD_SIZE && (b-i) >= 0 && (a-1) >= 0 && (b-1) >= 0)
        d++;
       else
       {
        d = 0;
        break;
       }
       if(d == TYPE)
        {
            happyEndWhite();
            System.out.println("白方胜出!树峰欢迎你下次光临!");
            System.exit(0);
        }
      }
     }
     //与此子一条横线左边两个右边两个
     if(d <= TYPE)
     {
      for(i = 0, d = 2; i <= 2; i++)
      {
       if(board[a-i][b] == "○" && board[a+i][b] == "○"
       && (a-i) >= 0 && (a+i) < BOARD_SIZE)
        d++;
       else
       {
        d = 0;
        break;
       }
       if(d == TYPE)
        {
            happyEndWhite();
            System.out.println("白方胜出!树峰欢迎你下次光临!");
            System.exit(0);
        }
      }
     }
     //与此子一条横线左边一个右边三个
     if(d <= TYPE)
     {
      for(i = 0, d = 1; i <= 3 ; i++)
      {
       if(board[a+i][b] == "○" && board[a-1][b] == "○"
       && (a + i) < BOARD_SIZE)
        d++;
       else
       {
        d = 0;
        break;
       }
       if(d == TYPE)
        {
            happyEndWhite();
            System.out.println("白方胜出!树峰欢迎你下次光临!");
            System.exit(0);
        }
      }
     }
     //从左往右数有四个一条横线
     if(d <= TYPE)
     {
      for(d = 0, i = a; i <= a + 4; i++)
      {
       if(board[i][b] == "○" && i < BOARD_SIZE)
        d++;
       else
       {
        d = 0;
        break;
       }
       if(d == TYPE)
        {
            happyEndWhite();
            System.out.println("白方胜出!树峰欢迎你下次光临!");
            System.exit(0);
        }
      }
     }
     //从右往左数有四个白子一条横线
     if(d <= TYPE)
     {
      for(i = a, d = 0; i >= a - 4; i--)
      {
       if(board[i][b] == "○" && i >= 0)
        d++;
       else
       {
        d = 0;
        break;
       }
       if(d == TYPE)
        {
            happyEndWhite();
            System.out.println("白方胜出!树峰欢迎你下次光临!");
            System.exit(0);
        }
      }
     }
     //从上往下数有四个一条纵线
     if(d <= TYPE)
     {
      for(i = b, d = 0; i <= b + 4; i++)
      {
       if(board[a][i] == "○" && i < BOARD_SIZE)
        d++;
       else
       {
        d = 0;
        break;
       }
       if(d == TYPE)
        {
            happyEndWhite();
            System.out.println("白方胜出!树峰欢迎你下次光临!");
            System.exit(0);
        }
      }
     }
     //从下往上数有四个
     if(d <= TYPE)
     {
      for(i = b, d = 0; i >= b - 4; i--)
      {
       if(board[a][i] == "○" && i >= 0)
        d++;
       else
       {
        d = 0;
        break;
       }
       if(d == TYPE)
        {
            happyEndWhite();
            System.out.println("白方胜出!树峰欢迎你下次光临!");
            System.exit(0);
        }
      }
     }
     //斜左向下有四个白子
     if(d <= TYPE)
     {
      for(i = 0, d = 0; i <= 4; i++)
      {
       if(board[a-i][b+i] == "○" && (a - i) >= 0
       && (b + i) < BOARD_SIZE)
        d++;
       else
       {
        d = 0;
        break;
       }
       if(d == TYPE)
        {
            happyEndWhite();
            System.out.println("白方胜出!树峰欢迎你下次光临!");
            System.exit(0);
        }
      }
     }
     //斜右向上有四个白子
     if(d <= TYPE)
     {
      for(i = 0, d = 0; i <= 4 ; i++)
      {
       if(board[a+i][b-i] == "○" && (a + i) < BOARD_SIZE
        && (b - i) >= 0)
        d++;
       else
       {
        d = 0;
        break;
       }
       if(d == TYPE)
        {
            happyEndWhite();
            System.out.println("白方胜出!树峰欢迎你下次光临!");
            System.exit(0);
        }
      }
     }
     //斜右向下四个白子
     if(d <= TYPE)
     {
      for(i = 0, d = 0; i <= 4; i++)
      {
       if(board[a+i][b+i] == "○" && (a + i) < BOARD_SIZE
       && (b + i) < BOARD_SIZE)
        d++;
       else
       {
        d = 0;
        break;
       }
       if(d == TYPE)
        {
            happyEndWhite();
            System.out.println("白方胜出!树峰欢迎你下次光临!");
            System.exit(0);
        }
      }
     }
     //斜左向上有四个子
     if(d <= TYPE)
     {
      for(i = 0, d = 0; i <= 4; i++)
      {
       if(board[a-i][b-i] == "○" && (a - i) >= 0 && (b - i) >= 0)
        d++;
       else
       {
        d = 0;
        break;
       }
       if(d == TYPE)
        {
            happyEndWhite();
            System.out.println("白方胜出!树峰欢迎你下次光临!");
            System.exit(0);
        }
      }
     }
    } 
   
    public void happyEndBlack()
    {
        try
        {
        JOptionPane.showMessageDialog(f,"黑方:恭喜你!赢了,哈哈!");
                                    
        }catch (HeadlessException e)
        {
            e.printStackTrace();
        }                
     }
    
     public void happyEndWhite()
     {
        try
        {
        JOptionPane.showMessageDialog(f,"白方:恭喜你!赢了,哈哈!");
                                    
        }catch (HeadlessException e)
        {
            e.printStackTrace();
        }                
     } 
   
    class ChessBoard extends JPanel
    {
        //重写JPanel的paint方法,实现画
        public void paint(Graphics g)
        {
            //绘制五子棋棋盘
            g.drawImage(table, 0, 0, null);
            if(selectedX >= 0 && selectedY >= 0)
                //绘制选中点的红框
                g.drawImage(selected, selectedX * RATE + X_OFFSET,
                    selectedY * RATE + Y_OFFSET, null);
            //遍历数组,绘制棋子
            for (int i = 0; i < BOARD_SIZE; i++)
            {
                for (int j = 0; j < BOARD_SIZE; j++)
                {
                    if (board[i][j].equals("●"))
                    {
                        g.drawImage(black, i * RATE + X_OFFSET,
                         j * RATE + Y_OFFSET,  null);
                    }
                    if(board[i][j].equals("○"))
                    {
                        g.drawImage(white, i * RATE + X_OFFSET,
                         j * RATE + Y_OFFSET,  null);
                    }
                }
            }
        }
    }
   
}
自己用JAVA写的五子棋,人人对弈算法,望大家赐教!
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值