免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 5488 | 回复: 1
打印 上一主题 下一主题

一个简单的RPG游戏架构设计方案 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2011-02-14 13:29 |只看该作者 |倒序浏览
转:张家瑞

一个简单的RPG游戏架构设计方案




下面是一个简单的RPG游戏架构设计方案,实现了RPG游戏的基本功能(故事情节、战斗)。

  整个系统以RPGGameEngine模块为核心,周边包括了故事情节(Script)、战斗(Fight)、显示(Graphic)、声音(Sound)、输入(Input)几大模块。如图所示



RPGGameEngine工作原理很简单,主要思路就是通过设置一个状态变量来标志当前要执行的状态,这个变量用Message表示。游戏的主循环在RPGGameEngine中,这个主循环首先更新外部输入信息(Input模块,如键盘、鼠标、摇杆等)。然后,根据输入信息来更新游戏状态(如玩家行走、遇敌等),而后执行Script脚本,更新剧情。这个Script模块根据已经经过的时间、当前角色的状态、角色位置等信息来决定剧情的发展方向,设置游戏状态。执行完成这些后,游戏根据游戏状态的不同而转入不同的处理中,如状态为战斗则调用战斗模块处理,状态为行走则调用行走函数处理。最后,将更新后的图像显示到屏幕,将更新后的声音输出。

  其内部的游戏主循环函数流程如下
  1.  void MainLoop()

  2.   {

  3.     while(1)

  4.     {

  5.       //第一步:执行Input模块,更新输入信息

  6.       //第二步:根据输入信息更新游戏状态

  7.       //第三步:执行Script,更新剧情

  8.       //第四步:根据Message执行不同动作

  9.       //第五步:更新声音

  10.       //第六步:更新屏幕显示

  11.     }

  12.   }
复制代码
第一步:执行Input模块,更新输入信息

  这一步主要是将键盘鼠标等外部输入的信息按照系统关注的方面和方式记录下来,以供下一步使用。这一步收集的是最原始的输入信息。

第二步:根据输入信息更新游戏状态

  根据上一步提供的原始输入数据和Message的值,更新角色位置等信息。Message的值很重要,比如Message在对话状态下,即使玩家按住up键,也不能让角色向前移动。

第三步:执行Script,更新剧情

  调用Script模块,该模块实现剧情部分,也是整个游戏的逻辑部分。Script模块通过判断玩家位置、时间等信息,结合自身逻辑改变游戏的状态。

第四步:根据Message执行不同动作

  就好像电话接线员一样,此处通常是使用switch语句直接找到对应的case,跳入执行。根据Message的不同,转入不同状态的处理函数中。比如对话状态就转入对话内容显示函数,战斗状态就转入战斗模块中处理。

第五步和第六步:更新声音和图像

  在第四步处理完成后,需要将最终的显示和声音结果输出。此处需要用到图形引擎和声音引擎。

  例如,实现一个最简单的RPG游戏,小新去打酱油的故事 XD。整个流程是这样的,首先定义Message一共有自由行走、战斗、显示对话、操作完成、NPC人物移动共五种状态。默认小新站在家门口,状态为操作完成状态。

  游戏开始,玩家通过小新与妈妈的回话得知此次任务是要去打酱油(-_-|||)。对话的流程是这样的,Script设置好要显示的对话内容后,设置Message为"显示对话"状态,此时MainLoop会根据Script设置好的对话内容在屏幕上显示出来对话,当玩家点击鼠标时,对话框消失,Message变为"完成状态"。Script检测到"完成状态"后,装入下一段对话内容并重新设置Message为"显示对话"状态,继续等待完成。如此直到所有对话完成,此时Script设置NPC-妈妈移动到家里的坐标并将Message设置为"NPC人物移动"状态,等待移动完成。完成后,Script设置Message为"自由行走"状态,此时Input消息处理流程才会将玩家输入的上下左右等方向更新到角色上,使角色移动位置。当角色移动到NPC-酱油店老板时,被Script检测到,而后与酱油店老板发生剧情对话(对话方式见上文),没想到老板不给打酱油,为了完成任务,小新只好与酱油店老板死磕了。。。Script配置好战斗双方的参数后,设置Message为"战斗状态",由此进入战斗,战斗模块在处理完成后,将结果放置到预先分配好的变量中,而后置Message为"操作完成"状态。Script在检测到后,显示对话(方法略),至此任务完成。

  系统的重点在于Message状态的变化,如对话,显示到屏幕上以后,Message仍然是对话状态,直到用户点击鼠标后,一切关于这次对话的流程都进行完成后的那次while循环中,才会将状态变为"操作完成"。

  此设计方案只实现了一部分RPG 游戏中最基本的元素,后续计划加入NPC系统、剧情脚本、物品系统、地图切换等功能,敬请期待~~

论坛徽章:
0
2 [报告]
发表于 2011-02-16 09:59 |只看该作者
呵呵,谢谢楼主的文章不错,能否针对某一个方面的设计,展开一个实践项目?论坛对于这种实践活动也是积极支持的:wink:
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP