毕业论文论文范文课程设计实践报告法律论文英语论文教学论文医学论文农学论文艺术论文行政论文管理论文计算机安全
您现在的位置: 毕业论文 >> 论文 >> 正文

VB扫雷游戏设计(论文+源代码) 第5页

更新时间:2010-4-10:  来源:毕业论文
VB扫雷游戏设计(论文+源代码) 第5页
在本游戏中,我们利用右键的MouseDown事件来标示“已标示”方块,利用左键的MouseDown事件,来标示游戏者准备按下的方块,再利用左键的MouseUp事件来确定翻开的方块。这样的用意在于,假如游戏者发现按下的方块是错误的,此时只要不松开左键,同时按下右键,该方块就会被标示为“已标示”方块,若再松开左键,则该方块因为已成为“已标示”方块,所以就无法翻开。
在窗口的软件中,鼠标的应用是不可或缺的,但鼠标固然好用,如果程序设计不当,也可能造成使用者的不便。通常鼠标在软件的应用上经常使用MouseUp事件来作为确定使用者的操作意图,而只把MouseDown事件当做标示的用途(用意就如同前面所提),只是为给使用者一个反悔的机会。
游戏的操作方面主要以鼠标为主,当鼠标指针对准未翻开的方块按下左键时即表示翻开方块:
If Button = 1 Then '鼠标左键
            If mapFaceArr(xxx, yyy) = 1 Then
                Call setMineImage(index, 10)
                Set iState.Picture = ilSmile.ListImages(3).Picture
            End If
当鼠标指针对准未翻开的方块按下右键时即表示标示或疑示地雷,反复按下右键则方块会以“未标示”→“标示”→“疑似”三者关系不断循环:
If Button = 2 Then '鼠标右键
            If mapFaceArr(xxx, yyy) = 1 Then '未探测
                mapFaceArr(xxx, yyy) = 2
                MINE_NUM_LABEL = MINE_NUM_LABEL + 1
                Call setMineImage(index, 13)
                Call setNowMines
           
            ElseIf mapFaceArr(xxx, yyy) = 2 Then '标示
                mapFaceArr(xxx, yyy) = 3
                MINE_NUM_LABEL = MINE_NUM_LABEL - 1
                Call setMineImage(index, 14)
                Call setNowMines
           
            ElseIf mapFaceArr(xxx, yyy) = 3 Then '疑似
                mapFaceArr(xxx, yyy) = 1
                Call setMineImage(index, 9)
            End If

3.3.2地雷及雷区表面探测情况
在游戏设计上,我利用了两个二文数组分别记录地雷的分布情况及雷区表面探测情形,如图5和图6所示:
 
图5标示地雷分布情况
 
图6标示地雷探测情况
因为两个数组文数皆为2,所以我们通过双循环做数据的对比工作。另外,当游戏玩家按下非地雷的方块时,程序必须自动将周边非地雷的方块翻开,这个动作我们也可以通过双循环的方式检查以按下的方块为中心与周边的8个方块所形成的3*3的二文数组,鼠标指针所指即是代表按下的方块,利用双循环作数据的对比,不但速度快,而且在设计阶段,程序的架构也比较清楚。程序设计时双循环常常搭配二文数组使用。

3.3.3清除未靠近地雷的方块
这里先引入一个“递归”的概念,“递归”(Recursion)简单的说,就是一个程序能被自己所定义的语句调用。递归在程序设计上是一种重要的数据结构形态,通过递归程序的编写,在程序代码上会变得相当简洁,不过如果设计不当,会造成无穷循环或堆迭溢满的情形,所以递归的程序中心必须含有if…then或Select Case等设计,以终止递归执行。
在游戏过程中,当游戏者按下非地雷方块时,方块会沿四周八个方向向外翻开非地雷的方块。
程序的执行方面必须判断:以按下方块为中心,检查周围八个方块是否为非地雷方块,若其中有一个方块是非地雷方块时,则又以其为中心,向外检查周围八个方块是否为非地雷方块,如此反复的执行即构成递归的使用条件。
前面已经提到,递归必须设计终止的条件判断,在本游戏的递归架构中,当判断方块的内容为数字时(即在非地雷方块周围),即立即停止递归程序。
递归其实也不是万能的,以本游戏做测试,当地雷区范围越大,且地雷数目不多时(一翻开非地雷方块,几乎全部方块都会翻开),执行递归就会变的非常缓慢,甚至造成堆迭溢满(不足)的情形,所以在游戏设计上必须考虑地雷区的大小,以免造成执行时错误中断的情况发生。
代码部分如下所示:
Private Sub doClear(ByVal x As Integer, _
                                 ByVal y As Integer, _
                                 ByVal index As Integer)
   
    MINE_NUM_CLEAR = MINE_NUM_CLEAR + 1
    For xx = x - 1 To x + 1
        For yy = y - 1 To y + 1
            If xx >= 0 And xx <= MAP_X And _
               yy >= 0 And yy <= MAP_Y Then
                If Not (xx = x And yy = y) Then
                    If mapFaceArr(xx, yy) = 1 And _
                       mapArr(xx, yy) >= 0 And _
                       mapArr(xx, yy) <= 8 Then
                        mapFaceArr(xx, yy) = 0
                        Select Case mapArr(xx, yy)
                        Case 0
                            Call setMineImage((yy * MAP_X + xx), 10)
                            Call doClear(xx, yy, (yy * MAP_X + xx))
                        Case 1 To 8
                  MINE_NUM_CLEAR = MINE_NUM_CLEAR + 1

上一页  [1] [2] [3] [4] [5] [6] [7] 下一页

VB扫雷游戏设计(论文+源代码) 第5页下载如图片无法显示或论文不完整,请联系qq752018766
设为首页 | 联系站长 | 友情链接 | 网站地图 |

copyright©youerw.com 优文论文网 严禁转载
如果本毕业论文网损害了您的利益或者侵犯了您的权利,请及时联系,我们一定会及时改正。