| | | | | | | [文章信息] | | | 作者: | 付佳亮 | | 时间: | 2003-08-19 | | 出处: | 微软社区 | | 责任编辑: | 方舟 | |
| [文章导读] | | | 开发游戏需要对DirectX的调用,原来除了C++没有其他语言可以胜任这份工作 | |
| |
|
| | | |
|
|
|
|
|
制作2D游戏的基本知识就这些了,我们现在来说一下游戏的构架。我们以一个简单的回合制RPG游戏为例。
我建议把所有DirectX的接口全部封装起来。这样操作起来方便很多。
游戏中需要英雄类、物品类、怪物类、地图类
首先先说英雄类包含的内容有HP、MP、技能、身上装备、所会武功、人物坐标。
其中比如所会技能此技能等级,做成一个自定义类型,方法是
Public Structure myGest
Public GestID As Int16 '武功编号
Public GestLV As Int16 '武功等级
End Structure | 比如最多会十种就可以定义为Public Guest(9) As myGest
同样的道理人物坐标也一样
Public Structure myXY
Public iX As Int16 'X轴坐标
Public iY As Int16 'Y轴坐标
Public iAsp as Int16 '头朝的方向
End Structure | 当然还有其他的一些属性,这里就不一一列举了。
物品类
比如物品分种类的,每种物品功能不同,比如头盔就不能装备在身上当然也不能吃,这里我们用到一个枚举类型,定义方法是
Public Enum myResClass '物品分类
Head '头装备
Body '身上装备
Hand '手上装备
Eat '食品
Other '其他
End Enum
Public ResClass As myResClass '物品类型
End Class | 其它当然还有很多属性,如名称,重量,性能等等。
怪物类
类似于英雄类有也相似的属性。
地图类
这里我们把显示得地图单独拿出来作为一个类,是因为,一张地图并不是每个地方都可以走的,从位图中可是很难识别出那些是阻挡物的。并且地图上还有一些NPC,可以与其对话等等。这一切都要从地图文件中读取。
地图文件象一张二维表,与你地图位图相对应,比如人物向上移动TOP-=5然后判断,现在所在点在二维表中是否可以行走,是否有阻挡,如果阻挡取消操作,人物不做移动。
然后设定整体流程,为了操作不会因按键点击速度而影响移动速度,所以我们用时间来控制,设置一个Timer控件,然后根据当前状态不同而设定操作的不同,比如操作开始界面、移动模块、对话模块、战斗模块、交易模块、主菜单模块。当前状态用iNowState变量存储
Select Case iNowState
Case 0
'开始界面
Case 1
'移动模块
Case 2
'对话模块
Case 3
'战斗模块
Case 4
'交易模块
Case 5
'主菜单
End Select
用eInput来存储键盘事件。定义如下:
Public eInput As System.Windows.Forms.Keys = Keys.None
'读取存储键盘信息
Protected Overrides Sub OnKeyDown(ByVal e As System.Windows.Forms.KeyEventArgs)
eInput = e.KeyCode
end sub
|
|
|
|
|
|
|
|
|