今読んでいる本にテトリスのブロックの形状データをどのように持つか載っていた。
単純に考えれば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]; }