我的代码有问题。
当我向二维数组添加一个元素时,它会添加两个元素。以下是一些有助于解释问题的输出:
Blank game board:
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
Adding to board: 7, 0
After adding first piece:
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 7
7 0 0 0 0 0 0 0
Found a 7 at: 6, 7
Found a 7 at: 7, 0
我初始化一个二维数组(我已经在本地和全局尝试过),每个元素都为 0。然后我将一个游戏块添加到棋盘上。
这是我的完整代码:
#include <iostream>
#include <fstream>
#include <vector>
using namespace std;
// 2D array representing the board
int gameBoard[7][7];
// Translates chess code to array index
int translate(char letter){
if ( letter == 'a' || letter == '8' ){
return 0;
} else if ( letter == 'b' || letter == '7' ){
return 1;
} else if ( letter == 'c' || letter == '6' ){
return 2;
} else if ( letter == 'd' || letter == '5' ){
return 3;
} else if ( letter == 'e' || letter == '4' ){
return 4;
} else if ( letter == 'f' || letter == '3' ){
return 5;
} else if ( letter == 'g' || letter == '2' ){
return 6;
} else if ( letter == 'h' || letter == '1' ){
return 7;
} else {
return -1;
}
}
// Displays current game board
void showBoard(){
for (int i = 0; i <= 7; i++) {
for (int j = 0; j <= 7; j++) {
cout << gameBoard[i][j] << " ";
}
cout << endl;
}
cout << endl;
}
// Initiates game board
void initBoard(){
for (int i=0; i <= 7; i++){
for (int j=0; j <= 7; j++){
gameBoard[i][j] = 0;
}
}
}
// Adds a piece to the board
void addPiece(string square){
int x = translate(square[1]);
int y = translate(square[0]);
cout << "Adding to board: " << x << ", " << y << endl;
gameBoard[x][y] = 7;
}
int main() {
// Initialize game board with zeros
initBoard();
// Display 2d array (game board)
cout << "Blank game board:\n\n";
showBoard();
// Place first piece on board
string firstPiece = "a1";
addPiece(firstPiece);
// Display 2d array (game board)
cout << "After adding first piece:\n\n";
showBoard();
for (int i = 0; i <= 7; i++){
for (int j = 0; j <= 7; j++){
if (gameBoard[i][j] == 7){
cout << "Found a 7 at: " << i << ", " << j << endl;
}
}
}
}
我可以确认“翻译”部分运行正常。这里所做的就是将 a1 转换为 7 和 0 作为行和列坐标。
如您所见,即使程序执行也同意仅将 1 个项目添加到板上。那么为什么我总是找到两个呢?任何帮助将不胜感激,谢谢!
我尝试以多种不同的方式声明数组(GameBoard),当我仅添加一个元素时,它仍然添加两个。我只想将一个元素添加到 GameBoard。
这个问题不会出现在我决定添加一块的每个方块上。有效方格与棋盘相关,因此 a1-h8。
当你用
int array[7]
声明一个数组时,数组的长度是7,所以最大索引是6。
int array[] = { 1, 2, 3, 4, 5, 6, 7 };
// index: 0, 1, 2, 3, 4, 5, 6
当您使用大于最大索引(或小于零)的任何索引时,您正在访问不属于您的内存,如果该内存包含您的代码,这可能会导致崩溃等问题。
要解决此问题,请使用正确的长度初始化游戏板。国际象棋棋盘的尺寸为 8x8,因此您可以将行
int gameBoard[7][7];
更改为现在的 int gameBoard[8][8];
。在我的测试中,这解决了问题。