見出し画像

【C言語プログラミング5】ルフィを描く!解説2

今回は二次元配列、for文、if文について説明します。

二次元配列

二次元配列とは簡単に言うと碁盤の目のイメージです。一次元配列が横にズラッと並ぶなら、二次元配列は縦横にズラッと並びます。二次元配列の宣言は以下の通りです。

char sample[5][5];

この様に記述すると、縦5×横5の変数がメモリ上に配置されます。以下のイメージとなります。

二次元配列

ルフィ描画プログラムにおける二次元配列の利用

ルフィの絵は縦100×横100のマス目で表現しています。そのため、ルフィ描画プログラムでは次のような二次元配列を宣言しています。

unsigned char gucImage[IMAGE_HEIGHT][IMAGE_WIDTH];

IMAGE_HEIGHT、IMAGE_WIDTHは100のことです。つまりこうしているのと同じ意味です。

unsigned char gucImage[100][100];

ソースコードの先頭の #define   IMAGE_HEIGHT  100のような記述をディファイン定義と言って、ある値を別の文字に置き換えることが出来ます。何故100を直接書かなかったのかは、また後で。とにかく、ルフィの絵は100×100のマス目で描くんだなということが分かったと思います。

for文(繰り返し処理)

DecompressLuffyData関数の中にfor()こんな記述があると思います。これはforループと言って、ある処理を繰り返したい時に使う構文です。

for(初期化式; 継続条件式; 変化式) {
    /*  ここに繰り返したい処理を書く  */
}

for文の簡単な例を書いてみます。例えば配列があって、その配列にデータを入れたい時は以下の様にします。

int count;
char sample[5];

for (count = 0; count < 5; count++) {
    sample[count] = 123;
}

まず、ループカウンタとしてint型のcountという変数を宣言し、char型のsampleという配列を宣言しています。次にfor文に入ります。このループでやっているのは、sample[0]~sample[4]に全て123を入れるということです。for文の最初でcount = 0;としていて、継続条件はcount < 5;となっています。つまり、このループはcountが5より小さい場合は継続することになります。最後のcount++は一回ループしたらcountを1プラスするという意味です。count = count + 1;としているのと同じです。

最初count=0です。0<5(0は5よりも小さいですか?YES)なので、継続条件が成立します。ループ処理ではsample[count] = 123;としています。これはsampleのcount番目の配列に123を入れることになります。count=0なので、sample[0] = 123;としているのです。この後countが1プラスされるので、次のループでは1<5という継続条件判定になります。まだ成立します。これを繰り返すといずれ、5<5という継続条件判定になります。5は5よりも小さくないですね。これは条件として成立しないので、ここでループが終了します。

for文の基本的な使い方は以上です。for文は配列の○○番目にアクセスする場合などに良く使います。

では、少し上の例を変更してfor文を使ってsample[0] = 1、sample[1] = 2、・・・sample[4] = 5が入るような処理を作れと言われたらできますか?以下のようになりますね。

int count;
sample[5];

for (count = 0; count < 5; count++) {
    sample[count] = count + 1; 
}

if文

if文はある条件が成立した場合に○○をする。成立しなかったらXXをするといった、やることを分岐させたい場合に使います。

if (条件式) {
    /* 条件が成立した場合の処理を記述する */
}
else {
    /* 条件が成立しなかった場合の処理を記述する */
}

基本的にはこれだけです。また、else{ }でやるべきことがなければ省略することができます。

if (条件式) {
    /* 条件が成立した場合の処理 */
}

条件式にどういったものがあるのか代表的なものをリストにします。

条件式

int a = 5;
int b = 10;

if (a == b) {
    printf("aとbは等しい");
}
else {
    printf("aとbは等しくない");
}

上のコードを実行するとコンソール上にはどちらが表示されるか分かりますか?下ですね。こんな風にif文は使います。なお、ルフィ描画プログラムでは条件式の演算子としては「==」しか使っていません。

今回は二次元配列、for文、if文について説明しました。次回はビット演算、論理演算について解説します。

この記事が気に入ったらサポートをしてみませんか?