StudioGIW(スタジオギウ)
 [ StudioGIW TOPページへ ] 

【 ゲームプログラムって何? 】 第1回 〜画像を画面に表示するには〜


■このe-BOOKの目的

ゲームプログラムの一部を紹介し、「何となくプログラムを分かってもらう」ことが目的です。

また、これを知ることで、パソコン自体への理解も深まると思います。

パソコン用語などの基本説明は省いてますので、分からない部分は自身で調べてください^^


画像を画面に表示するには

今回は、2Dの絵を2Dの画面へ、独自の処理で描画する例です。
(3Dゲームの場合も、独自で描く場合は必要な基礎知識です)

色数が256色、画面サイズが640×480ドットのゲームで考えてみます。
※スタジオギウのゲームでは、アヴァリスヴァスタークロウズがこの環境で動作しています。

256色のゲーム画面に必要なデータは、
 ・256個×3バイトのパレット
 ・640×480×1バイトの描画マップ
 ・任意サイズ×1バイトのドット絵(描画するキャラ絵など)
です。

※因みに、1バイトは、「0〜255までの値を1個だけ格納できるデータ領域」です。

1個のパレットには、3バイトの色情報がRGB(赤、緑、青)の順に入っていて、
例えば、(0,0,0)なら黒色、(255,0,0)なら赤色、(0,255,0)なら緑色、(255,255,0)なら黄色になります。
※まずは、何となく分かればOKです^^

このパレットが、256個(0番〜255番まで)あるのが、256色のゲームです。


描画マップは、640×480×1バイトなので、合計 307,200バイトの領域が確保されています。
この描画マップの全てに、「パレット番号」が入っています。

例えば、画面を真っ黒にしたい場合、
0番のパレットを、黒色(0,0,0)にして、描画マップを0で塗りつぶせばOKです。

画面を真っ黒にした時の描画マップ(640×480)の中身↓

0,0,0,0,0,・・・,0, (横1行は640バイト)
0,0,0,0,0,・・・,0,
 :
 :
(縦は480列)

次に、画面の左上の1ドットに、赤色(255,0,0)の点を付けてみます。
画面の左上は、描画マップの左上なので、
1番パレットを赤色(255,0,0)にして、

1,0,0,0,0,・・・,0,
0,0,0,0,0,・・・,0,
 :
 :

という感じで、描画マップの左上に 1 を入れれば、1番パレットは赤色なので、画面の左上に赤い点が付きます。

ここまで、雰囲気は掴めたでしょうか?
(詳細を省いてますので、何となく分かればOKです^^)


次に、この描画マップへ、「ドット絵」を描いてみましょう。

ドット絵も同じように、マップとパレットの情報を持っています。
※ゲーム画面(描画マップ)のパレットと、ドット絵のパレットが異なると色が変わってしまうので、通常は同じパレットを使用します。

ドット絵のマップデータは、2×2のサイズで↓だとします。
20,50,
12,80,

これを、画面の左上(x = 0, y = 0)の位置に描画するには、
20,50,0,0,0,・・・,0,
12,80,0,0,0,・・・,0,
0, 0,0,0,0,・・・,0,
 :

という感じで、値をそのままコピーすればOKです^^

但し、実際にプログラムでコピーするには、横が640バイトあることを考慮しないといけません。
※実際の描画マップは、2次元の線(ビデオテープみたいな感じ)でデータを格納しているので。

仮に、
 ・描画マップの表記を map
 ・ドット絵の表記を dot
として、[ ] 内の番号で、マップ内の位置を示すこととします。

※mapは、上に書いた、307,200バイトなので、map[0]〜map[307199]まであります。
(dotは 4バイトなので、dot[0]〜dot[3]まで)
※map[0]が画面左上で、map[307199]が画面右下となります。

描画マップの左上に、ドット絵を描画するプログラムは、

map[0] に dot[0] の値を入れる。
map[1] に dot[1] の値を入れる。
map[640] に dot[2] の値を入れる。
map[641] に dot[3] の値を入れる。

となります。

上記をC言語(ゲームでよく使われてるプログラム言語)で書くと、ほぼそのまま、

map[0] = dot[0];
map[1] = dot[1];
map[640] = dot[2];
map[641] = dot[3];

という感じです^^

如何でしょう、何となく分かって頂けたでしょうか?

けど、これだと大きい絵を描画するのが大変ですよね。

ということで、次回は「大きい絵を描画するには」を書いてみたいと思います^^


 Web公開:2009年 4月5日
 StudioGIW(スタジオギウ) / M.Sekiya


 


StudioGIW(スタジオギウ)
[ StudioGIW TOPページへ ]