版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、<p><b> VB課程設(shè)計(jì)報(bào)告</b></p><p><b> —拼圖游戲</b></p><p> 知識(shí)點(diǎn):控件數(shù)組,公共對(duì)話框控件,PictureClip控件,多模塊程序設(shè)計(jì),圖片的應(yīng)用。</p><p><b> 題目介紹</b></p><p>
2、 “拼圖”是一種老少皆宜、容易上手的益智類小游戲,本題目要求編制一個(gè)拼圖游戲程序。使用方法如下:</p><p> ?。?)指定一幅圖片,將其分割成m × n 個(gè)小圖塊并且打亂順序后重新排列,其中有一塊沒有圖塊的“空擋”。</p><p> ?。?)使用鼠標(biāo)單擊與空擋相鄰的圖塊使該圖塊與空擋的位置互換。</p><p> ?。?)利用空擋位置移動(dòng)各圖塊,
3、最終恢復(fù)圖片原貌,完成拼圖。移動(dòng)的步數(shù)越少則說明游戲者的水平越高。游戲過程中,可以打開參考圖幫助找到正確的位置。</p><p><b> 2.功能要求</b></p><p> ?。?)運(yùn)行程序,在進(jìn)入游戲之前顯示一個(gè)背景圖片。</p><p> (2)選擇菜單中的“打開圖片”命令,顯示打開圖片對(duì)話框,“打開圖片”對(duì)話框使用公共對(duì)話框控件
4、實(shí)現(xiàn),并且只能指定以*.jpg *.bmp</p><p> 為擴(kuò)展名的文件。可以在查看菜單中選著“縮略圖”進(jìn)行預(yù)覽。</p><p> (3)選擇圖片之后,程序彈出“指定行列數(shù)”對(duì)話框,提示將圖片分幾行幾列。使用微調(diào)按鈕可以調(diào)節(jié)行數(shù)和列數(shù),限制在3-7之間。</p><p> ?。?)指定行列數(shù)之后,單擊確定返回主窗口,程序自動(dòng)按照指定的行列數(shù)將圖片進(jìn)分割,然
5、后隨機(jī)排列。</p><p> ?。?)打亂的圖片中一空擋位置,用戶單擊與空擋相鄰的圖塊可以與其互換位置。點(diǎn)擊了空擋或者與其不相鄰的,程序不做任何操作。原圖只少右下角的圖塊。</p><p> (6)圖片復(fù)原時(shí),程序顯示消息框表示祝賀,同時(shí)顯示游戲共使用的步數(shù)。</p><p> (7)游戲過程中,如果用戶希望參考原圖,可以單擊“顯示原圖”按鈕,打開“參考圖”窗
6、口。</p><p> ?。?)窗體中的背景顏色可以改變,從菜單中選擇“背景顏色”命令,彈出“顏色”飛、公共對(duì)話框,用戶從中選擇一顏色即可。</p><p> ?。?)在游戲過程中或在完成后,均可退出程序或選擇“打開圖片”菜單命令重新開始一個(gè)新圖片。</p><p> (10)“參考圖”窗口應(yīng)是一個(gè)非模態(tài)窗口,在關(guān)閉主窗口時(shí)同時(shí)卸載,而不是隱藏,否則該程序不會(huì)完全
7、關(guān)閉,仍會(huì)駐留內(nèi)存。</p><p><b> 3.程序設(shè)計(jì) </b></p><p> 概述:(1)PictureClip 控件來管理打開圖片并將其分為指定的行列圖塊,其Picture、Rows、Cols等屬性值應(yīng)在程序中設(shè)定。</p><p> ?。?)使用image控件數(shù)組來顯示圖塊,設(shè)計(jì)時(shí)只需在窗體上放置一個(gè)image控件并將其的i
8、ndex設(shè)為0 ,其他的用load語(yǔ)句加載。</p><p> ?。?)“打開圖片”和“顏色”對(duì)話框commondialog控件實(shí)現(xiàn)。設(shè)置其filter屬性使之只能打開bmp和jpg類型的圖片文件。</p><p> (4)將image控件的stretch屬性設(shè)計(jì)為TRUE。</p><p><b> 重點(diǎn): </b></p>
9、<p><b> 隨機(jī)排列圖片 </b></p><p> Private Sub Rnd_Arrange() '隨機(jī)排列圖塊</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隨機(jī)賦值</p><p> j = Int(Rnd * n) '產(chǎn)生0~n-1的隨機(jī)數(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 '計(jì)算空檔的行列</p>
18、<p> r1 = space \ Cols</p><p> c2 = Index Mod Cols '計(jì)算點(diǎn)擊的行列</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 '拼圖完成時(shí),使鼠標(biāo)點(diǎn)擊失效</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ù)組的對(duì)應(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 '計(jì)算空檔的行列</p><p> r1 = space \ Cols</p><p> c2 = Index Mod Cols '計(jì)算點(diǎn)擊的行列</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 '拼圖完成時(shí),使鼠標(biāo)點(diǎn)擊失效</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、顯示指定圖片對(duì)話框</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 ' 顯示指定行列對(duì)話框</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 '隨機(jī)排列</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() '隨機(jī)排列圖塊</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隨機(jī)賦值</p><p> j = Int(Rnd * n) '產(chǎn)生0~n-1的隨機(jī)數(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等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫(kù)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- vb課程設(shè)計(jì)拼圖游戲
- java_課程設(shè)計(jì)報(bào)告_拼圖游戲
- java_課程設(shè)計(jì)報(bào)告_拼圖游戲
- c++課程設(shè)計(jì)拼圖游戲
- labview_課程設(shè)計(jì)拼圖游戲仿真與設(shè)計(jì)
- 拼圖游戲-拼圖游戲總結(jié).doc
- 算法設(shè)計(jì)與分析課程設(shè)計(jì)---拼圖游戲問題
- 拼圖游戲
- 拼圖游戲開題報(bào)告
- 拼圖游戲
- 拼圖游戲 .zip
- 拼圖游戲.docx
- 拼圖游戲-需求設(shè)計(jì).docx
- 拼圖游戲3
- 拼圖游戲2
- -拼圖游戲總結(jié).doc
- vb打字游戲課程設(shè)計(jì)報(bào)告
- vb課程設(shè)計(jì)報(bào)告---打字游戲
- 基于java的拼圖游戲設(shè)計(jì)
- 拼圖游戲-20170626.docx
評(píng)論
0/150
提交評(píng)論