ページ 11

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

Posted: 2008年3月31日(月) 22:26
by fffff
 こんばんわ。
 今朝質問に応答していただいたばかりでお恥ずかしい限りなのですが、
 読み返していて曖昧なまま理解していたつもりになっていた箇所を発見したので、
 早くも新たに質問を投稿させていただきました。

 ゲームプログラミングの館・23節「行けない所を作る。~1D~」の箇所に関する質問です。

――――――――――――――――――――――――――――――――――――――――――――――
int can_or_cannot(int x,int y,int muki){
  if(muki==1)
    if(hantei[x/32+1]==1)
      return 1;
  if(muki==3)
    if(hantei[x/32-1]==1)
      return 1;
  return 0;
}
――――――――――――――――――――――――――――――――――――――――――――――

 ここの hantei 関数の箇所にある [x/32+1] と [x/32-1] なんですが、
 これはどうしてそれぞれ +1,-1 と定義されているのでしょうか?
 x が既に hantei として「20個」定義されているので、x を32で割った箇所に該当する値が 1 かどうかをチェックする、
 というところまでは理解できています。
 ただ、この後ろについている +1,-1 がどういうことなのかが分かっていませんでした。

 申し訳ありませんが、どなたかご教授願えますでしょうか?

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

Posted: 2008年3月31日(月) 22:51
by 管理人
渡されるxはx/32が用意した領域内にあること前提です。


32ピクセルを一つとして考えた時、座標10は0番目の要素に属しますね?
36や40は1番目の要素に属します。
つまり座標を32で割れば属する要素になるわけです。int型において
10/32=0
36/32=1
40/32=1
ですよね。
つまり今自分がいる要素の右隣を調べたければx/32+1となりますし、左隣ならx/32-1となります。

mukiが1の時は右、3の時は左と定義しているのでそうなっているわけです。
if(muki==1)//左向きなら
                if(hantei[x/32-1]==1)//通れないなら
                        return 1;//エラー
        if(muki==3)//右向きなら
                if(hantei[x/32+1]==1)//通れないなら
                        return 1;//エラー
 
色付きの部分が逆な気がしますけど、定義を変えればいいのでどちらでもいいです。

ありがとうございます

Posted: 2008年4月01日(火) 21:57
by fffff
 管理人様、度々ありがとうございます。
 要するに、ここで言う +1,-1 とは、
 それぞれの要素の「右隣の要素」と「左隣の要素」であることを現していたんですね。

 C言語はゼロから数えるということをちゃんと認識できていなかったようです……
 もっと精進して、いつか自分でゲームが作成できるように頑張りたいと思っています。
 今後ともよろしくお願いいたします。

 どうもありがとうございました。