跨课程-OOP严肃游戏开发-何文琦、王治珍、刘立
发布时间: 2014-03-27 浏览次数: 84

OOP严肃游戏开发-何文琦、王治珍、刘立.pdf

游戏代码_何文琦 王治珍 刘立.rar

 

1.文献综述

通过阅读和整理相关文献,我们发现目前和编程有关的严肃游戏主要有两类设计。一种是让编程的目标变得有趣味性,也就是让玩家编写一些有趣的东西,具体有三种方式:

Ø  基于graphical languages。典型代表是Alice2

Ø  基于竞技。例如著名的Robocode,是一个竞赛性编程游戏,玩家用java编写机器人,在比赛中与其他机器人互相对抗。

Ø  基于video game编写。EEClone提供了一个平台让玩家可以学习各种设计模式,同时编写video game

另一种是寓教于乐,在玩游戏的同时学习知识,通过游戏的设计让编程的过程变得有趣,吸引人,其中的代表就是Colobot,一个3D的教育性实时战略游戏,融合了互动性、讲故事和编程。该游戏的目标是找到一个人类的殖民星球,在其表面上建立一个基本的基础设施和消除任何会危害这次远征的外星生命形式。游戏的故事发生在地球,月球以及七个虚构的行星。游戏的主要特点是玩家能够使用一种类似于C ++Java的编程语言。该游戏已被波兰国家教育部建议作为辅助教材,用于学习基本算法和面向对象编程。

 

2. 游戏设计

2.1概述

           我们结合web、面向对象和严肃游戏,设计了一款解密型闯关游戏。游戏设计中把面向对象的知识点转换成具象的物件,具体的做法是:物件的外部以图片显示,而内部则以代码的形式呈现,也就是说游戏中出现的物件都会对应一个类,同时会有一段代码来定义这个类。操作时,玩家需要观察代码内容,拖动具体物件,采用正确的拼接方式来组装物件以过关。同时,为了增加游戏的趣味性,我们将游戏背景放置在一个机械世界中,并且安排了一个完整连续的故事情节。

2.2 知识点设计

           游戏设计的难点在于知识点到具体物件的转换,

           oop的知识点如下:创建对象、对象函数、对象组合、继承、抽象类、接口。

           因此我们一共设计了6关的游戏,下面介绍每一关的设计:

(1)创建对象

          这一关玩家需要掌握对象的概念和如何创建一个对象。游戏中玩家需要进入城堡,但是城堡周围有一条护城河,通过阅读入口的代码,玩家发现需要一条船才能过河。游戏布景中会有一个造船的百宝箱,玩家需要选择正确的new语句来创建一个船的对象。在这里,一个类或者说一个对象(在这个游戏里面,类和对象基本可以认为是相同的概念)被具象化为一个物件,例如船。通过这关游戏,玩家能够对对象有一个初步的理解,以及知道如何在java语言中创建一个对象。

(2)访问对象

           在这一关中,玩家需要学会掌握如何调用对象中的方法。游戏中玩家通过护城河后,又遭遇了城墙的阻碍,玩家通过阅读城墙的代码和石碑上的密码,发现需要一把梯子。梯子的代码显示玩家可以调用梯子的增高方法,可以让梯子每次增加一定的长度。玩家选择方法(用按按钮的方式),增长梯子的高度直到可以翻越城墙。玩家通过游戏可以对如何调用对象中的方法有所了解。

(3)对象组合

 

           这一关玩家将会掌握组合的概念。游戏中玩家通过前面的城墙后,遇到了一个护卫,只有使用一把魔法武器才能打败护卫。魔法武器的代码作为一张地图散落在背景中,玩家需要仔细阅读魔法武器的代码,它是由弓、箭和火组合而成,玩家需要找到各个部件按照正确的顺序组合成一把魔法武器。玩家通过拼装魔法武器来了解组合的概念。

