“系统分析”如此专业的词汇可能会立刻吓退一大片人,我当初也是如此!不过只要你认真读完下面的文字,也许你会说一声:‘系统分析’也不过如此嘛!
顾名思义‘系统分析’就是对整个游戏系统的规划,自顶向下的将它细化成一个个可由程序实现的模块;然后再把各个模块细化成一条条的语句。如此一来,写程序时就可以有条不紊,不会再像以前那样想到哪儿写到哪儿了。
相信大家对RPG都是非常熟悉的,通常的RPG按功能可分为:消息处理系统、场景显示及行走系统、打斗系统、升级系统、对话系统和事件处理系统六大部分。其中又以消息处理系统走为核心模块,其余五部分紧紧围绕它运行。我的系统分析报告如下:
《英雄救美》系统分析记录
名称:英雄救美
类型:中文RPG
硬件要求:PENTIUM 100以上CPU、16M内存、SVGA、键盘、声卡(可选)。
软件平台:Windows 95/98/NT、DirextX 5.0以上
开发环境:VC++5.0、DirectX 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=打斗),消息处理系统收到这个消息后就会马上转到打斗模块中去。
不要把消息处理想的太复杂,打个简单的比方:假如你是一位接线员,在你前面的桌上有很多部电话,那么你要做的是:有电话响时就接电话,没有电话响时就什么都不做。是不是很简单!其实消息处理也就是这个道理。