玩一玩平面魔方
發(fā)表時(shí)間:2024-06-06 來(lái)源:明輝站整理相關(guān)軟件相關(guān)文章人氣:
[摘要]回想兒時(shí)玩的魔方游戲,曾經(jīng)讓我如癡如醉。那時(shí)我不分晝夜地琢磨它,并且很快就成為了小朋友中的高手,很風(fēng)光。∏皫滋煺砦葑拥臅r(shí)候,竟然在一個(gè)陰暗的角落里又發(fā)現(xiàn)了它,玩了之后卻發(fā)現(xiàn)自己現(xiàn)在已經(jīng)只有初學(xué)者的水平了。不好意思整天把它捧在手里玩,最后決定還是在電腦上玩一玩吧,因此就用VB編寫(xiě)了這個(gè)程序。原想...
回想兒時(shí)玩的魔方游戲,曾經(jīng)讓我如癡如醉。那時(shí)我不分晝夜地琢磨它,并且很快就成為了小朋友中的高手,很風(fēng)光啊!前幾天整理屋子的時(shí)候,竟然在一個(gè)陰暗的角落里又發(fā)現(xiàn)了它,玩了之后卻發(fā)現(xiàn)自己現(xiàn)在已經(jīng)只有初學(xué)者的水平了。不好意思整天把它捧在手里玩,最后決定還是在電腦上玩一玩吧,因此就用VB編寫(xiě)了這個(gè)程序。
原想是編寫(xiě)一個(gè)三維的游戲,但用VB進(jìn)行三維計(jì)算過(guò)于復(fù)雜,最后決定還是根據(jù)魔方的原理,編寫(xiě)一個(gè)平面二維魔方。就是在一個(gè)5×5方格的棋盤(pán)中,每一個(gè)小方格都隨機(jī)填充5種顏色中的任一顏色。并且在這25個(gè)方格中,每種顏色的方格只有5個(gè),當(dāng)用鼠標(biāo)點(diǎn)擊其中一個(gè)方格,進(jìn)行橫向或縱向拖動(dòng),同一方向方格的顏色就順序變化,如:同一方向5個(gè)方格的顏色分別為“紅(1)、綠(2)、藍(lán)(3)、黑(4)、紫(5)”,當(dāng)把第二個(gè)方格(綠)拖到第四個(gè)方格(黑)的位置時(shí),那么這5個(gè)方格的顏色的順序就變成“黑(4)、紫(5)、紅(1)、綠(2)、藍(lán)(3)”。當(dāng)把各種顏色按橫向或縱向各排列成一排時(shí),那么就完成了這個(gè)游戲。
編寫(xiě)這個(gè)程序在技術(shù)上沒(méi)有什么難點(diǎn),關(guān)鍵的地方是在數(shù)據(jù)算法設(shè)計(jì)上,如在方格中隨機(jī)填充顏色的算法設(shè)計(jì)中,我開(kāi)始是用數(shù)組來(lái)進(jìn)行設(shè)計(jì),結(jié)果發(fā)現(xiàn)算法有點(diǎn)復(fù)雜,代碼有點(diǎn)長(zhǎng),后來(lái)改用集合對(duì)象,算法就大大簡(jiǎn)單明了了。
閑話少說(shuō),現(xiàn)在我們就開(kāi)始編程。首先打開(kāi)VB,新建一個(gè)標(biāo)準(zhǔn)工程,在form1上添加一個(gè)picturebox控件,設(shè)置picture1的autoredraw屬性為true,然后切換到代碼編輯框添加如下代碼:
'定義x1、y1為全局變量,用來(lái)表示鼠標(biāo)按下時(shí)的坐標(biāo)
Dim x1 As Integer
Dim y1 As Integer
'定義fill_color過(guò)程,在5*5的方格中隨機(jī)填充顏色
Sub fill_color()
Dim color As Integer
Dim color_col As New Collection '定義一個(gè)集合變量
'在集合中裝載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過(guò)程,畫(huà)邊框?yàn)榘咨姆礁?br>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 "你的移動(dòng)無(wú)效", , "警告"
End If
End If
draw
Picture1.MousePointer = vbDefault
End Sub
程序比較簡(jiǎn)單,大家一定很容易看懂,這個(gè)程序的方格我們也可以改成6*6、7*7等等,但玩起來(lái)的難度可能會(huì)大大增加,就是這個(gè)5*5方格的游戲,我有時(shí)候都很難玩通。
本程序在VB6.0+ Windows Me下調(diào)試通過(guò)。