画面にタッチしたときの処理
//タッチしたときの処理
fuction touchHandler(t){
//タッチ座標取得
var px=t.pageX, py=t.pageY;
//何番目のピースを動かしたいか計算
var px2=Math.floor(px/BLOCK_W);
var py2=Math.floor(py/BLOCK_H);
var no=getNo(px2,py2);
//空白ブロックなら動かさない
if(blocks[no]==-1) return;
//上下左右に動かせるブロックがあるか確認
for(var i=0;i
if(yy<0||yy>=ROW_COUNT)continue;
//移動可能か
if(blocks[no]==-1){
blocks[no] = blocks[getNo(px2,py2)];
blocks[getNo(px2,py2)]=-1;
drawPuzzle();
checkClear();
break;
}
}
}
何番目のピースを動かしたいか計算するところでは
画面の左上が基点なので
ブロックの幅や高さで割るだけで
何番目のピースか計算できる
正確には、ピースを座標で判断だけど
ブロックが動かせるか確認するには、
上下左右に空白ブロックがあるか調べる
それが、if(blocks[no]!=-1)
のif制御のところ
で、もし空白ブロックがあるなら
スコープ内の処理をする
処理は
移動可能なら、空白ブロックと
タッチしたブロックのピースを代入して入れ替える
つまり、座標の交換代入ということ
ソースにすると
blocks[no]=blocks[getNo(px2,py2)];
これで、座標取得
つぎに、
blocks[getNo(px2,py2)]=-1;
これで、取得したブロックへ
空白ブロックフラグを設定
そして、drawPuzzle()
で描画する
フラグ立てただけじゃ絵が変わらないから描画しないと駄目