RPG游戏制作教程
- 格式:doc
- 大小:44.42 KB
- 文档页数:18
前言这里我说的RPG是指较简单的,单线或单线多分支RPG。
讨论的方法是我接触过,实用的方法,或许还有其他更好的方法,但不在本文讨论的范围。
一如何开始工作?首先肯定是制定一个目标。
我觉得在作任何设计之前都要设定一个自己想要达到的目标,一个前人的游戏或者一个自己理想中的模型。
在给自己定下一个目标以后对自己将要设计的游戏已经有了一个和感性的认识,是要做的是以剧情见长的游戏,或者以是以系统见长的游戏,又或者以关卡设计见长,再或者以收集……总之定下目标后,起码你有了一个或者一系列风格相近的游戏作为参考,那么你的游风格基本也会比较确定了。
在确定这些东西以后,有两块大的任务要做,系统设计及任务设计。
这两个工作,把那个放前那个放后,其实都没有多大的关系,根据你个人的喜好决定一样就可以。
我的习惯当然是先开始yy任务。
二开始任务前的准备工作这里所说的任务是指什么呢?包括剧情文字,剧情的流程、任务的流程和其他细节。
也就是说把系统划掉以后剩余的工作几乎都可以算在任务制作里面了……然后从剧情的框架开始着手设计。
列出准备出场的人物名单,列出准备构成游戏剧情的几个重要事件,列出需要涉及到的地图。
列出这些东西,基本上游戏已经有了一个简单的故事框架。
接下来用上面的素材,把脑子里面还比较单薄的主线故事点和人物窜接起来。
当作到这一步的时候,你已经可以把出场人物,场景需求做成文档交给美工。
然后是一个很重要的中间步骤——游戏剧本制作。
在之前你写游戏故事的时候,加入了很多旁白,或者心理描述以及简单的地点描述和动作描述,现在在你制作游戏剧本的时候要把这些东西转化成游戏中的表现形式。
比如以下面的形式:第1幕地图:精灵之森主要人物:A、B、CNPC:D、E、F滚屏文字序幕……任务对话:A:……B:……发生动画:描述……(后面制作成动画文件在这里播放)NPC对话:E:……F:……有人问了,剧本都写到这个程度,难道才是准备工作么?对呀,真正的任务制作还没有开始呢……策划是很辛苦的……三正式制作阶段要开始这个阶段,先检查写你手上的这几样资源有没有齐备:1. 地图切片2. 地图的连接关系图3. 任务的转移关系图(也就是以最小单位的任务作为任务点,然后按任务顺序依次连接)好了我们开始做任务设计。
首先,这个脚本的作用是完全改变原来的战斗方式,从回合制变成了横板即时格斗。
操作方式:上下左右控制方向,双击左或右是加速跑;C键(以下皆以键盘上的按键为准)为普通攻击,连按三下是三连击;X键是必杀技,X、前X、上X和下X分别是四种不同的必杀技,需要事先在技能窗口设定好;A键是跳跃;S键是防御;D键是暂停游戏,同时打开战斗选项窗口,第一个选项是使用道具,第二个选项是设定技能,第三个选项是逃跑;W键是换人,作用是当共同战斗的角色有2人以上时,按此键可以切换自己操纵的角色。
理解了基本的操作方式,接下来就是制作自己的角色人物了。
由于战斗是横板格斗,因此需要各种各样的动作,包括待机、行走、攻击等等。
这里我用从K OF游戏中提取出来的gif图片为例说明一下制作方法。
前期的准备:在Battl ers文件夹中放一张图片,命名为wea pon_001,图片内容为空也没关系,但一定要有这张图片。
万事开头难,首先我们要知道如何创建一个人物。
先在游戏工程的数据库里新建一个角色,行走图可以随便设,但战斗图先不要设。
然后我们打开脚本,在“FullCB S part-5 (Reflex)”里面,找到34行的caseactor_id,这里就是设置一个人物的各种基本属性,大多数属性的旁边都有注释,不难看懂。
我来解释一下@stand_body_rect、 @sit_bo dy_re ct和 @down_b ody_r ect分别是人物站立、下蹲和倒地时的判定范围。
相当于人物的坐标和大小。
= Rect.new(X坐标, Y坐标, 人物宽度, 人物高度)设完之后我们可能对这些数字没有概念,不知道到底人物坐标在哪儿,到底有多大,别急,后面会慢慢讲到。
一套游戏,其中包含的内容很多,涉及了编程技巧的方方面面。
本文力求从简便的角度出发介绍RPG类游戏的制作,只要你有一点C语言的基础,就可以按部就班编出一个游戏来,若对C没有一点概念,那么正好趁此机会学习一下C,体会体会当代最实用的编程语言。
考虑到现在C及C++各种版本的普及情况,在此拟采用Turbo C 2.0为例,逐一介绍这方面的具体知识。
一浅说:在正式进入游戏编程前,我们先来谈谈有关屏幕管理的几个有趣的问题。
计算机显示器的工作方式有两种:正文方式和图形方式,在每种显示方式下还可分为不同的显示模式。
对于我们的GAME来说,她的处理对象主要是图形,所以我们需要采用后一种显示方式。
在Turbo C中initgraph是一个初始化图形系统的有用函数,它从磁盘装入一个图形驱动程序,且把系统置成图形方式。
除了这种动态装入机制外,也可以将一个或几个图形驱动程序文件直接同可执行程序文件连接起来。
游戏中通常采用的是640×480或320×200的分辨率。
让我们来看看一个子程序:setupgraph() /* 图形初始化*/{int driver=VGA,mode=VGAHI;/* VGA卡的VGAHI图形模式,640*480同显16色*/initgraph(&driver,&mode,"");/* 使用空字符串"" 表示设备驱动程序在当前目录中*/}这个程序装入的图形驱动程序文件为EGAVGA.BGI,在例程中我们也将采用这种640×480的模式进行编程。
若想选用其他分辩率,只需改变driver和mode的值便可。
下面我们来谈谈有关调色板的应用。
对于VGA显示器,图形模式12H(640×480,16色)共设置了16个颜色寄存器,所以显示器上能同时最多显示16种颜色。
系统初始化时,也将颜色寄存器予以初始化,若这种默认颜色值不满足要求的话,只需修改相应颜色寄存器的数据,就可实现从64种颜色中任意选取,使显示的图形更加美观。
rpg游戏制作教程RPG(角色扮演)游戏制作是一项复杂的任务,需要深入了解游戏开发技术和设计原则。
下面是一份简要的RPG游戏制作教程,将帮助您入门并理解制作一个RPG游戏的基本步骤。
第一步是确定游戏的核心概念和主题。
您需要决定您的RPG 游戏是基于什么样的世界观和故事情节,并且确定您的角色扮演元素和机制。
接下来,您需要设计游戏的角色和职业系统。
决定玩家可以选择哪些角色和职业,并为每个角色和职业定义其属性、技能和特征。
然后,您需要设计游戏的地图和场景。
确定游戏中的各个区域和场景,并为每个区域设计细节和关卡。
在这之后,您需要设计游戏的任务和剧情。
确定玩家将面临的任务和挑战,并为游戏编写情节和对话。
接下来,您需要制作游戏的图形和音效。
使用游戏开发工具或图形设计软件创建游戏中的场景、角色和特效,并为游戏添加音效和背景音乐。
最后,您需要编程和调试游戏。
使用游戏引擎或编程语言来实现游戏的逻辑和控制,然后进行测试和修复游戏中的错误和bug。
制作RPG游戏需要涉及多个方面的技术和技巧,因此您可能需要学习一些游戏开发技术和工具。
了解一些常用的游戏引擎和编程语言,如Unity和C#,可以帮助您更好地实现您的游戏创意。
此外,不要忘记与其他游戏制作人员和玩家社区进行交流和分享。
参加游戏制作讨论论坛和社交媒体群组,与其他游戏开发者分享经验和学习新的技巧。
总的来说,制作RPG游戏是一个充满挑战和创造力的过程。
通过理解游戏的核心概念、设计游戏系统、制作游戏内容和调试游戏错误,您将能够制作出一个令人满意的RPG游戏。
不断练习和学习,您的游戏制作技能将不断提高,创作出更加出色的作品。
第一步:导入资料图片
首先在flash中导入人物走路的图片,如下图:
第二步:制作向前后左右走路的影片剪辑
把刚才导入的图片,分别制作成4个影片剪辑a,d,s,w,用来描述走路的过程,如下图
第三步:制作Walk影片剪辑,
在主场景中建立一个walk影片剪辑,在walk中建立8个关键帧,帧标签分别是: Right , Left , Down , Up ,
Right2 , Left2 , Down2 , Up2 前4个关键帧分别放置影片剪辑d,a,s,w ,后面4个关键帧放置相应的静态图片,用来显示人物静止时候的状态.
第四步:加上影子
新建图层yingzi,里面放置一个椭圆形阴影影片剪辑yingzi如下图
第五步:添加AS,让人物走动.
1、在walk的第一帧加入stop();
2、对walk加上ClipEvent如下:
CODE:
[Copy to clipboard]
最终效果如下:
当然,这个家伙会满屏跑,在传统的RPG游戏当中,人物应该在屏幕的中央才对,下节我们将讲解如何实现人物在场景中行走。
RPG游戏制作教程
1.如果你想制作的是一款电脑的单机游戏,我建议你用rpg游戏大师,你不用去学一些编程语言,绘画技术,建造模型,因为这中中里面这个软件都涵盖过了,里面的编程虽然不是很复杂,但是对于初学者来说是一个很好的学习工具,这个软件里面提供的素材十分的丰富,只要你把整个故事情节想好,在内容上添加相应的节点,通过自己的调试,就很容易得到一个单机游戏了,至于好不好玩就要看开发者的想象力,行动力和逻辑思维能力了。
2.如果你是想做一款手机游戏的话,我建议你学
unity,cocoscreator。
其中,unity是现今市场上很多手游端游的开发引擎,但是关键它是一款英文开发软件,汉化程度没有那么高,有些地方很难去理解,而且还要去学一些编程语言的基础,例如C语言,C++语言。
我自身也接触过这款软件,如果你想入门的话,建议你看多一些课程,了解一些相关的案例,就很容易入门了。
cocoscreator它是一款由国内团队开发的二弟三弟,游戏开发软件。
通俗易懂,相应的教程也很多,他的编程语言是js,我现在还在用这个软件来学习游戏开发。
以下是我接触过的软件,可以参考一下学习。
Photoshop可以绘图,制作人物,皮肤,贴图
瓦片地图编辑器可以编辑像素的方格地图
骨骼编辑器可以用来制作游戏人物动作
3dmax和Maya3d建模软件人物或者场景都可以制作像素制作软件初学者建议使用。
手工做rpg的方法有哪些手工制作RPG游戏是一种有趣且有创造力的活动,它不仅可以提高你的想象力和制作技能,还可以让你享受到独特的游戏体验。
在这里,我将介绍几种手工制作RPG游戏的方法,帮助你开始自己的冒险之旅。
1. 剧情设计:RPG游戏最重要的部分之一是剧情。
你可以先决定游戏的设置和主题,然后设计游戏角色和任务。
这需要一些创造力和思考,让你可以创造一个吸引人的故事,并吸引玩家进入游戏的世界。
2. 游戏角色设计:设计各种各样的游戏角色是RPG游戏中的一个重要环节。
你可以根据游戏的主题和剧情来设计不同类型的角色,例如勇敢的战士、强大的法师、精明的盗贼等。
为每个角色设计不同的属性和技能,并决定他们在游戏中扮演的角色。
3. 游戏地图设计:一个好的RPG游戏需要有一个详细和有趣的游戏地图。
你可以用纸和铅笔来绘制地图,标出不同的地区和地点,并为每个地方设计不同的任务和挑战。
你还可以添加一些秘密地点或隐藏任务,增加游戏的趣味性。
4. 游戏道具设计:道具在RPG游戏中起着重要的作用,可以帮助玩家完成任务和战胜敌人。
你可以设计各种各样的武器、魔法和药物,并为每个道具设定不同的效果和用途。
你还可以设计一些特殊的道具,如任务物品或藏宝图,增加游戏的难度和探索性。
5. 游戏规则设计:RPG游戏需要一套清晰的规则来指导玩家的行为和决策。
你可以设计一些基本规则,如战斗规则、经验和等级系统、任务完成条件等。
这些规则应该能够平衡游戏的难度,并提供一种令人满足的游戏进度。
6. 游戏测试和平衡:在你完成RPG游戏的制作后,你应该进行一些游戏测试和平衡工作。
让一些朋友或家人来玩你的游戏,并给你反馈意见。
你可以根据他们的建议和意见来改进你的游戏,使其更加有趣和挑战。
7. 游戏素材收集:制作RPG游戏需要一些素材,如图片、音效和背景音乐。
你可以从互联网上找到一些免费的素材,也可以自己画图或录制音效。
确保你使用的素材符合版权规定,并且与你的游戏风格和主题相匹配。
地图∙创建新地图∙地图元件∙绘制地图元件(1)∙绘制地图元件(2)∙自动元件∙通行设定∙随机生成场景∙遇敌区域从草地到迷宫,从城镇到房间──任何的玩家角色可以四处移动移动的「活动场所」称为地图。
游戏是由各式各样的地图所组成的,玩家角色可以利用事件在这些地图之间自由穿梭。
举例来说,当玩家角色踏上门口时,可以通过一个透明的事件把玩家角色传送到另一个室内的地图。
这就是地图「衔接」的方式。
创建新地图地图创建是在主窗口左下方的树形图进行的。
首先,右键点击项目文件夹或是地图项目,选择菜单中的「新建地图」。
在出现的对话框中填入适当的设定(如地图大小等),点击「确定」。
详细参看各个项目的工具提示。
地图设置完毕后,就会在刚才所选择的地图(母地图)项目下出现一个子地图,与Window 的文件夹树形图一样。
子母地图的差别不会影响游戏的进行,但是可以帮助我们管理大量的地图,比如说:把同一个村落的室内地图作为该村落地图的子地图。
可以透过鼠标拖曳改变树形图。
地图元件地图乍看下像是一张单独的图片,实际上是由许多的小部件像拼图一样所组合而成的。
这些小部件就叫做地图元件。
每一个地图元件都包含了角色通行与否之类的信息。
绘制地图元件(1)从主窗口左方的元件选择面板选择所要绘制的地图元件,可以在元件选择面板中拖曳,一次选择多块元件。
所选中的元件可以绘制在右方的地图编辑区;有点像在使用绘图软件一样。
绘制地图元件的方法,可以在主菜单的「绘具」菜单中找到。
下面是绘制的工具和功能介绍:画笔最普通的绘图方式,在鼠标点击的位置绘制地图元件。
矩形通过拖曳出的对角线形成一个矩形,然后将矩形区域填充所选的地图元件。
圆形通过拖曳出的对角线形成一个椭圆,然后将椭圆区域填充所选的地图元件。
料桶在鼠标所点选处的所有相邻并相同的地图元件全部用所选的地图元件替换。
在地图编辑区右键可以选择点击处的地图元件,这种功能称为吸管。
善用吸管功能可以跳过在元件选择面板选择元件的步骤,大大的提高绘制效率。
〖一〗制作游戏中,角色扮演游戏可以说是所有游戏中最复杂的。
它需要统合各方面的人员(像是程序、脚本、美术、音乐音效等等),因此对于一名游戏企划来说,如何去制作一个角色扮演游戏就成为最大的挑战。
在国内某知名游戏公司内部有一种说法,就是「制作游戏的数量不到三套,不能算是一个专业的游戏制作人员。
」不过还有一些人对这一点有另外一种看法,就是「没有制作过角色扮演游戏的人,不算是真的经历过考验。
」由这种说法,可以知道角色扮演的制作有多么的复杂。
在开始制作一个角色扮演游戏前,前置作业相当的重要。
什么是前置作业呢﹖最简单的说法就是对于整个游戏的规划。
由于笔者刚才也提过制作一个角色扮演游戏需要协调各方面的人员,因此前置作业的成功与否,就会影响到游戏的后期制作。
现在先请各位看下面的这个图表:工作类别第一月第二月第三月第四月第五月第六月企划脚本▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓程序设计▓▓▓▓▓▓▓▓▓▓▓▓▓▓美术设计▓▓▓▓▓▓▓▓▓▓▓▓音乐音效▓▓▓▓▓▓这个图表是表示一个计划在六个月里完成的角色扮演游戏各方面的工作进度表。
当然啦,制作一个角色扮演游戏所需要的时间可能不止六个月,不过本专栏为了不浪费各位太多的时间,因此将以一个较小的案子来进行,因此设定的制作时间就只有六个月。
至于工作类别的分类上,笔者也以最少量的人员来进行规划(在许可的情况下,部份的工作可以再作一些分工,像是企划和脚本就可以分成两个不同的工作类别)。
在这个子中,笔者只将工作分成四个部份。
现在笔者就先为各位说明各个工作类别所负责的工作:1.企划脚本(Game Designer/Scenario Writer)企划和脚本可以说是角色扮演游戏中的骨干,一个好的脚本可以让整个游戏的剧情引人入胜,同时好的企划也能够吸引玩家。
因此在这四个游戏的分类中,企划脚本可以说是最重要的工作了。
不过各位可不要以为工作就只有这么一点点,在游戏制作中,企划通常也担任了资料设定、调整以及测试难易度的工作。
rpg游戏开发教程RPG(角色扮演)游戏开发是一项复杂而有趣的任务。
它结合了游戏设计、编程、艺术和故事叙述等多个方面的技能。
如果你有兴趣学习如何开发自己的RPG游戏,下面是一个简单的教程,帮助你开始入门。
首先,你需要一个游戏引擎,以便能够快速开发和测试你的游戏。
一些流行的选择包括Unity、Unreal Engine和Godot。
它们提供了容易上手的界面,可以帮助你创建角色、地图和怪物等游戏元素。
一旦你选择了一个游戏引擎,就可以开始设计你的游戏了。
首先,确定你的游戏的主题和故事背景。
你可以选择一个奇幻世界、科幻世界或现实世界等等。
然后,设计你的主角和支持角色,包括他们的外貌、技能和背景故事。
接下来,你需要设计游戏的地图和场景。
这些场景可以是城市、森林、洞穴等等。
你可以使用游戏引擎提供的编辑器来创建这些场景,添加地形、建筑和道具等元素。
然后,你需要创建敌人和怪物,他们将是玩家要面对的挑战。
你可以设计不同种类的敌人,每个敌人都有不同的属性、技能和战斗方式。
接下来,你需要编写游戏的规则和算法。
这些规定了游戏的逻辑、战斗机制和进程。
你需要考虑到玩家的升级和成长,以及任务和剧情的发展。
一旦你设计好了游戏的各个元素,就可以开始编程了。
使用你选择的游戏引擎的编程语言(如C#、Python或蓝图等),开始编写游戏的代码。
你需要编写角色的行为和动作,包括移动、攻击、交互等。
同时,你还需要编写游戏的界面和菜单,以便玩家可以与游戏进行交互。
在编程的过程中,你需要不断地进行测试和调试。
确保游戏的各个部分可以正常运行,并修复出现的错误和问题。
你可以在游戏引擎的模拟器中进行测试,以便快速找到和修复问题。
最后,当你的游戏完成了编程和测试阶段,你可以将它发布。
你可以选择将游戏发布到手机、电脑或游戏主机等平台上。
你可以使用游戏引擎提供的发布工具,将游戏打包成可执行文件或安装包,并通过应用商店或网站发布。
总之,开发一个RPG游戏需要多个技能的结合,包括游戏设计、编程、艺术和故事叙述等。
RPG游戏制作教程RPG全称为:Role Playing Game(角色扮演游戏)RPG游戏《仙剑奇侠传》(20张) RPG是电脑游戏的发展历史中形成的第一大阵营。
作为具有一定的情节、描述人物成长过程、表现事件始末的一种游戏,决定了角色扮演类游戏必须提供一个广阔的虚拟空间来供游戏者旅行、冒险和生活。
虽然这个空间是虚拟的,但它也有其一定的生存环境和规则。
由于该类的大多游戏较别类游戏更强调文字的表现,使角色扮演游戏能够更为贴切地表达人类的情感。
而整个游戏的流程由战斗,进行贸易,解开谜题和繁琐的迷宫串在一起。
在很大程度上满足了游戏者潜在的对拥有多姿多彩的不凡生活的渴望。
因为RPG游戏相对于其他类型的游戏,技术要求最低,电脑配置要求也最低,因此开发起来相对容易很多,RPG游戏在电子游戏中也是历史最为悠久、数量最为庞大的一种。
在电子游戏发展史中,也留下了许许多多的经典作品,像家用电视游戏机上的《最终幻想》系列,PC 机上《魔法门》系列,还有中文电脑RPG游戏的经典《仙剑奇侠传》、《轩辕剑》、《幽城幻剑录》以及《幻想三国志》系列、《新绝代双骄》系列等。
游戏《上古卷轴》截图(20张) 相对于其他类型游戏,此类游戏更重要的核心是世界观表现及角色代入感体验(世界观依托于具有故事RPG游戏《上古卷轴》(11张)性的文字设定,包括场景设定角色设定等诸多前期因素,所以此类游戏的前期筹备工作对于其他类型游戏来说是一个更为浩大的工程,对于RPG本身来说也是最为重要的工程),在很大程度上满足了游戏者潜在的对拥有多姿多彩的不凡生活的渴望。
RPG的前身是交互式小说,与现在的冒险类游戏(简称AVG或ADV)同源,RPG游戏在电子游戏中也是历史最为悠久、数量最为庞大的一种。
世界上第一款电子平台的RPG是1981年的游戏《巫术》。
在电子游戏发展史中,也留下了许多经典作品,比如家用游戏机上的《最终幻想》、《勇者斗恶龙》(电子游戏中的两大RPG龙头,都属于SQUARE-ENIX公司,某种程度上左右着次世代游戏机战争)、《阿月历险记》、《异度传说》、《口袋妖怪》SEGA的《梦幻之星》系列、RPG游戏《暗黑破坏神》截图(11张)《光明》系列;NAMCO的《传说》系列(包含《幻想传说》、《宿命传说》、《深渊传说》、《永恒传说》、《重生传说》、《薄暮传说》、《世界传说》、《心灵传说》、《风雨传说》);Falcom的《英雄传说》系列、《伊苏》系列、《双星物语》系列;PC上的《暗黑破坏神》、《无冬之夜》、《上古卷轴》、《博德之门》、《魔法门》,《神鬼寓言》还有中文电脑PC平台中的RPG经典——《仙剑奇侠传》以及《轩辕剑》、《剑侠情缘》、《幽城幻剑录》、《幻想三国志》、《新绝代双骄》、《刀剑封魔录》、《秦殇》等。
rpg makerxp制作教程“地图”原野、迷宫、城市街道和建筑物内部等主角移动的舞台称为地图。
游戏是由很多地图构成的,各个地图间可以随着事件的处理来回移动。
例如主角在接触建筑物的入口后,画面就会消失,而转移到建筑物内部的另一个地图里。
因此通过这样的衔接方式便能将整个地图联系在一起。
地图元件和图块地图看起来就像一整张图画,然而实际上和拼图玩具的小块一样是由许多小部件组合而成的。
构成地图的最小部件称为地图元件。
地图元件可以设定各种不同的属性,比如人物能否通行等。
表现特定的场所就需要一组整理在一起的许多地图元件,并设定各种不同的属性,这就称为图块。
各个地图可以选择使用不同的图块,然后用该图块中的地图元件组合配置成一张地图。
在图块中,还可以设定战斗时显示的背景(战斗背景)图形,遭遇敌人时会自动使用该背景。
地图的制作新地图的制作和多个地图的管理,是在主窗口左下方的地图树状目录里进行。
首先,在地图树状目录里选择一个地图名称,按下鼠标右键,出现选单后选择「新建地图」,便会开启制作地图窗口,设定好地图名称、图块、地图大小、遇敌率等必要信息后按下「确定」,就完成了新地图的制作。
各项的具体意义请参照帮助提示。
地图设定完毕,最初选择的地图下方就会建立一个新的子地图,而上方的地图就叫母地图。
这和 Window s 文件夹的目录结构相同。
这个结构并不直接影响游戏的运行,比如城市的建筑物内部地图作成该城市整体地图的子地图,这样对多个地图的管理就会更加容易。
地图可以通过鼠标直接拖曳 & 移动选项中的上下移动来改变目录结构。
层地图是由 3 层各种各样不同的地图元件配置而成的。
可以向各层任意配置各种地图元件,一般来说第1 层是地面,第 2 层是栅栏和建筑物,第 3 层是窗户和烟囱,按照这个标准,地图就能顺利制作完成。
项目一默认素材使用教程任务1 认识RPG与RPG Maker XP1.RPG简述RPG,即角色扮演游戏(英文全称是Role-playing game),是一种游戏。
在游戏中,玩家扮演虚拟世界中的一个或者几个特定角色在特定场景下进行游戏。
角色根据不同的游戏情节和统计数据(例如力量、灵敏度、智力、魔法等)具有不同的能力,而这些属性会根据游戏规则在游戏情节中改变。
有些游戏的系统可以根据此而改进。
玩家需扮演游戏中的主角(可以不止一个人)在游戏。
在所给定的世界里进行漫游、冒险;他可以购买物品、装备来使自己与自己的队伍更为强大;与游戏中的敌人进行战斗,从而获得金钱与能使自己升级的经验值;通过对话、调查等行为来完成游戏中的剧情。
由于角色扮演游戏可以使玩家扮演与其本人截然不同的人物;可以满足玩家成为世界上(当然是指游戏中的世界)最强大的人、最伟大的英雄的欲望;而亲身体验跌宕起伏的剧情又能使玩者如同看一本小说一般,与游戏中的人物同喜同悲。
这些恐怕也就是角色扮演游戏里最有趣最吸引人的地方。
《仙剑奇侠传》游戏截图1 《仙剑奇侠传》游戏截图2《天之痕》游戏截图1 《天之痕》游戏截图22.RPG要素(1)剧情剧情的好坏直接影响到玩家对游戏的感觉。
不论是武侠RPG的煽情路线,还是日式RPG 的一主线多分支模式,或者是欧美RPG开放式剧情模式,讲故事永远是不变的主题。
角色,即玩家扮演的人物。
这一要素及包容在剧情中,也游离于剧情之外,可以说是相辅相成的两大要素。
《仙剑》之所以感人,优秀的剧情和突出的角色缺一不可。
(2)画面好花还需绿叶配。
好的剧情也需要好的画面,随着动画技术的提高以及玩家口味的挑剔,再好的剧情配上几十年前超烂的画面,也足够让所有人倒胃的了。
(3)战斗系统资格老点的玩家一定还记得《风云》中三步一岗,五步一雷的迷宫,《神雕侠侣》(2D)中冗长的战斗。
战斗系统也决定着玩家对这个游戏的耐心。
(4)升级以及技能、物品疯狂升级才能对付越来越变态的BOSS,合理运用技能和物品,才能更有效的杀敌升级。
本教程的目录:1-1 新建工程本章跟着做预计需要10分钟,学完后能对RMXP有一个感性的初步认识咳,那么安装RMXP的部分我就跳过了,大家应该都知道怎么安装吧- -||| 如果找不到软件,请在《入门指南》找下载地址。
打开RMXP之后,可以在左上角看到一个白纸图标,它代表新建一个RMXP工程,也就是你制作的的游戏。
当然,你也可以通过“文件”菜单里面的“新建工程”来完成这个功能:选择了新建工程之后,就会弹出这样的窗口:其中,“文件夹名”代表你放游戏的那个文件的名称,可以随意自己取一个,方便自己找就行了,不过建议是和你游戏的名字一样比较好。
然后,“标题”代表你这个游戏的名字,比如《勇者大冒险》之类的……= =||| 你也可以自己定义一个比较容易找的工程位置(使用右边那个“...”的按钮来设定路径)。
建好的新工程大概就是这样子:新建工程之后,就会出现这样的界面。
当你在游戏工程里做了设置之后,可以单击左数第三个图标——“保存”你的设定。
当然,在“文件”菜单下选择保存,或按快捷键ctrl+s也可以。
制作游戏过程中,请养成经常保存工程的好习惯。
当你新建了你的工程以后,就可以在设定好的路径下看到你的游戏文件夹了,如下图:其中,画红圈的那个Game.exe文件是你的游戏执行程序,只要打开它就可以直接进行游戏。
而蓝圈的那个是你的工程文件,当你需要编辑这个游戏工程的时候,就打开这个。
不过,你不需要每次都通过点击Game.exe文件测试你做好的游戏,因为RMXP自带游戏测试功能——你只要按图标面板上最右边那个绿色三角形就可以测试游戏(快捷键F12)。
(在测试游戏的时候,无法编辑工程。
但是如果是直接点击Game.exe进行测试就可以。
)新建完工程,测试游戏的时候,你会发现角色在一片小小的空空的草地上晃来晃去,什么都没有发生-。
-虽然按下ESC可以调出菜单,但是也仅此而已……不用着急,因为这只是个开始而已。
接下来我会教大家怎么绘制比较基本的地图,然后通过数据库、事件等,将你们的第一个游戏丰满起来,成为一个真正的游戏。
RPG地图制作教程教你如何做自己的RPG-----制图教学说到魔兽争霸3大家肯定不会陌生,那么各位在玩过特色各异的地图以后有没有想过自己动手做一张地图?摇头拒绝的家伙们听我把话说完,其实做一张地图并不是各位想象的那么困难。
下面我将会简单介绍一下集合了几种常见功能的地图的制作方法,有兴趣的朋友不妨跟着做做。
这次要做的是一个3C中的人物选择功能,也就是当小精灵进入能量圆的时候选择对应的英雄,这是一个3C最普通的选人功能。
那么动手了。
首先找到地图编辑器,编辑器位于魔兽目录下,名为WorldEditor.exe(世界编辑器),双击打开。
第一次使用地图编辑器,系统会自动为我们创建一张64*64大小,环境为罗丹仑的夏天的新地图。
如果想要手动创建新地图,可以通过点击菜单栏的文件- 新地图/File - New Map来创建。
如果想要关闭在打开编辑器的同时创建新地图的功能,可以同过选择文件- 参数设置- 常规- 打开时创建新地图/File - Preferences - General - Create a new map on start_up,将前面的勾去掉来实现。
地图创建完毕以后看见的就是这个地图编辑器的组成了,按2下G关闭坐标格的显示。
在制作上面提到的功能以前,让我们先做点准备工作。
首先既然是选择英雄,那么英雄自然是必不可少的,按U打开单位编辑面板,在这里可以选择我们所希望的单位放置到地图上,我选择了恶魔猎人(Demon Hunter),血巫师(Blood Mage)和巫妖王(Lich King),当然各位如果看上其他英雄请随意,这并不会影响后面的制作。
顺便说说在单位面板中切换种族的方法是在第三行左边的那个扩展菜单里面选择希望的种族,由于选择英雄的时候所看见的英雄是不被我们控制的,必须选择了以后才能控制,因此一般的做法是将英雄更改为中立单位,更改的方法是双击放置在地图上的英雄,选择常规- 玩家- 中立无敌意/General - Player - Neutral Passive。
ARPG制作教程BY火尼玛暴走游戏制作室出品盗版必究制作工具:RPG制作大师VX教程:一.基础设定首先打开脚本编辑器新建2个用户名分别为ARPG 和ARPG2 的脚本脚本内容见底层二.敌人设定打开数据库新建一个敌人见下图然后在地图上选择一个怪物行走图注释三样信息Enemy1(数字为敌人ID 比如说要数据库里的第一个敌人就1 第二个敌人就2)Die 1(必须)Follow(如果想让怪物跟猪脚就注释不要省略这条)如下图OK 这样就简单的设置好一个敌人了在事件编辑页上复制粘贴看可以一次性设置多个怪三按键和技能设定默认按键为A攻击S技能按键最好别改可能引发脚本错误S发动的技能怎么改呢?可在脚本里设置技能编号脚本盲?不要紧脚本默认S=10号技能更改10号技能就行了四脚本ARPG#===================================# Vlad ABS#===================================#--------------------------------------------------------------# Credits to Vlad#--------------------------------------------------------------# 創造一個敵人(事件),在事件中加上這些註釋:# Enemy ID - 在數據庫中敵人的ID# Die X - X為1 / 2 ( 1:死後删除敵人2:不死之身)# Follow - 設定是否跟隨敵人#--------------------------------------------------------------# 自定義項目#--------------------------------------------------------------#--------------------------------------------------------------# 武器攻撃鍵, 不要改變[正常對應鍵: A]Attack_Button = Input::X#--------------------------------------------------------------# 技能攻撃鍵, 不要改變[正常對應鍵: S] <--也是技能畫面的技能記憶鍵Skill_Button = {Input::Y => 10}#--------------------------------------------------------------# 升級動畫ID (對應數據庫) :LevelUp_Ani = 40#--------------------------------------------------------------# Attack Animation, copy Enemy_atk_ani[2] = 13# change the 2 to the ID of the enemy, and the 13 to the ID of the animation.# Example: Enemy_atk_ani[25] = 24Enemy_atk_ani = {}Enemy_atk_ani[2] = 8#--------------------------------------------------------------#--------------------------------------------------------------# Game Character#--------------------------------------------------------------class Game_Characterattr_accessor :hpattr_accessor :mpattr_accessor :damageattr_accessor :criticalattr_accessor :wait_ataqueattr_accessor :diealias vlad_abs_gchar_initialize initializedef initialize@hp = 0@mp = 0@die = 0$skill_for_use = 0@wait_ataque = 0@damage = nil@critical = falsevlad_abs_gchar_initializeenddef recebe_atk(attacker)attacker_status = (attacker.is_a?(Game_Event) ? attacker.enemy_status : $game_actors[1]) receptor_status = (self.is_a?(Game_Event) ? self.enemy_status : $game_actors[1])self.damage = attacker_status.atk - receptor_status.defself.damage *= attacker_status.elements_max_rate(attacker_status.element_set)self.damage /= 100self.damage = 0 if self.damage < 0self.critical = (rand(100) < 4)self.damage *= 2 if self.criticalif self.is_a?(Game_Player)$game_actors[1].hp -= self.damageif $game_actors[1].hp <= 0$scene = Scene_Gameover.newendelsif self.is_a?(Game_Event)self.hp -= self.damageif self.hp <= 0self.animation_id = 88$game_actors[1].gain_exp(enemy_status.exp, 1)if @die == 1self.eraseelsif @die == 2key = [$game_map.map_id, self.id, "A"]$game_self_switches[key] = trueendrefreshendendenddef recebe_skl(attacker)for key in Skill_Button.keyssklid = Skill_Button[key]attacker_status = (attacker.is_a?(Game_Event) ? attacker.enemy_status : $game_actors[1]) receptor_status = (self.is_a?(Game_Event) ? self.enemy_status : $game_actors[1])self.damage = $data_skills[sklid].atk_f - receptor_status.defself.damage *= attacker_status.elements_max_rate(attacker_status.element_set) self.damage /= 100self.damage = 0 if self.damage < 0self.critical = (rand(100) < 4)self.damage *= 2 if self.criticalattacker_status.mp -= $data_skills[sklid].mp_costif self.is_a?(Game_Player)$game_actors[1].hp -= self.damage$scene = Scene_Gameover.new if $game_actors[1].hp <= 0elsif self.is_a?(Game_Event)self.hp -= self.damageif self.hp <= 0$game_actors[1].gain_exp(enemy_status.exp, 1)if @die == 1self.eraseelsif @die == 2key = [$game_map.map_id, self.id, "A"]$game_self_switches[key] = trueendrefreshendendendenddef follow_hero(dx, dy)sx = @x - dxsy = @y - dyif sx == 0 and sy == 0returnendabs_sx = sx.absabs_sy = sy.absif abs_sx == 0sy > 0 ? move_up : move_downif not moving? and sx != 0sx > 0 ? move_left : move_rightendreturnelsif abs_sy == 0sx > 0 ? move_left : move_rightif not moving? and sy != 0sy > 0 ? move_up : move_downendreturnif abs_sx == abs_syrand(2) == 0 ? abs_sx += 1 : abs_sy += 1endif abs_sx > abs_sysx > 0 ? move_left : move_rightif not moving? and sy != 0sy > 0 ? move_up : move_downendelsesy > 0 ? move_up : move_downif not moving? and sx != 0sx > 0 ? move_left : move_rightendendenddef raio(dx, dy)ax = (@x - dx) ** 2ay = (@y - dy) ** 2return Math.sqrt(ax + ay)endend#--------------------------------------------------------------# Game Event#--------------------------------------------------------------class Game_Event < Game_Characterattr_reader :inimigoattr_reader :enemy_statusalias vlad_abs_gevent_initialize initializealias vlad_abs_gevent_update updatealias vlad_abs_gevent_refresh refreshdef initialize(map_id, event)@inimigo = false@automove = falsevlad_abs_gevent_initialize(map_id, event)enddef check_com(comentario)return false if @list.nil? or @list.size <= 0for item in @listif item.code == 108 or item.code == 408if item.parameters[0].downcase.include?(comentario.downcase)return trueendendenddef check_comment(comentario)com = comentario.downcasereturn 0 if @list.nil? or @list.size <= 0for item in @listif item.code == 108 or item.code == 408if item.parameters[0].downcase =~ /#{com}[ ]?(\d+)?/return $1.to_iendendendreturn 0enddef updatevlad_abs_gevent_updateif @inimigonew_x = (@x + (@direction == 4 ? -1 : @direction == 6 ? 1 : 0)) new_y = (@y + (@direction == 8 ? -1 : @direction == 2 ? 1 : 0)) if self.wait_ataque > 0self.wait_ataque -= 1elsif $game_player.x == new_x and $game_player.y == new_y $game_player.recebe_atk(self)$game_player.animation_id = self.enemy_atk_animation_id$game_player.jump(0,0)self.wait_ataque = 60endendif @automoveunless moving?self.follow_hero($game_player.x, $game_player.y)endendenddef refreshvlad_abs_gevent_refresh@inimigo = false@enemy_id = check_comment("Enemy")@automove = true if check_com("Follow") == true@die = check_comment("Die")if @enemy_id > 0@inimigo = true@enemy_status = Game_Enemy.new(@enemy_id, @enemy_id)self.hp = @enemy_status.maxhpself.mp = @enemy_status.maxmpendenddef enemy_atk_animation_idif Enemy_atk_ani[@enemy_id]return (@enemy_status.nil? ? 0 : Enemy_atk_ani[@enemy_id])elsereturn (@enemy_status.nil? ? 0 : 1)endenddef Enemy_atk_anireturn Enemy_atk_aniendend#--------------------------------------------------------------# Game Player#--------------------------------------------------------------class Game_Player < Game_Characteralias vlad_abs_gplayer_update updatealias vlad_abs_gplayer_refresh refreshdef updatevlad_abs_gplayer_updateif self.wait_ataque > 0self.wait_ataque -= 1enddef refreshvlad_abs_gplayer_refreshself.hp = $game_actors[1].hpself.mp = $game_actors[1].mpendif Input.trigger?(Attack_Button) and self.wait_ataque <= 0new_x = (@x + ($game_player.direction == 4 ? -1 : $game_player.direction == 6 ? 1 : 0)) new_y = (@y + ($game_player.direction == 8 ? -1 : $game_player.direction == 2 ? 1 : 0)) for event in $game_map.events.valuesif event.inimigoif event.x == new_x and event.y == new_yevent.recebe_atk(self)event.animation_id = self.player_atk_animation_idevent.jump(0,0)self.wait_ataque = 30breakendendendendfor key in Skill_Button.keysif Input.trigger?(key) and Skill_Button[key] != nil and Skill_Button[key] != 0 and $game_actors[1].mp >= $data_skills[Skill_Button[key]].mp_cost and self.wait_ataque <= 0 new_x = (@x + ($game_player.direction == 4 ? -1 : $game_player.direction == 6 ? 1 : 0)) new_y = (@y + ($game_player.direction == 8 ? -1 : $game_player.direction == 2 ? 1 : 0)) for event in $game_map.events.valuesif event.inimigoif event.x == new_x and event.y == new_yevent.recebe_skl(self)event.animation_id = self.player_skl_animation_idevent.jump(0,0)self.wait_ataque = 60breakendendendendenddef player_atk_animation_idreturn ($game_actors[1].nil? ? 0 : $game_actors[1].atk_animation_id)enddef player_skl_animation_idfor key in Skill_Button.keyssklid = Skill_Button[key]return ($game_actors[1].nil? ? 0 : $data_skills[sklid].animation_id)endenddef Attack_Buttonreturn Attack_Buttonenddef Skill_Buttonreturn Skill_Buttonendendend#--------------------------------------------------------------# Game Actor#--------------------------------------------------------------class Game_Actoralias vlad_abs_change_exp change_expdef change_exp(exp, show)last_level = @levellast_skills = skills@exp = [[exp, 9999999].min, 0].maxwhile @exp >= @exp_list[@level+1] and @exp_list[@level+1] > 0level_upendwhile @exp < @exp_list[@level]level_downend@hp = [@hp, maxhp].min@mp = [@mp, maxmp].minif show and @level > last_levelshow_level_upendvlad_abs_change_exp(exp,show)enddef show_level_up$game_player.animation_id = LevelUp_Ani$game_actors[1].hp = $game_actors[1].maxhp$game_actors[1].mp = $game_actors[1].maxmpenddef LevelUp_Anireturn LevelUp_Aniendend#--------------------------------------------------------------# Sprite Base#--------------------------------------------------------------class Sprite_Basealias animation animation_set_spritesdef animation_set_sprites(frame)cell_data = frame.cell_datafor i in 0..15sprite = @animation_sprites[i]next if sprite == nilpattern = cell_data[i, 0]if pattern == nil or pattern == -1sprite.visible = falsenextendif pattern < 100sprite.bitmap = @animation_bitmap1elsesprite.bitmap = @animation_bitmap2endsprite.visible = truesprite.src_rect.set(pattern % 5 * 192,pattern % 100 / 5 * 192, 192, 192)if @animation_mirrorsprite.x = @animation_ox - cell_data[i, 1] / 2sprite.y = @animation_oy - cell_data[i, 2] / 2sprite.angle = (360 - cell_data[i, 4])sprite.mirror = (cell_data[i, 5] == 0)elsesprite.x = @animation_ox + cell_data[i, 1] / 2sprite.y = @animation_oy + cell_data[i, 2] / 2sprite.angle = cell_data[i, 4]sprite.mirror = (cell_data[i, 5] == 1)endsprite.z = self.z + 300sprite.ox = 96sprite.oy = 96sprite.zoom_x = cell_data[i, 3] / 200.0sprite.zoom_y = cell_data[i, 3] / 200.0sprite.opacity = cell_data[i, 6] * self.opacity / 255.0sprite.blend_type = cell_data[i, 7]endendend#--------------------------------------------------------------# Sprite Character#-------------------------------------------------------------- class Sprite_Character < Sprite_Basealias vlad_abs_spchar_update updatedef initialize(viewport, character = nil)super(viewport)@character = character@balloon_duration = 0@_damage_duration = 0updateenddef updatesuperif @_damage_duration > 0@_damage_duration -=1@_damage_sprite.x = self.xif @_damage_duration <= 0dispose_damageendendif @character != nil and @character.damage != nildamage(@character.damage, @character.critical)@character.damage = nil@character.critical = falseendvlad_abs_spchar_updateenddef damage(value, critical)dispose_damageif value.is_a?(Numeric)damage_string = value.abs.to_selsedamage_string = value.to_sendbitmap = Bitmap.new(160, 48) = "Georgia"bitmap.font.size = 20bitmap.font.italic = trueif value.is_a?(Numeric) and value <= 0bitmap.font.color.set(0, 0, 0)bitmap.draw_text(1, 13, 160, 36, "Fallo", 1)bitmap.font.color.set(255, 245, 155)bitmap.draw_text(0, 12, 160, 36, "Fallo", 1)elsebitmap.font.color.set(0, 0, 0)bitmap.draw_text(1, 13, 160, 36, damage_string, 1)bitmap.font.color.set(255, 255, 255)bitmap.draw_text(0, 12, 160, 36, damage_string, 1)endif criticalbitmap.font.color.set(0, 0, 0)bitmap.draw_text(1, 6, 160, 20, "Critical", 1)bitmap.font.color.set(255, 245, 155)bitmap.draw_text(0, 5, 160, 20, "Critical", 1)end@_damage_sprite = ::Sprite.new(self.viewport)@_damage_sprite.bitmap = bitmap@_damage_sprite.ox = 80@_damage_sprite.oy = 20@_damage_sprite.x = self.x@_damage_sprite.y = self.y - self.oy / 2 - 40@_damage_sprite.z += 99999@_damage_duration = 30enddef show_text(string, size=16, color=0)dispose_damagedamage_string = stringif string.is_a?(Array)array = trueelsearray = falseendbitmap = Bitmap.new(160, 48) = "Georgia"bitmap.font.size = sizebitmap.font.italic = trueif arrayfor i in 0..string.sizenext if damage_string[i] == nilbitmap.font.color.set(96, 96-20, 0) if color == 0bitmap.font.color.set(0, 0, 0) if color != 0bitmap.draw_text(-1, (12+(16*i)-1)-16, 160, 36, damage_string[i], 1)bitmap.draw_text(+1, (12+(16*i)-1)-16, 160, 36, damage_string[i], 1)bitmap.draw_text(-1, (12+(16*i)+1)-16, 160, 36, damage_string[i], 1)bitmap.draw_text(+1, (12+(16*i)+1)-16, 160, 36, damage_string[i], 1) bitmap.font.color.set(255, 245, 155) if color == 0bitmap.font.color.set(144, 199, 150) if color == 1bitmap.font.color.set(197, 147, 190)if color == 2bitmap.font.color.set(138, 204, 198)if color == 3bitmap.draw_text(0, (12+(16*i))-16, 160, 36, damage_string[i], 1)endelsebitmap.font.color.set(96, 96-20, 0) if color == 0bitmap.font.color.set(0, 0, 0) if color != 0bitmap.draw_text(-1, 12-1, 160, 36, damage_string, 1)bitmap.draw_text(+1, 12-1, 160, 36, damage_string, 1)bitmap.draw_text(-1, 12+1, 160, 36, damage_string, 1)bitmap.draw_text(+1, 12+1, 160, 36, damage_string, 1)bitmap.font.color.set(255, 245, 155) if color == 0bitmap.font.color.set(144, 199, 150) if color == 1bitmap.font.color.set(197, 147, 190)if color == 2bitmap.font.color.set(138, 204, 198)if color == 3bitmap.draw_text(0, 12, 160, 36, damage_string, 1)end@_damage_sprite = ::Sprite.new(self.viewport)@_damage_sprite.bitmap = bitmap@_damage_sprite.ox = 80@_damage_sprite.oy = 20@_damage_sprite.x = self.x@_damage_sprite.y = self.y - self.oy / 2@_damage_sprite.z = 3000@_damage_duration = 30enddef dispose_damageif @_damage_sprite != nil@_damage_sprite.dispose@_damage_sprite = nilendendend#--------------------------------------------------------------# Window Skill#--------------------------------------------------------------class Scene_Skillalias vlad_abs_sskill_initialize initializealias vlad_abs_sskill_update updatedef initialize(actor_index = 0, equip_index = 0)@memory = Window_Command.new(150, ["按S键锁定技能"]) @memory.active = false@memory.visible = false@memory.x = (544 - @memory.width) / 2@memory.y = (416 - @memory.height) / 2@memory.z = 1500vlad_abs_sskill_initializeenddef updateupdate_skill@memory.update if @memory.activereturn update_memory if @memory.activevlad_abs_sskill_updateenddef update_skillfor key in Skill_Button.keysif Input.trigger?(key)Sound.play_decisionSkill_Button[key] = @skill_window.skill.id@memory.active = @memory.visible = true@skill_window.active = falseendendenddef update_memoryif Input.trigger?(Input::C)Sound.play_decision@memory.active = @memory.visible = false@skill_window.active = trueendenddef Skill_Buttonreturn Skill_Buttonendend#--------------------------------------------------------------# FINISH#--------------------------------------------------------------ARPG2脚本内容如下#==================================================================== =========# Window Hud#==================================================================== =========class Window_Hud < Window_Basedef initializesuper(0,0,128,96)self.opacity = 0# self.visible = falserefreshenddef refreshself.contents.clearactor = $game_actors[1]draw_actor_hp(actor, 0, 0, 96)draw_actor_mp(actor, 0, 32, 96)enddef update# self.visible = true if $game_switches[1] == true # 1=interruptor que activa y desactiva el HUDrefreshendendclass Scene_Mapalias hud_main mainalias hud_update updatealias hud_terminate terminatedef main@hud = Window_Hud.newhud_mainenddef update@hud.updatehud_updateenddef terminate@hud.disposeendend。
RPG全称为:Role Playing Game(角色扮演游戏)RPG游戏《仙剑奇侠传》(20张) RPG是电脑游戏的发展历史中形成的第一大阵营。
作为具有一定的情节、描述人物成长过程、表现事件始末的一种游戏,决定了角色扮演类游戏必须提供一个广阔的虚拟空间来供游戏者旅行、冒险和生活。
虽然这个空间是虚拟的,但它也有其一定的生存环境和规则。
由于该类的大多游戏较别类游戏更强调文字的表现,使角色扮演游戏能够更为贴切地表达人类的情感。
而整个游戏的流程由战斗,进行贸易,解开谜题和繁琐的迷宫串在一起。
在很大程度上满足了游戏者潜在的对拥有多姿多彩的不凡生活的渴望。
因为RPG游戏相对于其他类型的游戏,技术要求最低,电脑配置要求也最低,因此开发起来相对容易很多,RPG游戏在电子游戏中也是历史最为悠久、数量最为庞大的一种。
在电子游戏发展史中,也留下了许许多多的经典作品,像家用电视游戏机上的《最终幻想》系列,PC 机上《魔法门》系列,还有中文电脑RPG游戏的经典《仙剑奇侠传》、《轩辕剑》、《幽城幻剑录》以及《幻想三国志》系列、《新绝代双骄》系列等。
游戏《上古卷轴》截图(20张) 相对于其他类型游戏,此类游戏更重要的核心是世界观表现及角色代入感体验(世界观依托于具有故事RPG游戏《上古卷轴》(11张)性的文字设定,包括场景设定角色设定等诸多前期因素,所以此类游戏的前期筹备工作对于其他类型游戏来说是一个更为浩大的工程,对于RPG本身来说也是最为重要的工程),在很大程度上满足了游戏者潜在的对拥有多姿多彩的不凡生活的渴望。
RPG的前身是交互式小说,与现在的冒险类游戏(简称AVG或ADV)同源,RPG游戏在电子游戏中也是历史最为悠久、数量最为庞大的一种。
世界上第一款电子平台的RPG是1981年的游戏《巫术》。
在电子游戏发展史中,也留下了许多经典作品,比如家用游戏机上的《最终幻想》、《勇者斗恶龙》(电子游戏中的两大RPG龙头,都属于SQUARE-ENIX公司,某种程度上左右着次世代游戏机战争)、《阿月历险记》、《异度传说》、《口袋妖怪》SEGA的《梦幻之星》系列、RPG游戏《暗黑破坏神》截图(11张)《光明》系列;NAMCO的《传说》系列(包含《幻想传说》、《宿命传说》、《深渊传说》、《永恒传说》、《重生传说》、《薄暮传说》、《世界传说》、《心灵传说》、《风雨传说》);Falcom的《英雄传说》系列、《伊苏》系列、《双星物语》系列;PC 上的《暗黑破坏神》、《无冬之夜》、《上古卷轴》、《博德之门》、《魔法门》,《神鬼寓言》还有中文电脑PC平台中的RPG经典——《仙剑奇侠传》以及《轩辕剑》、《剑侠情缘》、《幽城幻剑录》、《幻想三国志》、《新绝代双骄》、《刀剑封魔录》、《秦殇》等。
2.2 分类判断分类判断依据:成长要素为判断游戏类型为角色扮演的最主要依据,包括角色的等级以及队友、宠物、使魔等一系列附属角色的成长,但不包括武器的成长(因为武器既作为大部分动作游戏的基本要素,也与角色本身的成长以及修为无关)。
角色扮演游戏作为极有影响力的游戏类型,在游戏分类中也处于较为优先位置。
例如,通常情况下,只要存在人物成长的要素,即便是以其他方式为主要操控方式的游戏也往往被分入角色扮演的类型。
例如动作角色扮演游戏中的《暗黑破坏神》系列、《泰坦之旅》;策略角色扮演的《火焰纹章》系列、《FFT》。
主要游戏类型:游戏类型英文缩写简介动作游戏 ACT(Action Game)玩家控制游戏人物用各种武器消灭敌人以过关的游戏,不追求故事情节,如《超级玛丽》、《星之卡比》、《波斯王子》等等。
冒险游戏 AVG(Adventure Game ) AVG的特色是故事情节往往是以完成一个任务或解开某些迷题的形式出现而且在游戏过程中强调谜题的重要性。
动作类AVG如《生化危机》系列、《古墓丽影》系列等;解迷类AVG代表是《神秘岛》系列。
格斗游戏 FTG(Fighting Game)由玩家操纵各种角色与电脑或另一玩家所控制的角色进行格斗的游戏。
按呈画技术可再分为2D和3D两种,2D格斗游戏有著名的《街头霸王》系列、《拳皇》系列等;3D格斗游戏如《铁拳》等。
角色扮演游戏 RPG(Role playing Game)由玩家扮演游戏中的一个或数个角色,有完整的故事情节的游戏。
与冒险类游戏区分很简单,RPG游戏更强调的是剧情发展和个人体验,如《最终幻想》、《仙剑奇侠传》、《暗黑破坏神》等。
即时战略游戏 RTS(Real Time Strategy)是战略游戏的一种,主要以电脑游戏的形式存在。
游戏是即时进行的,而不是采用传统电子游戏及棋盘战略游戏中的回合制。
代表作有《魔兽争霸》系列、《帝国时代》系列、《星际争霸》等。
策略战棋游戏 SLG(SimuLation Game)玩家运用策略与电脑或其它玩家较量,以取得各种形式胜利的游戏。
代表作为《英雄无敌》系列、《三国志》系列、《樱花大战》系列,《天使帝国》系列等。
模拟经营游戏 SIM(Simulation Game)模拟经营游戏和策略战棋游戏英文表示一样,都为Simulation Game,代表作品为《大富翁》系列、《模拟人生》系列、《模拟城市》、《过山车大亨》、《主题公园》、《足球经理》等。
养成游戏 EDU (EducationGame)顾名思义,就是玩家模拟培养的游戏,如《明星志愿》系列、《美少女梦工厂》系列、《凌波丽育成计划》等等。
体育游戏 SPT(Sports Game)模拟各类竞技体育运动的游戏,花样繁多,如《FIFA》系列、《NBA Live》系列、《实况足球》系列、《VR网球》系列等。
射击游戏 STG(Shoting Game)一般指的是卷轴式射击游戏,《雷电》、《鲛鲛鲛》、《空牙》、《沙罗曼蛇》系列、《战区88》等。
竞速游戏 RAC(Racing Game)在电脑上模拟各类赛车运动的游戏,通常是在比赛场景下进行,代表作有《极品飞车》、《山脊赛车》、《摩托英豪》等。
音乐游戏 MUG(Music Game)培养玩家音乐敏感性,增强音乐感知的游戏。
伴随美妙的音乐,有的要求玩家翩翩起舞,有的要求玩家手指体操,这类游戏的代表作品有《复员热舞革命》系列,《太鼓达人》系列,《DJ》系列。
恋爱游戏 LVG(Love Game)玩家回到初恋的年代,回味感人的点点滴滴,模拟恋爱的游戏。
代表作有日本的《心跳的回忆》系列、《思君》,中国的《青涩宝贝》等。
益智游戏 PUZ (Puzzle Game) PUZ游戏多需要玩家对游戏规则进行思考,判断。
系统表现相当多样化,主要依游戏规则制定。
由于对游戏操作不需要太高要求,代表作品为《俄罗斯方块》系列,《泡泡龙》系列等。
卡片游戏 CAG(Card Game)玩家操纵角色通过卡片战斗模式来进行的游戏。
丰富的卡片种类使得游戏富于多变化性,给玩家无限的乐趣,代表作有著名的《信长之野望》系列、《游戏王》系列。
第一人称射击游戏 FPS(First Person Shooting)以第一人称视角使用各种武器,主要是枪械进行射击,消灭敌人的游戏。
例如我们玩的CS、Quake系列等等游戏。
2.3 系统分类按照游戏系统分类,大致可分为:(1)传统角色扮演游戏RPG——Role Playing Game 此类游戏基本沿袭早期RPG系统,操作方式大多为RPG 回合制或半即时制,换句话说,这个类型最重要的特征是非实时指令,由最终幻想系列首创的带有ATB系统的RPG由于近年被广泛应用,一般也归为传统RPG类型。
因为着重突出世界观表现、剧情体验及角色性格刻画,且游戏系统本身对操作要求不像动作游戏或者格斗游戏那么高,所以此类型是受到最广大玩家欢迎的类型(特指动作苦手的非核心玩家),而发展至今,这类游戏中的佼佼者吸引人的不再只是引人入胜的剧情。
因为硬件机能的提升,游戏中的场景、角色越来越精致,游戏中技能的效果诸类也较早期更为华丽.....正统RPG画面单调的时代已经过去(其他类型其实也都一样)代表作品:NINTENDO《口袋妖怪》系列SQUARE-ENIX《最终幻想》系列、《勇者斗恶龙》系列、《格兰蒂亚》系列SQUARE-ENIX&NBGI《异度》系列(包括《XENOGEARS》以及《XENOSAGA》系列)NBGI《hack》系列SCE《荒野兵器》系列ATLUS《女神异闻录》系列FALCOM《英雄传说》系列LEVEL-5《银河游侠》(LEVEL-5为《勇者斗恶龙8》外包开发商)DATA-EAST《重装机兵》系列CAPCOM《吞食天地》FC版TECMO《怪物农场》系列EA《指环王:第三世纪》《仙剑》《轩辕剑》系列(2)策略角色扮演游戏SRPG——Simulation Role Personate Game 此类游戏又被形象地称为战棋类游戏,通常为泛回合制或半即时制,以剧情为核心的特点承袭自传统RPG,而在游戏系统上,除了传统RPG原有的要素外,更重视有限战斗场景中玩家对所操控团队中各个角色行动的配合以及对所操控的团队整体作战策略上的把握,且需要考虑场景地形对团队作战以及角色技能施放的影响,此要素吸收自SLG(Simulation Game,策略游戏),算是两种类型系统上的融合代表作品:SQUARE-ENIX《最终幻想战略版》BANPRESTO《机战》系列BANPRESTO 《召唤之夜》系列NINTENDO《火炎纹章》系列SCE《妖精战士(ARC THE LAD)》系列日本一《魔界战记》系列SEGA《战场的女武神》系列、《光明》系列早期作品Enterbrain《泪之指轮传说》系列IDEA FACTORY / NEVER LAND《鬼魂力量》《新天魔界》《混沌战争》等系列ATLUS《星神》(3)动作角色扮演游戏ARPG——Action Role Playing Game 此类型在保留传统RPG游戏的基本要素上,系统更重视指令的实时性,以及对所演绎角色的动作体验(这是从早期动作游戏中吸取的要素),所以在战斗方面更加紧凑刺激,操作方面更考验玩家的实时反应代表作品:BLIZZARD《暗黑破坏神》系列SQUARE-ENIX《王国之心》系列、《圣剑传说》系列NAMCO 《传说》系列FALCOM《双星物语》系列、《伊苏》系列SEGA《梦幻之星》系列、《光明》系列自《光明力量》、《光明之泪》后的两个分支。
3A《星之海洋》系列、《北欧女神》系列(注*3A作为日本一个特立独行的RPG游戏制作公司,是游戏类型融合的实干派先驱,其作品无论在美工水准、系统设定和游戏耐玩程度上都不亚于现在被极力吹捧的暴雪,该公司现已被SE收购为子公司,但与暴雪一样作为独立工作室,虽然偶尔协助参与制作其他分部作品,但本部工作方式及企划方案不受总部干预)。