【问题标题】:Connect four - finding the winning Processing (Java)连接四 - 找到获胜的处理(Java)
【发布时间】:2017-01-05 15:29:11
【问题描述】:

我正在使用 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;
    }


`

【问题讨论】:

  • 代码原样的结果是什么?我的头脑并没有做出一个很好的 java 解释器。
  • @DanFarrell 它是一个更大的代码块的一部分,但目前我不断收到错误消息“arrayindexoutofbounds 6”我认为这回答了你的问题?谢谢
  • 一个错误!伟大的!我们肯定需要查看完整的错误消息来帮助您。
  • 拥有一个返回某些东西(void 除外)并且有副作用的函数是不好的做法(在你的情况下设置 whoWon同时。如果还没有人赢,为什么不直接返回whoWon-1?除此之外,我现在尝试解析您的代码:)
  • @HarrySayers 是的;但如果您的问题确实是ArrayIndexOutOfBoundsException,那与您的问题无关。关于我提到的规则,见this SE

标签: java object for-loop processing


【解决方案1】:

你让人们很难帮助你。不要从你的大草图中发布一个断开连接的 sn-p,而是尝试创建一个MCVE。这通常涉及从一个空白草图重新开始,只添加足够的代码来重复问题,而没有任何与它没有直接关系的额外内容。我们应该能够将代码复制并粘贴到我们自己的编辑器中,点击运行,然后看到和你一样的东西。否则我们都只是猜测。您会经常在创建 MCVE 的过程中解决您的问题!

话虽如此,我可以帮助您尝试调试您的问题。你说过你得到一个ArrayIndexOutOfBounds 异常。错误在哪一行?我不是在问,所以你告诉我。我问这个是因为这是你应该问自己的第一个问题。

当您将其缩小到特定行时,您需要回溯以准确了解发生了什么。正在访问哪些索引?数组有多少索引?您在两者之间存在不匹配,这导致了您的问题。

使用println() 函数打印出每个可能是其中一部分的值。这至少是ij 变量,以及rowcolumns,以及piece.lengthpiece[yourIndexHere].length

然后逐行浏览您的代码,直到您确切了解它在做什么。同样,如果您从 MCVE 工作而不是试图解析一大堆东西,那么您的运气会好得多。然后,如果您遇到困难,您可以使用该 MCVE 发布一个新问题,我们可以更轻松地为您提供帮助。祝你好运。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-04-01
    • 1970-01-01
    • 2015-07-31
    • 1970-01-01
    相关资源
    最近更新 更多