论文无忧网提供:计算机毕业论文范文|计算机毕业设计|计算机毕业论文
栏目导航 ASP Java Web .NET VB6.0 JAVA VC VF DELPHI PB 计算机网络 计算机科学与技术 PHP 安卓APP 其他 C# 代写论文
当前位置: > 计算机 > 计算机科学与技术 >

扫雷游戏的设计与开发(论文+程序)

我们可以清楚的看到,游戏界面主要分为两个主要部分:1. 计数及状态区;2.地雷区。

内容来自论文无忧网 www.paper51.com

首先我利用PictureBox组件,PictureBox为容器类型的组件,因此可以加入其他组件在其内。在游戏中我利用了PictureBox组件的两个特性,分别为容器特性及立体框线,具体如下:

内容来自论文无忧网 www.paper51.com

(1)容器特性:只要容器本身显示的行为改变,在容器内的组件也会跟着改变。当游戏初始时,地雷区的显示组件会循环执行,逐一布置在画面上,但由于执行循环时多个Image组件要显示图形,造成分时系统执行频率显示上会出现不流畅的情形,若在循环执行前,先将容器本身的Visable属性设为False,在循环执行完成后再将Visable属性设为Ture,则显示就会变得流畅许多。 内容来自论文无忧网 www.paper51.com

(2)立体框线:通过组件本身立体框线的属性设定,可以为游戏画面的显示上营造出层次感。 内容来自论文无忧网 www.paper51.com

然后再利用ImageList组件来存储游戏中将要使用的图片,我们可以将组件布置于窗体后编辑组件属性,如图4所示: 内容来自www.paper51.com

http://www.paper51.com

图4

内容来自论文无忧网 www.paper51.com

通过InsertPicture和RemovePicture按钮即可编辑组件所存放的图片。

copyright paper51.com

利用ImageList集合对象的Picture方法,即可将ImageList组件内的图片指定给图形显示组件,语法如下:

内容来自论文无忧网 www.paper51.com

Set 图形组件. Picture=ImageList. ImageList(图片索引). Picture

http://www.paper51.com

因为一个ImageList组件内必须存储大小相同的图片,所以在游戏中显示的图片共分为三个部分:1.数字计数图形;2.游戏状态图形;3.地雷区表示图形。 http://www.paper51.com

所以我们使用了三个ImageList组件来存储不同大小的图片。 paper51.com

接着便是对地雷区的初始化,这里我们利用Load及UnLoad指令,动态新增及删除组件。在游戏的地雷区,我们依照游戏者自定义的地图类型,来布置未探测地雷方块。假如设定的地图大小为20×30时,我们可以通过双循环For…Next及Load指令在程序执行阶段动态加载表示方块的组件,程序片段如下:

内容来自论文无忧网 www.paper51.com

‘加载表示地图资料的图片 paper51.com

For  y = 0To 20  ‘地雷区高 paper51.com

For  x = 0To 30  ‘地雷区宽 copyright paper51.com

Load  表示方块组件(index)

copyright paper51.com

 ‘设定组件位置……

copyright paper51.com

Next x

copyright paper51.com

Next y

内容来自论文无忧网 www.paper51.com

经过双循环的运算,程序就会产生20×30=600个组件,试想如果在程序设计阶段,就把600个组件布置在窗体上,那将是多么没有效率的事情,况且组件数量的多少,还要取决于游戏玩家设定的地雷区大小,所以利用Load指令对于大量加载同一组件的动作将有莫大的帮助。

paper51.com

加载组件后必须将组件做适当的布置,我们可以通过Image组件的Move属性,将组件布置于预定的位置,Move函数的原型如下: http://www.paper51.com

组件.Move X坐标,[Y坐标],[组件宽度],[组件高度]

内容来自论文无忧网 www.paper51.com

(其中括号内表示可以省略)

paper51.com

再配合双循环的变量值,可以控制组件布置于窗体的方向及方式,例如以下程序片段:

内容来自论文无忧网 www.paper51.com

For  y = 0To 20  ‘地雷区高

内容来自论文无忧网 www.paper51.com

