扫雷游戏设计代码VB完善版.docx
《扫雷游戏设计代码VB完善版.docx》由会员分享,可在线阅读,更多相关《扫雷游戏设计代码VB完善版.docx(11页珍藏版)》请在冰豆网上搜索。
扫雷游戏设计代码VB完善版
扫雷游戏VB设计实现
最终界面如下:
显然只需完成三个窗体的设计即可,具体设计界面和代码如下:
1、主窗体(form10)设计界面:
主窗体(form10)的代码:
Dimd(11,11)AsInteger
DimkAsInteger
Dimv(100)AsInteger'定义全局变量'
PrivateSubCommand1_Click(IndexAsInteger)
Timer1.Enabled=True'当点击任意一个命令按钮时(即开始游戏),则启动计时器'
i=Index\10+1
j=IndexMod10+1'将二维数组的元素与命令按钮一一对应'
Ifd(i,j)=1Then'判断是否点到地雷'
Timer1.Enabled=False'关闭计时器,游戏结束'
Fori=1To10
Forj=1To10
n=10*(i-1)
m=j-1
Ifd(i,j)=1Then
Command1.Item(m+n).Picture=LoadPicture(App.Path&"\2.jpg")'在按钮上显示地雷图片'
EndIf
Form1.Show'弹出子窗体1(判断输赢)'
Nextj
Nexti
Else
Ifv(Index)=Index+1Then'判断是否插上红旗或是问号图片'
Command1.Item(Index).Picture=LoadPicture()'清除图片'
Command1.Item(Index).Caption=f(i,j)'调用函数,显示周围地雷数'
Command1.Item(Index).Enabled=False'将按钮设为不可用'
Label7.Caption=Val(Label7.Caption)+1
v(Index)=0
EndIf
h=s(i,j)'调用函数,显示周围的情况(边界)'
ForY=0To99
Ifv(Y)=Y+1Then
Command1.Item(Y).Enabled=True'如果是按钮插上了红旗则将按钮设置为可用'
EndIf
NextY
EndIf
Fork=0To99
IfCommand1.Item(k).Enabled=FalseThen
p=p+1'统计扫过的按钮个数'
Ifp=90Then
ForY=0To100
v(Y)=0
NextY'将数组v的元素重新置0(此步目的为实现重玩而设)'
Form2.Show'如果等于90个则结束游戏,弹出子窗体2(赢了)'
EndIf
EndIf
Nextk
EndSub
PrivateSubCommand1_MouseUp(IndexAsInteger,ButtonAsInteger,ShiftAsInteger,XAsSingle,YAsSingle)
IfButton=2Then'右击鼠标'
Ifv(Index)<>Index+1Then'判断是否已插上红旗'
Command1.Item(Index).Picture=LoadPicture(App.Path&"\1.jpg")'插上红旗'
v(Index)=Index+1'给数组元素赋值,以此实现按钮图片的切换或显示状态'
Label7.Caption=Val(Label7.Caption)-1'在标签7中显示插上的红旗个数'
Else
Command1.Item(Index).Picture=LoadPicture(App.Path&"\3.jpg")'将问号图片替换红旗'
Label7.Caption=Val(Label7.Caption)+1
v(Index)=0
EndIf
EndIf
Fori=1To10
Forj=1To10
Ifd(i,j)=1Then
n=10*(i-1)
m=j-1
Ifv(m+n)=m+n+1Thenc=c+1
Ifc=10Then
ForY=0To100
v(Y)=0
NextY'将数组v的元素重新置0(此步目的为实现重玩而设)'
Form2.Show'如果等于90个则结束游戏,弹出子窗体2(赢了)'
EndIf
EndIf
Nextj
Nexti
EndSub
PrivateSubForm_Load()
k=0
Fori=1To10
Forj=1To10
d(i,j)=0'将数组元素置0'
Nextj
Nexti
DoWhilen<>10
Randomize
i=Int(10*Rnd+1)
j=Int(10*Rnd+1)
Ifd(i,j)=0Thend(i,j)=1:
n=n+d(i,j)'产生十个随机数,即相当于十个地雷'
Loop
Form10.Label7.Caption=10
Form10.Label2.Caption=0
Form10.Label3.Caption=0
EndSub
Functionf(i,j)'定义一个函数求一个区域周围地雷的个数'
f=f+d(i-1,j-1)+d(i-1,j)+d(i-1,j+1)+d(i,j-1)
f=f+d(i,j+1)+d(i+1,j-1)+d(i+1,j)+d(i+1,j+1)
EndFunction
Functions(i,j)'定义一个函数显示点击区域周围的情况(即边界)'
ForY=0To100
Ifv(Y)=Y+1Then
Command1.Item(Y).Enabled=False'如插上了红旗,则将按钮先设为不可用'
EndIf
NextY
Iff(i,j)<>0Then'函数嵌套,调用函数判断周围是否无地雷'
n=10*(i-1)
m=j-1
Command1.Item(m+n).Picture=LoadPicture()
Command1.Item(n+m).Caption=f(i,j)
Command1.Item(n+m).Enabled=False'清除图片,显示地雷数,设置按钮不可用'
Else
Fora=i-1Toi+1
Forb=j-1Toj+1
Ifa<>0Andb<>11Anda<>11Andb<>0Then
n=10*(a-1)
m=b-1
IfCommand1.Item(n+m).Enabled=TrueThen
Command1.Item(m+n).Picture=LoadPicture()
Command1.Item(n+m).Caption=f(a,b)
Command1.Item(n+m).Enabled=False'清除图片,显示地雷数,设置按钮不可用'
h=s(a,b)'调用函数本身,即实现递归'
EndIf
EndIf
Nextb
Nexta
EndIf
EndFunction
PrivateSubTimer1_Timer()'设计一个计时器'
Label2.Caption=Val(Label2.Caption)+1
Label3.Caption=Val(Label2.Caption)\60+Val(Label3.Caption)
Label2.Caption=Val(Label2.Caption)Mod60
EndSub
2、子窗体一(form1)界面如下:
子窗体一(form1)的代码:
PrivateSubCommand1_Click()
UnloadForm10
Unloadform1
Form10.Show
EndSub
PrivateSubCommand2_Click()
UnloadForm10
Unloadform1
EndSub
PrivateSubCommand3_Click()
Fori=0To99
Form10.Command1.Item(i).Picture=LoadPicture()
Form10.Command1.Item(i).Caption=""
Form10.Command1.Item(i).Enabled=True
Nexti
Form10.Label7.Caption=10
Form10.Label2.Caption=0
Form10.Label3.Caption=0
Unloadform1
EndSub
3、子窗体(form2)界面如下:
子窗体二(form2)的代码:
PrivateSubCommand1_Click()
UnloadForm10
Form10.Show
Unloadform2
EndSub
PrivateSubCommand2_Click()
UnloadForm10
Unloadform2
EndSub
PrivateSubCommand3_Click()
Fori=0To99
Form10.Command1.Item(i).Picture=LoadPicture()
Form10.Command1.Item(i).Caption=""
Form10.Command1.Item(i).Enabled=True
Nexti
Unloadform2
Form10.Label7.Caption=10
Form10.Label2.Caption=0
Form10.Label3.Caption=0
EndSub
注释:
共三个窗体(这里是form10、form1、form2)、三个标签(这里是label2、label3、label7)设计时,根据具体的情况对应修改即可。