0

WPFでドラッグアンドドロップ機能を備えた絵パズルゲームを作っています。画像がアップロードされると、画像は 9 個に分割され、各ビットマップが System.Drawing.Images のコレクション (collection1) に追加されます。並べ替えた時のイメージが合っているか比較するのはこのコレクションです。次に、各ビットマップをグリッド上の位置にランダムに割り当て、System.Drawing.Images の別のコレクション (collection2) に配置します。

グリッドに画像をドラッグ アンド ドロップすると、コレクション内の画像の位置が変わります2。グリッド上で画像を移動した後、各コレクション内の画像の位置 (インデックス) が一致するかどうかをチェック (検証) します。もしそうなら、写真は再配置されています。うまくいけば、私はそれを正しく説明しました。

私の問題は、画像が完成するように画像が配置されている場合でも、メソッドが常に false を返すことです。

さらにコードを提供したり、より適切に説明したりする必要がある場合は、お知らせください。分かりやすく説明したいのですが頭がおかしいです

    public bool Validate(ObservableCollection<System.Drawing.Image> itemPlacement)
    {
        ObservableCollection<System.Drawing.Image> placement = itemPlacement;

        foreach (System.Drawing.Image item in placement)
        {
            if ((placement.IndexOf(item) != puzzlePiece.IndexOf(item) || placement.IndexOf(item) < 0))
            {
                return false;
            }
        }

        return true;
    }
4

1 に答える 1

0

私が理解していることから、一連の既知の画像を特定の順序で保存するコレクションが1つあり、ユーザーが配置した順序を表す別のコレクション(最初のコレクションと同じ画像)があり、注文がマッチ。もしそうなら、ユーザーはパズルをうまく解いたことになります。

まあ...簡単です-インデックスを使用してクラスを作成し、代わりにそれを比較します。

public class PuzzlePiece
{
  public int Index { get; set; }
  public Image Piece { get; set; }
}

for(int i = 0; i < puzzlePieces.Count; i++)
{
  if(puzzlePieces[i].Index != playerPieces[i].Index) return false;
}
return true;

さらに、インデックスに基づいて IComparable と並べ替えを実装できますが、画像が順番に追加される小さなコレクションでは必要ない可能性があります。ただし、 IComparable を使用すると、次のように言えます。

if(puzzlePieces[i].CompareTo(playerPieces[i]) != 0) return false;
于 2012-12-19T14:25:47.807 に答える