私は 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 という 1 つのスペースを左に移動できると言っているだけです。
次のような不要で未使用のコードを 1 行追加するだけで済みます。
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 とその間のどこにでも移動できます。Queen はまったく同じコードを使用して動作するため、問題の原因はこのコード セクションではありません。また、ルークができる場合は、上、右、または下に移動しても問題ありません。
ルークは 2 番目の図と同じように動作する必要があります。黄色はすべての可能な動きを表しています。私は数年間 C++ を使用していませんでした。それも初歩的でしたが、最近、関数のパラメーターで "&" 記号を使い始めました。これは、問題または他の理論に起因する可能性がありますか? 明確にするために、「string ATEMP」は何もせず、何にも使用されません。ありがとうございました。