精品主页 | 软件下载 | 系统下载 | 精品导航| 精彩图片 | 转帖工具 | 版主申请 | 影视下载
发新话题
打印

玩一玩平面魔方

玩一玩平面魔方

  


                  

■ 贵州 文修

回想儿时玩的魔方游戏,曾经让我如痴如醉。那时我不分昼夜地琢磨它,并且很快就成为了小朋友中的高手,很风光啊!前几天整理屋子的时候,竟然在一个阴暗的角落里又发现了它,玩了之后却发现自己现在已经只有初学者的水平了。不好意思整天把它捧在手里玩,最后决定还是在电脑上玩一玩吧,因此就用VB编写了这个程序。

原想是编写一个三维的游戏,但用VB进行三维计算过于复杂,最后决定还是根据魔方的原理,编写一个平面二维魔方。就是在一个5×5方格的棋盘中,每一个小方格都随机填充5种颜色中的任一颜色。并且在这25个方格中,每种颜色的方格只有5个,当用鼠标点击其中一个方格,进行横向或纵向拖动,同一方向方格的颜色就顺序变化,如:同一方向5个方格的颜色分别为“红(1)、绿(2)、蓝(3)、黑(4)、紫(5)”,当把第二个方格(绿)拖到第四个方格(黑)的位置时,那么这5个方格的颜色的顺序就变成“黑(4)、紫(5)、红(1)、绿(2)、蓝(3)”。当把各种颜色按横向或纵向各排列成一排时,那么就完成了这个游戏。



编写这个程序在技术上没有什么难点,关键的地方是在数据算法设计上,如在方格中随机填充颜色的算法设计中,我开始是用数组来进行设计,结果发现算法有点复杂,代码有点长,后来改用集合对象,算法就大大简单明了了。

闲话少说,现在我们就开始编程。首先打开VB,新建一个标准工程,在form1上添加一个picturebox控件,设置picture1的autoredraw属性为true,然后切换到代码编辑框添加如下代码:

'定义x1、y1为全局变量,用来表示鼠标按下时的坐标

Dim

x1 As Integer

Dim y1 As Integer

'定义fill_color过程,在5*5的方格中随机填充颜色

Sub

fill_color()

Dim color As Integer



Dim color_col As New Collection '定义一个集合变量

'在集合中装载5种颜色

For i = 0 To

24

color_col.Add Int(i / 5),

Str(i)

Next i

'在方格中填充颜色

j =

0

For n = 0 To

4

For m = 1 To

5



Randomize



X = Int((25 - j) * Rnd()   

1)

color =

color_col.Item(X)



Picture1.Line (n, m)-(n   1, m - 1), QBColor(color),

BF



color_col.Remove

(X)

j = j

  1

Next m



Next n

End Sub

'定义draw过程,画边框为白色的方格

Sub draw()

For

n = 0 To 5

Picture1.Line (0,

n)-(5, n), QBColor(15)



Picture1.Line (n, 0)-(n, 5), QBColor(15)

Next n

End

Sub

Private Sub Form_Activate()



fill_color

draw

End Sub

Private Sub

Form_Load()

Picture1.Scale (0, 5)-(5, 0)

End Sub

Private Sub Picture1_MouseDown(Button As Integer, Shift As Integer, X As

Single, Y As Single)

x1 = Int(X)

y1

= Int(Y)

Picture1.MousePointer = 14

End Sub

Private Sub Picture1_MouseUp(Button As Integer, Shift As Integer, X As

Single, Y As Single)

Dim color1(4) As

Long

Dim x2 As Integer

Dim y2 As

Integer

x2 = Int(X)

y2 =

Int(Y)



If y1 = y2

Then

For n = 0 To

4



color1(n) = Picture1.Point(n   0.5, y2   

0.5)

Next n

a = x2 -

x1

For n = 0 To

4

If n - a

<= 4 And n - a >= 0

Then



z = n - a



Else



z = Abs(5 - Abs(n -

a))

End

If



Picture1.Line (n, y2   1)-(n   1, y2), color1(z),

BF

Next n



Else

If x1 = x2

Then

For n

= 0 To

4



color1(n) = Picture1.Point(x2   0.5, n   

0.5)

Next

n

a = y2 -

y1

For n =

0 To

4



If n - a <= 4 And n - a >= 0

Then



z = n -

a



Else



z = Abs(5 - Abs(n -

a))



End

If



Picture1.Line (x2   1, n)-(x2, n   1), color1(z),

BF

Next

n



Else



MsgBox "你的移动无效", , "警告"

End

If

End If

draw



Picture1.MousePointer = vbDefault

End Sub

程序比较简单,大家一定很容易看懂,这个程序的方格我们也可以改成6*6、7*7等等,但玩起来的难度可能会大大增加,就是这个5*5方格的游戏,我有时候都很难玩通。

本程序在VB6.0  

Windows Me下调试通过。

TOP

发新话题