设为首页收藏本站Access中国

Office中国论坛/Access中国论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

123下一页
返回列表 发新帖
查看: 8788|回复: 23
打印 上一主题 下一主题

[模块/函数] [下载]Access游戏编程系列:扫雷[源码]

[复制链接]
跳转到指定楼层
1#
发表于 2008-7-10 16:22:42 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
游客,如果您要查看本帖隐藏内容请回复

我准备把以前编写及收集的一些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
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 分享淘帖 订阅订阅
2#
发表于 2008-7-10 17:22:17 | 只看该作者
学习一下
3#
发表于 2008-7-11 16:38:56 | 只看该作者
你早就该整理你的大作了。很欣赏你的作品。
4#
发表于 2008-7-12 02:55:41 | 只看该作者
支持一个
5#
发表于 2008-7-13 19:41:40 | 只看该作者
一个字"牛"!谢谢分享,向Trynew 兄学习
6#
发表于 2008-7-13 23:49:06 | 只看该作者
太值得我学习了。

点击这里给我发消息

7#
发表于 2008-7-14 00:10:41 | 只看该作者
都是精彩的经典之作!
8#
发表于 2008-10-23 21:13:34 | 只看该作者
[:50] [:50] [:50]
9#
发表于 2008-10-24 00:03:32 | 只看该作者
要学习的.
10#
发表于 2008-10-24 09:51:34 | 只看该作者
马上看看楼主的空间
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-11-15 10:35 , Processed in 0.097687 second(s), 35 queries .

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表