【发布时间】:2017-03-07 21:41:57
【问题描述】:
我尝试创建井字游戏,并且我能够填满我的棋盘,并且能够检查行和列的获胜者。但是,我需要一些帮助来检查对角线,看看谁赢了。这是我到目前为止所拥有的。我是初学者,所以请不要把代码写得太难。
检查方法:
public boolean check(String[] [] board)
{
int j = 0;
for(int i = 0; i < board.length;i++) //row
{
if(board[i][j] == "X" || board[i][j+1] == "X" || board[i][j+2] == "X")
{
if(board[i][j] == board[i][j+1] & board[i][j] == board[i][j+2])
{
System.out.println("X wins!");
return true;
}
}
}
int e = 0;
for(j = 0; j < board.length;j++) //col
{
if(board[e][j] == "X" | board[e + 1][j] == "X" | board[e + 2][j] == "X" )
{
if(board[e][j] == board[e + 1][j] & board[e][j] == board[e + 2][j])
{
System.out.println("X, wins");
return true;
}
}
}
int d = 0;
for(int ii = 0; ii < board.length; ii++) //diag
{
if(board[d][ii] != null || board[d + 1][ii] != null | board[d + 2][ii] != null)
{
if(board[d][ii] == board[d + 1][ii+1] & board[d][ii] == board[d + 2][ii])
{
System.out.println("X, wins dig");
return true;
}
}
}
int k = 0;
for(int i = 0; i < board.length;i++) //row
{
if(board[i][k] == "O" || board[i][k+1] == "O" || board[i][k+2] == "O")
{
if(board[i][k] == board[i][k+1] & board[i][k] == board[i][k+2])
{
System.out.println("O wins!");
return true;
}
}
}
int z = 0;
for(k = 0; k < board.length; k++) //col
{
if(board[z][k] == "O" | board[z + 1][k] == "O" | board[z + 2][k] == "O" )
{
if(board[z][k] == board[z + 1][k] & board[z][k] == board[z + 2][k])
{
System.out.println("O, wins");
return true;
}
}
}
return false;
}
【问题讨论】:
-
您可能还会发现this example 有帮助
-
另外:您尝试在您的板上迭代您的 fillX 和 fillY 方法,但您使用 r1-1 和 c1-1。由于它们是之前定义的整数,因此值将始终相同。 (例如:如果我为 r1 输入 3,为 c1 输入 3,您将在 board[2][2] 处输入 9 次“o”,这是无用的)
-
所以你是说我应该把 r1 和 c1 改成 r 和 c?@Namoz
-
他指出您在 fillO 和 fillX 中有无用的循环。只留下循环的内部。
-
换句话说,去掉
fillO和fillX中的for循环。他们让你做同样的事情 9 次。相反,在任何循环之外只做一次。