【问题标题】:Check Win Algorithm For Custim Size And Difficulty Tic Tac Toe Game检查自定义大小和难度井字游戏的获胜算法
【发布时间】:2023-01-24 01:24:42
【问题描述】:

已经实现水平和垂直方法,我无法弄清楚对角线 这是我的工作方法:

private boolean checkHorizontalWin(String gameBoard, int gameSize, int gameDifficulty) {
        // CHECK HORIZONTAL WIN
        for (int row = 0; row < gameSize; row++) {
            char candidate = getPawnAtCoords(gameBoard, gameSize, row, 0);
            int counter = 1;
            for (int column = 0; column < gameSize; column++) {
                char pawn = getPawnAtCoords(gameBoard, gameSize, row, column);

                if ((pawn == candidate) && (pawn != '-')) {
                    counter++;
                } else {
                    counter = 1;
                    candidate = pawn;
                }

                if (counter == gameDifficulty) {
                    return true;
                }
            }
        }
        return false;
    }

    private boolean checkHVerticalWin(String gameBoard, int gameSize, int gameDifficulty) {
        // CHECK VERTICAL WIN
        for (int column = 0; column < gameSize; column++) {
            char candidate = getPawnAtCoords(gameBoard, gameSize, 0, column);
            int counter = 1;
            for (int row = 0; row < gameSize; row++) {
                char pawn = getPawnAtCoords(gameBoard, gameSize, row, column);

                if ((pawn == candidate) && (pawn != '-')) {
                    counter++;
                } else {
                    counter = 1;
                    candidate = pawn;
                }

                if (counter == gameDifficulty) {
                    return true;
                }
            }
        }
        return false;
    }

有人知道对角线吗?

已经尝试了我自己能做的一切。

【问题讨论】:

  • 在二维网格中,NW 到 SE 对角线位置是 {(0,0),(1,1),(2,2), ... ,(s, s)},其中是电路板尺寸 - 1。SW 到 NE 的对角线位置是 {(s,0), (s-1,1),(s-2,2), ... , (0,s)}。也就是说,SW到NE的对角线位置,行号和列号之和总是.
  • if ((pawn == candidate) &amp;&amp; (pawn != '-')) 中第二个条件的目的是什么?如果 pawn == candidate 那么它不可能等于 '-'。 (pawn != '-') 是无意义的噪音。去掉它。

标签: java spring algorithm tic-tac-toe online-game


【解决方案1】:

ChatGPT 做到了

private boolean checkDiagonalWin(String gameBoard, int gameSize, int gameDifficulty) {
    // CHECK DIAGONAL WIN (LEFT TO RIGHT)
    for (int row = 0; row < gameSize - gameDifficulty + 1; row++) {
        for (int col = 0; col < gameSize - gameDifficulty + 1; col++) {
            char candidate = getPawnAtCoords(gameBoard, gameSize, row, col);
            int counter = 1;
            for (int i = 1; i < gameDifficulty; i++) {
                int nextRow = row + i;
                int nextCol = col + i;
                char pawn = getPawnAtCoords(gameBoard, gameSize, nextRow, nextCol);
                if ((pawn == candidate) && (pawn != '-')) {
                    counter++;
                } else {
                    counter = 1;
                    candidate = pawn;
                }
                if (counter == gameDifficulty) {
                    return true;
                }
            }
        }
    }

    // CHECK DIAGONAL WIN (RIGHT TO LEFT)
    for (int row = 0; row < gameSize - gameDifficulty + 1; row++) {
        for (int col = gameSize - 1; col >= gameDifficulty - 1; col--) {
            char candidate = getPawnAtCoords(gameBoard, gameSize, row, col);
            int counter = 1;
            for (int i = 1; i < gameDifficulty; i++) {
                int nextRow = row + i;
                int nextCol = col - i;
                char pawn = getPawnAtCoords(gameBoard, gameSize, nextRow, nextCol);
                if ((pawn == candidate) && (pawn != '-')) {
                    counter++;
                } else {
                    counter = 1;
                    candidate = pawn;
                }
                if (counter == gameDifficulty) {
                    return true;
                }
            }
        }
    }

    return false;
}

【讨论】:

  • ChatGPT 是否也解释了代码的工作原理,并可能提供解决问题的建议?还是 ChatGPT 只是反省了一些代码?很高兴您能够找到问题的答案。你在这个过程中学到了什么吗?我想,除了如何让 ChatGPT 为您做功课之外,还有其他问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多