我正在制作一个反应游戏,涉及用户点击随机化其位置的图片框。
棘手的部分是随机化图片框的位置,使其出现在我创建的面板的边界内。这样做的原因是我在表单上有其他控件。不确定面板是否是解决此问题的最佳方式,但我不知道从哪里开始。
图片框的大小为(70,55),面板的大小为(640,400),如果它有任何区别,则为(640,600)。
到目前为止,我有以下代码:
Dim rnd1 As Integer = panel1.Width * Rnd()
Dim rnd2 As Integer = panel1.Height * Rnd()
pb1.Top = rnd2
pb1.left = rnd1
当它工作时,它会将图片框随机化到面板的边缘,这样一些随机化会导致图片框根本不可见。我必须使用什么代码才能使图片框完全可见并且不会越过面板的边界?
由于
答案 0 :(得分:3)
您没有考虑PictureBox对象的高度或宽度。
如果您将图片框的左侧属性设置为面板的宽度,那么它将不在视野范围内。
你需要做这样的事情:
Dim rnd1 As Integer = (panel1.Width - pb1.Width) * Rnd()
Dim rnd2 As Integer = (panel1.Height - pb1.Height) * Rnd()
pb1.Top = rnd2
pb1.left = rnd1
注意:如果您使用Rnd
,则需要先致电Randmonize()
,否则每次运行申请时,您的随机数将是相同的序列:Using Randomize() before Rnd() in VB.NET
我建议使用Random
类而不是Rnd
,因为这不需要您在开始使用之前初始化种子。
答案 1 :(得分:3)
使用Random类生成随机数。参数是您要生成的最大数字。对于您的顶部位置,您将生成一个介于0和面板高度减去图片框高度之间的数字。对于左侧位置,数字介于0和面板宽度减去图片框的宽度之间。
把它放在表格声明中。
Dim random As New Random
把它放在你的活动中(我使用计时器事件)。
Dim newTop As Integer = random.Next(panel1.Height - pb1.Height)
Dim newLeft As Integer = random.Next(panel1.Width - pb1.Width)
pb1.Top = newTop
pb1.Left = newLeft