浅谈VB.NET下方格类游戏的设计

上传人:jiups****uk12 文档编号:39153009 上传时间:2018-05-12 格式:PDF 页数:16 大小:362.34KB
返回 下载 相关 举报
浅谈VB.NET下方格类游戏的设计_第1页
第1页 / 共16页
浅谈VB.NET下方格类游戏的设计_第2页
第2页 / 共16页
浅谈VB.NET下方格类游戏的设计_第3页
第3页 / 共16页
浅谈VB.NET下方格类游戏的设计_第4页
第4页 / 共16页
浅谈VB.NET下方格类游戏的设计_第5页
第5页 / 共16页
点击查看更多>>
资源描述

《浅谈VB.NET下方格类游戏的设计》由会员分享,可在线阅读,更多相关《浅谈VB.NET下方格类游戏的设计(16页珍藏版)》请在金锄头文库上搜索。

1、矩阵软件开发小组 Matrixsoft http:/matrixsoft.chinatang.org 版权所有 侵权必究 Copyright (C) 矩阵软件开发小组 2011 浅谈 VB.NET 下方格类游戏的设计 By 八两 很多初学 VB.NET 的朋友都希望能用 VB.NET 独立制作一些简单的小游戏,但是一直 苦无对游戏设计参考资料不足,毫无头绪。笔者凭借在此方面有一些经验,特撰文一篇,谈 谈在 VB.NET 环境下开发方格类游戏的思路,希望此文能对有兴趣而又经验不足的初学者 有一定的帮助,由于本人水平有限,文中难免出现不足之处,也希望高手们批评指正。 好了,废话不多说,直奔主题。

2、一、什么是方格类游戏 我们在平时生活中看到的诸如俄罗斯方块、贪吃蛇、扫雷以及连连看这样的,游戏界面 呈现 mn 网格状,游戏元素排列整齐,逻辑结构简单的小游戏,我们把它们统称为方格类 游戏(插话一句,此定义来自于笔者胡说八道,切不可奉为真理) 。 事实上,我们可以很明显地看到方格类游戏的几个共同特点: 1.游戏界面元素排列整齐,呈 mn 形式的格网布局。 2.动画效果简单,或者几乎没有动画效果。 3.2D 的游戏场景。 4.游戏数据量小,逻辑关系也较为简单。 以 Windows 操作系统自带的“扫雷”游戏为例, “扫雷”是一款非常典型的方格类游戏, 它的游戏界面非常简单,仅由三部分组成:分别是

3、菜单栏、计时与地雷数显示区、雷区(图 1) 。 图 1 “扫雷”高级模式的界面 矩阵软件开发小组 Matrixsoft http:/matrixsoft.chinatang.org 版权所有 侵权必究 Copyright (C) 矩阵软件开发小组 2011 我们可以看到,雷区完全就是由方格一块一块地组成的网状区域,稍微分析一下,即知 像这样的游戏,其内存中的数据实际上是非常小的,它不需要复杂的动画,也不需要三维的 游戏场景。整个游戏的逻辑也很简单,玩过扫雷的人都知道,单击雷区任意一个方块,触雷 则亡,否则显示周围的地雷数量,玩家以此为依据,推断出雷区所有的地雷位置并用小旗进 行标注,全部正确标

4、记后,玩家顺利通过游戏。 二、方格类游戏的数据结构 我想,不管游戏的界面是什么样子,游戏图形是怎样生成的,它的程序在内存中都应当 存放一组数据,来表示整个游戏的运行情况,说这话,是因为我见过有的人写小游戏,往窗 体上拖了一堆控件, 事件代码里不停地去判断这些控件的位置以及其他信息, 然后比较来比 较去,对这样的做法,我实在是佩服作者的毅力,还有那令人惊叹的程序控制能力,但是, 这样的做法,是不能够提倡的,比如设计俄罗斯方块,你用一堆 Label 控件在窗体上面移来 移去,这种做法肯定不合适。 那么,妥当的做法是什么呢?还是以经典的“扫雷”游戏为例,Windows 自带的扫雷游 戏可已选择初级、

5、中级和高级三种雷区,此外也可以自定义雷区大小和地雷数量,由此可见 “扫雷”数据的可伸缩性,而非死板的一成不变的雷区大小,笔者没有研究过微软做这款游 戏是怎样设计的,但是利用 VB.NET,自信打造与原“扫雷”一样的运行效果还是可以的, 可能一般的程序员都能想到,利用数组来存放每一个小方格的数据,1 为有雷,0 为无雷。 是的,利用一个布尔型的数组来存放游戏数据非常的简单方便,可以使用一维数组、也可以 使用二维数组,笔者则是构造了一个矩阵类,来专门管理游戏数据,Matrix 类的基本定义如 下: Matrix 类的定义类的定义 Public Class Matrix Private values

6、(-1) As Byte Private lineNum As Integer Private rowNum As Integer Public Sub New(ByVal line As Integer, ByVal row As Integer) lineNum = line rowNum = row ReDim values(line * row - 1) End Sub Public Property Elem(ByVal i As Integer, ByVal j As Integer) As Byte Get Try Return values(i - 1) * rowNum +

