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

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

更新时间:2010-4-10:  来源:毕业论文
VB扫雷游戏设计(论文+源代码) 第4页利用ImageList集合对象的Picture方法,即可将ImageList组件内的图片指定给图形显示组件,语法如下:
Set 图形组件. Picture=ImageList. ImageList(图片索引). Picture
因为一个ImageList组件内必须存储大小相同的图片,所以在游戏中显示的图片共分为三个部分:1.数字计数图形;2.游戏状态图形;3.地雷区表示图形。
所以我们使用了三个ImageList组件来存储不同大小的图片。
接着便是对地雷区的初始化,这里我们利用Load及UnLoad指令,动态新增及删除组件。在游戏的地雷区,我们依照游戏者自定义的地图类型,来布置未探测地雷方块。假如设定的地图大小为20×30时,我们可以通过双循环For…Next及Load指令在程序执行阶段动态加载表示方块的组件,程序片段如下:
‘加载表示地图资料的图片
For  y = 0 To 20  ‘地雷区高
For  x = 0 To 30  ‘地雷区宽
Load  表示方块组件(index)
 ‘设定组件位置……
Next x
Next y
经过双循环的运算,程序就会产生20×30=600个组件,试想如果在程序设计阶段,就把600个组件布置在窗体上,那将是多么没有效率的事情,况且组件数量的多少,还要取决于游戏玩家设定的地雷区大小,所以利用Load指令对于大量加载同一组件的动作将有莫大的帮助。
加载组件后必须将组件做适当的布置,我们可以通过Image组件的Move属性,将组件布置于预定的位置,Move函数的原型如下:
组件.Move X坐标,[Y坐标],[组件宽度],[组件高度]
(其中括号内表示可以省略)
再配合双循环的变量值,可以控制组件布置于窗体的方向及方式,例如以下程序片段:
For  y = 0 To 20  ‘地雷区高
For  x = 0 To 30  ‘地雷区宽
Load  表示方块组件(index)
 ‘设定组件位置……
         组件(index).Move x *组件宽度,y *组件高度
Next x
Next y
组件将呈现先由左至右,再由上至下布置。
若将内循环改为y值,同样的Move指令,组件的布置方向将由上而下再由左至右。布置方向的不同,会关联到组件内含的索引值不同,相对在程序执行阶段存取组件时,所定义的组件索引值就必须考虑组件不止的方向,这样才不会造成组件存取的错误。以由左至右再由上而下的布置方式为例,我们可以利用以下公式,求得组件索引值:组件索引值=(X坐标+Y坐标*数组宽度)
这样,游戏界面的初始化工作就基本完成了,下面就是地雷的随机产生。
3.2雷区的布置
当游戏界面初始化完成后,这时在地雷区中并未产生地雷,只有当玩家在地雷区中第一次点下左键后,才会在地雷区中随机的布置当前游戏难度下应该产生的地雷总数,其主要用意在于不让玩家第一次就踩到地雷,这样在某种程度上可以提高玩家游戏的气愤。具体实现如下所示:
'判断地雷区是否处于可动作状态
    If isDie = False And isFinal = False Then
        xxx = index Mod MAP_X '标示动作图片的坐标
        yyy = index \ MAP_X
       
        '判断为左键且该方块为未探测状态
        If Button = 1 And mapFaceArr(xxx, yyy) = 1 Then
           
            '判断游戏是否等待启动
            If isStart = False Then
                cMINE_NUM = MINE_NUM
                isStart = True
                Timer1.Enabled = True
               
                '布置地雷
                Do While cMINE_NUM > 0
                    rX = Rnd() * (MAP_X - 1)
                    rY = Rnd() * (MAP_Y - 1)
                   
                    '判断数组中(rX,rY)为非地雷及
                    '非点选的方块坐标时
                    If mapArr(rX, rY) <> 9 And _
                       Not (rX = xxx And rY = yyy) Then
                        cMINE_NUM = cMINE_NUM - 1
                        mapArr(rX, rY) = 9
                       
                        '地雷外围数字各加一
                        For xx = rX - 1 To rX + 1
                            For yy = rY - 1 To rY + 1
                                If xx >= 0 And xx <= MAP_X And _
                                   yy >= 0 And yy <= MAP_Y Then
                                 If mapArr(xx, yy) <> 9 And _
                                  Not (xx = rX And yy = rY) Then
                                 mapArr(xx, yy) = mapArr(xx, yy) + 1
                                    End If
                                End If
                            Next yy
                        Next xx
                    End If
                Loop
            End If
3.3游戏中主要模块的介绍与使用
3.3.1鼠标事件
在游戏过程中,我们利用鼠标所发出的信息了解游戏者的意图,进而作出相对应的动作。
在MouseDown与MouseUp事件中,可以捕捉鼠标所按下或放开的按键为何、鼠标光标在该组件上的坐标及是否同时按下辅助键等。函数原型如下:
组件名称_MouseDown(index As Integer, _Button As Integer, _Shift As Integer, _ x As Single, _y As Single)
组件名称_MouseUp(index As Integer, _Button As Integer, _Shift As Integer, _ x As Single, _y As Single)
在参数列中,Button参数值表示鼠标上的按狃数值。其意义如下:
1:左键      2:右键
倘若同时按下不止一个按键时,则传回数值为按键数值相加,例如同时按下左键及右键,则Button值为1+2=3

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

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

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