ゲームプログラミングの館、24節に関する質問

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
fffff

ゲームプログラミングの館、24節に関する質問

#1

投稿記事 by fffff » 17年前

 こんばんわ。ゲームプログラミングの館にて、ありがたく勉強をさせていただいております。
 最近ではプログラムの解読がようやく、少しずつ出来るようになってきた次第です。
 ですが、24節「行けない所を作る。~2D~」のプログラム部分にて、理解できない部分があったので、
 恐れ多くも再度こちらに質問を投稿させていただきました。

――――――――――――――――――――――――――――――――――――――――――――――
/*白い壁を描画*/
for(i=0;i<15;i++)
for(j=0;j<20;j++)
if(hantei[j]==1)
DrawBox(j*32,i*32,(j+1)*32,(i+1)*32,GetColor(255,255,255),TRUE);
――――――――――――――――――――――――――――――――――――――――――――――

 質問なのは、一番最後の行の「DrawBox」内のものです。
 J*32、i*32、GetColor~は意味が何となく分かるのですが、

 その後の (j+1)*32,(i+1)*32, が何を意味しているのかが分からず、頭を抱えています。
 この部分を消してしまうとエラーが出てしまいますし、どんな役割を担っているのかが分かりません……。

 申し訳ありませんが、どなたかご教授いただけないでしょうか?

管理人

Re:ゲームプログラミングの館、24節に関する質問

#2

投稿記事 by 管理人 » 17年前

こんにちは。
「なんとなく」ではなく、しっかりと理解出来るまで突き詰めたほうが後々楽なので、
是非しっかり勉強して力にして下さい。

DrawBoxは左上のx,y座標(x1,y1)と右下のx,y座標(x2,y2)を渡せば
そこに四角形を書いてくれる関数ですよね。
つまり

DrawBox(x1,y1,x2,y2,略,略);

ですから、10,20から120x120のサイズの四角形を書きたければ

DrawBox(10,20,130,140,略,略);

となるわけです。
ここで、30x30の四角形を横に5個書くにはどうしたらいいでしょうか。
一番左の四角形は

DrawBox(0,0,30,30,略,略);

ですね?同じ意味ですが、違う書き方をして見ましょう。

DrawBox(30*0,30*0,30*1,30*1,略,略);

コレおなじことですね。じゃ横に5個書いて見ましょう。

DrawBox(30*0,30*0,30*1,30*1,略,略);
DrawBox(30*1,30*0,30*2,30*1,略,略);
DrawBox(30*2,30*0,30*3,30*1,略,略);
DrawBox(30*3,30*0,30*4,30*1,略,略);
DrawBox(30*4,30*0,30*5,30*1,略,略);

こうなりますよね?これfor文で書くと

for(i=0;i<5;i++)
    DrawBox(30*i,30*0,30*(i+1),30*1,略,略);

こういうことですよね。
これを縦方向にも5つ書き、計25個書くと

for(i=0;i<5;i++)
    for(j=0;j<5;j++)
        DrawBox(30*i,30*j,30*(i+1),30*(j+1),略,略);

こうなるわけです。左側の「略」は色を指定する部分です。
GetColor関数に0~255の色情報を渡せばその色の値が返ってきます。
光の3原色は全てあわせると白になりますから、

GetColor(赤,緑,青)としてGetColor(255,255,255)を渡すのです。するとシロになります。

最後の略にはTRUEかFALSEが入ります。
TRUEにすると、塗りつぶし、FALSEにすると外枠だけになります。
今は塗りつぶしたいのでTRUEにしています。
こうして

for(i=0;i<5;i++)
    for(j=0;j<5;j++)
        DrawBox(30*i,30*j,30*(i+1),30*(j+1),GetColor(255,255,255),TRUE);

となるわけです。
お解かりいただけたでしょうか?

「何となく解ったから次に行こう」

を繰り返していくと、「あれ?最後まで読んだのに全然わからない」ということに
なりかねませんので、是非着実に進めて下さい。

解らない事があったらご質問下さい。
 
 

fffff

どうもありがとうございます

#3

投稿記事 by fffff » 17年前

なるほど。
DrawBox内の箇所はそれぞれの「始点」と「終点」を意味していたんですね。
それだけではなく、ちゃんと For 文の箇所も分かり安く説明していただけて、大変助かりました。
特に「同じ意味だけど違う書き方」という表現がプログラミングにはあるということを忘れていたので、
今更ながら自分の学力不足を思い知らされました。

関数の説明を表記しているサイトがあることも思い出しましたし、
次はもう少し自力で進めてから質問してみるようにします。

どうもありがとうございました。
今後もまた分からないところで行き詰ると思いますが、そのときはまたよろしくお願いします。
ありがとうございました。

閉鎖

“C言語何でも質問掲示板” へ戻る