|
我准备把以前编写及收集的一些Access编写的小游戏重新整理一下,形成一个系列,放到我的个人空间中,这里是第一个,欢迎大家到我的空间中来做客,肯定会给你意外的惊喜:)
扫雷1:
这是我自己编写的程序,界面未进行包装,利用了Access本身的一些特性,也为了方便大家查看代码。以下是全部代码。
Option Compare Database
Private Sub btnStart_Click()
Dim i As Integer, j As Integer
For i = 0 To 80
Me.Controls("Command" & i).Caption = "" '清除按钮显示
'前10个按钮的Tag属性编程时已设为地雷标志
'在循环中利用Me.Tag进行81次的按钮标志两两随机交换,相当于洗牌
j = Int(Rnd * 81)
Me.Tag = Me.Controls("Command" & i).Tag
Me.Controls("Command" & i).Tag = Me.Controls("Command" & j).Tag
Me.Controls("Command" & j).Tag = Me.Tag
Next
For i = 0 To 80
If Me.Controls("Command" & i).Tag <> "*" Then
'非地雷按钮则根据序号计算周围地雷数并赋值给按钮Tag属性
j = CountBomb(i)
Me.Controls("Command" & i).Tag = IIf(j = 0, "-", j)
'根据周围地雷数给按钮的颜色进行赋值设定,QBColor( )为系统本身函数
Me.Controls("Command" & i).ForeColor = QBColor(j * 2)
Else
Me.Controls("Command" & i).ForeColor = 255
End If
Next
End Sub
Private Sub Form_Load()
'窗体加载时执行开始按钮命令
btnStart_Click
End Sub
Public Function TestClick()
'全部按钮调用的处理函数,可在设计时全部选定按钮后,在属性窗体的单击事件中一次输入“TestClick()”
Dim i As Integer, j As Integer
If Screen.ActiveControl.Tag = "*" Then
'点到地雷则失败
MsgBox "You Lost!"
ShowBomb
Else
CheckBomb Mid(Screen.ActiveControl.Name, 8) '检查显示所点击按钮(获得焦点按钮)地雷情况
For i = 0 To 80
'检查累计剩余按钮数
If Me.Controls("Command" & i).Caption = "" Then
j = j + 1
If j > 10 Then Exit For
End If
Next
If j = 10 Then
'检查剩余按钮为10则胜利
MsgBox "You win!"
ShowBomb
End If
End If
End Function
Public Function CountBomb(i As Integer) As Integer '计算指定序号按钮及周围的地雷数
' 利用整除和取模分解为行和列,循环计算周围8个按钮是否地雷
Dim m As Integer, n As Integer
For m = -1 To 1
For n = -1 To 1
If i \ 9 + m > -1 And i \ 9 + m < 9 And i Mod 9 + n > -1 And i Mod 9 + n < 9 Then
'等式的计算结果为-1(True)和0(False),取绝对值后可进行计算
CountBomb = CountBomb + Abs(Me.Controls("Command" & ((i \ 9 + m) * 9 + i Mod 9 + n)).Tag = "*")
End If
Next
Next
End Function
Public Function CheckBomb(i As Integer) As Integer '利用递归进行相邻空格及数字判断显示
Dim m As Integer, n As Integer
Me.Controls("Command" & i).Caption = Me.Controls("Command" & i).Tag
If Me.Controls("Command" & i).Tag = "-" Then
'分别循环处理周围及本身9个按钮
For m = -1 To 1
For n = -1 To 1
If i \ 9 + m > -1 And i \ 9 + m < 9 And i Mod 9 + n > -1 And i Mod 9 + n < 9 Then
If Me.Controls("Command" & ((i \ 9 + m) * 9 + i Mod 9 + n)).Caption = "" Then '必要的条件,否则会死循环溢出
CheckBomb ((i \ 9 + m) * 9 + i Mod 9 + n)
End If
End If
Next
Next
End If
End Function
Public Sub ShowBomb() '显示地雷
Dim i As Integer
For i = 0 To 80
If Me.Controls("Command" & i).Tag = "*" Then
Me.Controls("Command" & i).Caption = Me.Controls("Command" & i).Tag
End If
Next
End Sub
附件中的“扫雷2”,是LucasLynn版主的作品,放在这里便于大家参考,其中的界面部分值得大家借鉴:
附件中的“扫雷3”是Excel-Home的清风II版主作品,原来是Excel程序,使用UserForm及VBA编写,我将其导入到Access中以方便大家。清风的作品一向是精益求精,本作品也是一款不可多求的精品,其中的菜单及其他类模块,大家研究研究肯定是受益匪浅(至少我本人是!)
|
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有帐号?注册
x
|