Office中国论坛/Access中国论坛

标题: [下载]Access游戏编程系列:扫雷[源码] [打印本页]

作者: Trynew    时间: 2008-7-10 16:22
标题: [下载]Access游戏编程系列:扫雷[源码]

我准备把以前编写及收集的一些Access编写的小游戏重新整理一下,形成一个系列,放到我的个人空间中,这里是第一个,欢迎大家到我的空间中来做客,肯定会给你意外的惊喜:)

扫雷1:
[attach]30955[/attach]

这是我自己编写的程序,界面未进行包装,利用了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版主的作品,放在这里便于大家参考,其中的界面部分值得大家借鉴:

[attach]30956[/attach]

附件中的“扫雷3”是Excel-Home的清风II版主作品,原来是Excel程序,使用UserForm及VBA编写,我将其导入到Access中以方便大家。清风的作品一向是精益求精,本作品也是一款不可多求的精品,其中的菜单及其他类模块,大家研究研究肯定是受益匪浅(至少我本人是!)

[attach]30957[/attach]
作者: liaug    时间: 2008-7-10 17:22
学习一下
作者: hunrybecky    时间: 2008-7-11 16:38
你早就该整理你的大作了。很欣赏你的作品。
作者: huangqinyong    时间: 2008-7-12 02:55
支持一个
作者: tanhong    时间: 2008-7-13 19:41
一个字"牛"!谢谢分享,向Trynew 兄学习
作者: stone0823    时间: 2008-7-13 23:49
太值得我学习了。
作者: tmtony    时间: 2008-7-14 00:10
都是精彩的经典之作!
作者: pjtisok1234    时间: 2008-10-23 21:13
[:50] [:50] [:50]
作者: 明镜    时间: 2008-10-24 00:03
要学习的.
作者: g8g8g8g8    时间: 2008-10-24 09:51
马上看看楼主的空间
作者: sblisb    时间: 2008-11-12 14:57
玩玩access扫雷
作者: sheandme0    时间: 2008-11-12 19:10
????????
作者: lgcsee    时间: 2009-2-9 14:35
要好好学习一下!
作者: czjztao    时间: 2009-2-13 10:12
看看
作者: chenyingfengsx    时间: 2009-7-9 16:21
dxxxdxxxxxx
作者: leijiqiang    时间: 2009-12-24 13:51
产学习学
作者: meiguimouse    时间: 2011-11-1 16:37
好东西,顶一个
作者: sxy6809    时间: 2011-12-6 10:06
学习。
作者: greatcf    时间: 2012-2-29 15:49
非常感谢了哈
作者: greatcf    时间: 2012-2-29 15:56
感谢哦了
作者: accesswj    时间: 2012-4-7 22:53
okkookokokkook
作者: adacchen    时间: 2013-5-11 00:14
kankan,。。。
作者: tieguojincheng    时间: 2013-5-14 20:55
谢谢楼主

作者: coolleaf    时间: 2014-6-29 10:49
都有哪些好玩的。




欢迎光临 Office中国论坛/Access中国论坛 (http://www.office-cn.net/) Powered by Discuz! X3.3