VB编写拼图游戏
九宫格中,有八个数字,打乱次序后重排。问题:在打乱次序代码中,是随机打乱的。这样有时会得到一个根本无法完成的情况。如:12345687如何解决呢?也就是说怎么才能使每次打...
九宫格中,有八个数字,打乱次序后重排。
问题:在打乱次序代码中,是随机打乱的。这样有时会得到一个根本无法完成的情况。如:
1 2 3
4 5 6
8 7
如何解决呢?也就是说怎么才能使每次打乱次序的九宫格都是可以重新排好序的。
Private Sub cmd_Click(Index As Integer)
i = Index
a = Abs(cmd(i).Left - cmd(9).Left)
b = Abs(cmd(i).Top - cmd(9).Top)
If a + b = 1500 Then
l = cmd(i).Left
t = cmd(i).Top
cmd(i).Left = cmd(9).Left
cmd(i).Top = cmd(9).Top
cmd(9).Left = l
cmd(9).Top = t
End If
cmd(0).SetFocus
End Sub
Private Sub Form_Load()
For i = 1 To 9
Load cmd(i)
cmd(i).Visible = True
cmd(i).Caption = i
cmd(i).TabStop = False
a = Int((i - 1) / 3) + 1
b = Int(i Mod 3)
If b = 0 Then b = b + 3
cmd(i).Move b * 1500, a * 1500, 1500, 1500
Next i
cmd(9).Visible = False
End Sub
Private Sub new_Click()
Dim a1(10)
For y = 1 To 9
a1(y) = y
Next y
Randomize
For i = 1 To 9
y = Int(Rnd * (10 - i) + 1)
a = Int((a1(y) - 1) / 3) + 1
b = Int(a1(y) Mod 3)
If b = 0 Then b = b + 3
cmd(i).Move b * 1500, a * 1500, 1500, 1500
For x = y To (9 - i)
a1(x) = a1(x + 1)
Next x
Next i
End Sub
后悔!当初连高中没上,上了中专。虽说后来函授时学过线性代数。可惜当时根本一点东西没学到,到现在课本一点没翻过呢!不过从你给的地址我看了一下。现在明白了。
我的目标序列是:123456789 为偶排列,当随机得出一序列时,计算其是否是偶排列,既可知其能不能转化为目标序列了对不对?呵呵~ 展开
问题:在打乱次序代码中,是随机打乱的。这样有时会得到一个根本无法完成的情况。如:
1 2 3
4 5 6
8 7
如何解决呢?也就是说怎么才能使每次打乱次序的九宫格都是可以重新排好序的。
Private Sub cmd_Click(Index As Integer)
i = Index
a = Abs(cmd(i).Left - cmd(9).Left)
b = Abs(cmd(i).Top - cmd(9).Top)
If a + b = 1500 Then
l = cmd(i).Left
t = cmd(i).Top
cmd(i).Left = cmd(9).Left
cmd(i).Top = cmd(9).Top
cmd(9).Left = l
cmd(9).Top = t
End If
cmd(0).SetFocus
End Sub
Private Sub Form_Load()
For i = 1 To 9
Load cmd(i)
cmd(i).Visible = True
cmd(i).Caption = i
cmd(i).TabStop = False
a = Int((i - 1) / 3) + 1
b = Int(i Mod 3)
If b = 0 Then b = b + 3
cmd(i).Move b * 1500, a * 1500, 1500, 1500
Next i
cmd(9).Visible = False
End Sub
Private Sub new_Click()
Dim a1(10)
For y = 1 To 9
a1(y) = y
Next y
Randomize
For i = 1 To 9
y = Int(Rnd * (10 - i) + 1)
a = Int((a1(y) - 1) / 3) + 1
b = Int(a1(y) Mod 3)
If b = 0 Then b = b + 3
cmd(i).Move b * 1500, a * 1500, 1500, 1500
For x = y To (9 - i)
a1(x) = a1(x + 1)
Next x
Next i
End Sub
后悔!当初连高中没上,上了中专。虽说后来函授时学过线性代数。可惜当时根本一点东西没学到,到现在课本一点没翻过呢!不过从你给的地址我看了一下。现在明白了。
我的目标序列是:123456789 为偶排列,当随机得出一序列时,计算其是否是偶排列,既可知其能不能转化为目标序列了对不对?呵呵~ 展开
1个回答
展开全部
呵呵,牵扯到逆序问题,随机生成数组后,你要检查它的逆序数,通过逆序数的奇偶性来判断拼图是否有解,可以参考这个地方
http://blog.csdn.net/tailzhou/archive/2008/09/30/3002442.aspx
回答补充:
呵呵,就是这样的,当逆序数不符合要求时,重新生成数组,直到满足条件为止,祝你早日完成这个游戏。另外,完成后可否让我试玩一下,我的邮箱:
li0544@163.com
http://blog.csdn.net/tailzhou/archive/2008/09/30/3002442.aspx
回答补充:
呵呵,就是这样的,当逆序数不符合要求时,重新生成数组,直到满足条件为止,祝你早日完成这个游戏。另外,完成后可否让我试玩一下,我的邮箱:
li0544@163.com
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询