とりあえずブログ

プログラミングとiPhoneアプリの作り方を勉強中です。

試行錯誤 10.3 (ちょっとシュッと(未完成)・ジグソーパズル)

前回の記事で

>特にピースが正解座標の±10の範囲に入る所のif文って.....φ(T▽T)煙煙煙
>もっとシュッとしたプログラムが書けるようになりたいな〜と思います。

と嘆いていましたら、アプリ道場のToshiさんよりアドバイスをいただきました。


こんなごっちゃりコードを見ていただき、本当にありがとうございますm(T T)m
エリアで判定、1次元から2次元にワープです!•̀ω•́ ✧

早速作ってみました。
が...
1. 作るタイミングで試行錯誤
  ピースを作る時点でエリアをピースに乗っけてやろうとしたのですが、ピースとエリアがうまく連動してくれません。
  ここ、もう少しやってみますm(__;)m
2. エリアをどこに作るかで試行錯誤
  ピース側に作ると、判定がうまくいきません。
  ここも、もう少しやってみますm(__;)m

今の所、一応動いたやり方を書いてみます。
ドラッグしたピースを離す時に、ピースではなく台の方に15×15のエリアを作り、正解座標がその中に入ったら正解になるようにしてみました。
エリアは赤く色をつけています。

    ///ピースをドラッグしたら呼ばれる関数
    func dragPieces(sender:UIPanGestureRecognizer){
        
        //ピースをドラッグし終わったら
        if sender.state == UIGestureRecognizerState.Ended{
            
            let targetImg:UIView = sender.view!
            
            //ドラッグしているピースの正解の中心x座標
            let answer_x = 10+75*((targetImg.tag-1)%4)+75/2
            //ドラッグしているピースの正解の中心y座標
            let answer_y = 50+75*((targetImg.tag-1)/4)+75/2
            
            //正解エリア
            let answerArea = UIView(frame: CGRectMake(0, 0, 15, 15))
            answerArea.center = CGPointMake(CGFloat(answer_x), CGFloat(answer_y))
            answerArea.backgroundColor = UIColor.redColor()
            self.view.addSubview(answerArea)
            
            //ピースの中心座標が正解エリアの中に入ったら正解とする
            if CGRectContainsPoint(answerArea.frame, targetImg.center){
                
                //正解座標に移動
                targetImg.center = CGPointMake(CGFloat(answer_x), CGFloat(answer_y))
                //正解後は動かないように
                targetImg.userInteractionEnabled = false
                
                //正解数をカウント
                correctCount++
                
                //全ピースが正解したら
                if correctCount == 16{
                    print("Congratulations!")
                }
            }

コードはちょっとすっきり^^

動かしてみます。

正解の判定は出ますが、このやり方だとピースを離すたびにエリアがaddSubviewされていってしまいますね。
「うーん、どこだろう?」
と迷えば迷うほど、赤いviewがどんどん積み上がっていく感じでしょうか^^;

もう少しやってみます〜m(__)m