2012-12-19 33 views
0

我正在用WPF中的拖放功能製作圖片益智遊戲。當圖像上傳時,它被分割成9個部分,每個位圖被添加到System.Drawing.Images的一個集合(collection1)中。這是我比較的這個集合,以查看重新排列後的圖像是否正確。然後,我隨機將每個位圖分配到網格上的一個位置,並放入System.Drawing.Images的另一個集合(collection2)中。問題比較兩個System.Drawing.Image集合中的項目以查看它們是否匹配

當我在網格上拖放圖像時,我更改了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; 
    } 
+0

你可以發佈代碼更新collection2與新索引的代碼嗎? –

回答

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; 
相關問題