我正在用 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”什么都不做,也不被任何人使用。谢谢你。