当前位置: 首页 > 知识库问答 >
问题:

二维阵列帮助(Tic Tac Toe)

徐翔
2023-03-14
   public boolean isWin()
    {


       boolean winner= false;
       //checks rows first
       if(gameBoard[currentRow][0]==playerOne&&gameBoard[currentRow][1]==playerOne&&gameBoard[currentRow][2]==playerOne)
       {
           winner= true;
       }
       else if(gameBoard[currentRow][0]==playerTwo&&gameBoard[currentRow][1]==playerTwo&&gameBoard[currentRow][2]==playerTwo)
       {
           winner= true;
       }

       //checks columns next
       if(gameBoard[0][currentCol]==playerOne&&gameBoard[1][currentCol]==playerOne&&gameBoard[2][currentCol]==playerOne)
       {
           winner=true;
       }
       else if(gameBoard[0][currentCol]==playerTwo&&gameBoard[1][currentCol]==playerTwo&&gameBoard[2][currentCol]==playerTwo)
       {
           winner=true;
       }

       //checks one diagonal
       if(gameBoard[0][0]==playerOne&&gameBoard[1][1]==playerOne&&gameBoard[2][2]==playerOne)
       {
           winner=true;
       }
       else if(gameBoard[0][0]==playerTwo&&gameBoard[1][1]==playerTwo&&gameBoard[2][2]==playerTwo)
       {
           winner=true;
       }

       //checks other diagonal
       if(gameBoard[2][0]==playerOne&&gameBoard[1][1]==playerOne&&gameBoard[0][2]==playerOne)
       {
           winner=true;
       }
       else if(gameBoard[2][0]==playerTwo&&gameBoard[1][1]==playerTwo&&gameBoard[0][2]==playerTwo)
       {
           winner=true;
       }
       return winner;
   }

这段代码测试了一个标准的3×3tic tac toe游戏中的胜利。我的问题是,我如何改变里面的数字来匹配任何大小的棋盘,比如n×n?

目前,它检查第一行、第二行和第三行,以检查任何一个玩家是否在任何一行中获胜,接下来是列和对角线。但是,当板的大小更改为其他大小时,这将不再成立,因为它不会检查每一个可能的行/列/对角线。那么,对于尺寸为n×n的板,我该如何做到这一点。请不要代码,因为我不希望剽窃,但如果任何人可以提供输入,它将非常感谢?

共有1个答案

杜建章
2023-03-14

一个非常缓慢但强力保证工作的方法是,如果您逐级遍历数组,如果单元格不是空的,检查周围的所有单元格--如果您发现一个由相同单元格类型(circle或x)组成的线条模式,那么您就找到了赢家。如果它没有找到一个线模式,移动到下一个单元格,重复这个过程,直到你覆盖了整个板或找到一个赢家。

例如,从单元格0,0开始并找到一个X。0,0检查0,1;1,0;1,1。找不到获胜的模式,所以转到0,1并再次检查所有相邻的单元格。

 类似资料:
  • 问题内容: 目前,我已经将我的代码将用户输入放入一维ArrayList中,但是我想将它们输入到二维ArrayList中,并且遇到了一些麻烦。 这是我的代码: 问题答案: 那么,您需要首先创建一个二维ArrayList。为此,您需要创建一个ArrayLists的ArrayList。 因此,您的循环将沿着这些思路发展(假设我了解您要执行的操作):

  • 我是编程新手,我有一个任务要求从一维数组创建二维数组。我想到了这一点(没有任何外部来源的帮助,因为这会剥夺学习经验)。它适用于我们教授的测试输入,我只是想知道这是一个丑陋/低效的解决方案。 测试输入:twoDArray([1,2,3,4,5],3)输出将是:[[1,2,3],[4,5]]

  • 为什么上面的代码不起作用,我应该如何纠正?

  • 试图实施更大规模的井字游戏 这个游戏可以有超过3行和3列 每当发现4个连续的模式(水平,垂直或交叉) 选手是赢家 我已经找到了水平和垂直匹配的实现方法 但是找不到一种方法来识别2d数组中某个字符的交叉模式 考虑下面的二维数组 ` ` 如何检查“*”字符在这个2d数组中是否有四个连续的交叉模式

  • 我试着做一个Loto游戏,我必须生成一张随机的卡,在第一个collum数字从1-9,第二个10-19一直到90。这张牌的另一个规则是,每行的随机位置上只能有5个数字,这就是我遇到的麻烦。 我从这个开始在每个collum中添加数字: 然后在数组的每一行的一个数字位置上放5个数字我试过这样做: 第三个也一样。 输出: 0 18 0 0 46 0 61 72 88 0 18 0 31 0 55 0 0

  • 我试图将一个2d数组中的特定元素添加到另一个数组中,添加的过程是在数组的第一行选择最小的元素,并将该元素添加到同一位置的另一个2d数组中,例如: 2 22 3 5 1 54 7 3 10 20 22 21 这里,第一行中的最小元素是2,所以应该在相同的位置将2添加到另一个2d数组中,对于第二行,1是最小元素,所以我们也将1添加到另一个2d数组中,第三行中的最小元素是3,最后一行,第四行,最小的元素