相关的misc信息: Project = Tic Tac Toe(控制台应用程序)
我的问题如下: 我有一个最初填充0的数组,必须保持为0,除非用户采取移动(然后它将变为1)或计算机移动然后它变为2。 示例代码:
else if (posStatus[2] != 0 && posStatus[5] != 0 && posStatus[8] != 0 && (posStatus[2] + posStatus[5] + posStatus[8] % 2 == 0))
{
if (posStatus[2] == 0)
{
posStatus[2] = 2;
return;
}
else if (posStatus[5] == 0)
{
posStatus[5] = 2;
return;
}
else if (posStatus[8] == 0)
{
posStatus[8] = 2;
return;
}
问题: 有一个9长的网格,有3行,3列和2对角线。最初所有值都设置为0,这用于确定空间是否空闲,因此更改为其他类型会导致问题。如果值1保持,则玩家1在那里玩。如果值为2,则计算机已在那里播放。
所以最初我放入了
posStatus[0] + posStatus[1] + posStatus[2] % 2 == 0)
在这种情况下决定计算机将在哪里播放,如果敌方玩家在那里放置2个值,逻辑上应该完美地工作,它将是第一行,它与我的问题分开如下:
当一行上没有播放时,值为:0,0,0如果你做0 + 0 + 0%2,你会发现等于0,这是上述条件的参数。这意味着它会尝试确保每一行/每列/对角线都有一个值当然不好,因为这意味着玩家可以在3回合中获胜。
所以为了解决这个问题,我加入了(我知道我可以重构它)我添加了:
posStatus[0] != 0 && posStatus[1] != 0 && posStatus[2] != 0
这意味着如果行/列/对角线为空则不会在那里播放,这意味着它永远不会在空行/列/对角线中播放,这是一个问题。
建议?
答案 0 :(得分:0)
每次都要检查几个条件,不必考虑序列。任何球员获胜的可能案例是: 0,1,2
0,3,6
0,4,8
1,4,7-
2,4,6-
2,5,8
3,4,5-
AND 6,7,8
我假设编号是行,从0开始。
现在你必须根据用户的输入告诉计算机。
例如:
用户已选择2,因此您有posStatus[2] = 1
现在您需要检查的唯一单元格是0,1,4,5和6,因为这些是获胜的唯一可能单元格。
要处理游戏情况的开始,您有两种选择:
另一种方法:
有三种成功的可能性:
一个。行方式:添加或替换数字1并检查状态,
B中。列方式:添加或替换数字3并检查状态,
℃。对角线:用2和4添加或替换数字,然后检查状态
例如,如果用户选择了i
单元格。你的支票应该是:
一个。查看(i-2),(i-1),(i+1) AND (i+2)
的状态 - 显然这应该在0-8范围内
B中。查看(i-6),(i-3),(i+3) AND (i+6)
℃。查看(i-8),(i-4),(i-2),(i+2),(i+4) AND (i+8)