制作手札---RPG是怎样做成的 (二)

三月二十七日 星期六:系统分析

“系统分析”如此专业的词汇可能会立刻吓退一大片人,我当初也是如此!不过只要你认真读完下面的文字,也许你会说一声:‘系统分析’也不过如此嘛!

顾名思义‘系统分析’就是对整个游戏系统的规划,自顶向下的将它细化成一个个可由程序实现的模块;然后再把各个模块细化成一条条的语句。如此一来,写程序时就可以有条不紊,不会再像以前那样想到哪儿写到哪儿了。

相信大家对RPG都是非常熟悉的,通常的RPG按功能可分为:消息处理系统、场景显示及行走系统、打斗系统、升级系统、对话系统事件处理系统六大部分。其中又以消息处理系统走为核心模块,其余五部分紧紧围绕它运行。我的系统分析报告如下:

《英雄救美》系统分析记录

名称:英雄救美

中文RPG

硬件要求:PENTIUM 100以上CPU16M内存、SVGA、键盘、声卡(可选)。

软件平台:Windows 95/98/NTDirextX 5.0以上

开发环境:VC++5.0DirectX SDK

剧本:略(参见上文)

模块分析:

    • 消息处理(核心)
    • 场景显示及行走
    • 打斗
    • 升级
    • 对话
    • 事件处理

流程图:

(注:各个模块的具体实现略)

在这里并没有把每个模块的具体实现方法写出来,因为我认为把大量细节上的东西一股脑的堆在面前,实在是太枯燥了。为了不让你失去耐性,我决定还是把这些东西留到具体实现的时候来讲,也许这样会较生动而利于理解一些。

利用今天剩下的时间,我建立了两个非常重要的数据结构:‘角色’和‘地图‘的属性类结构。

//*********角色属性结构**********

typedef struct{

char Name[32]; //角色名称

int Width,Hight; //角色大小

int x,y; //当前坐标

int old_x,old_y; //旧的坐标

int Way; //方向

int Stats; //状态

int Level; //等级

int Exp; //经验

int Lift; //生命

int MaxLift; //生命最大值

int Attack; //攻击

int Defend; //防御

int Speed; //速度

char Goods[10]; //物品(最多可带10件)

}Role_Struct;

 

//*********地图结构**********

typedef struct{

char Name[32]; //名字

int Width; //

int Hight; //

char Ground; //地面材料

char res[7]; //保留

unsigned short *Data; //数据

}Map_Struct;

 

将同一事物的属性归在一起,使程序清晰易读,有利于我们方便的管理数据、把握大局;更是顺应了当今面向对象的程序设计思路。

 

三月二十八日 星期天:消息处理系统

今天的任务非常明确,就是搭起游戏的筐架(即建立游戏的消息处理系统)。

我们的这个消息处理系统和Windows的消息处理机制其实非常相似,都是先等待消息,然后根据收到的消息转到相应的函数进行处理。所不同的是Windows 接收的消息大多是系统或是用户输入产生的,而我们的消息都是自定义的,如:小飞刀在森林中行走时碰到了强盗,那么我们就让程序产生‘打斗消息’(即:Message=打斗),消息处理系统收到这个消息后就会马上转到打斗模块中去。

不要把消息处理想的太复杂,打个简单的比方:假如你是一位接线员,在你前面的桌上有很多部电话,那么你要做的是:有电话响时就接电话,没有电话响时就什么都不做。是不是很简单!其实消息处理也就是这个道理。

消息处理的大体框架如下:

 

//首先定义一些消息:

#define 行走 1 //行走消息定义为1

#define 打斗 2 //打斗消息定义为2

#define 对话 3 //对话消息定义为3

#define 升级 4 //升级消息定义为4

#define 事件 5 //事件消息定义为5

#define 结束 6 //结束消息定义为6

……

//定义程序中要用到的变量

DWORD Message; //消息变量

Role_Struct Hero; //定义小飞刀的属性结构

Map_Struct Map; //定义地图的属性结构

……

WinMain() //进入程序

{

初始化主窗口;

初始化DirectDraw环境,并调入程序需要的图形、地图数据;

while( 1 ) //消息循环

{

switch( Message )

{

case 行走: 行走模块();

case 打斗: 打斗模块();

case 对话: 对话模块();

case 事件: 事件模块();

case 退出: 退出游戏();

}

}

}

OK!我们的程序框架已经出来了,这时你心中也一定有了一个相当清晰的轮廓吧!好了,到目前为止该游戏的整体规划也就可以告一段落了,今后几天的工作重心将转到具体模块的实现方法了。可要加油哦^_^

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值