我制作了一个拼图应用程序,首先从计算机中选择一个图像,然后单击“开始”,它将获取图像的一部分并将其添加到列表视图中。然后你从listview中获取图像并将它们放在自由空间中。但是问题出在listview中,图像是有序的(图像部分从右到左,从上到下)。
我的问题是如何在列表视图中随机混合项目(图像)?
答案 0 :(得分:2)
以随机顺序将拼图分开然后将其存储在LV中会更容易。要做到这一点,你必须为每个拼图分配一个索引值,比如ID。使用此功能将拼图分开并知道他们选择了哪一个。
这将创建一个List(Of Integer),它代表拼图ID,然后将其洗牌:
Function RandomList(MaxVal As Integer) As List(Of Integer)
Dim rand As New Random()
Dim list As New List(Of Integer)
Dim temp As Integer
Dim ndxRand As Integer
For n As Integer = 0 To MaxVal - 1
list(n) = n
Next
For thisNDX As Integer = 0 To MaxVal - 1
ndxRand = rand.Next(thisNDX, MaxVal)
temp = list(ndxRand)
list(ndxRand) = list(thisNDX)
list(thisNDX) = temp
Next thisNDX
Return list
End Function
使用类似这样的东西:
Dim list As List(Of Integer) = RandomList(PieceCount)
For n As Integer = 0 To PieceCount - 1
puzzlePiece = Puzzle.ReMovePiece(List(n))
AddPieceToLV(puzzlePiece)
Next n
当然这只是猜测,因为我们不知道代码是什么样的。
由于各种原因,直接随机化LV是有问题的。我想这些碎片是图像,我不知道如何对图像进行排序;你必须为它们分配一个值来排序。接下来,LV本身只按Item而不是SubItems排序,这是图像可能的位置,因此它们以LgIcon视图显示(?...猜测)。接下来,LV只进行文本排序(除非你也编写了一个ListViewItemSorter),这将是一个超过10件的问题。更容易将它拆开并随机存储。
答案 1 :(得分:0)
谢谢大家,我发现了如何做到这一点: 我创建了一个新的listview并将其命名为listview2(第一个是listview1)。 然后我将所有图像添加到listview2而不是lv1,之后我将lv2的项目随机添加到lv1并且它可以工作
对于i = 0到ListView2.Items.Count - 1 昏暗值As Integer = CInt(Int((ListView2.Items.Count - 1)* Rnd()))
ListView1.Items.Add(ListView2.Items(value).Text, ListView2.Items(value).ImageIndex)
ListView2.Items(value).Remove()
Next i
此致