2012-01-20 22 views
1

私は基本的なチェスボードをC++で作成しようとしています。C++で多次元配列チェスボードを作成する際の問題

私は初期テストとして文字の多次元のボード配列を設定し、各ピースを表す文字を入れました。これは奇妙な結果を出力したので、次のコードを削除しました。これは、a、b、c、dというラベルのついたポーンとルークの2つの列を持つボードを各コーナーに作成することを目的としています。

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

と、以下の結果を得ています:私は、テストに次の使用してい

#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; 
    } 
}; 

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

ルックスが重複だけで表示されない理由を任意のアイデアコーナー?私は問題を追跡することができないようです。

答えて

7

チェスボードは、8×8サイズがボードの宣言を変更しているので:

char board[8][8]; 

C++アレイは0ベースているので現在のアレイは、サイズ7×7、

char board[7][7]; 

である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個の正方形を持っています.....