转换C++;函数到C# 我试图把C++函数转换成C,但是我连续第二个小时失败了。需要帮助:/该函数取自问题

转换C++;函数到C# 我试图把C++函数转换成C,但是我连续第二个小时失败了。需要帮助:/该函数取自问题,c#,c++,.net,algorithm,bitboard,C#,C++,.net,Algorithm,Bitboard,这是我的c#one: 但它不起作用!看起来是件小事,但我完全迷路了。感谢您的帮助这看起来像是一个简单的复制/粘贴错误。您的最后两行移动量y不是newboard的两倍: private static bool isWon(ulong board) { // Check / diagonal ulong y = board & (board >> 8); if ((y & (y >> 2 * 8)) > 0) return tru

这是我的c#one:


但它不起作用!看起来是件小事,但我完全迷路了。感谢您的帮助

这看起来像是一个简单的复制/粘贴错误。您的最后两行移动量
y
不是
newboard
的两倍:

private static bool isWon(ulong board)
{
    // Check / diagonal
    ulong y = board & (board >> 8);
    if ((y & (y >> 2 * 8)) > 0) return true;

    // Check - horizontal
    y = board & (board >> 7);
    if ((y & (y >> 2 * 7)) > 0) return true;

    // Check \ diagonal
    y = board & (board >> 6);
    if ((y & (y >> 2 * 6)) > 0) return true;

    // Check | vertical
    y = board & (board >> 1);
    if ((y & (y >> 2)) > 0) return true;

    return false;
}

将您的代码与C代码进行比较,您应该会看到复制粘贴错误。(提示:死罪的数目…)怎么不起作用?(您的输入是什么,您的预期输出是什么,哪一行没有返回您预期的内容)?@RufusL这是一个算法,用于检查“连接4”游戏的棋盘是否已连接(如果行中有4位)。详细解释了这一点。基本上,如果你通过“15”,你应该得到真正的。因为“15”的最后4位是“1111”。但是我看不到:/我没有看到任何“致命的罪过”:(是的,我理解。当你仔细检查代码时,是所有的行都不起作用?还是只是其中的一部分?(在你的最后两行中,你没有移动
y
两倍于移动
newboard
)天哪!现在我明白了。我在试图修复它的时候破坏了算法:/谢谢各位。现在我明白为什么我们有点困惑了。你们还做了复制错误和颠倒操作顺序;)是的,我重新安排了顺序,但检查仍然是一样的。@RufusL,等等,你们为什么重新安排顺序?这有关系吗?@RufusL我现在明白了,秩序并不重要
    bool HasWon(ulong newboard)
    {
        ulong y = newboard & (newboard >> 6);
        if ((y & (y >> 2 * 6)) > 0) // check \ diagonal
            return true;
        y = newboard & (newboard >> 7);
        if ((y & (y >> 2 * 7)) > 0) // check horizontal -
            return true;
        y = newboard & (newboard >> 8);
        if ((y & (y >> 2 * 7)) > 0) // check / diagonal
            return true;
        y = newboard & (newboard >> 1);
        if ((y & (y >> 2 * 7)) > 0)    // check vertical |
            return true;
        return false;
    }
private static bool isWon(ulong board)
{
    // Check / diagonal
    ulong y = board & (board >> 8);
    if ((y & (y >> 2 * 8)) > 0) return true;

    // Check - horizontal
    y = board & (board >> 7);
    if ((y & (y >> 2 * 7)) > 0) return true;

    // Check \ diagonal
    y = board & (board >> 6);
    if ((y & (y >> 2 * 6)) > 0) return true;

    // Check | vertical
    y = board & (board >> 1);
    if ((y & (y >> 2)) > 0) return true;

    return false;
}