我正在使用Processing(Java)构建Connect 4游戏,并且在试图找到获胜者时陷入停顿。我张贴的代码无论如何都可以告诉我为什么它不起作用?或我将如何补救。
任何帮助是极大的赞赏。
谢谢
if (whooseWon() == true) {
text = loadFont("Tahoma-Bold-50.vlw");
textFont(text, 50);
fill(255, 0, 0);
game = false;
if (whoWon == 1) {
text("Red Wins!", width/4, height/4);
text("Click to play again", 110, height/2);
} else if (whoWon == 2) {
fill(255, 255, 0);
text("yellow Wins!", width/4, height/4);
text("Click to play again", 110, height/2);
} else if (whoWon == 3) {
fill(255, 255, 0);
text("It's a Tie", width/4, height/4);
text("Click to play again", 110, height/2);
}
}
}
// click to play again functionality
void mousePressed() {
if (game == false) {
game = true;
setup();
}
}
// 21 vertical possibilities, 24 horizontal and 12 diagonally that's a total of 69 possibilities
// cols = j
// rows = i
boolean whooseWon() {
// horizontal
for (int i = 0; i < rows-3; i++) {
for (int j = 0; j < cols; j++) {
//red player
if (piece[i+1][j].getColour() == color(counter1) && piece[i+1]. [j].getColour() == color(counter1) &&
piece[i+2][j].getColour() == color(counter1) && piece[i+3][j].getColour() == color(counter1))
{
whoWon = 1;
return true;
}
if (piece[i][j].getColour() == color(counter2) && piece[i+1][j].getColour() == color(counter2) &&
piece[i+2][j].getColour() == color(counter2) && piece[i+3][j].getColour() == color(counter2))
{
whoWon = 2;
return true;
}
}
}
// vertical
for (int i = 0; i < rows; i++) {
for (int j = 0; j < cols-3; j++) {
//red player
if (piece[i][j].getColour() == color(counter1) && piece[i][j+1].getColour() == color(counter1) &&
piece[i][j+2].getColour() == color(counter1) && piece[i][j+3].getColour() == color(counter1))
{
whoWon = 1;
return true;
}
if (piece[i][j].getColour() == color(counter2) && piece[i][j+1].getColour() == color(counter2) &&
piece[i][j+2].getColour() == color(counter2) && piece[i][j+3].getColour() == color(counter2))
{
whoWon = 2;
return true;
}
}
}
//diagonal
for (int i = 0; i < rows-3; i++) {
for (int j = 0; j < cols-3; j++) {
//red player
if (piece[i][j].getColour() == color(counter1) && piece[i+1][j+1].getColour() == color(counter1) &&
piece[i+2][j+2].getColour() == color(counter1) && piece[i+3][j+3].getColour() == color(counter1))
{
whoWon = 1;
return true;
}
if (piece[i][j].getColour() == color(counter2) && piece[i+1][j+1].getColour() == color(counter2) &&
piece[i+2][j+2].getColour() == color(counter2) && piece[i+3][j+3].getColour() == color(counter2))
{
whoWon = 2;
return true;
}
}
}
//diagonal
for (int i = 0; i < rows-3; i++) {
for (int j = 0; j < cols; j++) {
//red player
if (piece[i][j].getColour() == color(counter2) && piece[i+1]
[j-1].getColour() == color(counter2) &&
piece[i+2][j-2].getColour() == color(counter2) && piece[i+3]
[j-3].getColour() == color(counter2))
{
whoWon = 1;
return true;
}
if (piece[i][j].getColour() == color(counter2) && piece[i+1]. [j+1].getColour() == color(counter2) &&
piece[i+2][j-2].getColour() == color(counter2) && piece[i+3]
[j-3].getColour() == color(counter2))
{
whoWon = 2;
return true;
}
}
}
return false;
}
`
最佳答案
您使人们很难帮助您。不要在庞大的草图上发布断开连接的代码段,而是尝试创建MCVE。这通常涉及从一个空白的草图开始,仅添加足够的代码以重复该问题,而没有与该问题没有直接关系的任何额外内容。我们应该能够将代码复制并粘贴到我们自己的编辑器中,点击运行,然后看到与您相同的东西。否则,我们都只能猜测。在创建MCVE的过程中,您通常会解决您的问题!
话虽如此,我可以帮助您尝试调试问题。您已经说过您正在收到ArrayIndexOutOfBounds
异常。错误在哪一行?我不是问那个,所以你告诉我。我问的是因为这是您应该问自己的第一个问题。
当您将其范围缩小到特定行时,则需要回溯以找出发生了什么事。正在访问哪些索引?数组有几个索引?两者之间不匹配,这导致了您的问题。
使用println()
函数可以打印出可能包含在其中的每个值。至少是i
和j
变量,以及row
和columns
以及piece.length
和piece[yourIndexHere].length
。
然后逐行浏览代码,直到您完全了解它在做什么。同样,如果您使用MCVE进行工作,而不是尝试通过一堆烂摊子来进行分析,那么运气会更好。然后,如果您遇到困难,则可以使用该MCVE发布新问题,这对我们帮助您将变得更加容易。祝好运。