2023年全國碩士研究生考試考研英語一試題真題(含答案詳解+作文范文)_第1頁
已閱讀1頁,還剩8頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

1、<p><b>  VB課程設(shè)計(jì)報告</b></p><p><b>  —拼圖游戲</b></p><p>  知識點(diǎn):控件數(shù)組,公共對話框控件,PictureClip控件,多模塊程序設(shè)計(jì),圖片的應(yīng)用。</p><p><b>  題目介紹</b></p><p>

2、  “拼圖”是一種老少皆宜、容易上手的益智類小游戲,本題目要求編制一個拼圖游戲程序。使用方法如下:</p><p> ?。?)指定一幅圖片,將其分割成m × n 個小圖塊并且打亂順序后重新排列,其中有一塊沒有圖塊的“空擋”。</p><p> ?。?)使用鼠標(biāo)單擊與空擋相鄰的圖塊使該圖塊與空擋的位置互換。</p><p> ?。?)利用空擋位置移動各圖塊,

3、最終恢復(fù)圖片原貌,完成拼圖。移動的步數(shù)越少則說明游戲者的水平越高。游戲過程中,可以打開參考圖幫助找到正確的位置。</p><p><b>  2.功能要求</b></p><p> ?。?)運(yùn)行程序,在進(jìn)入游戲之前顯示一個背景圖片。</p><p> ?。?)選擇菜單中的“打開圖片”命令,顯示打開圖片對話框,“打開圖片”對話框使用公共對話框控件

4、實(shí)現(xiàn),并且只能指定以*.jpg *.bmp</p><p>  為擴(kuò)展名的文件??梢栽诓榭床藛沃羞x著“縮略圖”進(jìn)行預(yù)覽。</p><p> ?。?)選擇圖片之后,程序彈出“指定行列數(shù)”對話框,提示將圖片分幾行幾列。使用微調(diào)按鈕可以調(diào)節(jié)行數(shù)和列數(shù),限制在3-7之間。</p><p> ?。?)指定行列數(shù)之后,單擊確定返回主窗口,程序自動按照指定的行列數(shù)將圖片進(jìn)分割,然

5、后隨機(jī)排列。</p><p> ?。?)打亂的圖片中一空擋位置,用戶單擊與空擋相鄰的圖塊可以與其互換位置。點(diǎn)擊了空擋或者與其不相鄰的,程序不做任何操作。原圖只少右下角的圖塊。</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è)計(jì) </b></p><p>  概述:(1)PictureClip 控件來管理打開圖片并將其分為指定的行列圖塊,其Picture、Rows、Cols等屬性值應(yīng)在程序中設(shè)定。</p><p> ?。?)使用image控件數(shù)組來顯示圖塊,設(shè)計(jì)時只需在窗體上放置一個image控件并將其的i

8、ndex設(shè)為0 ,其他的用load語句加載。</p><p> ?。?)“打開圖片”和“顏色”對話框commondialog控件實(shí)現(xiàn)。設(shè)置其filter屬性使之只能打開bmp和jpg類型的圖片文件。</p><p> ?。?)將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 '拼圖完成時,使鼠標(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ù)組的對應(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 '拼圖完成時,使鼠標(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、顯示指定圖片對話框</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 '隨機(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等.壓縮文件請下載最新的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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論