(4)继承

           这一关要求玩家运用继承的概念来过关。游戏中玩家进入到一个密室中,需要找到一把钥匙来过关。玩家可以在地上找到一把损坏的原配钥匙,查看钥匙的代码可以发现有一个开门的方法。因此需要玩家继承这把原配钥匙,定义一个钥匙子类,从原配钥匙中继承对应的开门行为(需要选择正确的继承语句),然后用这把钥匙打开门通过关卡。玩家在思考如何制作一把新钥匙的过程中可以了解继承的概念,以及继承带来的好处。

(5)抽象类

           这一关主要要求玩家了解抽象类的概念以及学会简单的运用。玩家进入了宫殿的后花园,需要进入到宫殿。一开始玩家会捡到一个钥匙柄,在这一关当中,我们将钥匙设计为抽象类,之后玩家会通过解谜寻找到三把不同颜色的钥匙,这三把钥匙即继承自之前的钥匙抽象类。玩家理解抽象类概念后只要运用继承的相关知识进一步找到正确钥匙即可过关。在这一关中,我们只要求玩家能够理解抽象类的概念,并不要求玩家能够灵活运用。

(6)接口   

           这一关主要涉及到接口的相关知识,与抽象类要求相同,这一关只要玩家能够理解接口的概念即基本作用即可顺利过关。本关的背景是玩家进入宫殿后来到一条昏暗的走廊,玩家需要在一定时限内修好损坏的发电机打开电门过关。本关提供了“工具”作为接口,接口中提供了一个方法:修理,玩家需要在三个工具——扳手、榔头、螺丝中实现这一接口并且分别修好三个发电机即可打开电门过关。在这一关中,若玩家理解了接口的含义,很容易的就可以在三个工具中实现工具接口,然后过关。同时这一关也与上一关抽象类作为区分,引发玩家思考抽象类和接口的不同之处和共同点。  

 

3. 游戏实现

           游戏整体是一个web项目,jsp+mysql编写。前端使用的是html5,用canvas来绘制游戏背景。下面是游戏的软件架构:

 

游戏模块

数据采集模块

控制模块

存储模块

 

 

 

 

 

 

 

 

 

 

Ø  控制模块:调度其他模块,控制游戏进程,从数据采集模块采集数据并且存储到存储模块。

Ø  游戏模块:游戏的前端界面

Ø  数据采集模块:采集游戏中玩家的数据,比如通过关卡的用时、一共尝试了几次才过关

Ø  存储模块:和数据库交互来存储游戏中玩家的数据。

以下是一些界面截图:

 

 

4. 测试

           在项目中,我们设计了一套有关于面向对象程序设计的题目,主要涉及到的是我们在游戏中会应用到的知识。这套问卷会出现在游戏的最初,测试玩家的初始水平,在玩家顺利通关之后,我们还会再请玩家做一次这份问卷,通过计算玩家两次成绩的差值测出玩家在游戏之后学到了多少东西。

           若一个玩家通过游戏后,再一次做题时正确率有很大提高,那么可以说明我们的游戏达到了预期的效果,相反的,若正确率没有达到提高,则我们的游戏并没有达到教学的目的。我们用下面的公式计算游戏产生的教学效果:

          

           其中,m为题目的个数,s0is1i分别为玩游戏之前和之后第i题的得分。若X大于0则说明玩游戏时有效果的,反之则游戏没有教学效果。同时,我们需要统计每一关的难度dm,用如下的公式计算:

          

           numStepm为第m关所需的操作步数,numCodem为第m关所需要阅读的代码量。α和β

           在这一环节中,测试题的设计是非常关键的,我们在设计测试题的时候,考虑了三点主要因素:

1)玩家的初始水平较低,为刚刚入门学习面向对象程序设计的学生。

2)游戏对于玩家的帮助主要在于使得玩家更好地理解面向对象的概念和基础。

3)玩家通过严肃游戏只是初步了解面向对象的概念,更深入的学习还需要学生学习课本知识。