見出し画像

Swiftで行こう!--パズルゲーム(16パズル)まとめ!

重要点をまとめておこうと思います。

ここで大事なポイントとなるのはマス目の画像をどうやって動かしていくかということなのでその仕組みを考えます。

まず、画面マス目のどこかをタッチしたところの座標を求めて、行番号、列番号を決めていきます。

あと、空マスの行番号、列番号を求め、その位置より上下左右に画像の配置を変えていきます。

それではタッチした時の座標より行番号、列番号の求め方です。

 let pos = touches.first!.location(in: _gameView)
         if 30 < pos.x && pos.x < 330 && 180 < pos.y && pos.y < 480 {
            let tx = Int((pos.x-30)/75)
             let ty = Int((pos.y-180)/75)
          }

タッチした座標を75で割り分割した数字を求めます。これは画像が75pxで分割しているのでそれに合わせて、行番号、列番号を振り分けます。

空マスに関しては、

 var fx = 0
       var fy = 0
       for i in 0..<16 {
           if _data[i] == 15 {
               fx = i%4
               fy = Int(i/4)
               break
           }
       }

_data[i] == 15、_data[]に入ってる15番目を空マスにするので、その番号から4×4のマス目に合わせ、x座標については4で割ったあまり、y座標は4で割った数字を行番号、列番号とします。

これらの番号を求めた上で、タッチした番号、空マスの番号の差分を求めて画像を動かしていきます。

例えば上にスライドさせる場合は、

  if fx == tx && fy < ty {
           for i in fy..<ty {
               _data[fx+i*4] = _data[fx+i*4+4]
           }
           _data[tx+ty*4] = 15
       }

for in文でそれぞれの画像の入れ替えと空マスの設定をします。

適宜for i in stride文も使い画像の入れ替えをします。この辺、4×4などのマス目の処理は他のゲームを作るときにも参考になりますね。

この記事が気に入ったらサポートをしてみませんか?