Java - Noughts and Crosses / Tic Tac Toe游戏获胜算法不起作用

时间:2015-01-05 11:34:27

标签: java arrays if-statement

最近开始上大学,我们正在学习如何用Java编程。如果我们想要迎接挑战,我们建议我们尝试从一段破碎的代码中创造出一些不错的东西并穿过游戏。

我设法使程序运行正常,X或O显示在板上并检查一行或列中是否有三个相同的符号正常工作,但是出于某种原因,如果它检查看到如果任何一行连续三行它不起作用我无法弄清楚原因。我问过朋友,他们也不明白为什么它也不起作用(可能是一些我错过的东西)。

为了检查X或O是否赢了,我创建了另一个2D数组,它在板上的X位置放置1,如果板上的位置是O,则放置-1。然后检查到查看行,列和对角线上是否有-1或1。如果有一个-1,则将一个1添加到O的计数器中,或者如果它为1,则将一个1添加到X的计数器中。

在函数结束时,它检查O或X的计数器是否等于3,如果是,则返回true,否则返回false。

这是代码(它是大约315行代码,认为复制和粘贴整个程序会更容易,所以你可以看到我在其他地方出错了,向下滚动到{{1}的底部函数,其中破碎的部分是):

代码是: -

checkXOrOHasWon

2 个答案:

答案 0 :(得分:0)

  

如果它检查任何一行上是否有三行,它就不会   工作,我无法弄清楚为什么。

代码仅测试checkX或checkY正好等于3(或不等于3),但如果它们在之前的检查中为1或2,则可能使它们总数超过3。

checkXOrOHasWon()方法的最简单修复方法是替换所有这些块(对于checkX和checkO):

if (checkX != 3) {
  checkX = 0;
}

用这种陈述代替:

if (checkX == 3) {
  return true;
}

答案 1 :(得分:0)

您在每行和列检查后重置checkXcheck0的值。因此,即使它获胜,您也正在检查不需要的其他行或col。

您应该在当前正在检查的地方!=3返回true。

此外,其他提示/更改:
1.您不需要4x4阵列,可以使用3x3,只需正确使用索引。
2.您可以通过创建CheckXandO()checkRow方法使checkCol方法模块化,并从该方法循环调用它们,这将减少程序中的代码行。