`
cqphper
  • 浏览: 23251 次
  • 性别: Icon_minigender_1
  • 来自: 重庆
最近访客 更多访客>>
社区版块
存档分类
最新评论

角色扮演游戏引擎的设计原理

阅读更多
角色扮演游戏(RPG)是深受广大游戏迷们喜爱的一种游戏, 它以独特的互动性和故事性吸引了无数的玩家。它向人们提供了超出现实生活的广阔的虚拟世界,使人们能够尝试扮演不同的角色,去经历和体验各种不同的人生旅程或奇幻经历。这些体验都是在现实生活中无法实现的。在玩过许多游戏后,许多玩家都不再仅仅满足于一个游戏玩家的身份,而会思考游戏是如何制作的,并且打算制作一个自己的游戏,网上的各种游戏制作小组更是如雨后春笋般涌现。下面我就给大家介绍一下角色扮演游戏引擎的原理与制作,希望能对游戏制作爱好者有所帮助。


一 游戏引擎的原理

  说到引擎,游戏迷们都很熟悉。游戏引擎是一个为运行某一类游戏的机器设计的能够被机器识别的代码(指令)集合。它象一个发动机,控制着游戏的运行。一个游戏作品可以分为游戏引擎和游戏资源两大部分。游戏资源包括图象,声音,动画等部分,列一个公式就是:游戏=引擎(程序代码)+资源(图象,声音,动画等)。游戏引擎则是按游戏设计的要求顺序的调用这些资源。

二 角色扮演游戏的制作

  一个完整的角色扮演游戏的制作从大的分工来说可以分为:策划,程序设计,美工,音乐制作以及项目管理,后期的测试等。
  策划主要任务是设计游戏的剧情,类型以及模式等,并分析游戏的复杂性有多大,内容有多少,策划的进度要多快等因素。
  程序设计的任务是用某种编程语言来完成游戏的设计,并与策划配合,达到预期的目的。
  美工主要是根据游戏的时代背景与主题设计游戏的场景及各种角色的图象。
  音乐制作是根据游戏的剧情和背景制作游戏的音乐与音效。
  项目管理主要是控制游戏制作的进程,充分利用现有的资源(人员,资金,设备等),以达到用尽量少的资金实现最大的收益。
  后期的测试也是非常重要的一个环节,对于一个几十人花费几个月甚至是几年时间制作的游戏,测试往往能找到许多问题,只有改进程序才能确保游戏的安全发行。
  由于文章主要是讲解游戏程序的制作的,所以策划,美工,音乐制作等方面请读者参考其它文章,下面我就讲讲游戏程序的设计。

(一) 开发工具与主要技术

1.件开发工具

  游戏程序开发工具有很多,在不同游戏平台上有不同的开发工具。在个人计算机上,可以用目前流性的软件开发工具,比如:C,C++,VC++,Delphi,C++ Builder等。由于Windows操作系统的普及和其强大的多媒体功能,越来越多的游戏支持Windows操作系统。由于VC是微软的产品,用它来编写Windows程序有强大的程序接口和丰富的开发资源的支持,加之VC严谨的内存管理,在堆栈上良好的分配处理,生成代码的体积小,稳定性高的优点,所以VC++就成为目前游戏的主流开发工具。

2.DirectX组件的知识

  谈到Windows系统下的游戏开发,我们就要说一下微软的DirectX SDK。
  Windows系统有一个主要优点是应用程序和设备之间的独立性。然而应用程序的设备无关性是通过牺牲部分速度和效率的到的,Windows在硬件和软件间添加了中间抽象层,通过这些中间层我们的应用程序才能在不同的硬件上游刃有余。但是,我们因此而不能完全利用硬件的特征来获取最大限度的运算和显示速度。这一点在编写Windows游戏时是致命的,DirectX便是为解决这个问题而设计的。DirectX由快速的底层库组成并且没有给游戏设计添加过多的约束。微软的DirectX软件开发工具包(SDK)提供了一套优秀的应用程序编程接口(APIs),这个编程接口可以提供给你开发高质量、实时的应用程序所需要的各种资源。
  DirectX的6个组件分别是:
    DirectDraw: 使用页面切换的方法实现动画,它不仅可以访问系统内存,还可以访问显示内存。
    Direct3D: 提供了3D硬件接口。
    DirectSound: 立体声和3D声音效果,同时管理声卡的内存。
    DirectPlay: 支持开发多人网络游戏,并能处理游戏中网络之间的通信问题。
    DirectInput: 为大量的设备提供输入支持。
    DirectSetup: 自动安装DirectX驱动程序。
  随着DirectX版本的提高,还增加了音乐播放的DirectMusic。

3.AlphaBlend 技术

  现在许多游戏为了达到光影或图象的透明效果都会采用AlphaBlend 技术。所谓AlphaBlend技术,其实就是按照"Alpha"混合向量的值来混合源像素和目标像素,一般用来处理半透明效果。在计算机中的图象可以用R(红色),G(绿色),B(蓝色)三原色来表示。假设一幅图象是A,另一幅透明的图象是B,那么透过B去看A,看上去的图象C就是B和A的混合图象,设B图象的透明度为alpha(取值为0-1,0为完全透明,1为完全不透明),Alpha混合公式如下:
    R(C)=alpha*R(B)+(1-alpha)*R(A)
    G(C)=alpha*G(B)+(1-alpha)*G(A)
    B(C)=alpha*B(B)+(1-alpha)*B(A)
  R(x)、G(x)、B(x)分别指颜色x的RGB分量原色值。从上面的公式可以知道,Alpha其实是一个决定混合透明度的数值。应用Alpha混合技术,可以实现游戏中的许多特效,比如火光、烟雾、阴影、动态光源等半透明效果。

4.A*算法

  在许多游戏中要用鼠标控制人物运动,而且让人物从目前的位置走到目标位置应该走最短的路径。这就要用到最短路径搜索算法即A*算法了。
  A*算法实际是一种启发式搜索,所谓启发式搜索,就是利用一个估价函数评估每次的的决策的价值,决定先尝试哪一种方案。如果一个估价函数可以找出最短的路径,我们称之为可采纳性。A*算法是一个可采纳的最好优先算法。A*算法的估价函数可表示为:
    f(n) = g(n) + h(n)
  这里,f(n)是节点n的估价函数,g(n)是起点到终点的最短路径值,h(n)是n到目标的最断路经的启发值。由于A*算法比较复杂,限于篇幅,在此简单介绍一下,具体理论朋友们可以看人工智能方面的书籍了解详细的情况。

  其它技术还有粒子系统,音频与视频的调用,图象文件的格式与信息存储等,大家可以在学好DirectX的基础上逐渐学习更多的技术。

(二)游戏的具体制作

1.地图编辑器的制作

  RPG游戏往往要有大量的场景,场景中根据需要可以有草地,湖泊,树木,房屋,家具等道俱,由于一个游戏需要很多场景且地图越来越大,为了节省空间,提高图象文件的可重用性,RPG游戏的画面采用很多重复的单元(可以叫做“图块”)所构成的,这就要用到地图编辑器了。我们在制作游戏引擎前,要完成地图编辑器的制作。在 RPG游戏里,场景的构成,是图块排列顺序的记录。首先制定一个场景构成文件的格式,在这个文件里记录构成场景所需要的图块的排列顺序,因为我们已经为每个图块建立了索引,所以只需要记录这些索引就可以了。一个场景的构成,是分成几层来完成的:地面,建筑和植物,家具摆设,和在场景中活动的人物或者物体(比如飘扬的旗帜),按照一定的顺序把它们依次显示到屏幕上,就形成了一个丰富多采的场景。我们可以用数组来表示地图场景的生成过程。

MapData[X][Y]; //地图数据,X表示地图宽度,Y表示地图高度
Picture[num]; //道具的图片,num表示道具的总数
void MakeBackGround() //生成场景函数
{
 int n;
 for( int i=0; i<Y; i++) //共Y行
 for( int j=0; j<X; j++) //共X列
 {
  n=MapData[ i ][ j ]; //取得该位置的道具编号
  Draw( j*32, i*32, Picture[n]); //在此位置(j*32,i*32)画道具
 }
}

2.游戏的模块的划分

  游戏按功能分为:消息处理系统、场景显示及行走系统、打斗系统三大主要部分。其中又以消息处理系统为核心模块,其余部分紧紧围绕它运行。

一:消息处理系统

  消息处理系统是游戏的核心部分。游戏用到的消息处理系统先等待消息,然后根据收到的消息转到相应的函数进行处理。比如:主角碰到敌人后,我们就让程序产生‘打斗消息’,消息处理系统收到这个消息后就会马上转到打斗模块中去。消息处理的大体框架如下:

//定义程序中要用到的变量
DWORD Message; //消息变量
WinMain() //进入程序
{
 初始化主窗口;
 初始化DirectDraw环境,并调入程序需要的图形、地图数据;
 while( 1 ) //消息循环
 {
  switch( Message )
  {
   case 行走消息: 行走模块();
   case 打斗消息: 打斗模块();
   case 事件消息: 事件模块();
  }
 }
}

二:场景显示及行走系统

  作为RPG游戏,其所有事件的发生几乎都是和场景有关,例如:不同的地方会碰到不同的敌人、与不同的人对话得知不同的事情等。鉴于这部分的重要性,我们可再将它划分为:背景显示、行走 和 事件发生 三个子模块,分别处理各自的功能。下面进行具体分析。

(一)背景显示
  程序运行后,先读取前面地图编辑器制作的场景所需要的图块的排列顺序,按照排列顺序将图象拼成一个完整的场景,一般做法是:在内存中开辟一到两个屏幕缓存区,事先把即将显示的图象数据准备在缓存区内,然后一次性搬家:把它们传送到真正的屏幕缓冲区内。
  游戏用到的图片则事先制作好并存于另外的图形文件中。地图编辑器制作的场景文件仅仅是对应的数据,而不是真正的图片。在游戏中生成场景就是地图编辑的逆过程,一个是根据场景生成数据,而另一个是根据数据生成场景。

(二)行走
  要让主角在场景中行走,至少要有上、下、左、右四个行走方向,每个方向4幅图(站立、迈左腿、迈右腿、迈左腿),如图:游戏中一定要将图片的背景设为透明,这样在画人物的时候就不会覆盖上背景色了(这一技术DirectDraw中只要用SetColorKey()函数将原图片背景色过滤掉就行了)。我们让主角位置不动,而使场景移动,即采用滚屏技术来实现角色在场景上移动。这样角色一直保持在屏幕的正中间,需要做的工作只是根据行走方向和步伐不停变换图片而已。行走时的障碍物判断也是每一个场景中必定要有的,有一些道具如树木、房屋等是不可跨越的。对此我主要用一个二维数组来对应一个场景,每一个数组值代表场景的一小格(见图3)。有障碍的地方,该数组的对应值为1,可通过的地方的值为0。

(三)事件发生
  事件发生原理就是把相应事件的序号存储在地图的某些格子中,当主角一踏入这个格子就会触发对应事件。例如:在游戏开始时,主角是在他的家里。他要是想出去的话,就需要执行场景切换这个处理函数。我们假定该事件的编号为001,那么在地图上把家门外路口处的格子值设为001。这样主角走到路口时,编号为001的场景切换函数就会被触发,于是主角便到了下一个场景中。程序具体如下:

void MessageLoop( int Msg ) //消息循环
{
 switch( Msg )
 {
  char AddressName[16]; //数组AddressName[16]用来存储主角所在地点的名称
  case ADDRESS == 001: // 由ADDRESS的值决定场景值(出门)
  ScreenX=12; ScreenY=0; //初始化游戏背景位置
  Hero.x=360; Hero.y=80;//主角坐标
  Move();//主角移动函数
  //以下程序用来显示主角所在地点
  sprintf(AddressName,"下一幅游戏场景的名称");
  PrintText(lpDDSPrimary, 280, 330,AddressName , RGB(255,255,255));//在屏幕上显示出场景的名称
  break;
 }
}

三:打斗系统

  绝大多数的RPG都是有战斗存在的,因此,打斗系统就成为RPG系统中很重要的一环。有不少RPG游戏采用回合制打斗方式,因为实现起来较为简单。和打斗紧密相关的是升级,通常在一场战斗结束后,主角的经验值都会增加。而当经验值到达一定程度时,角色就升级了。
  上面我简要的介绍了角色扮演游戏的制作,由于写这篇文章的目的是让读者对角色扮演游戏的制作有一个基本的了解,所以读者朋友们可以研究相关资料。
分享到:
评论

相关推荐

    RPG游戏引擎设计原理

    许多玩家都不再仅仅满足于一个游戏玩家的身份 而会思考游戏是如何制作的 并且打算制作一个自己的游戏 网上的各种游戏制作小组更是如雨后春笋般涌现 下面我就给大家介绍一下角色扮演游戏引擎的原理与制作 希望能对...

    角色游戏引擎设计原理

    角色扮演游戏(RPG)是深受广大游戏迷们喜爱的一种游戏, 它以独特的互动性和故事性吸引了无数的玩家。它向人们提供了超出现实...下面我就给大家介绍一下角色扮演游戏引擎的原理与制作,希望能对游戏制作爱好者有所帮助

    RPG角色扮演游戏设计

    RPG角色扮演游戏程序设计源代码,非常实用

    RGP游戏引擎的原理.doc

    RGP游戏引擎的原理是游戏开发的核心,它驱动着角色扮演游戏的运行,为玩家创造出引人入胜的虚拟世界。RPG游戏引擎负责解析和执行游戏设计者编写的代码,以及管理和渲染游戏中的图像、声音和动画等资源。 游戏引擎...

    游戏编程--语言互交、语言编程

    下面我就给大家介绍一下角色扮演游戏引擎的原理与制作,希望能对游戏制作爱好者有所帮助。 一 游戏引擎的原理 说到引擎,游戏迷们都很熟悉。游戏引擎是一个为运行某一类游戏的机器设计的能够被机器识别的代码...

    开发RPG游戏教程及源码

    如果你学习J2ME,这是一个不错的学习对象。 《游戏的故事》源代码 RPG游戏J2ME代码讲解 J2me手机游戏回合RPG游戏基本构架 j2me游戏引擎程序结构 ...角色扮演游戏引擎的设计原理 任务系统 制作手札---RPG是怎样做成的

    Unity引擎下多人在线网络游戏的设计与开发

    本文结合网络通信原理,以Unity3D为基础,采用MVC架构,设计并实现了多人在线动作角色扮演游戏(ARPG).针对在线玩家场景的一致性问题,提出了位置同步、武器同步、伤害同步等通信协议.游戏界面是否友好,很大程度上...

    基于python的玛丽冒险程序源码(含文档说明)

    这款程序包不仅包含了游戏的完整源代码,还配备了详尽的文档说明,从游戏的设计原理、关卡设计、角色控制、碰撞检测到音效和图形渲染等方面都进行了详尽的阐述。 玩家在游戏中将扮演勇敢的主角玛丽,穿越各种充满...

    3d渲染引擎的设计和研究.....

    游戏引擎的发展始于对现实世界的模拟。在计算机中,3D物体通过顶点数据来定义,顶点之间形成多边形,构建出复杂的几何结构。顶点的位置、颜色、法线和纹理坐标等信息共同构成了3D模型的基础。坐标系统的选择至关...

    2D图像硬件加速引擎的设计优化.pdf

    在现代计算机系统中,2D图像硬件加速引擎扮演着至关重要的角色,特别是在互联网技术日新月异的今天。硬件加速引擎极大地提升了图形处理的效率,为网页浏览、游戏、视频播放等应用提供了流畅的用户体验。本文将深入...

    Unity常用网络框架与实战解析

    本课程是为游戏开发者设计的,专注于Unity引擎...无论是打算开发竞技游戏、合作游戏还是大型多人在线角色扮演游戏(MMORPG),本课程都将为学员提供坚实的基础和丰富的实践经验,帮助他们在游戏开发的道路上更进一步。

    5个好玩的github游戏区开源项目

    通过研究这些项目的源码,我们可以深入了解游戏开发的细节,包括游戏逻辑、图形渲染、网络通信等方面,对于提升编程技能和理解游戏设计原理非常有帮助。同时,参与这些项目的开发,还能增强我们的协作能力和项目管理...

    使用启发式搜索设计玩单人游戏的agent1

    在当今快速发展的信息技术领域,人工智能(AI)扮演着越来越重要的角色。启发式搜索作为一种高效的问题解决策略,尤其在处理复杂任务如游戏代理设计中展现了其优越性。启发式搜索通过结合评估函数(heuristic ...

    基于C++实现基础BP神经网络,有助于深入理解BP神经网络原理。.zip

    游戏开发领域中,C++由于其高效性和广泛应用,在开发高性能游戏和游戏引擎中扮演着重要角色。在嵌入式系统领域,C++的高效和灵活性使其成为理想选择。此外,C++还广泛应用于桌面应用、Web浏览器、操作系统、编译器、...

    全国计算机等级考试《二级C语言程序设计》专用教材.docx

    4. 游戏开发:参与游戏引擎的开发、游戏逻辑的设计和实现等工作。 5. 嵌入式系统:在智能家居、机器人、航空航天等嵌入式系统中进行软件设计和开发工作。 C 语言的重要性: 1. C 语言是一种经典的编程语言,自 20...

    C++从零开始实现的一个简单的基于区块链技术的电子货币记账系统,主要用来学习区块链的底层原理.zip

    游戏开发领域中,C++由于其高效性和广泛应用,在开发高性能游戏和游戏引擎中扮演着重要角色。在嵌入式系统领域,C++的高效和灵活性使其成为理想选择。此外,C++还广泛应用于桌面应用、Web浏览器、操作系统、编译器、...

Global site tag (gtag.js) - Google Analytics