>>155
方法1のチップサイズを小さくして、組み合わせで判定に関しては、
データサイズが大きくなりすぎですね。
あと、ツール(マップエディター)で、データを作る時に
あんまり、チップサイズを小さくしすぎると、激ムズのパズルの様になりませんか?

方法3のマップナンバー別にコードを書くとすると、

switch(MapTable[i]){
   case 0:
   case 1:
   case 2:
    ・
    ・
    ・
}

という事ですよね? これはツライ・・。

で、残るのが方法2の構造体って事になりますが、
具体的に書くと、

struct MAPDATA{
   int  MapNum;  //マップナンバー
BOOL HitFlag;  //ヒットフラグ(当たり判定が有るか無いか)
   RECT rect;   //判定用の矩形保存
};

MAPDATA Mapdata[MAX_MAP_SIZE];

for(int i = 0; i < MAX_MAP_SIZE; i++){
  if(Mapdata[i].HitFlag){   //フラグONならヒットチェックする
    Judge_Hit(&Mapdata[i].rect, その他いろいろ);
  }
}

という感じで出来るんで、都合いいですね。
自分のマップエディターに当たり判定領域を設定出来る機能を
追加する事を考慮してみます。
それに、なるべく外部にデータを置きたいのと、面倒くさい事は
なるべくツールで済ませたいんで、やっぱりコレがベストかと。