我的程序有问题,我试图改组一堆图片框,然后解开它们我已经尝试过Fisher-Yates shuffle而没有运气。请给我举个例子。
我正在使用带有面板的标准表格,图片框,文本框和三个按钮。
Imports System.Drawing
Imports System.Windows.Forms
Public Class Form1
Private Sub TestSplit()
Dim fr_bm As New Bitmap(PictureBox1.Image)
Dim wid As Integer = PictureBox1.Image.Width \ 8
Dim hgt As Integer = PictureBox1.Image.Height \ 6
Dim colnum, rownum As Integer
For rownum = 0 To 5
For colnum = 0 To 7
Dim to_bm As New Bitmap(PictureBox1.Image)
Dim gr As Graphics = Graphics.FromImage(to_bm)
Dim fr_rect As New Rectangle(colnum * wid, rownum * hgt, hgt, hgt)
Dim to_rect As New Rectangle(0, 0, wid, hgt)
gr.DrawImage(fr_bm, to_rect, fr_rect, GraphicsUnit.Pixel)
Dim MyPictureBox As New PictureBox
MyPictureBox.Height = hgt
MyPictureBox.Width = wid
MyPictureBox.Left = colnum * hgt
MyPictureBox.Top = rownum * wid
MyPictureBox.BorderStyle = BorderStyle.FixedSingle
'MyPictureBox.SizeMode = PictureBoxSizeMode.Normal
MyPictureBox.Image = to_bm
MyPictureBox.Name = "PicBox" & rownum & colnum
Panel1.Controls.Add(MyPictureBox)
Next
Next
End Sub
Private Sub OpenButt_Click(sender As System.Object, e As System.EventArgs) Handles OpenButt.Click
Using O As New OpenFileDialog With {.Filter = "(Image Files)|*.jpg;*.png;*.bmp;*.gif;*.ico|Jpg, | *.jpg|Png, | *.png|Bmp, | *.bmp|Gif, | *.gif|Ico | *.ico", .Multiselect = False, .Title = "Select image"}
If O.ShowDialog = 1 Then
TextBox1.Text = O.FileName
PictureBox1.Image = Image.FromFile(O.FileName)
PictureBox1.SizeMode = PictureBoxSizeMode.Zoom
Else
TextBox1.Clear()
End If
End Using
End Sub
Private Sub BoardButt_Click(sender As System.Object, e As System.EventArgs) Handles BoardButt.Click
TestSplit()
End Sub
Private Sub ShuffleButt_Click(sender As System.Object, e As System.EventArgs) Handles ShuffleButt.Click
End Sub
End Class
答案 0 :(得分:0)
在表单和按钮上放置2个列表框(中间最好)
左侧的Listbox1是ORIGINAL SORTED列表 右侧的Listbox2是原始排序列表的COPY
单击按钮,列表框2中的文件将被随机播放
代码在
之下 Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
Dim i As Integer
Dim j As Integer
'
ListBox2.Items(0) = ListBox1.Items(0)
For i = 1 To ListBox1.Items.Count - 1
j = Int(Rnd(1) * i)
ListBox2.Items(i) = ListBox2.Items(j)
ListBox2.Items(j) = ListBox1.Items(i)
Next
End Sub
Private Sub Form1_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
Dim counta As Integer
'
For counta = 0 To 39
ListBox1.Items.Add("image" & counta & ".gif")
ListBox2.Items.Add("image" & counta & ".gif")
Next
counta = Nothing
End Sub
参考:Inside Out Shuffle http://en.wikipedia.org/wiki/Fisher%E2%80%93Yates_shuffle