1、基于RPG游戏的考试系统设计与实现基于RPG游戏的考试系统设计与实现摘 要:游戏应用于教学被许多专家学者提出来,并有很大的应用前景。考试是教学评价的重要组成部分,由于游戏的闯关和考试有一些相似性,故笔者将RPG游戏尝试应用于考试。以中学地理学科为着眼点,将中学生地理课的中国的地形这一章的学习内容用RPG游戏来呈现, 系统结合游戏剧本,游戏脚本及考试评价的设计,搭建了游戏框架,给出本系统的实现方案。 关键词:RPG游戏;游戏引擎;地图编辑器;场景 0 引言 电脑游戏开发是故事、艺术、音乐、声音效果、动画及程序设计技术的有机结合,以产生一种动态的、具有很强交互性的电子娱乐形式。本文采用Visual
2、 C + 6.0和DirectX 8.0 SDK开发环境,并结合GAF库,设计并实现了一个小的2D角色扮演游戏(RPG)。在游戏中融入考试内容,达到寓教于乐的目的。 1 系统技术实现的前期准备 1.1 RPG游戏设计概述 RPG游戏即为角色扮演游戏,它其实是一种同游戏玩家自己扮演角色的游戏。可以用一个三维坐标系统来定位RPG游戏,所有类型的RPG游戏部位于这个坐标系所界定的三维空间中。如图1所示。 对于一款RPG游戏的设计要包括以下一些要素:场景、角色、道具、事件、对白、音效与音乐、界面、规则、命名。对应于各个要素,一个完整的角色扮演游戏的制作从大的分工来说可以分为:策划、程序设计、美工、音乐
3、制作以及项目管理,后期的测试等。 1.2 游戏剧本设计 角色扮演游戏就像小说一样,缺少不了剧情,玩家跟着剧情的进展来领略游戏的风采。剧本的设计可以从剧情的框架开始着手。列出准备出场的人物名单,列出准备构成游戏剧情的几个重要事件及需要涉及到的地图,游戏有了一个简单的故事框架。接下来用上面的素材,把脑子里面还比较单薄的主线故事点和人物窜接起来,并把出场人物,场景需求做成文档。然后进入一个很重要的中间步骤游戏剧本制作。 笔者为游戏构思的剧本如下:你是一名中学生,在一天的地理课堂上,你正在神游太虚,老师的一句“下周地理课考试”将你从梦境拉回现实。你沮丧的走在放学的路上,正在发愁,你突然遇到了陌生超人,
4、他给了你一张神秘地图,地图背后的说明文字告诉你,你只要站在地图上,回答所有的问题,闯过所有的关口,就会学到很多知识,得到很多乐趣并能顺利通过考试。 学习者在路上走,每次遇到人数就与其对话,有的NPC会对你的路线有所提示,就是给你一些信息,有的就是必须要闯的关,每次学习者遇到这样的NPC,就会进入打斗场景,即问题回答场景,答对了会增加生命值(分数),答错了会减少生命值,答对了高兴拍手,答错了流汗沮丧,然后回答下一题,NPC出题完毕,会根据你的答题情况说出相应的话,比如,你全答对了:好样的,我真佩服你。只答对一半:加油呀,同志应须努力。然后下一场景是又回到路上,赶路。 1.3 游戏脚本设计 游戏引
5、擎并不关心游戏内容具体是什么,它只是负责将描述游戏内容的数据读取出来,然后“扔”到某个地方就行了,所以需要以某种方式将游戏内容交给外部文件来加以处理。这样一来,就只需要编写一段短小而又紧凑的代码并在某一段时间将所有这些物体描述由硬盘上加载进来就行了,这代码可称之为脚本。由于RPG游戏更适合使用脚本,脚本的设计是本游戏不可缺少的部分。 2 系统设计解决方案及实现 2.1 系统总体设计 本游戏包括用户登录、游戏模块、关卡选择、游戏帮助等部分,学习者登录游戏后可通过开始菜单主界面选择进入相应部分。游戏整体结构如图2所示。 用户登陆:为了使用户能各自不受干扰完成自己的游戏和便于考试后查阅自己在游戏中的
6、考试结果,用户要在登陆游戏前输入一个属于自己的账号和密码。 关卡选择:考试游戏中游戏者可以对关卡进行相应的保存,学习者可随时根据自己的学习进度,选择将要完成关卡。 游戏帮助:为学习者提供游戏操作帮助,该模块应继续扩展功能,实现为考试者提供考试帮助,如考试者在答题过程中遇到困难,可以寻求帮助,但相应的生命值改变会有所减少。 游戏模块:玩家点击开始游戏按钮即可进入游戏模式,系统初始化所有资源后,进入游戏主循环,不断监听玩家输入和更新游戏界面,构造了一个虚拟的游戏世界。考试者在这个虚拟世界中不断探索,回答出相应的考试题目来完成一个个任务,直到通过关卡进入下一关。 2.2 主要功能模块及实现 游戏引擎
7、要提供游戏开发所需要的大部分接口。它最基本的模块由以下三个:消息处理系统、场景显示(及行走)系统、进程系统,除此之外还有脚本处理模块和考试模块。2.2.1 消息处理系统 消息处理系统是游戏的核心部分。游戏用到的消息处理系统先等待消息,不断检测游戏中要处理的消息,然后根据收到的消息转到相应的函数进行处理。比如:主角碰到敌人后,我们就让程序产生“打斗消息”,消息处理系统收到这个消息后就会马上转到打斗模块中去。消息处理的大体框架如下: DWORD Message; /消息变量 WinMain() /进入程序 初始化主窗口; 初始化DirectDraw环境,并调入程序需要的图形、地图数据; while
8、( 1 ) /消息循环 switch( Message ) case 行走消息:行走模块(); case 打斗消息: 打斗模块(); case 事件消息: 事件模块(); 2.2.2 场景显示及行走系统 场景显示系统是RPG要素重要部件之一。它根据一定的次序控制背景、角色、道具、对白等要素添加到场景的顺序,它承担整个游戏框架的场景状态的操作、控制。场景系统可以划分为:背景显示、行走和事件发生三个子模块,分别处理各自的功能。 (1)背景显示 。程序运行后,先读取场景所需要的图块的排列顺序,这个图块用相应的地图编辑器进行处理,按照排列顺序将图像拼成一个完整的场景,图3为地图编辑器中的场景,红色区域
9、为障碍。一般做法是:在内存中开辟一到两个屏幕缓存区,事先把即将显示的图像数据准备在缓存区内,然后一次性把它们传送到真正的屏幕缓冲区内。 游戏用到的图片则事先制作好并存于另外的图形文件中。地图编辑器制作的场景文件仅仅是对应的数据,而不是真正的图片。在游戏中生成场景就是地图编辑的逆过程,编辑器是根据场景生成数据,而游戏则是根据数据生成场景。 (2)行走。要让主角在场景中行走,至少要有上、下、左、右4个行走方向,每个方向4幅图(站立、迈左腿、迈右腿、迈左腿),游戏中要将图片的背景设为透明,这样在画人物的时候就不会覆盖上背景色了,这可以用前景图和屏蔽图来完成,如图4。 图4上半部分是要去背的前景图,下
10、面黑白的是屏蔽图,这样就可以利用贴图函数BitBlt来产生透明效果了,贴图步骤如下:将屏蔽图与背景图做“AND”(Raster值为SRCAND)运算,贴到目的地DC中;将前景色与背景色做“OR”(Raster值为SRCPAINT)运算,贴到目的地DC中。如果要在DirectDraw中实现透明效果只要用SetColorKey()函数将原图片背景色过滤掉就可以了。因为游戏中主角在行走时,我们看到他的位置总是在屏幕上,可以让主角位置不动,而使场景移动,即采用滚屏技术来实现角色在场景上移动。这样角色一直保持在屏幕的正中间,需要做的工作只是根据行走方向和步伐不停变换图片。行走时的障碍物判断也是每一个场景
11、中必定要有的,有一些道具如树木、房屋等是不可跨越的。可以用一个二维数组来对应一个场景,每一个数组值代表场景的一小格。有障碍的地方,该数组的对应值为1,可通过的地方的值为0。 游戏中如果有很多的角色,可以编写相应的角色编辑器,来制作游戏中的角色,要让主角在场景中行走,还是至少要有上、下、左、右4个行走方向,如图5所示,更细腻一些也可以选取8个行走方向,用相应的角色编辑器来进行设定,保存成.rol格式的文件,供场景编辑器来调用。 (3)事件发生。事件发生原理就是把相应事件的序号存储在地图的某些格子中,当主角一踏入这个格子就会触发对应事件。例如:在游戏开始时,主角是在他的家里。他要是想出去的话,就需
12、要执行场景切换这个处理函数。我们假定该事件的编号为001,那么在地图上把家门外路口处的格子值设为001。这样主角走到路口时,编号为001的场景切换函数就会被触发,于是主角便到了下一个场景中。 2.2.3 进程系统 进程系统负责游戏的初始化,包括窗口图标、窗口宽度、窗口高度、窗口标题、窗口风格等的设置。游戏结束时负责释放程序各种资源。进程控制系统也控制游戏主控循环中的状态转换,它同时与消息处理系统和场景显示系统进行消息传递和转化。初始化进程实例代码如下: BOOL CRPGGame:InitInstance() BindWndIcon(IDI_ICON2); /设置窗口图标 BindWndWid
13、th(800); BindWndHeight(600); /设置宽度高度 BindWndClassName(IDS_STR_WNDCLASS); /设置窗口类名 BindWndTitle(IDS_STR_WNDTITLE); /设置窗口标题 BindWndStyle(WS_EX_APPWINDOW,WS_VISIBLE|WS_POPUP|WS_CAPTION|WS_SYSMENU); /设置窗口风格 TESTBOOL_MSGRET(CGAFApp:InitInstance(),GAF程式创建窗口出错,程式终止!); /继承父类函数创建窗口 TESTBOOL_MSGRET(InitDXMembe
14、r(),GAF程式初始化DX成员出错,程式终止!); /初始化DirectX成员 TESTHR_MSGTRW(m_GAFDSound.InitDSound(m_hWnd,FALSE),GAFDSound初始化发生错误!); TESTHR_MSGTRW(m_GAFDMusic.Init(m_hWnd,&m_GAFDSound),GAFDMusic初始化发生错误!); return TRUE; 2.2.4 脚本处理模块 脚本系统允许我们在游戏引擎之外编写代码,然后再将这些代码加载到游戏引擎之中,并对它加以执行,并与游戏进行相互通信。可以像加载图形、声音,甚至早期的物体描述文件一样加载脚本。通常,脚
15、本是按照自定义的语法格式进行编写,在游戏中加载脚本后,由脚本解释系统对脚本解释执行。 2.2.5 考试模块 考试模块是系统中很重要的一个模块,它负责从外部的题库中抽取相应的试题及在游戏者答题后修改游戏者的生命值的功能。在游戏过程中,为摆脱呆板的固定题目方式,提高游戏中地理科目的特色之处,采用了根据地理位置和题目类型从数据库中随机抽取试题的模式。因为笔者所做的系统不大,所以没有利用数据库来存储考试题目,而是利用外部的脚本来存储。 参考文献: 1 坂本千.Visual C + 专业游戏程序设计M.北京:中国铁道出版社,2004(11). 2 严朝军,周其力,张宁.游戏中的程序设计技术J.电脑开发与
16、应用,2000(5). 3 叶展,叶丁.游戏的设计与开发M.北京:人民交通出版社, 2003. 4 张涛,李兴保.教育游戏激励体制浅析J.中国现代教育装备,2005(10). 5 周华杰教育游戏在小学教育中的应用现状及前景的问卷调研J中小学电教, 2006(3). 6 简单的RPG游戏制作教程EB/OL. 7 祝智庭.娱教技术!教育技术的新领地J.中国电化教育,2005(5). 8 荣钦科技.Visual C + 游戏设计M.北京:北京科海电子出版社,2003. 9 坂本千寻. Visual C + 角色扮演游戏程序设计M.北京:中国铁道出版社,2004. 10 肖永亮.Visual C + 游戏编程基础M.北京:电子工业出版社,2006.
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1