0

嗨,我创建了一个程序,它具有可以容纳 9 个元素和枚举标记(O,X)的一维数组。此编码方案将第一次移动设置为 x ,然后设置为数组中的 o 等...我的问题是我想让我的 getWinner() 方法更有效地计算获胜者。目前我只有一堆 if else 语句,我怎样才能减少代码行并以更“更智能的方式”使其变得更加“智能”。

4

3 回答 3

1

好吧,对于初学者来说,最好在 getWinner() 找到井字游戏后立即停止执行,而不是在找到井字游戏后继续搜索。您可以通过在每个 if 语句中做到这一点,包括return result;最后的语句。

但无论如何,这里有一个效率的想法:每次玩家移动(例如 X)时,只检查它可以与其他 X 进行井字游戏的其他方格。您必须考虑如何实现逻辑,但这将使您不必每次都检查板上的每一组 3 个方块。

于 2013-09-14T23:50:25.820 回答
1

您可以很容易地将垂直和水平检查分组为一对循环。例如:

// Horizontal test
for (int i = 0; i < 3; i++) {
    if (getMark(i, 0) == getMark(i, 1)
        && getMark(i, 1) == getMark(i, 2) && getMark(i, 2) != null)
        result = getMark(i, 0)

// ...

// Vertical test
for (int i = 0; i < 3; i++) {
    if (getMark(0, i) == getMark(1, i)
        && getMark(1, i) == getMark(2, i) && getMark(2, i) != null)
        result = getMark(0, i)

这本身就需要六个 if 语句并将它们减少到两个。

于 2013-09-14T23:53:27.013 回答
0

我找到了一个实现这个游戏的页面。 http://www.lightbluelab.com/enjoy/ai/tic-tac-toe/ 我不知道它使用的算法,但我认为它可能是你的参考,因为它是用 JavaScript 编写的,源代码应该能得到的。

于 2013-09-16T13:26:07.067 回答