0

我正在 WPF 中制作具有拖放功能的图片益智游戏。上传图像时,它会被切割成 9 块,每个位图都添加到 System.Drawing.Images 的集合(collection1)中。我比较的是这个集合,看看重新排列时的图像是否正确。然后我将每个位图随机分配到网格上的一个位置并放入 System.Drawing.Images 的另一个集合(collection2)中。

当我将图像拖放到网格上时,我会更改图像在 collection2 中的位置。在网格上移动图像后,我检查(验证)以查看每个集合中的图像位置(索引)是否匹配。如果是这样,图片已重新排列。希望我有正确的解释。

我的问题是该方法总是返回 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

据我了解,您有一个集合以特定顺序存储一组已知图像,并且您有另一个集合(来自第一个集合的相同图像)代表用户放置它们的顺序,您想确定订单是否匹配。如果他们这样做了,用户就成功地解决了这个难题。

嗯......很容易 - 创建一个带有索引的类并进行比较。

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 回答