掃雷編程vb.net 掃雷編程素材

VB.NET掃雷地雷是在一個控件中畫出來好還是每個方格用一個控件好呢?謝謝!

畫出來比較好,用鼠標(biāo)當(dāng)前坐標(biāo)位置進(jìn)行計算選擇的方格位置,如果一個方格用一個控件,會很浪費(fèi)資源。

成都創(chuàng)新互聯(lián)公司專注為客戶提供全方位的互聯(lián)網(wǎng)綜合服務(wù),包含不限于成都網(wǎng)站設(shè)計、網(wǎng)站建設(shè)、楊浦網(wǎng)絡(luò)推廣、微信平臺小程序開發(fā)、楊浦網(wǎng)絡(luò)營銷、楊浦企業(yè)策劃、楊浦品牌公關(guān)、搜索引擎seo、人物專訪、企業(yè)宣傳片、企業(yè)代運(yùn)營等,從售前售中售后,我們都將竭誠為您服務(wù),您的肯定,是我們最大的嘉獎;成都創(chuàng)新互聯(lián)公司為所有大學(xué)生創(chuàng)業(yè)者提供楊浦建站搭建服務(wù),24小時服務(wù)熱線:18980820575,官方網(wǎng)址:muchs.cn

掃雷中左右鍵一起按的按鍵鍵值是什么(VB.NET)

左鍵是1

右鍵是2

中鍵是4

可以組合相加

左右同時就是3,也可以寫做:vbleftbutton+vbrightbutton

