我有一项任务,我将修改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;
}
答案 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]
要获得对角线,您基本上会将两者混合在一起。你必须使用负数来获得相反的方向,但这应该给你正确的想法。