2012-01-20 236 views
1

我正嘗試在C++中創建一個基本的棋盤並輸出它。在C++中創建多維數組國際象棋棋盤的問題

我設置了一個多維板的字符數組作爲初始測試,並把字符代表每一塊。這個結果是奇怪的結果,所以我將代碼分解爲以下代碼,它旨在創建一個棋盤,每個角落都有兩排棋子和一個車,標記爲a,b,c和d。

#include <string> 
using namespace std; 

class Game 
{ 
    public: 

    int turn; 
    char player; 
    char board[7][7]; 

    Game() 
    { 
     turn = 1; 
     player = 'w'; 

     int x,y; 
     for(y=0;y<=7;y++) for(x=0;x<=7;x++) board[x][y] = '.'; 
     board[0][0] = 'a'; 
     board[7][0] = 'b'; 
     board[0][7] = 'c'; 
     board[7][7] = 'd'; 
     for(x=0;x<=7;x++) board[x][1] = 'p'; 
     for(x=0;x<=7;x++) board[x][6] = 'p'; 

    } 

    string getBoard() 
    { 
     string result = ""; 
     int x,y; 
     for(y=0;y<=7;y++) 
     { 
      for(x=0;x<=7;x++) result += board[x][y]; 
      result += "\n"; 
     } 
     return result; 
    } 
}; 

我用以下測試:

Game game; 
cout << game.getBoard(); 

和我得到以下結果:

ac.....b 
pppppppp 
........ 
........ 
........ 
........ 
pppppppp 
c.....bd 

爲什麼烏鴉被複制而不是僅僅出現在任何想法角落?我似乎無法追查這個問題。

回答

7

由於棋盤具有8×8的尺寸改變你的板聲明:

char board[8][8]; 

您當前的陣列大小7×7的,

char board[7][7]; 

由於C++數組基於0 7是不是一個兩個維度的有效索引。所以,你不能這樣做:

for(x=0;x<=7;x++) board[x][1] = ... 

board[0][7] = 'c'; 
+0

謝謝。我現在感覺很愚蠢。我明顯在使用PHP太多,並忘記了定義本身不是基於零的,這是爲什麼我把char board [7] [7]。 – DivineOmega

2

的爲char board[7][7]法律下標爲0..6, 0..6

0

同意,你應該已經聲明char board [8] [8] !!!!! 如果我記得不錯,棋盤總是有64個方塊.....