1

我正在用 C++ 制作国际象棋游戏,但遇到了一些问题。我不确定它是否与内存或按引用传递或什么有关,但这是我的代码的一部分:

else if (aPiece[aGame.MainGrid[0][x][y]][aGame.MainGrid[1][x][y]].Status == 4)  //Rook
{
    int r = -1;

    //ROOK FUNCTION
    for (int s = x - 1; s >= 0; s--)
    {
        r = aGame.PieceMoveLookFunction(aGame, s, y, aOpponentValue);

        if (r > 0)  //Possible piece movement
        {
            //Next move for piece
            c = s;
            d = y;
            //Current location of piece
            g = x;
            h = y;

            aGame.AlterSavedGrid(aGame, aPiece, c, d, g, h);
            if (aGame.NotViolateCheckFunction(aGame, aPiece)) { aGame.PredictGrid[c][d] = aGame.PredictCount; } //Possible Move
            aGame.RestoreSavedGrid(aGame, aPiece);  //Restore MainGrid with SavedGrid after checking next move

包含上面的代码,结果如下:[不会让我发布图片,我是新来的]

基本上它是最右边的白车,H3 左边没有白色或黑色棋子。它只说我可以向左移动一个空格,G3 而不是一直向左移动。

现在只添加一行不必要和未使用的代码,例如:

else if (aPiece[aGame.MainGrid[0][x][y]][aGame.MainGrid[1][x][y]].Status == 4)  //Rook
{
    int r = -1;
    string ATEMP;  <<< This Line Only!!         
    //ROOK FUNCTION

它变成了这样:[再次,没有图片]

现在我可以将我的白车 H3 一直移动到左侧方块 A3 以及介于两者之间的任何位置。导致问题的不是这部分代码,因为女王使用完全相同的代码并且可以工作。此外,当 Rook 可以时,它一路向上、向右或向下移动都没有问题。

车应该做第二张图片正在做的事情:黄色代表所有可能的移动。我已经好几年没用过 C++了,即使那是初级的,但我最近开始在我的函数参数中使用“&”符号。这可以归因于问题或任何其他理论吗?为了清楚起见,“字符串 ATEMP”什么都不做,也不被任何人使用。谢谢你。

4

0 回答 0