首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >连接四-查找获胜处理(Java)

连接四-查找获胜处理(Java)
EN

Stack Overflow用户
提问于 2017-01-05 23:29:11
回答 1查看 116关注 0票数 0

我正在构建一个使用Processing (Java)的connect 4游戏,并且在尝试寻找获胜者时遇到了困难。我发布的代码可以告诉我为什么这不能工作吗?也不知道我该怎么补救。

任何帮助都是非常感谢的。

谢谢

代码语言:javascript
复制
  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;
    }


`
EN

回答 1

Stack Overflow用户

发布于 2017-01-06 11:20:53

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

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

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

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

然后逐行浏览您的代码,直到您完全理解它在做什么。同样,如果您在MCVE中工作,而不是试图解析一大堆乱七八糟的东西,那么您会有更好的运气。如果你遇到困难,你可以在MCVE上发布一个新的问题,这样我们就可以更容易地帮助你。祝好运。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41488748

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档