2

数値を含む動的な char 配列を作成してから、これらを X または 0 に変更しようとしています。

私は、必要な特定の数にグリッドを作成する三目並べゲームを作成しています。配列には、正方形のすべての数字を含める必要があり、プレーヤーに応じてこの数字を X,0 に変更する必要があります。

私は現在持っています。

const int grid_size = size * size; // determines the size of the grid height x width
char **number = new char*[grid_size]; // create the array to the size of the grid

for ( int i = 1; i <= grid_size+1; i++ ) {
    number[i] = i;
}

しかし、これでエラーが発生します:- error C2440: '=' : cannot convert from 'int' to 'char *' on line number[i] = i;

数値を含む配列を作成するにはどうすればよいですか - 1,grid_size、これらの数値を X,0 に変更しますか?

4

5 に答える 5

0

2 つの解決策があります。文字を格納する配列の配列を作成するか (これが基本的に行列です)、行列の線形化されたバージョンとなる単一の char 配列を作成します。行列のすべての行を 1 つにまとめた配列。

最初のケースは簡単です:

const int grid_size = size * size; // determines the size of the grid height x width
char **number = new char*[size]; // create the array to the size of the grid

for ( int i = 0; i < size; i++ ) {
    number[i] = new char[grid_size];
    for( int j = 0; j < size; j++)
         number[i][j] = i * size + j;
}

// access any char with a double bracket notation
// beware that coordinates start at `0`
number[2][1] = 'X';

2 番目の解決策はややこしいので、ヘルパー関数を使用して行列座標を配列インデックスに変換することをお勧めします。

const int grid_size = size * size;

int idx(int x, int y){
    return y * size + x;
}

char *number = new char[grid_size];

for (int i = 0; i < grid_size; i++)
    number[i] = i;

number[idx(2,1)] = 'O';

文字は実際には変装した数字ですが、値は をはるかに超え9ているため、通常の三目並べゲームでは問題にはならず、最大 8*8 のサイズで動作させることができるはずです。65 から始まる数字は、通常のアルファベット文字を表します (つまり、65 はA、66 はBなどです。詳細については、ASCII コード表を参照してください)。この問題を解決する方法の 1 つは、セル番号をセルに格納し、ゲームの状態も追跡したい場合、プレーヤーの移動を示す値として と の代わりに 254 と 255 を使用するOことXですが、まだ 7*7 のグリッド サイズに制限されています。

サイズが大きい場合は、ゲームの状態を追跡するために別のデータ構造を検討する必要があります。

于 2013-04-10T08:25:05.950 に答える
0
char **number = new char*[size]; // create the rows

for ( int i = 0; i < size; i++ ) {
   number[i] = new char[size]; // create the columns for the current row
   for (int j = 0; j < size; j++) {
      number[i][j] = (char)i*j; // set the cell number 
   }
}

私は長い間 C++ でコーディングしていないので、構文に問題がある可能性があることに注意してください。しかし、これはそれを行う方法です。

于 2013-04-10T08:19:03.187 に答える