版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、<p> Vb掃雷課程設(shè)計(jì)報(bào)告</p><p> 姓名: 班級(jí): 學(xué)號(hào): </p><p><b> 難度:☆☆☆☆</b></p><p> 知識(shí)點(diǎn):控件數(shù)組 繪圖 菜單 文本文件的讀寫 多模塊程序設(shè)計(jì) 資源文件的使用</p><p><b&
2、gt; 題目</b></p><p> “掃雷”是windows下的經(jīng)典小游戲。如下圖所示,一個(gè)由M行N列小方格組成的雷區(qū)影藏著K顆地雷(M N和K可以事先設(shè)置)。用戶根據(jù)判斷確定哪個(gè)方格有雷,哪個(gè)方格無雷。使用鼠標(biāo)左鍵單擊無雷方格將其翻開會(huì)在該方格內(nèi)顯示一個(gè)數(shù)字(1~8),該數(shù)字表示這個(gè)方格周圍相鄰的8個(gè)方格內(nèi)共有多少克雷。如果左鍵單擊方格內(nèi)未顯示數(shù)字,表示方格周圍沒有雷,程序自動(dòng)將周圍的方格翻
3、起直至遇到周圍有雷的方格為止。</p><p> 在方格內(nèi)數(shù)字的提示下,用戶判斷某個(gè)位置有雷,使用鼠標(biāo)右鍵單擊將有雷方格標(biāo)記出來(顯示小紅旗)</p><p> 當(dāng)所有有雷的方格打上了標(biāo)志,所有無雷的方格都被翻起,表明掃雷成功。如果中途使用左鍵單擊了有雷方格,則被“炸死”,掃雷失敗。</p><p><b> 功能:</b></p&
4、gt;<p> (1)啟動(dòng)程序后,顯示初始界面,游戲共有3種預(yù)定義的難度級(jí)別,分別是初級(jí)(9行9列10顆雷),中級(jí)(16行16列40顆雷)和高級(jí)(30行16列99顆雷),通過“游戲”菜單中的菜單項(xiàng)可以選擇不同難度。</p><p> 使用自定義菜單命令打開自定義對(duì)話框,可以自行定義雷區(qū)的行數(shù),列數(shù)及雷數(shù)。</p><p> ?。?)雷區(qū)正上方是一個(gè)“小臉”圖標(biāo),不同狀態(tài)下
5、,小臉顯示出微笑,驚訝,痛苦和勝利等表情。任何情況下單擊小臉,可以重新開始游戲。</p><p> 笑臉左邊以LED(發(fā)光二極管)方式顯示了當(dāng)前雷區(qū)中未被標(biāo)記出來的雷數(shù),右面是游戲進(jìn)行的秒數(shù)。計(jì)時(shí)是在用戶第一次單機(jī)雷區(qū)的方塊時(shí)開始的。</p><p> (3)是用右鍵單擊一個(gè)方格將其標(biāo)記為有雷(插上小旗)之后,不能再使用左鍵單擊它,但可以再用右鍵單擊。右鍵再單機(jī)一次方格上顯示“?”號(hào)(
6、表示暫時(shí)不確定),再單擊第二次,恢復(fù)為普通樣子。</p><p> 使用左鍵可以單機(jī)除了標(biāo)記為有雷之外的所有未翻開的方格(包括標(biāo)記為“?”號(hào)的)</p><p> ?。?)如果一個(gè)方格內(nèi)顯示的數(shù)字為N(1~8)且其周圍已有N個(gè)方格被標(biāo)記為有雷,這時(shí)可以同時(shí)單擊鼠標(biāo)左鍵和右鍵將方格周圍所有的其它格子翻開。這樣就不必一個(gè)一個(gè)去單擊了。</p><p> 不過,如果標(biāo)
7、記為有雷的方格中有標(biāo)記錯(cuò)的,這是會(huì)被“炸死”。</p><p> (5)掃雷失敗時(shí)程序用圖標(biāo)顯示所有有雷的位置,并將標(biāo)記錯(cuò)了的和“炸了的”用和顯示。</p><p> ?。?)掃雷成功時(shí),如果沒有打破該難度級(jí)別的記錄,顯示“勝利”消息框;如果破了紀(jì)錄,顯示輸入框提示輸入用戶名。</p><p> 通過“掃雷英雄榜”菜單命令可以顯示“掃雷英雄榜”對(duì)話框,其中列出了
8、預(yù)設(shè)的3個(gè)難度級(jí)別的記錄保持者。</p><p><b> 框架結(jié)構(gòu)圖</b></p><p> 流程規(guī)劃大致上可以分為三個(gè)部分,分別為:畫面初始、游戲者按下第一個(gè)方塊和為非地雷方塊時(shí)展開。畫面初始時(shí),以游戲者最后一次設(shè)定的地雷區(qū)大小為范圍畫出地雷區(qū),但此時(shí)并未產(chǎn)生地雷。當(dāng)游戲者按下第一個(gè)方塊時(shí)產(chǎn)生地雷資料并啟動(dòng)定時(shí)器,為何在游戲者按下第一個(gè)方塊才產(chǎn)生地雷資料呢?
9、其主要的用意在于不要讓游戲者第一次就踩到地雷,這樣在某種程度上可以提高游戲者游玩的氣氛。接著就是如何判斷按下的方塊是非地雷時(shí)的處理,這也是整個(gè)游戲的技術(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ū)中每個(gè)格子可能的狀態(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ū)中一個(gè)格子的當(dāng)前狀態(tài)</p><p> Type TBOMB '自定義類型</p><p> isBomb As Boolean
17、 '是否為地雷</p><p> board As Board_Status '當(dāng)前狀態(tài)</p><p><b> End Type</b></p><p> Type TPOINT '自定義類型TPOINT,定義點(diǎn)的坐標(biāo)</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(分別對(duì)應(yīng)初級(jí)、中級(jí)、高級(jí)和自定義)</p><p> Public nTime As Integer '時(shí)間</p><p> Public bMark As Boolean</p><p> Public nOldRow As I
23、nteger, nOldCol As Integer '前一個(gè)行數(shù)和列數(shù)</p><p> Public bStarted As Boolean '開始標(biāo)志</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繪制時(shí)間(右邊)</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)度量的對(duì)象的每一像素中的緹數(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 '初級(jí)</p><p><b> nCols = 9</b></p><p><b> nRows = 9&
42、lt;/b></p><p> nBombs = 10</p><p> Case 1 '中級(jí)</p><p> nCols = 16</p><p> nRows = 16</p><p> nBombs = 40</p><p> Case 2
43、 '高級(jí)</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) 度量的對(duì)象的每一像素中的緹數(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 '隨機(jī)生成nBombs個(gè)地雷</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 '防止重復(fù)</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) & "請(qǐng)留下大名:", "掃雷", "無名俠")</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) '遞歸過程,判斷一個(gè)位置的周圍的雷數(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 '計(jì)算周圍
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 '對(duì)未翻操作開的格子進(jìn)行</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 '初始為初級(jí)</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() '中級(jí)</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() '高級(jí)</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() '顯示排行榜對(duì)話框</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) '默認(rèn)為初級(jí)(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)部坐標(biāo)的寬度和高度。</p><p> h = ScaleHeight - 1</p><p> oldForecolor = ForeColor</p><p> oldFillcolor = FillColor</p><p> FillColor = RGB(198, 195, 198)
89、 'RGB函數(shù)返回一個(gè)顏色 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(diǎn)的大?。▎挝粸橄袼兀?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 '形成時(shí)間顯示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ū)域中的所有注冊(cè)表項(xiàng)設(shè)置及其對(duì)應(yīng)值。</p><p>
105、 If IsEmpty(v) Then 'IsEmpty 用于判斷一個(gè)變量是否已初始化</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() '顯示游戲時(shí)間</
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 '如果點(diǎn)擊的是鼠標(biāo)左鍵</p><p> If x >= wFace.x And y >= wF
112、ace.y And x <= wFace.x + 24 And y <= wFace.y + 24 Then '如果在小臉上點(diǎn)擊</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 '如果點(diǎn)擊在雷區(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、 '記錄鼠標(biāo)按下的按鈕</p><p> If bRButton Then</p><p> DrawNineBoard col, ln '兩鍵都按下翻開周圍九個(gè)按鈕</p><p
117、><b> End If</b></p><p> If arrBomb(col, ln).board = MARK Then '如果點(diǎn)擊?號(hào),顯示按下的?號(hào)</p><p> DrawBoard col, ln, MARKDOWN</p><p><b> End If</b></p>
118、;<p> If arrBomb(col, ln).board = COMMON Then '中果點(diǎn)擊空白,顯示按下的空白</p><p> DrawBoard col, ln, DOWN</p><p><b> End If</b></p><p> ElseIf Button = 2 Then
119、 '按下鼠標(biāo)右鍵時(shí)</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 '如果點(diǎn)擊在雷區(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 '兩鍵都按下翻開周圍九個(gè)按鈕</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 '左右鍵都未按下移動(dòng)鼠標(biāo)不反應(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 '鼠標(biāo)在臉形上時(shí)顯示Smiledown</p><p> DrawFace SMILEDOWN</p>
129、<p><b> Else</b></p><p> DrawFace nFace '鼠標(biāo)移開恢復(fù)原來臉型</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 '鼠標(biāo)移到雷
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫僅提供信息存儲(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ì)掃雷游戲的設(shè)計(jì)與開發(fā)
- 掃雷游戲課程設(shè)計(jì)報(bào)告
- 掃雷畢業(yè)課程設(shè)計(jì)報(bào)告
- 掃雷游戲課程設(shè)計(jì)報(bào)告
- c++掃雷課程設(shè)計(jì)報(bào)告
- 掃雷課程設(shè)計(jì)
- 掃雷課程設(shè)計(jì)--掃雷程序設(shè)計(jì)
- java課程設(shè)計(jì)--掃雷游戲報(bào)告
- java掃雷課程設(shè)計(jì)
- java 課程設(shè)計(jì) 掃雷
- 人工智能掃雷課程設(shè)計(jì)報(bào)告
- c程序課程設(shè)計(jì)報(bào)告(掃雷游戲)
- java課程設(shè)計(jì)報(bào)告-掃雷小游戲
- vb課程設(shè)計(jì)報(bào)告模板
- 掃雷游戲程序設(shè)計(jì)課程設(shè)計(jì)報(bào)告
- java課程設(shè)計(jì)-掃雷游戲
- java掃雷游戲課程設(shè)計(jì)
- vb掃雷游戲設(shè)計(jì)論文
- vb課程設(shè)計(jì)報(bào)告---打字游戲
- vb打字游戲課程設(shè)計(jì)報(bào)告
評(píng)論
0/150
提交評(píng)論