RSS

 

RSS


 「パンの耳」と呼んでいる方法について説明。パズルゲーム、落ちゲー、フィールド系のものに使える。拙作のオシテメッセには使った。プログラミング手法「番人」と呼ばれるテクニックの応用になる。

  この方法を使うとコードが涼しく書ける。涼しくは感覚的なものだけど、意味としては、「わかりやすい」「バグが入りにくい」ということか。

 まずは設定。
(1)5×5の格子状マスメのフィールドがある。
(2)主人公キャラ(図では主)がいてコントローラで上下左右に移動。
(3)ところどころ宝が置いてあって、そこに行くと+10点。

A.パンの耳を使わない場合

 フィールドのデータはこんな感じ。
MASUME masume[5][5]={
" "," ","宝"," "," ",
" "," "," ","宝"," ",
" "," "," "," ","宝",
" ","主"," "," "," ",
" "," "," "," "," ",
};

B.パンの耳を使った場合

masume上下左右に1つづつデータを増やし、そこに壁のデータをいれる。仕組みとしてはこれだけ。口語で表現すると「フィールドの外側もデータで埋めとけば?」。

MASUME masume[7][7]={
"壁","壁","壁","壁","壁","壁","壁",
"壁"," "," ","宝"," "," ","壁",
"壁"," "," "," ","宝"," ","壁",
"壁"," "," "," "," ","宝","壁",
"壁"," ","主"," "," "," ","壁",
"壁"," "," "," "," "," ","壁",
"壁","壁","壁","壁","壁","壁","壁",
};

 Aの場合は外に出たかどうかの判定を不等式に頼らなければならない。

 if(nx<0 || 4<nx || ny<0 || 4<ny){
     そこは範囲外;
 }
  ここで、nx,nyはコントローラによる次回に行きたいところの座標。

 「不等号の向きが逆」「値を±1違えてしまう」ことはよく見受けられるバグ。その心配がないという意味で、「パンの耳法」は確実に涼しいコード。

 Bの場合は、masumeの値をもってくればマスメの外に出ようとする瞬間を捕まえることができる。

  if(masume[nx][ny]=="壁"){
     そこは範囲外;
  }   

 また、masumeの値によって一気に判定ができる。

 switch(masume[nx][ny]){
   case "壁":
   そこは行けないので、もとの座標のまま、つっかえモーション。
   break;
   case " ":
     その方向に歩く。
   break;
   case "宝":
   その方向に歩く。おっと、宝だ。宝ゲット音。+10点アクション。
   break;
 };

 もしも、フィールドの全体の形が変わってもデータをとりかえてあげればよい。例は45度回転正方形。

MASUME masume[][]={
"壁","壁","壁","壁","壁","壁","壁","壁","壁","壁","壁",
"壁","壁","壁","壁","壁"," ","壁","壁","壁","壁","壁",
"壁","壁","壁","壁"," "," "," ","壁","壁","壁","壁",
"壁","壁","壁"," "," "," "," "," ","壁","壁","壁",
"壁","壁"," "," "," ","宝"," "," "," ","壁","壁",
"壁"," "," "," "," "," ","宝"," "," "," ","壁",
"壁","壁"," "," "," "," "," ","宝"," ","壁","壁",
"壁","壁","壁"," ","主"," "," "," ","壁","壁","壁",
"壁","壁","壁","壁"," "," "," ","壁","壁","壁","壁",
"壁","壁","壁","壁","壁"," ","壁","壁","壁","壁","壁",
"壁","壁","壁","壁","壁","壁","壁","壁","壁","壁","壁",
};
haniwa


  • コメント (0)
  • トラックバック (0)
トラックバックURL :
http://www.iwai-masaka.jp/tb.cgi/182