没有合适的资源?快使用搜索试试~ 我知道了~
浅谈VB.NET下方格类游戏的设计
5星 · 超过95%的资源 需积分: 10 17 下载量 115 浏览量
2011-07-06
17:49:49
上传
评论 1
收藏 893KB PDF 举报
温馨提示
试读
16页
很多初学 VB.NET 的朋友都希望能用 VB.NET 独立制作一些简单的小游戏,但是一直苦无对游戏设计参考资料不足,毫无头绪。笔者凭借在此方面有一些经验,特撰文一篇,谈谈在 VB.NET 环境下开发方格类游戏的思路,希望此文能对有兴趣而又经验不足的初学者有一定的帮助,由于本人水平有限,文中难免出现不足之处,也希望高手们批评指正。
资源推荐
资源详情
资源评论
矩阵软件开发小组 Matrixsoft http://matrixsoft.chinatang.org
版权所有 侵权必究 Copyright (C) 矩阵软件开发小组 2011
浅谈 VB.NET 下方格类游戏的设计
By 八两
很多初学 VB.NET 的朋友都希望能用 VB.NET 独立制作一些简单的小游戏,但是一直
苦无对游戏设计参考资料不足,毫无头绪。笔者凭借在此方面有一些经验,特撰文一篇,谈
谈在 VB.NET 环境下开发方格类游戏的思路,希望此文能对有兴趣而又经验不足的初学者
有一定的帮助,由于本人水平有限,文中难免出现不足之处,也希望高手们批评指正。
好了,废话不多说,直奔主题。
一、什么是方格类游戏
我们在平时生活中看到的诸如俄罗斯方块、贪吃蛇、扫雷以及连连看这样的,游戏界面
呈现 m×n 网格状,游戏元素排列整齐,逻辑结构简单的小游戏,我们把它们统称为方格类
游戏(插话一句,此定义来自于笔者胡说八道,切不可奉为真理)。
事实上,我们可以很明显地看到方格类游戏的几个共同特点:
1.游戏界面元素排列整齐,呈 m×n 形式的格网布局。
2.动画效果简单,或者几乎没有动画效果。
3.2D 的游戏场景。
4.游戏数据量小,逻辑关系也较为简单。
以 Windows 操作系统自带的“扫雷”游戏为例,“扫雷”是一款非常典型的方格类游戏,
它的游戏界面非常简单,仅由三部分组成:分别是菜单栏、计时与地雷数显示区、雷区(图
1)。
图 1 “扫雷”高级模式的界面
矩阵软件开发小组 Matrixsoft http://matrixsoft.chinatang.org
版权所有 侵权必究 Copyright (C) 矩阵软件开发小组 2011
我们可以看到,雷区完全就是由方格一块一块地组成的网状区域,稍微分析一下,即知
像这样的游戏,其内存中的数据实际上是非常小的,它不需要复杂的动画,也不需要三维的
游戏场景。整个游戏的逻辑也很简单,玩过扫雷的人都知道,单击雷区任意一个方块,触雷
则亡,否则显示周围的地雷数量,玩家以此为依据,推断出雷区所有的地雷位置并用小旗进
行标注,全部正确标记后,玩家顺利通过游戏。
二、方格类游戏的数据结构
我想,不管游戏的界面是什么样子,游戏图形是怎样生成的,它的程序在内存中都应当
存放一组数据,来表示整个游戏的运行情况,说这话,是因为我见过有的人写小游戏,往窗
体上拖了一堆控件,事件代码里不停地去判断这些控件的位置以及其他信息,然后比较来比
较去,对这样的做法,我实在是佩服作者的毅力,还有那令人惊叹的程序控制能力,但是,
这样的做法,是不能够提倡的,比如设计俄罗斯方块,你用一堆 Label 控件在窗体上面移来
移去,这种做法肯定不合适。
那么,妥当的做法是什么呢?还是以经典的“扫雷”游戏为例,Windows 自带的扫雷游
戏可已选择初级、中级和高级三种雷区,此外也可以自定义雷区大小和地雷数量,由此可见
“扫雷”数据的可伸缩性,而非死板的一成不变的雷区大小,笔者没有研究过微软做这款游
戏是怎样设计的,但是利用 VB.NET,自信打造与原“扫雷”一样的运行效果还是可以的,
可能一般的程序员都能想到,利用数组来存放每一个小方格的数据,1 为有雷,0 为无雷。
是的,利用一个布尔型的数组来存放游戏数据非常的简单方便,可以使用一维数组、也可以
使用二维数组,笔者则是构造了一个矩阵类,来专门管理游戏数据,Matrix 类的基本定义如
下:
Matrix 类的定义
Public Class Matrix
Private values(-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 + 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() 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
和 rowNum 分别表示矩阵(也就是“扫雷”中的雷区)的行数和列数。并用 Elem 属性来获
取和设置指定位置的元素值。注意:要设置第一行第一列的元素值为 1,则赋值语句为:
instance.Elem(1,1)=1
(注意,此处 i 和 j 都是从 1 开始的)
表 1 values 元素的值与方格状态的对照表
值 表示状态
1 无雷
2 有雷
4 标记为小旗
8 标记为问号
16 已揭开
另外,LineCount 属性和 RowCount 属性为获取矩阵的行数与列数,出于安全角度,这
两个属性,应当是只读的,因为矩阵的大小应该是在类的实例化时定义。
这样,我们已经做到了定义一个任意大小的雷区,并可以给雷区的任意位置赋值,使其
有雷或者无雷。
三、游戏功能的实现
依然以“扫雷”游戏为例,下面笔者就带着大家一步一步实现“扫雷”游戏的主要功能。
另注,本文面向有一定基础的 VB.NET 程序员,故为节约篇幅,突出重点,一下代码部分
不作详细解释,如果读者感兴趣,重写各个函数内部代码也可以。
1.计算任意方格的周围地雷数量
“扫雷”游戏中,每次单击一个方格,若未触雷,则将显示周围地雷的数量。因此,可
以在上面的 Matrix 类中再加入一个成员函数 AroundMine,其函数定义如下:
矩阵软件开发小组 Matrixsoft http://matrixsoft.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 Function
2.生成地雷与清除地雷
生成地雷这个步骤应当放在游戏开始的时候,用于向生成的矩阵中随机添加指定总数的
地雷,为保持程序的完整性,还应有清除所有地雷这一个功能,还要保证每次生成地雷时要
先执行清除地雷这一步操作,确保程序安全。同样是向 Matrix 类中再添加两个成员函数,
为了统计雷区剩余的地雷数量,还应加入一个私有变量存放地雷数。下面给出清除地雷和生
成地雷的示例代码:
清除地雷
Public Sub ClearMine()
For Each value In values
value = 1
Next
End Sub
生成地雷
Public 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
剩余15页未读,继续阅读
资源评论
- deepblue_5252012-12-01刚开始学习,看起来还有些费力,不过都能运行,而且都是比较小型的程序,适合初学者~
八两
- 粉丝: 258
- 资源: 24
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功