3

こんにちは、誰かがこれを正しく行う方法をアドバイスできれば。基本的に、ChessPiece インスタンスの 2 次元配列を保持する Board というクラス変数を作成しようとしています。

#include <stdio.h>
#include <iostream>
#include <stdlib.h>
using namespace std;

class ChessPiece
{
public:
    char ToChar() { return '#'; };
};

class ChessBoard
{
    int Size;   //This means board is 8x8.
    ChessPiece ** Board;

public:
    ChessBoard();
    int GetSize() { return Size; };

    void PlotBoard();
};

ChessBoard::ChessBoard() {
    Size = 8;
    ChessPiece newBoard[Size][Size];
    Board = newBoard; //Problem here!!! How do I make Board an 8x8 array of ChessPiece?
}

void ChessBoard::PlotBoard() {
    int x, y;
    for (x = 0; x < Size; x++) {
        for (y = 0; y < Size; y++)
            printf("%c", Board[x][y].ToChar());
    }
}

int main()
{
    // ChessBoard board;
    // printf("%d", board.GetSize());
    // board.PlotBoard();

    ChessBoard * a = new ChessBoard();

    return 0;
}

ここで本当に欠けているのはかなり基本的なことですが、それを理解できないようです。ありがとうございました!

4

5 に答える 5

2

シナリオで生のポインターを使用する理由は本当にありません。ボードを単一次元として保持し、ボードをstd::vector反復するときに行/列の乗算を使用することをお勧めします。

class ChessBoard
{
public:
   ChessBoard(size_t row_count) : Size(row_count), Board(row_count * row_count)
   {
   }

   void PlotBoard()
   {
     for(size_t row = 0; row < Size; ++row)
     {
        for(size_t col = 0; col < Size; ++col)
            printf("%c", Board[(row * Size) + col].ToChar());
     }
   }
}

private:
   size_t Size;
   std::vector<ChessPiece> Board;
};
于 2013-08-13T19:06:15.133 に答える
0

昨年も同様のプロジェクトを行いました。そのために Square クラスを作成し、Board が Square の 2D 配列で構成されるようにしました。このようにして、Square にピース (独自のクラス) があるかどうか、ピースの種類を確認したり、ピースを追加および削除したりするなど、Square のメソッドを作成できるという点で、より柔軟性があると思います。

基本的な OO の方法で問題に取り組む必要があると思います。

于 2013-08-14T00:34:13.270 に答える
0

コンストラクターを次のように変更します。

ChessBoard::ChessBoard():Size(8) {
    Board=new ChessPiece*[Size];

    for (int i=0;i<Size;++i)
        Board[i]=new ChessPiece[Size];
}

デストラクタも必要です。

ChessBoard::~ChessBoard()
{
    for (int i=0;i<Size;++i)
        delete [] Board[i];

    delete [] Board;
}

コピー/移動を許可する場合は、適切なコピー/移動コンストラクターとコピー/移動代入演算子を必ず追加してください。

于 2013-08-13T18:59:30.597 に答える