java - 检查数组中某个值是否连续重复 5 次

标签 java arrays multidimensional-array

我正在尝试用 Java 编写一个简单的 m、n、k- 游戏。游戏设置在一个 10 x 10 的“棋盘”上,该“棋盘”以图形方式表示为具有 10 行和 10 列的网格。要赢得游戏,玩家必须选择水平、垂直或对角线的 5 个单元格。

我在编写检查某个玩家是否赢得游戏的算法时遇到问题。游戏“棋盘”在内部表示为一个称为矩阵的二维数组,每个维度有 10 个元素。由于它是一个 int 数组,因此最初用零填充。我将两个玩家表示为数字 1 和数字 2。我创建了一个名为 checkIfWinOrDraw 的方法,该方法具有 x 坐标、y 坐标和最后移动的玩家的输入参数。每次选择单元格时都会运行此操作。我目前正处于非常基本的第一步,检查最后选定单元格的列中是否有与玩家编号相对应的五个连续值。我已经编写了一些实现此检查的逻辑,但它不起作用,而且我发现自己无法弄清楚为什么,所以我希望这里有人可以帮助我。需要明确的是,我已经进行了相当广泛的搜索,但我只能找到与我的问题非常模糊相关的解决方案,并且我无法从中得出解决方案,因为我仍然是编程的业余爱好者一般来说。所以我的问题是:我做错了什么以及这个问题的正确解决方案是什么?

有问题的代码:

public void checkIfWinOrDraw(int x, int y, int player){
            // check columns
            for(int i = 0; i < 9; i++) {
                int counter = 1;
                if (matrix[x][i] == player){
                    if(matrix[x][i] == matrix[x][i+1]){
                        counter++;
                    }
                    if (counter == 5) {
                        if(player == 1) {
                            JOptionPane.showMessageDialog(null, "Game over, RED wins!");
                        } else {
                            JOptionPane.showMessageDialog(null, "Game over, BLUE wins!");
                        }
                    }
                } else {
                    counter = 1;
                }
            }  
}

注意:我没有在标题中提到 2D 数组,因为我现阶段仅使用 1 维进行操作。如果遗漏令人困惑,我深表歉意。

最佳答案

您需要检查穿过给定点的 4 条线(水平线、垂直线和 2 条对角线)。对于每条线,你都必须从该点向两个方向走。这会给你 8 个连续的检查循环:

public void checkIfWinOrDraw(int x, int y, int player){
    int line = 0;
    for (int i = y + 1; i < 10 && matrix[x][i] == player; i++, line++);
    for (int i = y; i >= 0 && matrix[x][i] == player; i--, line++);
    if (line == 5) {
        win(player);
        return;
    }
    line = 0;
    for (int i = x + 1; i < 10 && matrix[i][y] == player; i++, line++);
    for (int i = x; i >= 0 && matrix[i][y] == player; i--, line++);
    if (line == 5) {
        win(player);
        return;
    }
    line = 0;
    for (int i = x + 1, j = y + 1; i < 10 && j < 10 && matrix[i][j] == player; i++, j++, line++);
    for (int i = x, j = y; i >= 0 && j >= 0 && matrix[i][j] == player; i--, j--, line++);
    if (line == 5) {
        win(player);
        return;
    }
    line = 0;
    for (int i = x - 1, j = y + 1; i >= 0 && j < 10 && matrix[i][j] == player; i--, j++, line++);
    for (int i = x, j = y; i < 10 && j >= 0 && matrix[i][j] == player; i++, j--, line++);
    if (line == 5) {
        win(player);
    }
}

为了方便起见,我将获胜消息放入单独的方法中:

private static void win(int player) {
    if (player == 1) {
        JOptionPane.showMessageDialog(null, "Game over, RED wins!");
    } else {
        JOptionPane.showMessageDialog(null, "Game over, BLUE wins!");
    }
}

关于java - 检查数组中某个值是否连续重复 5 次,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48845942/

相关文章:

c - 释放 C 中零长度数组的已分配内存

java 比较数组中的值

python - 切片广播对象?

javascript - 向数组添加多个输入字段的问题

java - 如何将当前方法的参数放入列表中

java - 后端数据库异步更改时如何刷新JPA实体?

javascript - 查找多维数组中两个相关数字最接近的组合

arrays - 矩阵 block 索引

java - 我的代码似乎在循环,我不知道为什么

java - 赋值运算符重载 Java