首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

五子棋勝負判斷:對角線連續子判定算法思路

     編輯:程式設計綜合問答

問題

五子棋判斷勝利條件時,水平、垂直方向易處理,但對角線 (主對角線、副對角線) 連續同色子判斷較繁瑣。

核心思路:四方向向量遍歷

定義四個方向向量:
int dx[4] = {1, 0, 1, 1}; (右、下、右下、右上)
int dy[4] = {0, 1, 1, -1};

落子後,以該點為中心,沿四個方向雙向擴展統計同色子數,總數 ≥ 5 即獲勝。

算法步驟

  1. 落子位置 (x, y),顏色 color。
  2. 遍歷 4 個方向 d = 0..3:
    • 正向計數:nx = x + dx[d], ny = y + dy[d],而邊界內且棋盤 [nx][ny] == color,計數++。
    • 反向計數:nx = x - dx[d], ny = y - dy[d],同理計數++。
    • 總計數 = 正向 + 反向 + 1 (當前子)。
    • 若 ≥ 5 返回真。

C 語言參考實現

bool check_win(int board[15][15], int x, int y, int color) {
    int dx[4] = {1, 0, 1, 1};
    int dy[4] = {0, 1, 1, -1};
    for (int d = 0; d < 4; d++) {
        int count = 1;
        // 正向
        for (int i = 1; ; i++) {
            int nx = x + i * dx[d], ny = y + i * dy[d];
            if (nx < 0 || nx >= 15 || ny < 0 || ny >= 15) break;
            if (board[nx][ny] != color) break;
            count++;
        }
        // 反向
        for (int i = 1; ; i++) {
            int nx = x - i * dx[d], ny = y - i * dy[d];
            if (nx < 0 || nx >= 15 || ny < 0 || ny >= 15) break;
            if (board[nx][ny] != color) break;
            count++;
        }
        if (count >= 5) return true;
    }
    return false;
}

參考資源

CSDN 博客《五子棋判斷輸贏算法》: https://blog.csdn.net/mzlogin/article/details/5546204

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved