注册 登录
Office中国论坛/Access中国论坛 返回首页

的个人空间 http://www.office-cn.net/?0 [收藏] [复制] [分享] [RSS]

日志

[下载]Access游戏编程系列:扫雷[源码]

已有 500 次阅读2008-7-10 16:24 |个人分类:Access游戏系列


扫雷.rar
(2008-07-10 16:22:42, Size: 91.1 KB, Downloads: 0)


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

扫雷1:


sl1.bmp


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



sl2.bmp


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



sl3.bmp

(原来在程序中以为自己的代码很精简,一放到帖子中才知道这么长

评论 (0 个评论)

facelist doodle 涂鸦板

您需要登录后才可以评论 登录 | 注册

QQ|站长邮箱|小黑屋|手机版|Office中国/Access中国 ( 粤ICP备10043721号-1 )  

GMT+8, 2024-6-10 00:41 , Processed in 0.066845 second(s), 14 queries .

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

返回顶部