将C ++函数转换为C#

时间:2017-04-29 01:44:48

标签: c# c++ .net algorithm bitboard

我试图将c ++功能转换为c#,但我连续第二个小时都失败了。需要帮助:/该功能取自this问题

bool haswon(unsigned __int64 newboard)
{
    unsigned __int64 y = newboard & (newboard >> 6);
    if (y & (y >> 2 * 6)) // check \ diagonal
        return true;
    y = newboard & (newboard >> 7);
    if (y & (y >> 2 * 7)) // check horizontal -
        return true;
    y = newboard & (newboard >> 8);
    if (y & (y >> 2 * 8)) // check / diagonal
        return true;
    y = newboard & (newboard >> 1);
    if (y & (y >> 2))     // check vertical |
        return true;
    return false;
}

这是我的c#one:

    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;
    }

但它不起作用!看起来像是一件微不足道的事情,但我完全迷失了。谢谢你的帮助

1 个答案:

答案 0 :(得分:1)

它看起来像一个简单的复制/粘贴错误。您的最后两行未将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;
}