版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、<p> Vb掃雷課程設(shè)計報告</p><p> 姓名: 班級: 學號: </p><p><b> 難度:☆☆☆☆</b></p><p> 知識點:控件數(shù)組 繪圖 菜單 文本文件的讀寫 多模塊程序設(shè)計 資源文件的使用</p><p><b&
2、gt; 題目</b></p><p> “掃雷”是windows下的經(jīng)典小游戲。如下圖所示,一個由M行N列小方格組成的雷區(qū)影藏著K顆地雷(M N和K可以事先設(shè)置)。用戶根據(jù)判斷確定哪個方格有雷,哪個方格無雷。使用鼠標左鍵單擊無雷方格將其翻開會在該方格內(nèi)顯示一個數(shù)字(1~8),該數(shù)字表示這個方格周圍相鄰的8個方格內(nèi)共有多少克雷。如果左鍵單擊方格內(nèi)未顯示數(shù)字,表示方格周圍沒有雷,程序自動將周圍的方格翻
3、起直至遇到周圍有雷的方格為止。</p><p> 在方格內(nèi)數(shù)字的提示下,用戶判斷某個位置有雷,使用鼠標右鍵單擊將有雷方格標記出來(顯示小紅旗)</p><p> 當所有有雷的方格打上了標志,所有無雷的方格都被翻起,表明掃雷成功。如果中途使用左鍵單擊了有雷方格,則被“炸死”,掃雷失敗。</p><p><b> 功能:</b></p&
4、gt;<p> ?。?)啟動程序后,顯示初始界面,游戲共有3種預(yù)定義的難度級別,分別是初級(9行9列10顆雷),中級(16行16列40顆雷)和高級(30行16列99顆雷),通過“游戲”菜單中的菜單項可以選擇不同難度。</p><p> 使用自定義菜單命令打開自定義對話框,可以自行定義雷區(qū)的行數(shù),列數(shù)及雷數(shù)。</p><p> ?。?)雷區(qū)正上方是一個“小臉”圖標,不同狀態(tài)下
5、,小臉顯示出微笑,驚訝,痛苦和勝利等表情。任何情況下單擊小臉,可以重新開始游戲。</p><p> 笑臉左邊以LED(發(fā)光二極管)方式顯示了當前雷區(qū)中未被標記出來的雷數(shù),右面是游戲進行的秒數(shù)。計時是在用戶第一次單機雷區(qū)的方塊時開始的。</p><p> ?。?)是用右鍵單擊一個方格將其標記為有雷(插上小旗)之后,不能再使用左鍵單擊它,但可以再用右鍵單擊。右鍵再單機一次方格上顯示“?”號(
6、表示暫時不確定),再單擊第二次,恢復為普通樣子。</p><p> 使用左鍵可以單機除了標記為有雷之外的所有未翻開的方格(包括標記為“?”號的)</p><p> (4)如果一個方格內(nèi)顯示的數(shù)字為N(1~8)且其周圍已有N個方格被標記為有雷,這時可以同時單擊鼠標左鍵和右鍵將方格周圍所有的其它格子翻開。這樣就不必一個一個去單擊了。</p><p> 不過,如果標
7、記為有雷的方格中有標記錯的,這是會被“炸死”。</p><p> (5)掃雷失敗時程序用圖標顯示所有有雷的位置,并將標記錯了的和“炸了的”用和顯示。</p><p> (6)掃雷成功時,如果沒有打破該難度級別的記錄,顯示“勝利”消息框;如果破了紀錄,顯示輸入框提示輸入用戶名。</p><p> 通過“掃雷英雄榜”菜單命令可以顯示“掃雷英雄榜”對話框,其中列出了
8、預(yù)設(shè)的3個難度級別的記錄保持者。</p><p><b> 框架結(jié)構(gòu)圖</b></p><p> 流程規(guī)劃大致上可以分為三個部分,分別為:畫面初始、游戲者按下第一個方塊和為非地雷方塊時展開。畫面初始時,以游戲者最后一次設(shè)定的地雷區(qū)大小為范圍畫出地雷區(qū),但此時并未產(chǎn)生地雷。當游戲者按下第一個方塊時產(chǎn)生地雷資料并啟動定時器,為何在游戲者按下第一個方塊才產(chǎn)生地雷資料呢?
9、其主要的用意在于不要讓游戲者第一次就踩到地雷,這樣在某種程度上可以提高游戲者游玩的氣氛。接著就是如何判斷按下的方塊是非地雷時的處理,這也是整個游戲的技術(shù)核心,我們可以通過遞歸的觀念來檢查周邊的方塊是否含有地雷及是否繼續(xù)往外翻開。流程規(guī)劃如圖1所示: </p><p> 圖1整體流程規(guī)劃圖 </p><p><b> 原程序(注釋)</b></
10、p><p><b> 1.模塊窗口代碼</b></p><p> Option Explicit</p><p> '下面類型定義了游戲區(qū)中每個格子可能的狀態(tài)</p><p> Enum Board_Status '定義枚舉類型</p><p&g
11、t; COMMON = 0</p><p><b> FLAG = 1</b></p><p><b> MARK = 2</b></p><p> DIEBOMB = 3</p><p> NOBOMB = 4</p><p><b> BOMB =
12、5</b></p><p> MARKDOWN = 6</p><p><b> NUM8 = 7</b></p><p><b> NUM7 = 8</b></p><p><b> NUM6 = 9</b></p><p><
13、;b> NUM5 = 10</b></p><p><b> NUM4 = 11</b></p><p><b> NUM3 = 12</b></p><p><b> NUM2 = 13</b></p><p><b> NUM1 = 1
14、4</b></p><p><b> DOWN = 15</b></p><p><b> End Enum</b></p><p> '下面類型定義了小臉可能的狀態(tài)</p><p> Enum Face_Status '定義
15、枚舉類型</p><p> SMILEDOWN = 0</p><p><b> COOL = 1</b></p><p><b> CRY = 2</b></p><p> SURPRISE = 3</p><p><b> SMILE = 4</
16、b></p><p><b> End Enum</b></p><p> '下面的類型定義了游戲區(qū)中一個格子的當前狀態(tài)</p><p> Type TBOMB '自定義類型</p><p> isBomb As Boolean
17、 '是否為地雷</p><p> board As Board_Status '當前狀態(tài)</p><p><b> End Type</b></p><p> Type TPOINT '自定義類型TPOINT,定義點的坐標</p
18、><p> x As Integer</p><p> y As Integer</p><p><b> End Type</b></p><p> Public picBoard(0 To 15) As StdPicture '15種顯示內(nèi)容</p><p>
19、 Public picnum(0 To 10) As StdPicture '11種數(shù)字</p><p> Public picFace(0 To 4) As StdPicture '5種表情圖片</p><p> Public wFace As TPOINT '保存小臉的位置
20、</p><p> Public arrBomb() As TBOMB '保存雷區(qū)狀態(tài)</p><p> Public bDrawFace As Boolean</p><p> Public nFace As Integer</p><p> Public nBombs As Integer
21、 '地雷總數(shù)</p><p> Public nLeftBombs As Integer '剩余雷數(shù)</p><p> Public nRows As Integer, nCols As Integer '雷區(qū)的行數(shù)和列數(shù)</p><p> Public nLevel A
22、s Integer '難度:1~4(分別對應(yīng)初級、中級、高級和自定義)</p><p> Public nTime As Integer '時間</p><p> Public bMark As Boolean</p><p> Public nOldRow As I
23、nteger, nOldCol As Integer '前一個行數(shù)和列數(shù)</p><p> Public bStarted As Boolean '開始標志</p><p> Public bLButton As Boolean, bRButton As Boolean '左右鍵按
24、下狀態(tài)</p><p> Public uname(0 To 2) As String, uscore(0 To 2) As Integer '英雄榜記錄</p><p> Sub DrawBoard(col As Integer, ln As Integer, board As Board_Status) '
25、在雷區(qū)的指定行列繪制指定的內(nèi)容</p><p> Main.PaintPicture picBoard(board), (col + 1) * 16 - 4, 40 + (ln + 1) * 16, 16, 16</p><p><b> End Sub</b></p><p> Sub DrawNum(nnum As Integer,
26、ntype As Integer) '繪制數(shù)字,nnum 參數(shù)為數(shù)字內(nèi)容;ntype參數(shù):1繪制雷數(shù)(左邊),2繪制時間(右邊)</p><p> Dim x As Integer, i As Integer</p><p> Dim strNum, strChr As String</p>
27、<p> If ntype = 1 Then x = 17</p><p> If ntype = 2 Then x = Main.Width / Screen.TwipsPerPixelX - 60 '返回水平(TwipsPerPixelX)度量的對象的每一像素中的緹數(shù)。</p><p> If nnum < 0 Then</p><
28、p> strNum = Format(nnum, "00")</p><p><b> Else</b></p><p> strNum = Format(nnum, "000")</p><p><b> End If</b></p><p>
29、 For i = 1 To 3</p><p> strChr = Mid(strNum, i, 1)</p><p> If strChr >= "0" And strChr <= "9" Then '繪制0-9</p><p
30、> Main.PaintPicture picnum(Val(strChr)), x, 15, 13, 26</p><p> Else '繪制"-"</p><p> Main.Pa
31、intPicture picnum(10), x, 15, 13, 26</p><p><b> End If</b></p><p> x = x + 13</p><p><b> Next</b></p><p><b> End Sub</b></p&g
32、t;<p> Sub DrawNineBoard(col As Integer, ln As Integer)</p><p> Dim i As Integer, j As Integer</p><p> For i = col - 1 To col + 1</p><p> For j = ln - 1 To ln + 1</p&g
33、t;<p> If Not (i < 0 Or j < 0 Or i >= nCols Or j >= nRows) Then</p><p> If arrBomb(i, j).board = COMMON Then DrawBoard i, j, DOWN</p><p> If arrBomb(i, j).board = MARK Then
34、 DrawBoard i, j, MARKDOWN</p><p><b> End If</b></p><p><b> Next</b></p><p><b> Next</b></p><p><b> End Sub</b></p
35、><p> Sub DrawFace(face As Integer) '畫臉形</p><p> Main.PaintPicture picFace(face), wFace.x, wFace.y, 24, 24</p><p><b> End Sub</b></p><p> Sub Gam
36、eOver()</p><p> Dim i As Integer, j As Integer</p><p> For i = 1 To nCols</p><p> For j = 1 To nRows</p><p> If arrBomb(i, j).isBomb And (Not arrBomb(i, j).board =
37、FLAG) Then '是雷沒插旗顯示雷</p><p> arrBomb(i, j).board = BOMB</p><p> DrawBoard i, j, BOMB</p><p><b> End If</b></p><p> If (Not arrBomb(i, j).isBomb)
38、 And arrBomb(i, j).board = FLAG Then '不是雷插旗的顯示無雷</p><p> arrBomb(i, j).board = NOBOMB</p><p> DrawBoard i, j, NOBOMB</p><p><b> End If</b></p><p>&
39、lt;b> Next</b></p><p><b> Next</b></p><p> nFace = CRY</p><p> DrawFace nFace '畫哭臉</p><p> Main.Timer.Enabled = False</p&g
40、t;<p><b> End Sub</b></p><p> Sub OnGameNew() '開始新游戲</p><p> Dim i As Integer, j As Integer</p><p> Dim ln As Integer, col As Integer</p>&
41、lt;p> Main.Timer.Enabled = False</p><p> Select Case (nLevel)</p><p> Case 0 '初級</p><p><b> nCols = 9</b></p><p><b> nRows = 9&
42、lt;/b></p><p> nBombs = 10</p><p> Case 1 '中級</p><p> nCols = 16</p><p> nRows = 16</p><p> nBombs = 40</p><p> Case 2
43、 '高級</p><p> nCols = 30</p><p> nRows = 16</p><p> nBombs = 99</p><p> End Select</p><p> ReDim arrBomb(0 To nCols, 0 To nRows)</p&g
44、t;<p> Main.Width = 30 * Screen.TwipsPerPixelX + 16 * Screen.TwipsPerPixelX * nCols</p><p> Main.Height = 100 * Screen.TwipsPerPixelY + 13 * Screen.TwipsPerPixelY + 16 * Screen.TwipsPerPixelY * nRow
45、s</p><p> '返回水平 (TwipsPerPixelX) 或垂直 (TwipsPerPixelY) 度量的對象的每一像素中的緹數(shù)。</p><p> bLButton = False</p><p> bRButton = False</p><p> bStarted = False</p&g
46、t;<p> bDrawFace = False</p><p> nFace = SMILE</p><p> nOldCol = 0</p><p> nOldRow = 0</p><p> nLeftBombs = nBombs</p><p> For i = 0 To nCols
47、- 1</p><p> For j = 0 To nRows - 1</p><p> arrBomb(i, j).isBomb = False</p><p> arrBomb(i, j).board = COMMON</p><p><b> Next</b></p><p><
48、;b> Next</b></p><p><b> i = 0</b></p><p> Do While i < nBombs '隨機生成nBombs個地雷</p><p> col = Int(Rnd * 100) Mod nCols</p>&l
49、t;p> ln = Int(Rnd * 100) Mod nRows</p><p> If arrBomb(col, ln).isBomb = False Then</p><p> arrBomb(col, ln).isBomb = True '防止重復</p><p><b> i = i + 1</b
50、></p><p><b> End If</b></p><p><b> Loop</b></p><p> wFace.x = Main.Width / (2 * Screen.TwipsPerPixelX) - 13</p><p> wFace.y = 15</p>
51、;<p><b> nTime = 0</b></p><p><b> End Sub</b></p><p> Sub Check() '檢查是否勝利,并顯示勝利消息</p><p> Dim WIN As Boolean</p><p> Dim
52、 i, j As Integer</p><p> WIN = True</p><p> For i = 0 To nCols - 1</p><p> For j = 0 To nRows - 1</p><p> If arrBomb(i, j).board = COMMON Or arrBomb(i, j).board = M
53、ARK Then WIN = False '存在既沒插旗又沒翻開的格子</p><p> If arrBomb(i, j).isBomb = False And arrBomb(i, j).board = FLAG Then WIN = False '插旗的有不是雷</p><p><b> Next</b></p><
54、;p><b> Next</b></p><p> If Not WIN Then</p><p><b> Exit Sub</b></p><p><b> End If</b></p><p> nFace = COOL</p><p&
55、gt; DrawFace nFace</p><p> Main.Timer.Enabled = False</p><p> If nLevel < 3 Then</p><p> If uscore(nLevel) > nTime Or uscore(nLevel) = 0 Then '破本難度的記錄
56、</p><p> uscore(nLevel) = nTime</p><p> uname(nLevel) = InputBox("勝利了,恭喜你破了本難度的記錄!" & Chr(10) & Chr(13) & "請留下大名:", "掃雷", "無名俠")</p>
57、<p> If uname(nLevel) = "" Then uname(nLevel) = "匿名"</p><p><b> Else</b></p><p> MsgBox "勝利了,恭喜你!", 64, "掃雷" 'vbOKOnly + vbInfo
58、rmation</p><p><b> End If</b></p><p><b> Else</b></p><p> MsgBox "勝利了,恭喜你!", 64, "掃雷"</p><p><b> End If</b>&
59、lt;/p><p><b> End Sub</b></p><p> Sub Kick(col As Integer, ln As Integer) '遞歸過程,判斷一個位置的周圍的雷數(shù)</p><p> Dim sum As Integer</p><p> Dim i As Integer, j
60、 As Integer</p><p> If col < 0 Or ln < 0 Or col >= nCols Or ln >= nRows Then Exit Sub</p><p> If arrBomb(col, ln).isBomb = True Then '如果踩上地雷</p><p><b>
61、 GameOver</b></p><p> arrBomb(col, ln).board = DIEBOMB</p><p> DrawBoard col, ln, DIEBOMB</p><p><b> Exit Sub</b></p><p><b> End If</b>
62、;</p><p><b> sum = 0</b></p><p><b> i = 0</b></p><p><b> j = 0</b></p><p> For i = col - 1 To col + 1 '計算周圍
63、共有地雷數(shù)</p><p> For j = ln - 1 To ln + 1</p><p> If Not (i < 0 Or j < 0 Or i >= nCols Or j >= nRows) Then</p><p> If arrBomb(i, j).isBomb Then</p><p> sum
64、 = sum + 1</p><p><b> End If</b></p><p><b> End If</b></p><p><b> Next</b></p><p><b> Next</b></p><p>
65、 arrBomb(col, ln).board = 15 - sum '記下并顯示周圍地雷數(shù)</p><p> DrawBoard col, ln, 15 - sum</p><p> If sum = 0 Then '如果周圍沒有地雷,</p><p> For i
66、= col - 1 To col + 1</p><p> For j = ln - 1 To ln + 1</p><p> If i >= 0 And j >= 0 And i < nCols And j < nRows Then</p><p> If ((Not (i = col And j = ln)) And (arrBom
67、b(i, j).board = COMMON)) Then '對未翻操作開的格子進行</p><p><b> Kick i, j</b></p><p><b> End If</b></p><p><b> End If</b></p><p>&
68、lt;b> Next</b></p><p><b> Next</b></p><p><b> End If</b></p><p><b> End Sub</b></p><p> Sub SaveRecord() '
69、保存英雄榜記錄</p><p> Dim i As Integer</p><p> Dim v As Variant</p><p> v = GetAllSettings("main", "Records")</p><p> If Not IsEmpty(v) Then</p>
70、<p> DeleteSetting "main", "Records" '刪除現(xiàn)有記錄</p><p><b> End If</b></p><p> For i = 0 To 2</p><p> SaveSetting "main", &quo
71、t;Records", uname(i), uscore(i)</p><p><b> Next</b></p><p><b> End Sub</b></p><p><b> 2.主窗口代碼</b></p><p> Option Explicit&l
72、t;/p><p> Private Sub mnuAbout_Click()</p><p> Form4.Show 1, Me</p><p><b> End Sub</b></p><p> Private Sub mnu1_Click()</p><p> mnu1.Checked
73、= True '顯示選中狀態(tài)</p><p> mnu2.Checked = False</p><p> mnu3.Checked = False</p><p> mnu4.Checked = False</p><p><b> nCols = 8</b></p&g
74、t;<p><b> nRows = 8</b></p><p> nBombs = 10</p><p> nLevel = 0 '初始為初級</p><p><b> OnGameNew</b></p><p> Form_Paint</p
75、><p><b> End Sub</b></p><p> Private Sub mnuExit_Click()</p><p><b> Unload Me</b></p><p><b> End Sub</b></p><p> Priv
76、ate Sub mnu2_Click() '中級</p><p> mnu1.Checked = False</p><p> mnu2.Checked = True</p><p> mnu3.Checked = False</p><p> mnu4.Checked = Fa
77、lse</p><p> nCols = 16</p><p> nRows = 16</p><p> nBombs = 40</p><p> nLevel = 1</p><p><b> OnGameNew</b></p><p> Form_Paint
78、</p><p><b> End Sub</b></p><p> Private Sub mnu3_Click() '高級</p><p> mnu1.Checked = False</p><p> mnu2.Checked = False<
79、;/p><p> mnu3.Checked = True</p><p> mnu4.Checked = False</p><p> nCols = 30</p><p> nRows = 16</p><p> nBombs = 99</p><p> nLevel = 2</
80、p><p><b> OnGameNew</b></p><p> Form_Paint</p><p><b> End Sub</b></p><p> Private Sub mnu4_Click()</p><p> Form2.Show 1, Me</p
81、><p><b> End Sub</b></p><p> Private Sub mnuStart_Click()</p><p><b> OnGameNew</b></p><p> Form_Paint</p><p><b> End Sub<
82、;/b></p><p> Private Sub mnuhero_Click() '顯示排行榜對話框</p><p> Form3.Show 1, Me</p><p><b> End Sub</b></p><p> Private Sub Form_Load()</p>&
83、lt;p> Dim i As Integer</p><p> For i = 0 To 15</p><p> Set picBoard(i) = LoadResPicture(100 + i, 0) '加載雷區(qū)圖片</p><p><b> Next</b></p><p>
84、 For i = 0 To 10</p><p> Set picnum(i) = LoadResPicture(120 + i, 0) '加載數(shù)字圖片</p><p><b> Next</b></p><p> For i = 0 To 4</p><p> Set picF
85、ace(i) = LoadResPicture(140 + i, 0) '加載臉形圖片</p><p><b> Next</b></p><p> ReDim arrBomb(0 To 9, 0 To 9) '默認為初級(10行10列)</p><p&g
86、t; Call OnGameNew</p><p> Call Form_Paint</p><p> Call ReadRecord</p><p><b> End Sub</b></p><p> Public Sub Form_Paint()</p><p> Dim i As
87、 Integer, j As Integer</p><p> Dim w As Long, h As Long</p><p> Dim oldForecolor, oldFillcolor As ColorConstants</p><p> w = ScaleWidth - 1 'ScaleW
88、idth,ScaleHeight是控件內(nèi)部坐標的寬度和高度。</p><p> h = ScaleHeight - 1</p><p> oldForecolor = ForeColor</p><p> oldFillcolor = FillColor</p><p> FillColor = RGB(198, 195, 198)
89、 'RGB函數(shù)返回一個顏色 FillColor指填充色</p><p> ForeColor = RGB(198, 195, 198)</p><p> FillStyle = 0 '填充樣式</p><p> Line (0, 0
90、)-(w, 550), , BF '有B畫矩形 有F用邊框顏色填充矩形</p><p> Line (0, 550)-(120, (h - 120)), , BF</p><p> Line (0, (h - 120))-(w, h), , BF</p><p> Line ((w - 110), 55
91、0)-(w, (h - 120)), , BF</p><p> ForeColor = RGB(255, 255, 255) '文字或邊框顏色</p><p> DrawWidth = 1 '邊框?qū)挾燃包c的大?。▎挝粸橄袼兀?lt;/p>
92、;<p> Line (w - 1, 0)-(0, 0) '畫直線</p><p> Line (0, 0)-(0, h)</p><p> Line (w - 2, 1)-(1, 1)</p><p> Line (1, 1)-(1, h - 1)</p>&l
93、t;p> Line (w - 3, 2)-(2, 2)</p><p> Line (2, 2)-(2, h - 2)</p><p> Line (w - 9, 10)-(w - 9, 45)</p><p> Line (w - 9, 45)-(9, 45)</p><p> Line (w - 10, 11)-(w -
94、10, 44)</p><p> Line (w - 10, 44)-(10, 44)</p><p> Line (w - 9, 53)-(w - 9, h - 9)</p><p> Line (w - 9, h - 9)-(9, h - 9)</p><p> Line (w - 10, 54)-(w - 10, h - 10)
95、</p><p> Line (w - 10, h - 10)-(10, h - 10)</p><p> Line (w - 11, 55)-(w - 11, h - 11)</p><p> Line (w - 11, h - 11)-(11, h - 11)</p><p> ForeColor = RGB(132, 130,
96、132)</p><p> DrawWidth = 1</p><p> Line (w, 1)-(w, h)</p><p> Line (w, h)-(1, h)</p><p> Line (w - 1, 1)-(w - 1, h - 1)</p><p> Line (w - 1, h - 1)-(2
97、, h - 1)</p><p> Line (w - 2, 2)-(w - 2, h - 2)</p><p> Line (w - 2, h - 2)-(3, h - 2)</p><p> Line (w - 10, 9)-(9, 9)</p><p> Line (9, 9)-(9, 45)</p><p&
98、gt; Line (w - 11, 10)-(10, 10)</p><p> Line (10, 10)-(10, 44)</p><p> Line (w - 10, 52)-(9, 52)</p><p> Line (9, 52)-(9, h - 9)</p><p> Line (w - 11, 53)-(10, 53)&
99、lt;/p><p> Line (10, 53)-(10, h - 10)</p><p> Line (w - 12, 54)-(11, 54)</p><p> Line (11, 54)-(11, h - 11)</p><p> FillColor = RGB(255, 255, 255)</p><p>
100、 ForeColor = RGB(132, 130, 132)</p><p> Line (wFace.x - 1, wFace.y - 1)-(wFace.x + 25, wFace.y + 25)</p><p> ForeColor = oldForecolor '形成雷數(shù)顯示LED</p>&l
101、t;p> FillColor = oldFillcolor '形成時間顯示LED</p><p> DrawNum nLeftBombs, 1</p><p> DrawNum nTime, 2</p><p> DrawFace nFace</p><p>
102、 For i = 0 To nCols - 1</p><p> For j = 0 To nRows - 1</p><p> DrawBoard i, j, arrBomb(i, j).board '形成所有格子</p><p><b> Next</b></p><
103、;p><b> Next</b></p><p><b> End Sub</b></p><p> Private Sub ReadRecord() '讀入英雄榜記錄</p><p> Dim i As Integer</p><p> Dim v As Variant
104、</p><p> Dim s As String</p><p> v = GetAllSettings("main", "Records") 'GetAllSettings 返回 Variant,其內(nèi)容為字符串的二維數(shù)組,該二維數(shù)組包含指定區(qū)域中的所有注冊表項設(shè)置及其對應(yīng)值。</p><p>
105、 If IsEmpty(v) Then 'IsEmpty 用于判斷一個變量是否已初始化</p><p> For i = 0 To 2</p><p> uname(i) = "無名俠"</p><p> uscore(i) = 0</p><p>
106、<b> Next</b></p><p><b> Exit Sub</b></p><p><b> End If</b></p><p> For i = 0 To 2</p><p> If i >= LBound(v, 1) And i <= U
107、Bound(v, 1) Then</p><p> uname(i) = v(i, 0)</p><p> uscore(i) = v(i, 1)</p><p><b> Else</b></p><p> uname(i) = "無名俠"</p><p> usc
108、ore(i) = 0</p><p><b> End If</b></p><p><b> Next</b></p><p><b> End Sub</b></p><p> Private Sub Timer_Timer() '顯示游戲時間</
109、p><p> If nTime < 999 Then</p><p> nTime = nTime + 1</p><p> DrawNum nTime, 2</p><p><b> End If</b></p><p><b> End Sub</b><
110、/p><p> Private Sub Form_Unload(Cancel As Integer)</p><p> Call SaveRecord</p><p><b> End Sub</b></p><p> Private Sub Form_MouseDown(Button As Integer, Shi
111、ft As Integer, x As Single, y As Single)</p><p> Dim ln As Integer, col As Integer</p><p> If Button = 1 Then '如果點擊的是鼠標左鍵</p><p> If x >= wFace.x And y >= wF
112、ace.y And x <= wFace.x + 24 And y <= wFace.y + 24 Then '如果在小臉上點擊</p><p> bLButton = True</p><p> bDrawFace = True</p><p> DrawFace SMILEDOWN</p><p><b
113、> Exit Sub</b></p><p><b> End If</b></p><p> If nFace = CRY Or nFace = COOL Then Exit Sub '如果已炸死或勝利,則不反應(yīng)</p><p&g
114、t; bLButton = True</p><p> DrawFace SURPRISE</p><p> If x <= 12 Or x >= 12 + 16 * nCols Or y <= 55 Or y >= 55 + 16 * nRows Then Exit Sub '如果點擊在雷區(qū)外,則不反應(yīng)</p><p>
115、 ln = Int((y - 40) / 16) - 1 '劃分按鈕</p><p> col = Int((x + 4) / 16) - 1</p><p> nOldRow = ln</p><p> nOldCol = col
116、 '記錄鼠標按下的按鈕</p><p> If bRButton Then</p><p> DrawNineBoard col, ln '兩鍵都按下翻開周圍九個按鈕</p><p
117、><b> End If</b></p><p> If arrBomb(col, ln).board = MARK Then '如果點擊?號,顯示按下的?號</p><p> DrawBoard col, ln, MARKDOWN</p><p><b> End If</b></p>
118、;<p> If arrBomb(col, ln).board = COMMON Then '中果點擊空白,顯示按下的空白</p><p> DrawBoard col, ln, DOWN</p><p><b> End If</b></p><p> ElseIf Button = 2 Then
119、 '按下鼠標右鍵時</p><p> If (nFace = CRY Or nFace = COOL) Then Exit Sub '如果已炸死或勝利,則不反應(yīng)</p><p> If x < 12 Or x >= 12 + 16 * nCols Or y < 55 Or y >= 5
120、5 + 16 * nRows Then Exit Sub '如果點擊在雷區(qū)外,則不反應(yīng)</p><p> bRButton = True</p><p> ln = Int((y - 40) / 16) - 1 '劃分按鈕</p><p> col = Int((x + 4) / 16)
121、- 1</p><p> If bLButton Then</p><p> DrawNineBoard col, ln '兩鍵都按下翻開周圍九個按鈕</p><p><b> End If</b></p><p> If arrBomb(col
122、, ln).board = COMMON Then</p><p> arrBomb(col, ln).board = FLAG</p><p> DrawBoard col, ln, FLAG</p><p> nLeftBombs = nLeftBombs - 1</p><p> DrawNum nLeftBombs, 1<
123、;/p><p> ElseIf arrBomb(col, ln).board = FLAG Then</p><p> arrBomb(col, ln).board = MARK</p><p> DrawBoard col, ln, MARK</p><p> nLeftBombs = nLeftBombs + 1</p>
124、<p> DrawNum nLeftBombs, 1</p><p><b> Else</b></p><p> If arrBomb(col, ln).board = MARK Then</p><p> arrBomb(col, ln).board = COMMON</p><p> Draw
125、Board col, ln, COMMON</p><p><b> End If</b></p><p><b> End If</b></p><p><b> End If</b></p><p><b> End Sub</b></p
126、><p> Private Sub Form_MouseMove(Button As Integer, Shift As Integer, x As Single, y As Single)</p><p> Dim ln As Integer, col As Integer</p><p> Dim i As Integer, j As Integer</
127、p><p> If ((Not bLButton) And (Not bRButton)) Then '左右鍵都未按下移動鼠標不反應(yīng)</p><p><b> Exit Sub</b></p><p><b> End If</b></p><p&g
128、t; If bDrawFace Then</p><p> If x >= wFace.x And y >= wFace.y And x <= wFace.x + 24 And y <= wFace.y + 24 Then '鼠標在臉形上時顯示Smiledown</p><p> DrawFace SMILEDOWN</p>
129、<p><b> Else</b></p><p> DrawFace nFace '鼠標移開恢復原來臉型</p><p><b> Exit Sub</b></p>
130、<p><b> End If</b></p><p><b> End If</b></p><p> If x <= 12 Or x >= 12 + 16 * nCols Or y <= 55 Or y >= 55 + 16 * nRows Then '鼠標移到雷
溫馨提示
- 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)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- vb課程設(shè)計掃雷游戲的設(shè)計與開發(fā)
- 掃雷游戲課程設(shè)計報告
- 掃雷畢業(yè)課程設(shè)計報告
- 掃雷游戲課程設(shè)計報告
- c++掃雷課程設(shè)計報告
- 掃雷課程設(shè)計
- 掃雷課程設(shè)計--掃雷程序設(shè)計
- java課程設(shè)計--掃雷游戲報告
- java掃雷課程設(shè)計
- java 課程設(shè)計 掃雷
- 人工智能掃雷課程設(shè)計報告
- c程序課程設(shè)計報告(掃雷游戲)
- java課程設(shè)計報告-掃雷小游戲
- vb課程設(shè)計報告模板
- 掃雷游戲程序設(shè)計課程設(shè)計報告
- java課程設(shè)計-掃雷游戲
- java掃雷游戲課程設(shè)計
- vb掃雷游戲設(shè)計論文
- vb課程設(shè)計報告---打字游戲
- vb打字游戲課程設(shè)計報告
評論
0/150
提交評論