AOYAMA Koji's プログラミングブログ - プログラミングを楽しく体験

【マンガで感じる】配列 ~連続した同型データ~ ループと好相性 【本当の基礎から学ぶゲームプログラミング】プログラミング初心者向け・入門編・基礎編初中級者向けプログラミング解説プログラマー向け実装解説

2026/08/24
【マンガで感じる】配列 ~連続した同型データ~ ループと好相性 【本当の基礎から学ぶゲームプログラミング】

 40年以上のゲームプログラミング経験をマンガで可視化。 今回は「配列」。 同型データが連続しているものです。 ループ処理との相性が良く、組み合わせると様々なプログラミングが可能になります。
【マンガで感じる】配列 ~連続した同型データ~ ループと好相性 【本当の基礎から学ぶゲームプログラミング】

プログラミングブログ記事一覧


[PR]

【マンガで感じる】配列 ~連続した同型データ~


【マンガで感じる】配列 ~連続した同型データ~ ループと好相性 【本当の基礎から学ぶゲームプログラミング】 トレーニングルーム (手前から) エネルギーパック2個[エネルギーパック] 「フロート班 2個」 エネルギーパック9個「バイト班A 9個」 (以下読めないくらい) エネルギーパック2個「足し算班 2個」 エネルギーパック9個「バイト班B 9個」 エネルギーパック4個「コンピューター班 4個」 (社長)「えーと…」「あそこにあるのが2個で…」「こっちが9個…」 【マンガで感じる】配列 ~連続した同型データ~ ループと好相性 【本当の基礎から学ぶゲームプログラミング】 エネルギーパック 2個「フロート班 2個」 アップ (社長)「これが2個…」「あれ?これもう数えたっけ…?」 【マンガで感じる】配列 ~連続した同型データ~ ループと好相性 【本当の基礎から学ぶゲームプログラミング】 社長 ボンッ 頭爆発 【マンガで感じる】配列 ~連続した同型データ~ ループと好相性 【本当の基礎から学ぶゲームプログラミング】 社長「クリスタル君」「合計数を正確に把握したいので」 【マンガで感じる】配列 ~連続した同型データ~ ループと好相性 【本当の基礎から学ぶゲームプログラミング】 社長「各班用のエネルギーパックを」「整頓してもらえますか」 クリスタル「承知しました」 【マンガで感じる】配列 ~連続した同型データ~ ループと好相性 【本当の基礎から学ぶゲームプログラミング】 クリスタル「それぞれ**同型**のトレイに乗せて」「***配列**にいたします」 【マンガで感じる】配列 ~連続した同型データ~ ループと好相性 【本当の基礎から学ぶゲームプログラミング】 配列 ~連続した同型データ~ 【マンガで感じる】配列 ~連続した同型データ~ ループと好相性 【本当の基礎から学ぶゲームプログラミング】 メカ・配列 登場 (クリスタル)「メカ・配列!」 【マンガで感じる】配列 ~連続した同型データ~ ループと好相性 【本当の基礎から学ぶゲームプログラミング】 トレイ アップ (クリスタル)「各班用のエネルギーパックをトレイに乗せて」「トレイを並べて**配列**にして」 【マンガで感じる】配列 ~連続した同型データ~ ループと好相性 【本当の基礎から学ぶゲームプログラミング】 メカ・配列 やる気 【マンガで感じる】配列 ~連続した同型データ~ ループと好相性 【本当の基礎から学ぶゲームプログラミング】 メカ・配列 作業開始 【マンガで感じる】配列 ~連続した同型データ~ ループと好相性 【本当の基礎から学ぶゲームプログラミング】 メカ・配列 作業継続 【マンガで感じる】配列 ~連続した同型データ~ ループと好相性 【本当の基礎から学ぶゲームプログラミング】 トレイが2つ既に並んでいる エネルギーパック:4個「コンピューター班 4個」+2個「フロート班 2個」 メカ・配列 運んできた 【マンガで感じる】配列 ~連続した同型データ~ ループと好相性 【本当の基礎から学ぶゲームプログラミング】 スキップコマ 【マンガで感じる】配列 ~連続した同型データ~ ループと好相性 【本当の基礎から学ぶゲームプログラミング】 エネルギーパック:4個「コンピューター班 4個」+2個「フロート班 2個」+9個「バイト班A 9個」+9個「バイト班B 9個」+2個「足し算班 2個」 メカ・配列 最終作業 【マンガで感じる】配列 ~連続した同型データ~ ループと好相性 【本当の基礎から学ぶゲームプログラミング】 きれいにならんだトレイx5 バーン エネルギーパック:4個「コンピューター班 4個」+2個「フロート班 2個」+9個「バイト班A 9個」+9個「バイト班B 9個」+2個「足し算班 2個」 集中線エフェクト (社長)「すばらしい!」 【マンガで感じる】配列 ~連続した同型データ~ ループと好相性 【本当の基礎から学ぶゲームプログラミング】 社長「なるほど**配列**なら」「たくさんあっても計算しやすいですね!」 クリスタル おじぎ 【マンガで感じる】配列 ~連続した同型データ~ ループと好相性 【本当の基礎から学ぶゲームプログラミング】 エネルギーパック:4個「コンピューター班 4個」+2個「フロート班 2個」+9個「バイト班A 9個」+9個「バイト班B 9個」+2個「足し算班 2個」 (社長)「4+2+9+9+2 だから…」「えーと…」 【マンガで感じる】配列 ~連続した同型データ~ ループと好相性 【本当の基礎から学ぶゲームプログラミング】 間コマ 【マンガで感じる】配列 ~連続した同型データ~ ループと好相性 【本当の基礎から学ぶゲームプログラミング】 社長「合計26個です!」「ありがとう!」感涙
次のエピソードへ
【マンガで感じる】配列 ~連続した同型データ~ ループと好相性 【本当の基礎から学ぶゲームプログラミング】 文字列

