1

私のクラスでは、かなり基本的な戦艦ゲームを作成する必要があります。ただし、私はプログラミングが初めてで、いくつかの問題に直面しています。まず、プログラムに対する私の考えを説明させてください。各プレイヤーのゲームボードに 2 つの個別の 2D 配列を保持したいと考えています。各船を配置する機能があり、それらを組み込んだ他の機能を1つの「ターン」機能にします。ゲームボードはまず O で埋められ、船を配置するたびに O が船の最初の文字に置き換わります。ヒットは X として指定されます。船が配置されると、ボードに X と O しか残っていないときに勝者が決定されます。私が現在直面している主な問題は、2D 配列に関するものです。それらを構造体に配置したいのですが、処理方法がわからないいくつかのエラーが発生しています。私' m が「'.' の前に非修飾 ID を予期していた」を取得しています。token" を board.firstboard = 行に追加します。私が得ている他のエラーは、} がないということですが、1 つ追加すると、余分だと表示されます。これは前のエラーに関連していますか? 助けてくれてありがとう!また、コードを正しく提供したかどうかわからないので、そうでない場合はお知らせください。修正します。

    struct board
{
    static char firstBoard[10][10] ;
    static char secondBoard[10][10] ;
} ;

void initializeBoard()
{

    board.firstBoard =
    {
        {'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O'},
        {'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O'},
        {'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O'},
        {'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O'},
        {'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O'},
        {'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O'},
        {'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O'},
        {'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O'},
        {'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O'},
        {'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O'},
    } ;

    board.secondBoard =
    {
        {'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O'},
        {'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O'},
        {'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O'},
        {'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O'},
        {'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O'},
        {'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O'},
        {'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O'},
        {'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O'},
        {'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O'},
        {'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O'},
    } ;
}
4

1 に答える 1

2
  1. 配列をstaticメンバーにすると、それらはグローバル変数になります。あなたはそれを望んでいません。である場合static、すべてのboardオブジェクトが同じ 2 つの配列を共有します。

  2. 配列に代入して配列を設定することはできません{ ...data... }。この方法でのみ配列を初期化でき、オブジェクトは一度しか初期化できません。そのように関数内からグローバルを初期化することはできません。

推奨バージョンは次のとおりです。

#include <cstring>

struct board
{
    static const int WIDTH = 10, HEIGHT = 10;

    board()
    {
        std::memset(firstBoard, 'O', sizeof(firstBoard));
        std::memset(secondBoard, 'O', sizeof(secondBoard));
    }

    char firstBoard[WIDTH][HEIGHT];
    char secondBoard[WIDTH][HEIGHT];
};

変更点は次のとおりです。

  1. 配列は、グローバル (メンバー)boardではなく、構造体のフィールドになりました。static

  2. 初期化は、board構造体のコンストラクターに移動されました。明示的に呼び出す必要はありません。

  3. 配列の初期化は に置き換えられましたstd::memset。配列要素の型が であるため、これはうまく機能しますchar。そうでない場合はchar、それらを初期化するために何か他のことをしなければならないかもしれません。

  4. 配列の幅と高さの定義済み定数。

于 2012-11-24T04:25:58.487 に答える