如何在Connect 4代码中搜索2D数组以获得胜利者?

时间:2014-12-05 03:46:24

标签: arrays search 2d

我有一项任务,我将修改Connect 4游戏的搜索。有一个垂直搜索,教师说这是非常通用的,需要修改,以及添加对角线和水平搜索来检查获胜者。我一直在搜索网络,我的书籍,过去的作业,以更好的方式搜索这些方式,我什么也没有。我必须使用给定的方法。并且非常感谢您的想法。 (对不起,如果这是一个多余的排队,我仍然是编码的新手。)

//给我的代码

    protected Player getWinner(Player[][] state, int rowHint, int columnHint) {

    for (int r = 0; r <= GRID_HEIGHT-3; r++) {
            for (int c = 0; c < GRID_WIDTH; c++) {
                if (
                    state[r][c] != Player.NONE && 
                    state[r][c] == state[r+1][c] &&
                    state[r+1][c] == state[r+2][c]
                ) return state[r][c];
            }
        }    

return Player.NONE;

    }

1 个答案:

答案 0 :(得分:0)

关键在于:

state[r][c] != Player.NONE && 
state[r][c] == state[r+1][c] &&
state[r+1][c] == state[r+2][c]

在图表上考虑这些。每当你看到状态[r] [c]想到x和y坐标。 r是y轴,c是x轴。

第一行初始化原点并检查是否占用空间。 下一行是检查原点是否等于原点上方的行。 第三行与最后一行相同,但它检查上面的第二行。

要获取水平方面而不是垂直方向,只需翻转坐标添加值:

state[r][c] != Player.NONE && 
state[r][c] == state[r][c+1] && //instead of state[r][c] == state[r+1][c] &&
state[r][c+1] == state[r][c+2] //instead of state[r+1][c] == state[r+2][c]

要获得对角线,您基本上会将两者混合在一起。你必须使用负数来获得相反的方向,但这应该给你正确的想法。