求一個掃雷游戲程序編寫代碼,一定要是用VB.NET編寫的~急!!!!!!!!`

掃雷程序最重要的算法應(yīng)該就是空白區(qū)域展開的那段.現(xiàn)在我想到的有兩種方法

一種是遞歸算法(比較容易),一種是用類似于堆棧的算法,不過現(xiàn)在我懶的寫了,

把源碼貼出來如果大家有興趣的話可以給予改進(jìn).記得給我發(fā)一份喲,謝謝!

(本代碼為交流學(xué)習(xí)而用,大家可以任意轉(zhuǎn)載.)

下載:

你能夠用VB編一個掃雷游戲不?

'---------------------------------------------------------------------

'

'掃雷程序源代碼 (這個程序只完成了主要的部份,其他細(xì)節(jié)我想你能完成了.)

'

'

'掃雷程序最難的部份是在于如何自動打開空白區(qū)了

'我以前是用“堆?!钡姆绞竭M(jìn)行判斷來打開的,

'就是把要判斷的坐標(biāo)壓入用集合模擬的堆棧區(qū),然后再逐一彈出進(jìn)行判斷.

'用這種方式一是要用到集合來做堆棧,二是編程煩瑣

'我想了很長時間,終于想到另外一種方法,也就是現(xiàn)在用的這種方法

'我暫時稱它為"掃描"方法吧,因?yàn)樗怯玫膾呙柙韥泶蜷_空白區(qū)的

'"掃描"方法一是速度快,沒有用到集合,另外就是編程方便,易于讀懂程序.

'我個人對這種方法比較喜歡的,我覺得它是一個很新的思路(呵呵 別笑我笨啊)

'

'你可以任意復(fù)制或修改以下代碼以滿足你的需要,但請注明其出處

'任何問題可以和我聯(lián)系呀! Email: ZMSPU@163.COM

'

' CopyRight (C) 2003 ZMSPU 小小數(shù)點(diǎn)敬贈

'-----------------------------------------------------------------------

'標(biāo)志說明

' 0 ~ 9 未打開的

' -1 ~ -9 已打開的

' 10 雷

' 11 已打開的空(未判斷)

' 12 已打開的空(已判斷)

' 13 標(biāo)記過的

' 14 問號

'

Dim What(1 To 30, 1 To 16) As Long '點(diǎn)

Dim Save(1 To 30, 1 To 16) As Long '存

Dim mX As Long

Dim mY As Long '坐標(biāo)

Dim mTime As Long

Dim MineFlag As Long '標(biāo)記雷

Dim OpenFlag As Long '已打開的

Dim NowWidth As Long

Dim NowHeight As Long

Dim TotMine As Long '總雷數(shù)

Private Sub Command1_Click()

Timer1.Enabled = True

Label2 = "00:00"

Label1 = TotMine

Label3 = "加油哦,祝你好運(yùn)?。。?

Picture1.Enabled = True

For X = 0 To NowWidth - 1

For Y = 0 To NowHeight - 1

Picture1.PaintPicture image1(9).Picture, X, Y

Next

Next

ClearStart NowWidth, NowHeight, TotMine

WriteNumber NowWidth, NowHeight

End Sub

Private Sub Command2_Click()

If Command2.Caption = "顯示源代碼" Then

Command2.Caption = "隱藏源代碼"

Frame2.Visible = True

Else

Command2.Caption = "顯示源代碼"

Frame2.Visible = False

End If

End Sub

Private Sub Form_Load()

Dim X As Long

Dim Y As Long

Show

NowHeight = 16

NowWidth = 30

TotMine = 40

Picture1.Height = (image1(0).Height) * NowHeight

Picture1.Width = (image1(0).Width) * NowWidth

Picture1.ScaleMode = 3

Picture1.ScaleHeight = NowHeight

Picture1.ScaleWidth = NowWidth

For X = 0 To NowWidth - 1

For Y = 0 To NowHeight - 1

Picture1.PaintPicture image1(9).Picture, X, Y

Next

Next

ClearStart NowWidth, NowHeight, TotMine

WriteNumber NowWidth, NowHeight

Exit Sub

'--------------------------

For X = 1 To NowWidth

For Y = 1 To NowHeight

If What(X, Y) = 10 Then

Picture1.PaintPicture image1(13).Picture, X - 1, Y - 1

ElseIf What(X, Y) = 1 And What(X, Y) = 9 Then

Picture1.PaintPicture image1(What(X, Y)).Picture, X - 1, Y - 1

Else

Picture1.PaintPicture image1(9).Picture, X - 1, Y - 1

End If

Next

Next

End Sub

Private Sub Picture1_MouseDown(Button As Integer, Shift As Integer, X As

Single, Y As Single)

Dim T As Long

Dim X1 As Long

Dim Y1 As Long

Dim x2 As Single

Dim y2 As Single

mX = Int(X)

mY = Int(Y)

If Button = vbLeftButton Then

'左鍵按下

If What(mX + 1, mY + 1) = 0 And What(mX + 1, mY + 1) = 10 Then

Picture1.PaintPicture image1(14).Picture, mX, mY

End If

ElseIf Button = vbRightButton Then

'右鍵按下

'只有是打開的才處理

If What(mX + 1, mY + 1) = -9 And What(mX + 1, mY + 1) = -1 Then

T = 0

'計算標(biāo)記的雷

For X1 = mX To mX + 2

For Y1 = mY To mY + 2

If X1 = mX + 1 And Y1 = mY + 1 Then

Else

If X1 = 1 And X1 = NowWidth Then

If Y1 = 1 And Y1 = NowHeight Then

If What(X1, Y1) = 13 Then

T = T + 1

End If

End If

End If

End If

Next

Next

'如果標(biāo)記數(shù)大于等于雷數(shù)則不處理

If T = -(What(mX + 1, mY + 1)) Then Exit Sub

'如果標(biāo)記數(shù)等于雷數(shù)則打開

If T = -What(mX + 1, mY + 1) Then

For X1 = mX To mX + 2

For Y1 = mY To mY + 2

If X1 = mX + 1 And Y1 = mY + 1 Then

Else

If X1 = 1 And X1 = NowWidth Then

If Y1 = 1 And Y1 = NowHeight Then

x2 = X1: y2 = Y1

Picture1_MouseUp vbLeftButton, 0, x2, y2

End If

End If

End If

Next

Next

Exit Sub

End If

'如果標(biāo)記數(shù)小于雷數(shù)則按下余下的

For X1 = mX To mX + 2

For Y1 = mY To mY + 2

If X1 = mX + 1 And Y1 = mY + 1 Then

Else

If X1 = 1 And X1 = NowWidth Then

If Y1 = 1 And Y1 = NowHeight Then

If What(X1, Y1) = 0 And What(X1, Y1) = 10 Then

' Picture1.PaintPicture image1(14).Picture, X1 - 1, Y1 -

1

' Picture1.PaintPicture image1(9).Picture, X1 - 1, Y1 - 1

End If

End If

End If

End If

Next

Next

End If

End If

End Sub

Private Sub Picture1_MouseUp(Button As Integer, Shift As Integer, X As Single,

Y As Single)

If Button = vbLeftButton Then

'左擊

If What(mX + 1, mY + 1) = 10 Then

'點(diǎn)到雷

Timer1.Enabled = False

Picture1.PaintPicture image1(13).Picture, mX, mY

Picture1.Enabled = False

Label3 = "哇!你點(diǎn)到雷了呀!重來吧?。?!"

EndGame

Timer1 = False

Picture1.Enabled = False

Exit Sub

ElseIf What(mX + 1, mY + 1) = 1 And What(mX + 1, mY + 1) = 9 Then

'點(diǎn)到數(shù)字

OpenFlag = OpenFlag + 1

Picture1.PaintPicture image1(What(mX + 1, mY + 1)).Picture, mX, mY

What(mX + 1, mY + 1) = -What(mX + 1, mY + 1)

ElseIf What(mX + 1, mY + 1) = 0 Then

'點(diǎn)到空

Picture1.PaintPicture image1(0).Picture, mX, mY

What(mX + 1, mY + 1) = 11

OpenBlank mX + 1, mY + 1

End If

If MineFlag + OpenFlag = NowHeight * NowWidth Then

Label3 = "恭喜恭喜!你過關(guān)了!"

Timer1.Enabled = False

Picture1.Enabled = False

End If

ElseIf Button = vbRightButton Then

'右擊

If What(mX + 1, mY + 1) = 0 And What(mX + 1, mY + 1) = 10 Then

'未標(biāo)記過的進(jìn)行標(biāo)記

Save(mX + 1, mY + 1) = What(mX + 1, mY + 1)

What(mX + 1, mY + 1) = 13

Picture1.PaintPicture image1(10).Picture, mX, mY

MineFlag = MineFlag + 1

Label1 = TotMine - MineFlag

ElseIf What(mX + 1, mY + 1) = 13 Then

'已經(jīng)標(biāo)記過則改為?

What(mX + 1, mY + 1) = 14

MineFlag = MineFlag - 1

Label1 = TotMine - MineFlag

Picture1.PaintPicture image1(11).Picture, mX, mY

ElseIf What(mX + 1, mY + 1) = 14 Then

'標(biāo)記過?號的則

What(mX + 1, mY + 1) = Save(mX + 1, mY + 1)

Picture1.PaintPicture image1(9).Picture, mX, mY

End If

End If

End Sub

Private Sub ClearStart(ByVal mWidth As Long, ByVal mHeight As Long, ByVal

MineNumber As Long)

'預(yù)置雷位置

Randomize

mTime = 0

MineFlag = 0

OpenFlag = 0

'清空數(shù)組

Erase What

For T = 1 To MineNumber

aa:

'任意取一個坐標(biāo)(X,Y)

X = Rnd * (mWidth - 1)

Y = Rnd * (mHeight - 1)

'如果已經(jīng)取過該坐標(biāo)則重新再取

If What(X + 1, Y + 1) = 10 Then GoTo aa

'將當(dāng)前坐標(biāo)標(biāo)記為有雷

What(X + 1, Y + 1) = 10

Save(X + 1, Y + 1) = 10

Next

End Sub

Private Sub WriteNumber(ByVal mWidth As Long, ByVal mHeight As Long)

'寫入信息

Dim X As Long

Dim Y As Long

Dim StartX As Long

Dim StartY As Long

Dim EndX As Long

Dim EndY As Long

Dim T As Long

Dim TT

Dim mNumber As Long

For X = 1 To mWidth

'從當(dāng)前列的上一列開始

StartX = X - 1

If StartX = 0 Then StartX = 1

'在當(dāng)前列的下一列結(jié)束

EndX = X + 1

If EndX mWidth Then EndX = mWidth

For Y = 1 To mHeight

'如果當(dāng)前位置不是雷則開始計算

If What(X, Y) 10 Then

'從當(dāng)前行的上一行開始

StartY = Y - 1

If StartY = 0 Then StartY = 1

'在當(dāng)前行的下一行結(jié)束

EndY = Y + 1

If EndY mHeight Then EndY = mHeight

'累加器置0

mNumber = 0

'計算四周有多少顆雷

For T = StartX To EndX

For TT = StartY To EndY

If TT = Y And T = X Then

'如果是當(dāng)前位置則不計入

Else

'如果是雷則計入

If What(T, TT) = 10 Then mNumber = mNumber + 1

End If

Next

Next

If mNumber = 0 Then

'如果沒有雷在其四周則打開當(dāng)前位置

What(X, Y) = 0

Save(X, Y) = 0

Else

'寫入雷數(shù)

What(X, Y) = mNumber

Save(X, Y) = mNumber

End If

End If

Next

Next

End Sub

Private Sub Timer1_Timer()

Dim sTime As String

Dim mM As Long

Dim mS As Long

Dim sM As String

Dim sS As String

mTime = mTime + 1

mM = Int(mTime / 60)

mS = mTime - mM

sS = mS

sM = mM

If mM 10 Then sM = "0" mM

If mS 10 Then sS = "0" mS

Label2 = sM ":" sS

End Sub

Private Sub OpenBlank(ByVal zmX As Long, ByVal zmY As Long)

Dim Continue As Boolean

Dim mX As Long

Dim mY As Long

OpenFlag = OpenFlag + 1

Do While True

Continue = False

For mY = 1 To NowHeight

For mX = 1 To NowWidth

If What(mX, mY) = 11 Then

'如果存在未判斷的空

Continue = True

'把它周圍的8個點(diǎn)打開

'先打開左面的點(diǎn)

If mX - 1 = 1 Then

If What(mX - 1, mY) = 0 Then

What(mX - 1, mY) = 11

Picture1.PaintPicture image1(0).Picture, mX - 2, mY - 1

OpenFlag = OpenFlag + 1

ElseIf What(mX - 1, mY) = 1 And What(mX - 1, mY) = 9 Then

Picture1.PaintPicture image1(What(mX - 1, mY)).Picture, mX

- 2, mY - 1

What(mX - 1, mY) = -What(mX - 1, mY)

OpenFlag = OpenFlag + 1

End If

End If

'打開左上的點(diǎn)

If mX - 1 = 1 And mY - 1 = 1 Then

If What(mX - 1, mY - 1) = 0 Then

What(mX - 1, mY - 1) = 11

Picture1.PaintPicture image1(0).Picture, mX - 2, mY - 2

OpenFlag = OpenFlag + 1

ElseIf What(mX - 1, mY - 1) = 1 And What(mX - 1, mY - 1)

= 9 Then

Picture1.PaintPicture image1(What(mX - 1, mY -

1)).Picture, mX - 2, mY - 2

What(mX - 1, mY - 1) = -What(mX - 1, mY - 1)

OpenFlag = OpenFlag + 1

End If

End If

'再打開上面的點(diǎn)

If mY - 1 = 1 Then

If What(mX, mY - 1) = 0 Then

What(mX, mY - 1) = 11

Picture1.PaintPicture image1(0).Picture, mX - 1, mY - 2

OpenFlag = OpenFlag + 1

ElseIf What(mX, mY - 1) = 1 And What(mX, mY - 1) = 9 Then

Picture1.PaintPicture image1(What(mX, mY - 1)).Picture, mX

- 1, mY - 2

What(mX, mY - 1) = -What(mX, mY - 1)

OpenFlag = OpenFlag + 1

End If

End If

'打開右上的點(diǎn)

If mY - 1 = 1 And mX + 1 = NowWidth Then

If What(mX + 1, mY - 1) = 0 Then

What(mX + 1, mY - 1) = 11

Picture1.PaintPicture image1(0).Picture, mX, mY - 2

OpenFlag = OpenFlag + 1

ElseIf What(mX + 1, mY - 1) = 1 And What(mX + 1, mY - 1)

= 9 Then

Picture1.PaintPicture image1(What(mX + 1, mY -

1)).Picture, mX, mY - 2

What(mX + 1, mY - 1) = -What(mX + 1, mY - 1)

OpenFlag = OpenFlag + 1

End If

End If

'再打開右面的點(diǎn)

If mX + 1 = NowWidth Then

If What(mX + 1, mY) = 0 Then

What(mX + 1, mY) = 11

Picture1.PaintPicture image1(0).Picture, mX, mY - 1

OpenFlag = OpenFlag + 1

ElseIf What(mX + 1, mY) = 1 And What(mX + 1, mY) = 9 Then

Picture1.PaintPicture image1(What(mX + 1, mY)).Picture, mX,

mY - 1

What(mX + 1, mY) = -What(mX + 1, mY)

OpenFlag = OpenFlag + 1

End If

End If

'再打開右下的點(diǎn)

If mY + 1 = NowHeight And mX + 1 = NowWidth Then

If What(mX + 1, mY + 1) = 0 Then

What(mX + 1, mY + 1) = 11

Picture1.PaintPicture image1(0).Picture, mX, mY

OpenFlag = OpenFlag + 1

ElseIf What(mX + 1, mY + 1) = 1 And What(mX + 1, mY + 1)

= 9 Then

Picture1.PaintPicture image1(What(mX + 1, mY +

1)).Picture, mX, mY

What(mX + 1, mY + 1) = -What(mX + 1, mY + 1)

OpenFlag = OpenFlag + 1

End If

End If

'打開下面的點(diǎn)

If mY + 1 = NowHeight Then

If What(mX, mY + 1) = 0 Then

What(mX, mY + 1) = 11

Picture1.PaintPicture image1(0).Picture, mX - 1, mY

OpenFlag = OpenFlag + 1

ElseIf What(mX, mY + 1) = 1 And What(mX, mY + 1) = 9 Then

Picture1.PaintPicture image1(What(mX, mY + 1)).Picture, mX

- 1, mY

What(mX, mY + 1) = -What(mX, mY + 1)

OpenFlag = OpenFlag + 1

End If

End If

'最后打開左下的點(diǎn)

If mY + 1 = NowHeight And mX - 1 = 1 Then

If What(mX - 1, mY + 1) = 0 Then

What(mX - 1, mY + 1) = 11

Picture1.PaintPicture image1(0).Picture, mX - 2, mY

OpenFlag = OpenFlag + 1

ElseIf What(mX - 1, mY + 1) = 1 And What(mX - 1, mY + 1)

= 9 Then

Picture1.PaintPicture image1(What(mX - 1, mY +

1)).Picture, mX - 2, mY

What(mX - 1, mY + 1) = -What(mX - 1, mY + 1)

OpenFlag = OpenFlag + 1

End If

End If

'四點(diǎn)判斷完后將本點(diǎn)標(biāo)記為已判斷過

What(mX, mY) = 12

End If

Next

Next

If Continue = False Then Exit Do

Loop

End Sub

Private Sub EndGame()

Dim X As Long

Dim Y As Long

For Y = 1 To NowHeight

For X = 1 To NowWidth

If What(X, Y) = 10 Then

Picture1.PaintPicture image1(13).Picture, X - 1, Y - 1

Else

If What(X, Y) = 13 Then

If Save(X, Y) 10 Then

Picture1.PaintPicture image1(12).Picture, X - 1, Y - 1

End If

ElseIf What(X, Y) = 14 Then

If Save(X, Y) = 10 Then

Picture1.PaintPicture image1(13).Picture, X - 1, Y - 1

End If

End If

End If

Next

Next

End Sub

網(wǎng)站題目:掃雷編程vb.net 掃雷編程素材
當(dāng)前URL:http://muchs.cn/article14/doeoede.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供、自適應(yīng)網(wǎng)站、標(biāo)簽優(yōu)化、網(wǎng)站收錄、服務(wù)器托管、域名注冊

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

h5響應(yīng)式網(wǎng)站建設(shè)