7、j - 1) Catch ex As Exception Return 0 End Try End Get Set(ByVal value As Byte) Try Me.values(i - 1) * rowNum + j - 1) = value Catch ex As Exception 矩阵软件开发小组 Matrixsoft http:/matrixsoft.chinatang.org 版权所有 侵权必究 Copyright (C) 矩阵软件开发小组 2011 End Try End Set End Property Public ReadOnly Property LineCount

8、() As Integer Get Return lineNum End Get End Property Public ReadOnly Property RowCount() As Integer Get Return rowNum End Get End Property End Class 在上面的定义中,Matrix 类使用了一个私有数组 values()来存放游戏数据,由于扫雷游 戏中不仅要表示方格有雷和无雷的两种状态, 还要表示出标记问号、 标记小旗以及被揭开的 几种状态, 所以将 values 定义成了 Byte 型的数组 (具体对照见表 1) , 并用整型变量 lineNum

9、 和 rowNum 分别表示矩阵(也就是“扫雷”中的雷区)的行数和列数。并用 Elem 属性来获 取和设置指定位置的元素值。注意:要设置第一行第一列的元素值为 1,则赋值语句为: instance.Elem(1,1)=1 (注意,此处 i 和 j 都是从 1 开始的) 表 1 values 元素的值与方格状态的对照表 值 表示状态 1 无雷 2 有雷 4 标记为小旗 8 标记为问号 16 已揭开 另外,LineCount 属性和 RowCount 属性为获取矩阵的行数与列数,出于安全角度,这 两个属性,应当是只读的,因为矩阵的大小应该是在类的实例化时定义。 这样,我们已经做到了定义一个任意大小

10、的雷区,并可以给雷区的任意位置赋值,使其 有雷或者无雷。 三、游戏功能的实现 依然以“扫雷”游戏为例,下面笔者就带着大家一步一步实现“扫雷”游戏的主要功能。 另注,本文面向有一定基础的 VB.NET 程序员,故为节约篇幅,突出重点,一下代码部分 不作详细解释,如果读者感兴趣,重写各个函数内部代码也可以。 1.计算任意方格的周围地雷数量 1.计算任意方格的周围地雷数量 “扫雷”游戏中,每次单击一个方格,若未触雷,则将显示周围地雷的数量。因此,可 以在上面的 Matrix 类中再加入一个成员函数 AroundMine,其函数定义如下: 矩阵软件开发小组 Matrixsoft http:/matri

11、xsoft.chinatang.org 版权所有 侵权必究 Copyright (C) 矩阵软件开发小组 2011 计算任意方格周围的地雷数目计算任意方格周围的地雷数目 Public Function AroundMine(ByVal i As Integer, ByVal j As Integer) As Integer Dim sum As Integer = 0 For i = i - 1 To i + 1 For j = j - 1 To j + 1 If (Elem(i, j) And 2) = 2 Then sum += 1 Next Next Return sum End Fun

12、ction 2.生成地雷与清除地雷生成地雷与清除地雷 生成地雷这个步骤应当放在游戏开始的时候, 用于向生成的矩阵中随机添加指定总数的 地雷,为保持程序的完整性,还应有清除所有地雷这一个功能,还要保证每次生成地雷时要 先执行清除地雷这一步操作,确保程序安全。同样是向 Matrix 类中再添加两个成员函数, 为了统计雷区剩余的地雷数量, 还应加入一个私有变量存放地雷数。 下面给出清除地雷和生 成地雷的示例代码: 清除地雷清除地雷 Public Sub ClearMine() For Each value In values value = 1 Next End Sub 生成地雷生成地雷 Publi

13、c Sub CreateMine(ByVal num As Integer) ClearMine() Randomize() Dim pos As Integer If num values.Length Then Exit Sub Else Do While num 0 pos = Int(Rnd() * values.Length) If values(pos) = 1 Then values(pos) = 2 num -= 1 End If Loop End If End Sub 矩阵软件开发小组 Matrixsoft http:/matrixsoft.chinatang.org 版权所

14、有 侵权必究 Copyright (C) 矩阵软件开发小组 2011 3.揭开雷区任意方块揭开雷区任意方块 当玩家单击雷区某个未知方块时,根据方块是否埋有地雷,执行不同的响应,若有,则 直接调用 Game Over 的代码,若无地雷时,显示周围 8 个方格的地雷总数,若地雷数为零, 则显示周围 8 个方格各自周围的地雷数目, 并以此类推下去。 下面即给出响应功能实现的代 码: 揭开方块揭开方块 Public Sub Open(ByVal i As Integer, ByVal j As Integer) If Elem(i, j) 0 And Elem(i, j) = 16 Then If C

15、ountFlag(i, j) = CountMine(i, j) Then For i = i - 1 To i + 1 For j = j - 1 To j + 1 If Elem(i, j) = 1 AndAlso i = 1 AndAlso j 4 Then If (value And 16) = 16 Then DrawSquare(i, j, Boom) Else DrawSquare(i, j, NoFlag) End If ElseIf (value And 1) = 1 And (value And 4) = 4 Then DrawSquare(i, j, FlagError) End If Next Next End Sub 由于鼠标按下与松开仅属于一个基本的动画效果, 实际对游戏影响不大, 故放在最后再 说,最重要的莫过于游戏进行中的绘图,这个可能需的 If 语句稍微多一点: 游戏进行中的绘图代码游戏进行中的绘图代码 Public Sub DrawInGame(ByVal i As Integer, ByVal j As Integer) Dim value

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 中学教育 > 其它中学文档

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号