C#逻辑冲突在一个条件下

时间:2014-02-13 12:06:29

标签: c#

相关的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

这意味着如果行/列/对角线为空则不会在那里播放,这意味着它永远不会在空行/列/对角线中播放,这是一个问题。

建议?

1 个答案:

答案 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. 让用户始终开始。
  2. 从0,2,6和8开始任何人,因为这些是最大解决方案的一部分。
  3. 另一种方法:

    有三种成功的可能性:

    一个。行方式:添加或替换数字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)

    的状态