2

私は 4 行アプリ、または少なくとも最高の動きなどを計算するクラスを作成しています。gamePosition[6][7]ゲーム ボードの高さは 6、幅は 7 です。インスタンス変数の名前を とすべきかどうかわかりませんgamePosition[7][6]。どちらを使用しても問題ないことはわかっていますが、どちらが一般的ですか? すぐに正しい方法で行いたいと思います。

4

6 に答える 6

6

AC 2 次元配列は、単に配列の配列です。

わかりやすくするためにいくつかの定数を追加します。

#define ROWS 6
#define COLUMNS 7

行を単一のオブジェクトとして扱いたい場合は、次を使用します。

someType gamePosition[ROWS][COLUMNS];

最初 (0 番目) の行をgamePosition[0]表す 1 次元配列も同様です。

を単一のオブジェクトとして扱いたい場合は、次を使用します。

someType gamePosition[COLUMNS][ROWS];

単一の要素のみを気にする場合は、どちらの方法でも定義できます (もちろん、一貫性を保つ必要があります)。ボードを列の配列ではなく行の配列として扱う方がおそらくもう少し直感的ですが、どちらでも機能します。

于 2012-06-30T21:19:55.650 に答える
2

幅 - 最初の角括弧。高さ - 2 番目の角かっこ。

どのオプションを選択するかは問題ではありません。コードは理解しやすく、直感的に理解できるものでなければなりません。

于 2012-06-30T20:26:47.643 に答える
2

それは完全にあなた次第です。ここには「より一般的な」または「正しい」方法はありません。

  • ゲーム ボードをデカルト座標平面と考えたい場合は[column][row]、確立された数学的慣例では横座標を最初に、縦座標を 2 番目に指定するため、この形式の方が適切に機能します。

  • これを行列と考えたい場合は、逆になります。これは、行列にインデックスを付ける際の確立された数学的慣行は、行インデックスを最初に配置し、列インデックスを 2 番目に配置することであるためです。

PSもちろん、その問題に対する唯一の真の解決策は、コードを書くことです。後で、コードの1か所で1つのローカル変更を行うことで、これら2つのアプローチを切り替えることができます:)

于 2012-06-30T21:26:27.933 に答える
1

セマンティクスには関係ありませんが、パフォーマンスに関するいくつかのヒントがあります。ボード上のセルを反復処理する場合は、最初に 2 番目のインデックスをインクリメントし、2 番目に最初のインデックスをインクリメントします。あれは:

for (i = 0; i < FIRST_SIZE; ++i)
  for (j  = 0; j < SECOND_SIZE; ++j)
    ... process gamePosition[i][j] ...

キャッシュの局所性により、パフォーマンスが向上します。

したがって、アルゴリズムに応じて、どのインデックスが最初になるかを計画する必要があります。

于 2012-06-30T21:28:22.063 に答える
1

以前の投稿のように、それは問題ではありませんが、本当に重要です。

まず。論理的には、コードには影響しません。自由に選択してください。しかし、通常の思考では、gamePosition[6][7]上から下、左から右へと考えることが多いため、書くことがよくあります ;)

第二に、これが必要だと思います。この配列の使用方法に依存します。説明します:

2次元配列は配列の配列です。また、パフォーマンスのために、配列内のすべての値を参照する場合、多くの場合、行から行へと移動する方が効果的です。例: がありますa[n][m]

あなたはすべきです:(行ごとに)

for(int i=0; i<n; i++)
    for(int j=0; j<m; j++)
        // do some stuff

: (列ごと) ではなく、パフォーマンスが低下するため

for(int i=0; i<m; i++)
    for(int j=0;j<n; j++)
        // do some stuff

そう。ゲームで考えることができ、配列をどのように使用するかを考えることができます: 上から下へより頻繁に使用する場合 (テトリス ゲーム - 私のアルゴリズムの例です)、使用する必要がありますgamePosition[7][6]

それ以外の場合は、配列を行単位でより頻繁に (ほとんどの場合) 参照する場合は、使用する必要がありますgamePosition[6][7]

この点を知っている人はほとんどいません。この助けを願っています;)

于 2012-07-01T04:46:36.763 に答える
0

人々は高い x 幅と行 x 列を期待しているので、次を使用する必要があります。

gamePosition[6][7]

実際、それは重要だと思います。読者を混乱させないように、2 つの可能性のうち最も直感的な方を使用する必要があります。

于 2012-06-30T20:26:39.727 に答える