ゲームが作れるようになるまでがんばる日記

ゲーム制作のことを中心にゲームに関することを書いています

ブロックの形状データ

今読んでいる本にテトリスのブロックの形状データをどのように持つか載っていた。
単純に考えれば2次元配列でブロックの有無を表現する方法がある。しかしブロックの形状を取得するのに配列全部を検索しないといけないので、無駄が多すぎる。

// L字型のブロック
int block[4][4] = {
  { 0, 1, 0, 0 },
  { 0, 1, 0, 0 },
  { 0, 1, 1, 0 },
  { 0, 0, 0, 0 }
};

for(int y=0; y<4; y++) {
  for(int x=0; x<4; x++) {
    if (block[x][y]==1) {
      // blockあり
    } else {
      // blockなし
    }
  }
}

本で解説されていた方法は、テトリスのブロックは4つの四角からできているので、それを中心ブロックからの4つの相対座標で表現するというもの。これならば、形状取得するときも4回の検索で済む。

// L字型のブロック
int block[4][2] = {
  {0, -1},
  {0, 0},
  {0, 1},
  {1, 1}
};

for(int i=0; i<4; i++) {
  // blockの座標(x,y)
  int x = block[i][0];
  int y = block[i][1];
}