版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)
文檔簡介
1、<p><b> VB課程設(shè)計報告</b></p><p><b> —拼圖游戲</b></p><p> 知識點:控件數(shù)組,公共對話框控件,PictureClip控件,多模塊程序設(shè)計,圖片的應(yīng)用。</p><p><b> 題目介紹</b></p><p>
2、 “拼圖”是一種老少皆宜、容易上手的益智類小游戲,本題目要求編制一個拼圖游戲程序。使用方法如下:</p><p> (1)指定一幅圖片,將其分割成m × n 個小圖塊并且打亂順序后重新排列,其中有一塊沒有圖塊的“空擋”。</p><p> ?。?)使用鼠標(biāo)單擊與空擋相鄰的圖塊使該圖塊與空擋的位置互換。</p><p> ?。?)利用空擋位置移動各圖塊,
3、最終恢復(fù)圖片原貌,完成拼圖。移動的步數(shù)越少則說明游戲者的水平越高。游戲過程中,可以打開參考圖幫助找到正確的位置。</p><p><b> 2.功能要求</b></p><p> ?。?)運行程序,在進入游戲之前顯示一個背景圖片。</p><p> ?。?)選擇菜單中的“打開圖片”命令,顯示打開圖片對話框,“打開圖片”對話框使用公共對話框控件
4、實現(xiàn),并且只能指定以*.jpg *.bmp</p><p> 為擴展名的文件??梢栽诓榭床藛沃羞x著“縮略圖”進行預(yù)覽。</p><p> ?。?)選擇圖片之后,程序彈出“指定行列數(shù)”對話框,提示將圖片分幾行幾列。使用微調(diào)按鈕可以調(diào)節(jié)行數(shù)和列數(shù),限制在3-7之間。</p><p> ?。?)指定行列數(shù)之后,單擊確定返回主窗口,程序自動按照指定的行列數(shù)將圖片進分割,然
5、后隨機排列。</p><p> ?。?)打亂的圖片中一空擋位置,用戶單擊與空擋相鄰的圖塊可以與其互換位置。點擊了空擋或者與其不相鄰的,程序不做任何操作。原圖只少右下角的圖塊。</p><p> ?。?)圖片復(fù)原時,程序顯示消息框表示祝賀,同時顯示游戲共使用的步數(shù)。</p><p> ?。?)游戲過程中,如果用戶希望參考原圖,可以單擊“顯示原圖”按鈕,打開“參考圖”窗
6、口。</p><p> ?。?)窗體中的背景顏色可以改變,從菜單中選擇“背景顏色”命令,彈出“顏色”飛、公共對話框,用戶從中選擇一顏色即可。</p><p> ?。?)在游戲過程中或在完成后,均可退出程序或選擇“打開圖片”菜單命令重新開始一個新圖片。</p><p> (10)“參考圖”窗口應(yīng)是一個非模態(tài)窗口,在關(guān)閉主窗口時同時卸載,而不是隱藏,否則該程序不會完全
7、關(guān)閉,仍會駐留內(nèi)存。</p><p><b> 3.程序設(shè)計 </b></p><p> 概述:(1)PictureClip 控件來管理打開圖片并將其分為指定的行列圖塊,其Picture、Rows、Cols等屬性值應(yīng)在程序中設(shè)定。</p><p> ?。?)使用image控件數(shù)組來顯示圖塊,設(shè)計時只需在窗體上放置一個image控件并將其的i
8、ndex設(shè)為0 ,其他的用load語句加載。</p><p> ?。?)“打開圖片”和“顏色”對話框commondialog控件實現(xiàn)。設(shè)置其filter屬性使之只能打開bmp和jpg類型的圖片文件。</p><p> (4)將image控件的stretch屬性設(shè)計為TRUE。</p><p><b> 重點: </b></p>
9、<p><b> 隨機排列圖片 </b></p><p> Private Sub Rnd_Arrange() '隨機排列圖塊</p><p> Dim i As Integer, j As Integer</p><p> Dim n As Integer</p><p>
10、; n = Rows * Cols</p><p> ReDim Arrange(0 To n - 1)</p><p> For i = 0 To n - 1</p><p> Arrange(i) = -1 '用-1標(biāo)記未賦值的元素</p><p><b> Next</b>
11、</p><p><b> i = 0</b></p><p> Do '給數(shù)組Arrange隨機賦值</p><p> j = Int(Rnd * n) '產(chǎn)生0~n-1的隨機數(shù)</p><p> If Arran
12、ge(j) = -1 Then</p><p> Arrange(j) = i</p><p><b> i = i + 1</b></p><p> If i = n Then Exit Do</p><p><b> End If</b></p><p><
13、b> Loop</b></p><p> For i = 1 To n - 1 '加載控件數(shù)組元素</p><p> Load imgPT(i)</p><p><b> Next</b></p><p> For i = 0 To n - 1</p&g
14、t;<p> If Arrange(i) <> n - 1 Then</p><p> imgPT(i).Picture = PC.GraphicCell(Arrange(i)) '將圖塊賦給控件數(shù)組元素</p><p><b> Else</b></p><p> imgPT(i).Picture
15、= LoadPicture() '將“打亂”前圖片右下角的圖塊設(shè)為空</p><p><b> space = i</b></p><p><b> End If</b></p><p><b> Next</b></p><p><b
16、> End Sub</b></p><p> 判斷被單擊的圖片是否與空擋相鄰,</p><p> Private Sub imgPT_Click(Index As Integer)</p><p> Dim r1 As Integer, c1 As Integer</p><p> Dim r2 As Intege
17、r, c2 As Integer</p><p> Dim n As Integer</p><p> Dim i As Integer</p><p> If Not started Then Exit Sub</p><p> c1 = space Mod Cols '計算空檔的行列</p>
18、<p> r1 = space \ Cols</p><p> c2 = Index Mod Cols '計算點擊的行列</p><p> r2 = Index \ Cols</p><p> If Abs(c1 - c2) = 1 And Abs(r1 - r2) = 0 Or Abs(c1 - c2) = 0 And A
19、bs(r1 - r2) = 1 Then '判斷是否相鄰</p><p> n = Arrange(Index)</p><p> Arrange(Index) = Arrange(space)</p><p> Arrange(space) = n</p><p> imgPT(space) = PC.Graphi
20、cCell(Arrange(space))</p><p> imgPT(Index) = LoadPicture()</p><p> space = Index</p><p> steps = steps + 1</p><p> txtStep.Text = steps</p><p> If isO
21、K() Then</p><p> MsgBox "恭喜,完成拼圖!共用了" & steps & "步。", vbInformation '判斷是否拼完,如果已完成</p><p> For i = 1 To Rows * Cols - 1</p><p> imgPT(i).E
22、nabled = False '拼圖完成時,使鼠標(biāo)點擊失效</p><p><b> Next</b></p><p><b> End If</b></p><p><b> End If</b>&l
23、t;/p><p><b> End Sub</b></p><p><b> 判斷是否已經(jīng)拼完 </b></p><p> Private Function isOK() As Boolean '判斷是否拼完</p><p> Dim i As Integer<
24、/p><p> For i = 0 To Cols * Rows - 1</p><p> If Arrange(i) <> i Then Exit For</p><p><b> Next</b></p><p> If i = Cols * Rows Then isOK = True</p&g
25、t;<p> End Function </p><p><b> 附:完整代碼</b></p><p> Option Explicit</p><p> Public Rows As Integer, Cols As Integer '圖塊的行列數(shù)</p><p> Const GAP
26、 As Integer = 2 '行列圖塊的間距</p><p> Private Arrange() As Integer '圖象控件與數(shù)組的對應(yīng)關(guān)系</p><p> Private space As Integer '空檔的位置</p><p> P
27、rivate started As Boolean '是否已開始</p><p> Private steps As Integer '步數(shù)</p><p> Public showref As Boolean '是否顯示參考圖</p><p> Pri
28、vate Sub cmdShowRef_Click()</p><p> showref = Not showref</p><p> If showref Then</p><p> Load frmRef</p><p> frmRef.Image1.Picture = PC.Picture</p><p>
29、; frmRef.Top = Me.Top</p><p> frmRef.Left = Me.Left + Me.Width</p><p> frmRef.Show</p><p> cmdShowRef.Caption = "關(guān)閉參考圖"</p><p><b> Else</b>&l
30、t;/p><p> Unload frmRef</p><p> cmdShowRef.Caption = "顯示參考圖"</p><p><b> End If</b></p><p><b> End Sub</b></p><p><b&g
31、t; '</b></p><p> 'Private Sub Form_Click()</p><p> ' Dim i As Integer</p><p> ' For i = 0 To Rows * Cols - 3</p><p> ' Arran
32、ge(i) = i</p><p><b> ' Next</b></p><p> ' Arrange(Rows * Cols - 1) = Rows * Cols - 2</p><p> ' Arrange(Rows * Cols - 2) = Rows * Cols - 1</p&g
33、t;<p> ' For i = 0 To Rows * Cols - 1</p><p> ' imgPT(i) = PC.GraphicCell(Arrange(i))</p><p><b> ' Next</b></p><p> ' imgPT(Ro
34、ws * Cols - 2) = LoadPicture</p><p> ' space = Rows * Cols - 2</p><p><b> '</b></p><p><b> 'End Sub</b></p><p> Private Sub F
35、orm_Unload(Cancel As Integer)</p><p> Unload frmRef</p><p><b> End Sub</b></p><p> Private Sub imgPT_Click(Index As Integer)</p><p> Dim r1 As Integer,
36、c1 As Integer</p><p> Dim r2 As Integer, c2 As Integer</p><p> Dim n As Integer</p><p> Dim i As Integer</p><p> If Not started Then Exit Sub</p><p>
37、c1 = space Mod Cols '計算空檔的行列</p><p> r1 = space \ Cols</p><p> c2 = Index Mod Cols '計算點擊的行列</p><p> r2 = Index \ Cols</p><p> If Abs(c1 - c2
38、) = 1 And Abs(r1 - r2) = 0 Or Abs(c1 - c2) = 0 And Abs(r1 - r2) = 1 Then '判斷是否相鄰</p><p> n = Arrange(Index)</p><p> Arrange(Index) = Arrange(space)</p><p> Arrange(space
39、) = n</p><p> imgPT(space) = PC.GraphicCell(Arrange(space))</p><p> imgPT(Index) = LoadPicture()</p><p> space = Index</p><p> steps = steps + 1</p><p>
40、; txtStep.Text = steps</p><p> If isOK() Then</p><p> MsgBox "恭喜,完成拼圖!共用了" & steps & "步。", vbInformation '判斷是否拼完,如果已完成</p><p> For i = 1
41、 To Rows * Cols - 1</p><p> imgPT(i).Enabled = False '拼圖完成時,使鼠標(biāo)點擊失效</p><p><b> Next</b></p><p><b> End If</b&g
42、t;</p><p><b> End If</b></p><p><b> End Sub</b></p><p> Private Sub mnuBackColor_Click()</p><p> CD.Color = Me.BackColor</p><p>
43、; CD.ShowColor</p><p> Me.BackColor = CD.Color</p><p><b> End Sub</b></p><p> Private Sub mnuExit_Click()</p><p><b> Unload Me</b></p>
44、;<p><b> End Sub</b></p><p> Private Sub mnuOpen_Click()</p><p> Dim i As Integer</p><p> Dim n As Integer</p><p> CD.Filter = "圖片文件(*.JPG,
45、*.BMP)|*.jpg;*.bmp"</p><p> CD.DialogTitle = "打開圖片"</p><p> CD.InitDir = App.Path & "\pics"</p><p> CD.ShowOpen '
46、顯示指定圖片對話框</p><p> If CD.FileName = "" Then Exit Sub</p><p> If started Then</p><p> For i = 1 To Rows * Cols - 1 '清除已有的控件數(shù)組元素</p><p> Unload imgPT(
47、i)</p><p><b> Next</b></p><p> imgPT(0).Picture = LoadPicture()</p><p> If showref Then frmRef.Image1.Picture = LoadPicture()</p><p><b> Else</
48、b></p><p> Me.Picture = LoadPicture()</p><p><b> End If</b></p><p> frmDivide.Show 1, Me ' 顯示指定行列對話框</p><p> PC.Picture = LoadPict
49、ure(CD.FileName)</p><p> PC.Rows = Rows</p><p> PC.Cols = Cols</p><p> n = Rows * Cols</p><p> imgPT(0).Width = 320 / Cols '窗體以像素為單位</p><p>
50、; imgPT(0).Height = 240 / Rows</p><p> Call Rnd_Arrange '隨機排列</p><p> For i = 0 To n - 1 '排列圖象控件</p><p> imgPT(i).Top = (i \ Cols) * (240 /
51、Rows + GAP)</p><p> imgPT(i).Left = (i Mod Cols) * (320 / Cols + GAP)</p><p> imgPT(i).Visible = True</p><p><b> Next</b></p><p> If showref Then frmRef
52、.Image1.Picture = PC.Picture</p><p> started = True</p><p> cmdShowRef.Enabled = True</p><p><b> steps = 0</b></p><p> txtStep.Text = "0"</
53、p><p><b> End Sub</b></p><p> Private Sub Rnd_Arrange() '隨機排列圖塊</p><p> Dim i As Integer, j As Integer</p><p> Dim n As Integer</p>&l
54、t;p> n = Rows * Cols</p><p> ReDim Arrange(0 To n - 1)</p><p> For i = 0 To n - 1</p><p> Arrange(i) = -1 '用-1標(biāo)記未賦值的元素</p><p><b> Next<
55、/b></p><p><b> i = 0</b></p><p> Do '給數(shù)組Arrange隨機賦值</p><p> j = Int(Rnd * n) '產(chǎn)生0~n-1的隨機數(shù)</p><p> If
56、 Arrange(j) = -1 Then</p><p> Arrange(j) = i</p><p><b> i = i + 1</b></p><p> If i = n Then Exit Do</p><p><b> End If</b></p><p&g
57、t;<b> Loop</b></p><p> For i = 1 To n - 1 '加載控件數(shù)組元素</p><p> Load imgPT(i)</p><p><b> Next</b></p><p> For i = 0 To n - 1&l
58、t;/p><p> If Arrange(i) <> n - 1 Then</p><p> imgPT(i).Picture = PC.GraphicCell(Arrange(i)) '將圖塊賦給控件數(shù)組元素</p><p><b> Else</b></p><p> imgPT(i).Pi
59、cture = LoadPicture() '將“打亂”前圖片右下角的圖塊設(shè)為空</p><p><b> space = i</b></p><p><b> End If</b></p><p><b> Next</b></p><p>
60、;<b> End Sub</b></p><p> Private Function isOK() As Boolean '判斷是否拼完</p><p> Dim i As Integer</p><p> For i = 0 To Cols * Rows - 1</p><p>
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- vb課程設(shè)計拼圖游戲
- java_課程設(shè)計報告_拼圖游戲
- java_課程設(shè)計報告_拼圖游戲
- c++課程設(shè)計拼圖游戲
- labview_課程設(shè)計拼圖游戲仿真與設(shè)計
- 拼圖游戲-拼圖游戲總結(jié).doc
- 算法設(shè)計與分析課程設(shè)計---拼圖游戲問題
- 拼圖游戲
- 拼圖游戲開題報告
- 拼圖游戲
- 拼圖游戲 .zip
- 拼圖游戲.docx
- 拼圖游戲-需求設(shè)計.docx
- 拼圖游戲3
- 拼圖游戲2
- -拼圖游戲總結(jié).doc
- vb打字游戲課程設(shè)計報告
- vb課程設(shè)計報告---打字游戲
- 基于java的拼圖游戲設(shè)計
- 拼圖游戲-20170626.docx
評論
0/150
提交評論