五子棋算法研究

/*僅供個人學習交流使用
  嚴禁任何商業用途,違者必究
*/
/** 五子棋程序
* @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寫的五子棋,人人對弈算法,望大家賜教!
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章