[PR]

「配列」とは:連続した同型データ


 「配列」の本質は「連続した同型データ」です。
 同型の複数データを配列にまとめることで、ループ処理がしやすくなり、幅広いプログラミングが可能です。

配列プログラミング:定義・サイズ・アクセス


 配列を用いたプログラミングについて、 C++ の例で具体的に解説します。

C++ における配列型の変数定義


 C++ における配列型の変数定義の例を、以下のソースコードで記します。

C++

uint16_t aiData[256];
 この例では、変数 aiData が、要素が uint16_t型、要素数が 256 の配列型であると定義しています。

配列のデータサイズ


 メモリー内の配列は、マンガのように、各要素が連続した状態で格納されています。 それ以外、例えば要素数などの情報はメモリーに持ちません。
 そのため配列のデータサイズは、配列の要素のデータサイズに要素数を掛けたものです。
 uint16_t 単体のデータサイズは 2バイトです。
 前述の配列型の変数 aiData のデータサイズは、\(2 \times 256\)、すなわち 512バイトです。

配列要素へのアクセスとインデックス


 C++ および主要なプログラミング言語では、配列の各要素に「変数名[インデックス]」の形式でアクセスできます。
 前述の定義がされた変数 aiData の例では、aiData[0]、aiData[255] などでアクセスできます。 C++ を含めて、主要な言語で配列のインデックスは「0始まり」です。 つまり要素数が 256 なら、0 から 255 のインデックスでアクセスできます。 ※1始まりで1から256のインデックスになる言語もあります
 つまりこれだけですと、変数「ai0,ai1,...,ai255」を定義しても良さそうです。 しかしプログラミングが長くなるという問題以外に、配列ならインデックス部分を変数にできるので、以下のようなプログラミングが可能です。
uint16_t aiData[256];
for ( int iIndex = 0 ; iIndex < 256 ; ++iIndex ) {
    aiData[iIndex] = 0;
}
 配列とループ使いこなすことで、より幅広い、そしてより大きなデータを扱うプログラミングが可能です。


 なお、一点、注意事項があります。
 範囲外インデックスのアクセス、例えばこの例で aiData[256] は、動作が保証されません。
 プログラミング言語によっては明示的にエラーになりますが、それは配列アクセス時に自動的に範囲チェックを行っているからです。 C++ は速度効率を優先し、そのような暗黙の処理は極力行ないません。
 範囲外インデックスから読み込んでも値は不定ですし、書き込むと意図せぬデータが壊れる可能性があります。 通常はエラーにもならないので、これをやってしまうと原因特定が非常に難しい不具合に繋がります。 細心の注意が必要です。

多次元配列:C++ における2次元配列の例


 配列は多次元にすることが可能です。 プログラミング言語で仕様は異なりますが、C++ ではシンプルに以下で2次元配列を定義できます。
uint8_t aaiSquare[3][3];
 このように記述することで、OXゲーム(マルバツ・3目並べ)の盤面情報を格納できます。
 エピソード「ゲームロジック」では、要素数 9 の 1次元配列を用いて解説しました。 それは初学者用にはその方がわかりやすいと考えたからです。 しかし、配列に慣れたプログラマーであれば、 3x3 の 2次元配列の方がわかりやすいと思います。

配列の亜種:ベクタ・タプル・JavaScriptの配列


 現在のプログラミング環境には、配列と同等のものや、類似しているものがあるので、いくつかの例を補足的に解説します。
 これらは、単純な「連続した同型データ」ではありませんが、配列として、あるいは配列同等に扱われることがあります。

ベクタ:配列上位のデータ型


 C++ の std::vector などの ベクタは、配列と同様、連続した同型データです。
 加えて、要素数などの追加情報を持ちます。 要素の追加などの操作が可能な、配列の上位と言えるデータ型です。

タプル:型の異なる複数の値が並ぶデータ型


 タプルは、複数のデータが並んでいるという部分は配列同様ですが、データ型は自由に組み合わせられるもので、配列に類似したデータ型です。

Python

axStatus = ( 'HP' , 250 )
print( axStatus[0] )   # HP
print( axStatus[1] )   # 250
 なお、タプルは要素の型の組み合わせが最初に決まるため、後から要素数を変更できません。 さらに Python のタプルは、要素の値も変更できません。

JavaScriptの配列


 JavaScriptの配列は、複数データが並んでいるという意味で本エピソードの配列と同様です。
 ただしタプルのようにデータ型が自由です。 また、ベクタのように、要素追加等の操作が可能です。 本エピソードの配列とは異なる、類似のデータ型と言えます。
 一方で、JavaScript には Uint8Array 等の明示的な連続した同型データも用意されています。 こちらは本エピソードの配列と同等で、自動生成☆詰将棋 で使用しています。
 どちらも配列と同様に、「変数名[インデックス]」でアクセスできます。 自力で最適化したい場合には、型とデータサイズが固定されている同型データの方がやりやすいです。

ゲームプログラミングにおける「配列」


 ゲームプログラミングにおいて配列は、必ずと言ってよいほど使用します。
 例えば、敵キャラクターや、メニューの選択肢など、同じ形式のものが複数登場するときに、そのデータを配列で保持します。
 OXゲーム編のエピソード「ゲームロジック」用内部データでも、配置データに配列を使用していました。 ただしこの例は「JavaScriptの配列」のため厳密には亜種です。 同様に C++ 等でベクタを使用することも多いですが、それらも含めれば、ゲームプログラミングに必要不可欠と言えます。
 配列を有効に使うことで、大量の処理を短いプログラムで効率的にできます。
[PR]

マンガで感じる!本当の基礎から学ぶゲームプログラミングとは


 「マンガで感じる!本当の基礎から学ぶゲームプログラミング」シリーズでは、 主に、ゲーム開発を題材として、プログラミング時に筆者が脳内でイメージするコンピューター内部動作や本質を、マンガにてお伝えします。

プログラミングの本質をマンガで理解


 AI時代のプログラミングは、本質理解が重要です。 本質を理解していれば、あとはAIに任せて、自身を持って完成したプログラムに責任が持てるでしょう。
 そのため本シリーズでは、コーディングの実例や詳細よりも、「本質をイメージとして感じられること」を最優先としています。 まずマンガで、情報をできる限り絞り、プログラミングの仕組みやコンピューターの内部動作を、物理的に可視化してお届けします。
 そして文章の解説で徹底的に深掘りします。

登場人物紹介

【マンガで感じる】配列 ~連続した同型データ~ ループと好相性 【本当の基礎から学ぶゲームプログラミング】 登場人物 社長 クリスタル メカたち  マンガで感じる!本当の基礎から学ぶゲームプログラミングシリーズには、主に社長、クリスタル、およびメカたちが登場します。 ※実在の人物とは関係ありません

社長

 本シリーズの偉い人です。
 マンガでは、指示すなわち「要件定義」を行います。

クリスタル

 社長の指示を、メカを活用して解決します。
 名前は、コンピューター内部で指揮者の役割を果たす「水晶発振器」に由来します。

メカたち

 用途に応じて多数存在し、果たす役割がそれぞれ与えられています。
 クリスタルの指示に従い、ある時はプログラムの変数や関数のように、ある時はデジタル回路の素子や部品のように振る舞います。

「マンガで感じる!本当の基礎から学ぶゲームプログラミング」にかける想い


 筆者が本シリーズにかける想いや、 より詳しいコンセプトは「マンガで感じる!本当の基礎から学ぶゲームプログラミング」にて語っています。 そちらもぜひご覧ください。

本エピソードから読み始めた方へ


 もしあなたがプログラム初心者で、「マンガで感じる!本当の基礎から学ぶゲームプログラミング」シリーズを本エピソードから読み始めた場合は、 ぜひ最初のエピソード「プログラム」から読むことをご検討ください。

AIを専属の家庭教師にして配列を学ぼう


 本記事では、連続した同型データ「配列」について解説しました。 ループ処理との相性が良く、組み合わせると様々なプログラミングが可能です。
 マンガを読んで興味が湧いた、解説のこのキーワードが気になった、などあれば、AIを専属の家庭教師に見立てて対話してみましょう。 各人の理解度に応じた質疑応答ができて、理解が深まりますので強くオススメします。
 皆さまの配列、およびプログラミングの本質理解に、少しでもお役に立てれば幸いです。
次のエピソードへ
【マンガで感じる】配列 ~連続した同型データ~ ループと好相性 【本当の基礎から学ぶゲームプログラミング】 文字列

補足

  • 本記事に記載のプログラムソースコードは、悪意のない範囲で自由に使用・改変していただいて問題ありません。ただし、ご自身の判断と責任でお願いします。
  • 記事内容の検討および検証・添削に生成AIの Anthropic Claude と Google Gemini を利用しております。
  • 記事内の画像の作成に生成AIの Google Gemini を利用しております。
  • 数式表現にMathJaxを使用しております。
  • ※各社の登録商標または商標について「®」「™」等の表記はしておりません。


カテゴリー:マンガで感じる!本当の基礎から学ぶゲームプログラミング,【プロ指向者向け】データ型編
[PR]