1

こんにちは、iPhone用のジグソーパズルを開発しています。

ここで、ジグソーパズルが完成したかどうかを除いて、アプリをほぼ完成させました。

ここでは、各ピースは でありUIImageView、固有のタグが付いています。

xy座標を使用してみましたが、ユーザーは画面のどこからでもパズルの修正を開始できるため、役に立ちません。

では、画像が正しく配置されているかどうかを検出する方法はありますか?

編集:最終的に私は座標を使用してそれをやったことに感謝します。場所とタグを追跡することによって。

4

4 に答える 4

1

おそらく、ある種の「グリッドにスナップ」メカニズムがあり、各ピースを閉じたら正確に正しい位置に配置します(実際のジグソーパズルで効果的に発生します)。これが、各ピースのUIImageViewの原点の特定のx、y座標として定義されているとしましょう。

次に、各ピースが正しい位置にある(その位置にスナップされている)ときに、そのピースのブール値「inPlace」を「YES」に設定します。

すべてのピースの「inPlace」の値がYESの場合、ジグソーパズルは完了です。

于 2012-10-11T13:00:34.010 に答える
0

xy座標を使用してみましたが、ユーザーが画面のどこからでも修正を開始できるため、使用できません。

1つの「ベース」ジグソーを選択し、他のジグソーに対して相対座標を取得する必要があります。完了チェック-すべてのピースは、現在と同じ相対位置で保存されます。どうやら、それだけです。

ランダムなピースから始めてパズルを修正し、パーツごとに集めたい場合の別のケース(引き裂かれた画像や文字など-ピースは異なる形状をしています)。この場合、ジグソーごとに、最も近いネイバーIDとそれらの相対位置を保存する必要があります。2つの隣接するピースが配置されている場合は、それらを結合します。勝つための条件-すべてのピースのすべての隣人は相対的な場所にあります。

于 2012-10-11T13:26:01.553 に答える
0

IDでピースにラベルを付けるのはどうですか

各ピースには次のようなものがあります

JigsawPiece.Id = 1

そして、このようにラベルを付けます(3x3パズルの場合)。

-------------
| 0 | 1 | 2 |
-------------
| 3 | 4 | 5 |
-------------
| 6 | 7 |   | 
-------------

これらのピースを2D配列に追加します

class JigsawPuzzle:
    array[3][3] JigsawPiece;

そして最後に、数が1つ増えているかどうかを調べて、解決策に到達したかどうかを確認します。

check_id == 1
for int i = 0; i<numrows ; i++
  for int j = 0; j<numcols; j++{  
    if i==numrows - 1 and j==numcols-1: break #last one, which should be empty, skip it             
    solved = jigsawpieces[col][row].id == check_id
    check_id += 1
    if !solved: break;
  }

if solved: You solved it!

私はObjCを知らないので、すべてが擬似コードです

これらの線に沿った何かがトリックを行う必要があります!

于 2012-10-11T13:02:13.357 に答える
0

ここで私の質問をチェックしてください: UILabels が互いにどれだけ近いかを確認してください

ラベルについて尋ねていることを除いて同じですが、画像でそれを使用することができます。ただし、別の翻訳スキームがあると確信しています

于 2012-10-11T13:04:08.413 に答える