0

私はnaughtsandcrossesプログラムのためにいくつかのプログラミングを行ってきましたが、ボードは2Dアレイです。ユーザーが再生したい場合はプログラムを繰り返してみましたが、繰り返してもすべての値が配列に残っていることに気付きました。そのため、配列内のすべての値をクリアする方法があるかどうか疑問に思いました。

私はフォーラムで以前の質問をいくつか試しましたが、見つけた解決策のいくつかはうまくいかなかったようです。

誰かがコードをコメントするだけで見たい場合は、ここに追加しますが、それが必要かどうかはわかりませんでした。

どんな助けでも大歓迎です。

    const int Rows = 4;
    const int Columns = 4;
    char Board[Rows][Columns] = { {' ', ' ', ' ', ' ' },
                                  {' ', '_', '_', '_' },
                                  {' ', '_', '_', '_' },
                                  {' ', '_', '_', '_' } };


    for (int i = 0; i < Rows; ++i)
    {
        for (int j = 0; j < Columns; ++j)
            cout << Board [i][j];
        cout << endl;
    }

    cout << endl << endl;



    int row;
    int column;


    do
    {
        cout << "Please enter the value of the row you would like to take ";
        cin >> row;
        }while (row != 0 && row != 1 && row != 2 && row != 3);


    do
    {
        cout << "Please enter the value of the column you would like to take ";
        cin >> column;
        }while (column != 0 && column != 1 && column != 2 && column != 3);


    Board [row][column] = Player1.GetNorX();

            for (int i = 0; i < Rows; ++i)
    {
        for (int j = 0; j < Columns; ++j)
            cout << Board [i][j];
        cout << endl;
    }
4

3 に答える 3

2

元の状態にリセットしたいBoard場合は、次のものが必要です。

for (int i = 0; i < Rows; i++) {
  for (int j = 0; j < Columns; j++) {
    if (i == 0 || j == 0) {
      Board[i][j] = ' ';
    } else {
      Board[i][j] = '_';
    }
  }
}

これにより、配列のすべての要素がループされ、列番号または行番号が0の場合は、で埋める' 'か、そうでない場合は。で埋め'_'ます。

右下の3x3グリッドのみを気にする場合は、次のことができます。

for (int i = 1; i < 4; i++) {
  for (int j = 1; j < 4; j++) {
    Board[i][j] = '_';
  }
}

しかし、その代わりに、宣言することをお勧めしRowsます。ユーザーに1から始まる行番号と列番号を入力させたい場合は、配列にアクセスするときに{1、2、3}から{0、1、2}に変換するだけです。Columns3

于 2013-02-28T15:10:59.523 に答える
0

コードを別の関数に入れる

void game()
{
   const int Rows = 4;
   // ...
}

ゲームコントローラから呼び出します

bool replay;
do
{
    game();
    cout << "Replay? (0 - no, 1 - yes)";
    cin >> replay;
} while(replay);

このメソッドは、指定された環境全体を復元します。

于 2013-02-28T15:19:52.040 に答える
0

従来の多次元配列の代わりにListクラスを使用します。このクラスのオブジェクトの要素は、簡単にクリアおよび削除できます。さらに、リストのサイズは動的で変更可能です。オブジェクトを作成するときにサイズを指定する必要はありません。2次元リストを定義してみてください。

List<List<char>> Board = new List<List<char>>;
于 2013-02-28T15:31:01.437 に答える