For  x = 0To 30  ‘地雷区宽 内容来自论文无忧网 www.paper51.com

Load  表示方块组件(index) copyright paper51.com

 ‘设定组件位置……

copyright paper51.com

        组件(index).Move x *组件宽度,y *组件高度

内容来自论文无忧网 www.paper51.com

Next x

内容来自论文无忧网 www.paper51.com

Next y 内容来自www.paper51.com

组件将呈现先由左至右,再由上至下布置。 内容来自论文无忧网 www.paper51.com

若将内循环改为y值,同样的Move指令,组件的布置方向将由上而下再由左至右。布置方向的不同,会关联到组件内含的索引值不同,相对在程序执行阶段存取组件时,所定义的组件索引值就必须考虑组件不止的方向,这样才不会造成组件存取的错误。以由左至右再由上而下的布置方式为例,我们可以利用以下公式,求得组件索引值:组件索引值=(X坐标+Y坐标*数组宽度)

copyright paper51.com

这样,游戏界面的初始化工作就基本完成了,下面就是地雷的随机产生。 内容来自论文无忧网 www.paper51.com

3.2雷区的布置

内容来自www.paper51.com

当游戏界面初始化完成后,这时在地雷区中并未产生地雷,只有当玩家在地雷区中第一次点下左键后,才会在地雷区中随机的布置当前游戏难度下应该产生的地雷总数,其主要用意在于不让玩家第一次就踩到地雷,这样在某种程度上可以提高玩家游戏的气愤。具体实现如下所示:

copyright paper51.com

'判断地雷区是否处于可动作状态 http://www.paper51.com

    If isDie = False And isFinal= False Then

内容来自论文无忧网 www.paper51.com

        xxx= index Mod MAP_X '标示动作图片的坐标

http://www.paper51.com

        yyy= index \ MAP_X

http://www.paper51.com

       

http://www.paper51.com

        '判断为左键且该方块为未探测状态

copyright paper51.com

        IfButton = 1 And mapFaceArr(xxx, yyy) = 1 Then

http://www.paper51.com

             copyright paper51.com

           '判断游戏是否等待启动

内容来自论文无忧网 www.paper51.com

           If isStart = False Then 内容来自论文无忧网 www.paper51.com

               cMINE_NUM = MINE_NUM paper51.com

               isStart = True

内容来自www.paper51.com

               Timer1.Enabled = True 内容来自www.paper51.com

               

内容来自www.paper51.com

               '布置地雷

http://www.paper51.com

               Do While cMINE_NUM > 0 http://www.paper51.com

                    rX= Rnd() * (MAP_X - 1) paper51.com

                   rY = Rnd() * (MAP_Y - 1) paper51.com

                   

paper51.com

                   '判断数组中(rX,rY)为非地雷及

内容来自www.paper51.com

                   '非点选的方块坐标时 http://www.paper51.com

                   If mapArr(rX,rY) <> 9 And _

http://www.paper51.com

                      Not (rX = xxx And rY = yyy) Then

paper51.com

                       cMINE_NUM = cMINE_NUM - 1 copyright paper51.com

                       mapArr(rX, rY) = 9 paper51.com

                        copyright paper51.com

                       '地雷外围数字各加一 paper51.com

                       For xx = rX - 1 To rX + 1

内容来自论文无忧网 www.paper51.com

                           For yy = rY - 1 To rY + 1

copyright paper51.com

                               If xx >= 0 And xx <= MAP_X And _ copyright paper51.com

                                  yy >= 0 And yy <= MAP_Y Then

copyright paper51.com

                                If mapArr(xx, yy) <> 9 And _ copyright paper51.com

                                 Not (xx = rX And yy = rY) Then

paper51.com

                                mapArr(xx, yy) = mapArr(xx, yy) + 1

内容来自论文无忧网 www.paper51.com

                                   End If 内容来自www.paper51.com

                               End If

内容来自www.paper51.com

                           Next yy

paper51.com

                       Next xx

paper51.com

                   EndIf

内容来自论文无忧网 www.paper51.com

               Loop

内容来自论文无忧网 www.paper51.com

           End If http://www.paper51.com

------分隔线----------------------------
联系方式