您好我创建了一个程序,它具有一维数组,可以容纳9个元素和枚举标记(O,X)。这种编码方案将第一个移动设置为x,然后在数组等中设置o ... 我的问题是我想让我的getWinner()方法更有效地计算胜利者。目前我只有一堆if else语句,如何减少代码行并使其更“智能”。
答案 0 :(得分:1)
嗯,对于初学者来说,最好在找到Tic-Tac-Toe后立即停止执行getWinner(),而不是在找到之后继续搜索。您可以在每个if语句中执行此操作,包括最后的return result;
语句。
但无论如何,这是一个效率的想法:每次玩家进行移动(例如X)时,只检查其他方格,它可以为其他X制作Tic-Tac-Toe。您将不得不考虑如何实现逻辑,但它会让您不必每次都检查电路板上每组3个方块。
答案 1 :(得分: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语句并将它们减少到两个。
答案 2 :(得分:0)
我找到了一个实现此游戏的页面。 http://www.lightbluelab.com/enjoy/ai/tic-tac-toe/ 我不知道它使用的算法,但我认为它可能是一个参考,因为它是用JavaScript编写的,源代码应该可用。