游戏程序范文

时间:2023-03-10 05:09:43

游戏程序

游戏程序范文第1篇

关键词: 棋类游戏;架构;类;事件

中图分类号:TP311.11 文献标志码:A 文章编号:1671-7597(2012)0210065-03

0 引言

由于棋类游戏设计简单,占内存小且娱乐性很强的,所以一直以来都非常有市场。但是一直以来,并没有一种设计规范。每个人,每个公司都用着自己的设计方案。

笔者通过一段时间的实验,用ActionScript3.0语言先后写了黑白棋,五子棋等程序,并且在FDT平台上运行成功,从中得到了一些编写此类程序的经验,现通过黑白棋程序简单介绍下自己的设计方法,希望可以抛砖引玉,也希望能让读者有所收获。

1 系统架构的建立

1.1 建立文档类

首先我们来建立我们的文档类,从ActionScript 3.0[1]开始,Adobe为Flash CS 3引入了文档类的概念,关于文档类,简单来说也就是Flash Player根显示容器所绑定的类,是整个flash影片的入口类。文档的使用可以使

这里的DocumentClass类继承于Sprite,所以也是一种显示容器,在创建游戏对象时通过this参数传递,也就是说Game对象是生成在这个显示容器上的。这样做的好处是,如果日后要开发另一个游戏,比如五子棋,泡泡龙等,直接写好Game类就行了,原有的显示容器类DocumentClass可以拿来直接使用。

1.2 游戏类的编写

接下来正式进入游戏类的编写,由于ActionScript 3.0已经真正实现了面向对象编程[2],所以编程之前我们必须考虑清楚,在这个游戏中我们会有哪些主要对象,这些对象又需要做些什么?

Game:游戏本身就是一个抽象的对象,和现实一样一个游戏本身就会有自己的游戏方式(方法)和游戏内容(属性)。

方法:开始游戏,结束游戏,暂停等。

属性:游戏工具(棋盘,棋子),规则,游戏参与者。

制作游戏的第一步我们要先把游戏工具确定下来。既然我们做的是棋类游戏,棋盘棋子是必不可少的。

ChessBoard:棋盘类,主要功能:显示棋盘,规划棋格(放上或去除棋子)。

Chessman:棋子类,主要功能:显示棋子,记录必要属性。

//首先我们用_rootmc=传入的容器,作为整个游戏根容器

_rootmc = rootmc;

//调整容器的位置为屏幕中心,在整个游戏的每个拥有显示容器的类中,我加入了对齐的概念,并预留了其他对齐方式的接口,像现在主容器的位置在屏幕中心,因为ALIGN==Enum_MCALIGN.Center;

}

//创建棋盘对象并传入游戏根目录容器对象,在ChessBoard的构造类我们可以看到,ChessBoard会自己构造一个容器加载到游戏根容器中,这个是这个游戏我所使用的显示对象自己管理显示类的方式。这样的优点是使对象和

//枚举类型对齐方式,使用枚举类型更易于发现字面错误。如果枚举名输入错误,ActionScript编译器会生成一个错误。如果使用字面值,存在拼写错误使用了错误数字时,编译器不会报错,而造成令人头疼的bug。[3]

Public class Enum_MCALIGN

{

public static const LEFTTOP : Enum_MCALIGN = new Enum_MCALIGN();

mc Sprite;

//棋盘行列数,因为将来可能出现不同长度的棋

//盘,所以使用变量

private var _chessLowLenght : Number = 8;

private var _chessRowLenght : Number = 8;

//棋子管理数组,记录棋盘中所有棋子对象

private var _chessmanArr : Array;

//棋盘左上角点

private var _startX : Number;

private var _startY : Number;

public function ChessBoard(Pmc : Sprite)

{

//创建棋盘容器,并加入父显示容器

_mc = new Sprite();

Pmc.addChild(_mc);

//center align,由于前边已经介绍过对齐方式,此

//处和前边相同,在这里不再重复。

…………………

//初始化棋子,为棋盘的的每一个格子初始化一//个看不见的棋子,其实我们的棋子chessman类//不光是棋子,还附加了棋盘上的一个“空格子”//概念,一个chessman对象一开始以一个“空格//子”的状态生成在棋盘上,这样做可以为以后//添加响应鼠标事件形成方便。

private function initChessman() : void

{

Chessman***************

import flash.display.Sprite;

import game.blackwhite.Enum.Enum_MCALIGN;

//载入枚举类型棋子状态

import game.blackwhite.Enum.Enum_ChessmanState;

public static const RADIUS :Number = 15;

public static const EMPTYCOLOR :int = =0xEEEEEE;//空棋子颜色;

public static const BLACKCOLOR :int = =0x000000;//黑棋子颜色;

public static const WHITECOLOR :int = =0xFFFFFF;//白棋子颜色;

//棋子显示容器

private var _mc : Sprite;

private var _i : int;

private var _j : int;

private var _x : Number;

private var _state : Enum_ChessmanState;

public function Chessman(Pmc : Sprite,i : int,j : int,x : Number,y : Number){

_mc = new Sprite();

Pmc.addChild(_mc);

_state = Enum_ ChessmanState.EMPTY;

//根据棋子不同的状态,用不同的颜色显示棋子

paint(_state);

}

private function paint(state:Enum_Chessman) : void

{

_mc.graghic.clear();

//center align,根据对齐方式,确定棋子显示位置,在此不再重复

…………………………

//设置空棋子,白棋子和黑棋子的绘制方式,不是本文讨论重点,略过。

…………………………

//在这个地方要特别指出的是,为什么要用2个set函数,并再set函数中即设定了该类的属性x/y,还设定了mc的x/y值。这就是我提到的逻辑类和显示类要分开的概念,也就是说这个棋子类是可以抛开其_mc容器而独立运行的,容器_mc只是这个棋子类的一个表现,可以有也可以没有。这样设计的好处是可以更方便且节约资源的在后台

枚举类Enum_ChessmanState的设计与前边的枚举类设计相似,在此不做重复。

到目前为止,我们已经简单的把整个游戏结构搭建起来了,已经可以看到棋盘和“空”棋子都已经显示出来了。而整个游戏的架构是Game控制ChessBoard,ChessBoard控制Chessman的方式。

2 取得鼠标事件

之前我们已经把棋盘和棋子显示出来了,接下来应该做的就是怎么让玩家通过鼠标事件来下棋。

其实在之前系统架构中我们已经为这个功能做了准备,在棋盘初始化的时候就放上了“空”的棋子,所以只要为每个“空”棋子加上事件响应就可以获得玩家在该格子的鼠标事件。

棋子对象可以通过paint函数来改变自己的颜色,达到下棋的效果。但究竟要下什么颜色的棋子,是否可以下,是否吃子等等的判断,棋子类是没办法判断的,我们也不应该让单个棋子参加到下棋规则的逻辑,棋子的工作就是Game作为游戏的控制类,接受棋盘的棋子点击事件,并作出响应后,再调用下棋函数进行下棋。

在以后的编程中,可以加入具体的游戏逻辑判定是否可以下棋,是否吃棋等,在游戏架构的设计中暂时不介绍。

到目前为止我们就可以在棋盘上下棋了,当然还只是能下黑子,在这部分中使用了一种拟人化的思想来架构我们的程序结构,并且使用了自下向上“报告”的方法。

3 结论

从上文中,我们可以看到棋类游戏分为以下步骤:

3.1 设计架构

1)设计文档类;2)编写游戏类。

3.2 取得鼠标事件

按以上步骤设计棋类游戏,不仅可以提高效率,而且可以提高程序的可读性。

参考文献:

[1]蒋国强、岳元亚,ActionScript 3.0从入门到精通,机械工业出版社,2011.

[2]李方捷,ActionScript 3.0开发技术大全,清华大学出版社,2004.

[3](美)Steve McConnell,代码大全,电子工业出版社,2006.

作者简介:

游戏程序范文第2篇

摘要:游戏编写是游戏程序设计教程中很重要的内容。本文介绍了一个完整的2D游戏―坦克大战的开发过程,对游戏素材编辑、地图编辑和游戏主程序的设计做作了完整介绍和代码实现,使学生能完全掌握并应用到实际其它游戏的开发过程中。

关键词:计算机游戏;程序设计;地图;游戏引擎

中图分类号:G642

文献标识码:B

1游戏程序设计教程中的关键一环

计算机游戏程序设计,在许多的大学本科的教学中,并未正式纳入教学内容。由于市场对游戏设计人员的需求较大,薪水又高,出现了专业的游戏程序设计培训班。但收费偏高。我院根据这种状况,在学生创新实验室和第二课堂培训班,开设了游戏程序设计项目。

其中最重要的一环就是完成一个完整的游戏开发设计。我们精心挑选项目,选择了既有一定代表性、又有娱乐性、也带有一些人工智能的中小游戏――坦克大战。也使学生感受到了面向对象编程的强大功能,所学知识得到了真正的应用。

2相关知识学习

编写游戏程序,技术上需要具备两个条件。首先需要一个多媒体驱动开发包,如微软的DirectX;图像、动画、声音的快速、实时响应,是游戏逼真的前提条件。我们选择了日本的Hiroyuki Hori编写的免费开发包DelphiX,它较好的封装了微软的DirectX。里面有些错误,我们已经更正。其次,需要一个游戏引擎。游戏角色的碰撞是技术上较难的,对角色的生死管理也很重要。好的游戏引擎必须能快速高效的解决这些问题。DelphiX包中有一个简单的游戏引擎,我们稍加改造,足够我们编写简单的二维游戏程序。对这些知识加以介绍后,就可以进入正式的开发设计阶段。

3坦克大战游戏功能简介

(1) 关卡地图为三层地图,比较形象,可设计多样的地图式样。有专门的地图编辑器MapEdit.exe。

(2) 游戏有低、中、高三级。难度随时可调。

每关20辆基本敌方坦克。每过一关,敌方增加1(低)、2(中)或3(高)辆坦克。难度加大时,敌我双方的坦克速度、炮弹威力、炮弹速度、坦克生命力都有所增加。

(3) 每关地图有一个敌方Boss,它能爬山涉水,并自动朝我方推进,炮弹也朝我方射击。

(4) 宝物有16种,持续时间约15秒。如没有被敌我坦克拣到,自动爆炸消失:

散弹1:一次只能发一发炮弹;

散弹3:一次能发三发炮弹;

散弹5:一次能发射5颗炮弹;

增加子弹速度:一次加50;

减少子弹速度:一次减50;

增加炮弹威力:一次加50;

炮弹的半径大小有8、16、24三种。炮弹半径越大,越容易打中物体或坦克;

增加坦克生命力:一次加100;

坦克隐形宝物:坦克不可见,炮弹无法打中它;

坦克无敌模式:带防护罩,炮弹打中不“掉血”;只有20秒保护期;

定时器:对方坦克不能动弹和发射;

爬山涉水:坦克能过河上山。该特性只在本关有效;

呼唤飞机帮助:拣宝方大批飞机出现,并且狂轰烂炸,对方难逃厄运;

脑黄金:只对敌方有效。被我方炮弹打中后,自动掉头向我方移动并射击。

每关的第十分钟,大批敌方帮助飞机呼啸而来,请你在此之前消灭敌人,否则大难临头。逃过此劫,坚持到第15分钟,我方飞机呼啸而来......

(5) 每过一关,我方生命力增加200。

(6) 关卡地图文件名为Map???.map,最多999关。地图文件名编号为001~999,中途不能断号,否则,会从头开始玩起。

(7) 操作:

F1:帮助;F11音乐;F12:炮声;F3:暂停/继续;鼠标右键:游戏难度选择。

玩家一: 玩家二:暂无

空格:开炮, 移动方向

4素材库程序编写

在2D平面游戏中,地图画面由小块图片拼写出来。游戏角色也一样,动画效果只不过是不断改变图形罢了。所以第一个任务就是要建立地图素材库。对每种地形设置它的图片、生命力、是否阻碍坦克或炮弹通过等。图1是图库编辑器TileEdit.exe的一个运行界面。

为方便管理,我们分类建立地形,如云层、土地、房屋、树林等等。每类含有多个不同形状的地藐对象TTiles;如“水域”类,可以包含“海洋”、“湖泊”等。而每个地藐可以由数量不等的小图片组合而成。最小的小图片单元就是TTile对象(以后简称贴图)。这两个对象我们用Object Pascal语言(Delphi)实现。 素材管理程序代码2900多行(自编源代码)。

图库(素材库)编辑器是游戏程序开发的第一步,许多商业游戏并不提供图库编辑器。使玩家感到有所失望。提供图库编辑器无疑增加了游戏的吸引力,因为玩家可以重新设计整个游戏,也许坦克大战变成了潜艇大战。

一些商业游戏提供了地图编辑器,如“星际争霸”、“英雄无敌”等。图2是教程中设计的三层地图编辑器运行界面。

地图设计是决定游戏可玩性的重要因素之一。当今2D游戏,普遍采用多层地图,这样可以产生比较逼真的画面。游戏程序显示画面时,首先显示最低层的图层,再依次显示高层画面;这样就有立体感了。

地图由层(TLayer)组成,每层地图又由许多基本的单元格(TCell)组成,单元格的图像来源于素材库。首先要完成这两个基本对象的编写。最后编写地图编辑程序,它实现地图数据的载入、显示、修改、保存等基本功能。总代码约3400多行。

6游戏主程序编写

准备工作一切就序!开始编写游戏主程序。设计的思路是:先把游戏关卡对应地图装入画面,再按游戏规则产生敌我双方坦克。敌方坦克随机移动和发射炮弹,除非它吃了“脑黄金”。我方坦克受玩家控制运动方向和发射炮弹。运动速度和发射炮弹的数量受游戏参数限制。当我方坦克全部死亡,游戏结束。敌方每隔一定时间产生新坦克,直到规定的坦克数量。敌方坦克全部被消灭后,游戏结束,进入下一关。

学生难以理解的是,这么许多的游戏角色(也称“精灵”),程序如何管理它们,而这些精灵在不断的产生、不断地碰撞、不断地消亡。所以,必须有一个统一的管理机制。必须建立一个最基本的“精灵”类TSprite。该对象是系统中的一个核心类。看它的定义:

TSpriteEngine = class; //==预先声明“精灵引擎”类

TSprite = class

private

FEngine: TSpriteEngine; //==被“精灵引擎”管理

FParent: TSprite; //==用来判断其父类(产生者:如坦克死 亡,对应子弹也消失)

FList: TList; //==角色列表(被精灵引擎管理:保存的 是地址!)

FDeaded: Boolean; //== 是否死亡

FDrawList: TList; //== 需要绘制的角色列表

FCollisioned: Boolean; //== 是否需要碰撞检测

FMoved: Boolean; //== 能否移动

FVisible: Boolean; //== 是否可见

FX: Double; //== 平面坐标位置

FY: Double;

FZ: Integer; //==深度坐标,越小越在低层

FWidth: Integer; //==角色尺寸:宽和高

FHeight: Integer;

procedure Add(Sprite: TSprite); //==增加角色到列表FList中

procedure Remove(Sprite: TSprite); //==移走角色

procedure AddDrawList(Sprite: TSprite); //==增加角色到绘制角色列 表FDrawList中

procedure Collision2; //==碰撞检测

procedure Draw; //==绘制角色

function GetClientRect: TRect; //==得到角色大小

function GetCount: Integer; //==角色列表中角色数量

function GetItem(Index: Integer): TSprite; //==用索引取得角色

function GetWorldX: Double; //==获取角色在地图世界中的位置

function GetWorldY: Double;

procedure SetZ(Value: Integer); //==设置角色在地图层中的“深度”

protected

//==注意:所有virtual方法必须在子类中实现==//

procedure DoCollision(Sprite: TSprite; var Done: Boolean); virtual;

//==碰撞事件处理

procedure DoDraw; virtual; //==显示事件处理

procedure DoMove(MoveCount: Integer); virtual;//==移动事件处理

functionGetBoundsRect: TRect; virtual;

functionTestCollision(Sprite: TSprite): Boolean; virtual;

//==碰撞测试

public//==公布方法

constructor Create(AParent: TSprite); virtual;

destructor Destroy; override;

procedure Clear; //== 释放列表资源

function Collision: Integer; //==获取发生的碰撞次数

procedure Dead; //==死亡登记

procedure Move(MoveCount: Integer); //==移动所有角色

function GetSpriteAt(X, Y: Integer): TSprite; //==取得某位置处的 角色

property Death:Boolean Read FDeaded;//== 我们自己新的数 据,方便编程判断

end;

Tsprite实现了角色的移动和碰撞检测,并指定被哪个引擎管理。游戏中所有的角色都是从TSprite类继承下来的! 游戏中共有13个类,要一一实现,不要怕麻烦。它们是:

TTank = class(TImageSprite) //==坦克基类,TimageSprite继承自Tsprite

TEnemyBoss = class(TTank) //===敌方BOSS==//

TEnemyTank = class(TTank) //===敌方坦克

TMyTank = class(TTank) //===我方坦克

THelpPlane = class(TTank)//===支援飞机==//

TExplosion = class(TImageSprite) //===爆炸==//

TExplosionBig = class(TImageSprite) //===大爆炸==//

TExplosionRed = class(TImageSprite) //===红色爆炸==//

TGemSprite = class(TImageSprite) //===宝物对象===//

TScrollBackground = class(TBackgroundSprite) //背景1

TScrollBackground2 = class(TBackgroundSprite) //背景2

TTerrSprite = class(TImageSprite) //===地图对象===//

TBullet = class(TImageSprite) //子弹基类

还有一个非常重要的对象就是精灵引擎TspriteEngine;看它的功能定义:

TSpriteEngine = class(TSprite) //==注意:从Tsprite继承!

private

FAllCount: Integer; //==角色数量

FCollisionCount: Integer; //==碰撞次数

FCollisionDone: Boolean; //==碰撞检测完毕标志

FCollisionRect: TRect; //==碰撞区域

FCollisionSprite: TSprite; //==碰撞角色

FDeadList: TList; //==死亡角色列表

FDrawCount: Integer; //==绘制角色列表

FSurface: TDirectDrawSurface; //==绘制表面

FSurfaceRect: TRect;

procedure SetSurface(Value: TDirectDrawSurface);

public

constructor Create(AParent: TSprite); override;

destructor Destroy; override;

procedure Dead;

procedure Draw;

property AllCount: Integer read FAllCount;

property DrawCount: Integer read FDrawCount;

property Surface: TDirectDrawSurface read FSurface write SetSurface;

property SurfaceRect: TRect read FSurfaceRect;

end;

TSpriteEngine很简单,主要提供了一个死亡管理。角色死亡后,把自己加入到TspriteEngine的死亡列表即可;游戏程序中,必须不断调用TspriteEngine的Dead方法来释放死亡角色占用的资源。

Tsprite的子类根据游戏规则,都增加了一些功能。真正有意思的代码在炮弹类Tbullet的碰撞处理代码中。坦克得分、生命力变化都在代码中处理。

准备就绪,剩下的任务就是编写主控制程序了:根据当前关卡,装入相应地图(产生地图精灵),并建立敌我双方的坦克;由游戏定时器驱动游戏运行;由游戏“精灵引擎”驱动角色运动和死亡管理。整个主程序约5200多行。

整个系统除出部分公用代码,大约有1万多行自编源代码,比较适合培训设计。当学生弄清原理后,就完全可以随心所欲的修改程序,感到非常满足和自信。

参考文献:

[1] 陈宽达. Delphi深度历险[M]. 北京:科学出版社,2001.7.

游戏程序范文第3篇

关键词:平台游戏 程序内容 自动生成 爬山算法

中图分类号:TP399 文献标识码:A 文章编号:1007-9416(2013)10-0189-02

游戏关卡内容的自动生成现在已经被成功的运用在了很多不同种类的游戏当中。从1980年“盗贼”游戏被推出时,就已经使用游戏关卡内容的自动生成。“盗贼”游戏是一个基于ASCII图形的角色扮演类游戏,但其中主要创新是它能够自动产生无限量的独特的地牢关卡。它的关卡设计主要是由各个分割的地牢组成,而其地牢周边设计则是固体的岩石,中间有怪物和战利品。虽然整个游戏的设计水平不能和人为的相比,但其主要创新不是在游戏的设计上,而是不需要人类参与的无限的游戏关卡程序自动生成。更近期一些的游戏,如暗黑破坏神和文明,就能看到与“盗贼”相似的游戏设计方法。相对用大量的人工来设计关卡,玩家更能从无限供应的地牢掠夺或大洲的殖民中获得更有价值的游戏时间回报。毫无疑问游戏自动生成关卡将对平台游戏设计产生帮助。但是,至今仍然没有商业上的分布式平台游戏采用游戏关卡自动生成。相对于角色扮演和战略类游戏,平台游戏的关卡生成是一个更加困难的问题,因为一个很小的改变,如一个关卡的鸿沟的宽度的变化,就可能使整个关卡的难度从具有挑战性到完全不可能完成。盗贼类的游戏可以使用大量的不受约束的随机的决定或动作,它的游戏的可玩性被约束在由生成器生成的人类设计的各类原子类的单元中,(如房间、走廊、地版砖等),与之相对,平台游戏的可玩性则更多的由各单元之间的关系决定,要求在游戏生成中这些关系必须清晰的建模和操作。特别是在地牢关卡和地形的设计中,松散的关系约束和随机的元素位置,会很容易导致游戏关卡的不可玩。本文提出一种基于平台游戏的分层元素和关系的模型,并提出一种围绕本体的游戏生成算法。

1平台游戏的模型

这个层次结构的灵感来自于“一种新型对艺术结构的表示”一文中描述较复杂的节奏模式的典范,非洲和非裔美国人的音乐[1]。艾耶描述了一个分层的表示,它能使有节奏的重复和短节奏的组合序列合并为更长,更复杂的短文。如果把关联的作曲工作看作游戏设计的一种拓展,那平台游戏设计则更在很大程度上依赖于节奏。有规律的节奏性的动作更加容易使玩家陷入一种精神高度集中称之为“流”的状态[2]。在这种状态下,玩家的跳跃动作不仅是一种距离的把握,而且是一种时间节奏的把握。节奏性的位置障碍调节设置创造了相应的玩家节奏性动作序列。使用这种节奏但使用不同的重复元素是一种特别经济的功能;它使用少量元素就可以使玩家玩相当长时间的一个关卡。比如,通过重复和变换一些基本的元素如管道、方块、平台,游戏设计者就可以在“马里奥”中设计一个漫长且有趣的关卡。

1.1 组件

游戏的组件,如藤蔓,平台,小山丘,尖峰;这些都是平台游戏的基本单位构建。往往是一个组件既含一个障碍和一个休息点,例如可以是简单的设计为必须跃过的一段距离,随后一个可以休息的平台。

组件被表示在物理引擎作为一组具有特定属性边界(如反弹力,滑溜程度,潜在的伤害)。通常这些属性都会显示在游戏屏幕上,这样玩家就可以相应地规划他的动作。

一个特殊组件的建构需要两种方式。它的空间尺寸通常由设计游戏的空间来确定,余下的建构一般还有两个影响组件的“调整值”,但具体的“调整值”通常由具体的组件来确定。如图1所示,藤蔓的调整值就是长度和偏移量,但平台决定了间隙的宽度和平台的角度。这意味着同一单一组件有着大量的不同的“调整值”。

1.2 模式

当然,仅仅依靠在游戏中不同的跳跃是不能吸引玩家的,我们提供了一种模式能把不同的独立的组件组合成一种相对较长的序列,能提供给玩家节奏性的行为动作。一般来说,这种模式包含了四种模式类型,基本型、复杂型、复合型、混合型。

基本型:一种基本的模式由组件它本身或重复几次获得,没有任何变化。

复杂型:由同一组件重复获得,但不同的是通常会设定“调整值”对组件进行一系列的调整,如一系列的增长宽度的水平平台。

复合型:交替的两种不同的基本型的组件组合。如游戏设计一系列的三个不同水平的连续跳跃;首先是三个高低不同的障碍,然后是三个不同水平的跳跃。需要注意的是,复合模式以带节奏规律性改变节奏的方式,在更高的抽象级别引入了节奏模式。

混合型:要求协调动作或相反动作的组件的组合,这时玩家已经不能将其看作独立的个体,它需要两方面的知识并组合成一种解决方案。如一个定时陷阱需要玩家判断一个正常通过的时间点,一个间隙需要玩家判断需要跳跃的距离。但是组合在一起,就需要玩家协调一个好的时间点来助跑跳过障碍。

这几种模式构建的是严格的线性序列,虽然这种序列也许是好玩且富有挑战的。但不是线性的元素,如分支路径,挫折,线圈,隐蔽的路径,这些元素可以给予让玩家自己选择自己的通关路径。但由于模式格式的原因,即使是精心制作的模式也必须是严格线性的。我们的模型需要在另一层来解决非线性结构。

1.3 单元格和单元格模型

单元格模型:由线性模式组成的一个个的非线性的块堆积建构模型。一个单元格是一些模式的封装。在这种模型下,特殊模式的特性是被忽视的,重要的是玩家能从一个单元格模型到达另一个。(一个连续序列模式到另一个连续序列模式)

这种特殊的单元格连接结构模型影响着游戏可玩性。通过对经典的和近期的平台游戏的研究,我们建立了一个单元格结构图谱。在图2所示,我们显示了几种在平台游戏中最常见的单元格结构。

分支单元格结构是一种最基本的增加游戏非线性设计的方法,它给予玩家选择两条路径的机会,这种选择往往是不只是两条路径,也许还是两种不同的目的地。它使得玩家可能选择更难的路径以获得更高的奖赏。而常规的分支路径则是创立两种不同的路径,但有种相同的目的地。

2 游戏设计算法

这种模式可以作为部分上下文无关的语法,以符号、模式作为开始,以单元格作为非终端结构,单元格模式和模式总体合并为一个输出,而各个模式则作为终端结构。由于生成字符串的语法相对简单,而总体生成一个有效的关卡的难度也不大。每一个关卡从一个单元格模式开始,同时在空间允许的情况下,可以分裂成更多的单元格结构。每个单元格可以分布一个模式,这些模式也可以像单元格一个进行递归扩展成更多的模式,最终这种单元格模式可以转换成一系列的的组件组合。

2.1 物理模型和难度计算

物理模型能够准确计算在游戏构建二维世界中玩家的移动距离,我们熟悉的平台组件像藤蔓、梯子和平台构建了游戏中二维世界的边缘。游戏玩家可以从边缘相连的组件,一个移动到另一个,也可以从一个跳跃到另一个组件的边缘中。而且这并不需要完全参照真实的物理世界,如在“马里奥兄弟”中,物理模型允许玩家在空中可以进行二次跳跃。在给定两个边缘后,这种基本弹道是可以计算出来的,如只要在第一个组件后的某一点的跳跃,那么玩家都是可以到达另一个组件边界的。如图3所示。

系统可以计算游戏玩家成功从一个组件跳跃到另一个组件的空间窗口。甚至,可以估计玩家由一次不成功的跳跃在半空中改成成功跳跃的临时窗口。有了玩家准确度和时间度的相关知识,整个系统可以估计这次跳跃的难度。如果有一系列的组件,如前文提到的各种模式,系统也可以计算通过整个模式的难度系数。

2.2 模式建立

为了建立整个模式,系统首先需要一个各个可能的组件列表,和在模式中已经作了开始和结尾标记的两个组件。对每一个可能的组件的类别和数量,都要建立最佳模型,并从中选择最好的来建立整个模式。

对于给定数量的一组组件,使用简单的爬山算法来确定它的最佳模式,以此类推,整个系统用爬山算法来确定它的难度系数。每一种组件都由一系列的参数来定义,如定义平台,我们需要的是平台的长度及平台的角度。组件的参数确定了表面上系统爬山算法的难度值。

要开始爬山搜索,系统会首先创建一个选择随机值组件参数的初始模式(如随机的角度和平台的长度),然后在开始和结束位置的组件之间的均匀地分割这些模式的空间。然后,为了找到接近所需难度的模式,该系统中的元件参数会向最陡方向调整。

总体来说,无论对于简单还是复杂模式的最佳适配模式图形往往是平滑的,而不是充斥大量的局部最大值。所以,即使非最优解离玩家的期望值也比较接近,爬山算法还是有一次公平的机会返回严格的最优解。通过大量的测试组件,最灾难性的后果如不能完成的难度或者微不足道的难度,这些都能被系统重写。

2.3 单元格结构模式结语

模式会自动生成一个初始的单元格,当玩家到达这个单元格的边界时,一个单元格或者一组单元格将以前文提高的单元格结构与之相连。这个单元格通过前面提到的算法进行模式填充。单元格结构的使用则由预告决定的关卡值决定。如关卡需要的分支。单元格的方向和维度由已经有的空间的物理约束决定,同时包含有一定的随机参数设置。

虽然目前还没有实现这种模式,但是这可以被用作动态的难度调整[3],如果系统能监控到整个的玩家的游戏进度,通过预测其偏好(通过玩家选择的路径)和成功失败比率,将可以创建适配单个玩家的配置文件,并用来生成适应的成功的单元格结构。

3 结语

这种模式生成器是能够成功应用的,它能够有效的建立并优化单一的模式。但在目前来说,虽然这种构建单元格结构的的算法已经被设计出来,但还没有具体应用的原型。将来关于怎么具体应用还可以作进一步研究。

参考文献

[1]Lyer,V.Bilmes,J,Wessel,D.and Wright,M.1997. A Novel Representation for Rhythmic Structure.IN Proceedings for the 23rd International Computer Music Conference,International Computer Music Association,97-100

[2]Csikszentmihalyi,M.1990.flow:the psychology of optimal experience.New York,NY,HarperCollins.

游戏程序范文第4篇

关键词:编程;游戏模式;学习兴趣;编程思想

程序设计类课程往往语句语法繁多、内容枯燥,很难激发学生的学习热情。同时,由于内容枯燥,也不容易讲得生动有趣。传统教学多是以知识为导向,课堂上演示示例程序,虽然示例程序可以直观地解说语法规则,但其本身的无趣性却从某种程度上增加了学习的枯燥性。另外,由于种种原因,学生进入大学时,计算机知识相当零碎肤浅,对计算机的应用水平千差万别。特别对编程思路难以掌握,在解决综合编程问题时不知所措,也使学生对学习程序设计产生了畏惧心理,从而形成了恶性循环,很多学生也因此产生了退却甚至厌恶的思想。

我们经常可以看到学生废寝忘食沉迷于游戏的新闻报道。游戏对于学生的吸引力是无限的,古人云:"水能载舟,亦能覆舟。"如果我们在教学中能利用游戏的这种吸引力,很多程序设计课程教学中存在的问题都将迎刃而解。

对于编程基础课,重在让学生认识计算机逻辑,培养其编程思想。尤其是针对某些常用的计算机逻辑执行块,下面我将以编程基础课程-Phrogram程序设计中的循环模块为例来说明这种引入游戏模式的教学:

1.教学设计简述:

Phrogram当中有三种循环语句,如果单纯直接讲解语句语法,就如前面所述,用示例程序来解释,只会让学生避而远之。所以这个部分,在最开始,下加入一个游戏环节,吸引学生的兴趣,让学生更直观的先理解什么是循环以及循环的计算机逻辑,然后再引入Phrogram的循环语句,这样就能引起学生的兴趣,进一步理解并操练相关语句。

2.课堂组织

我们将在传统的教室上课模式改为全机房教学。教学中,把授课同上机相结合,统一机房教学,通过游戏操作及实操编程练习,将学生吸引到教学活动中来,以学生为主体,老师则进行巡辅来检查学生的学习状况同时辅助学生。在课程教学进程中,以游戏导入,辅以教师演示和巡辅,学生为主体合作、讨论,老师讲解、演示穿行。

工欲善其事,必先利其器。有哪些游戏工具适合编程课程使用呢?在Phrogram程序设计的循环模块教学中,我用到了这样一个游戏工具,我们只需要在浏览器中进行这个站点即可:

首先它只是一个站点并不是一个软件,所以学生们可以非常方便的使用它。针对Phrogram中的循环模块,我选择了一些循环游戏,界面如下:

https:///hoc/6

在这里,学生只需要拖动相应的块来使游戏完成即可,随着游戏的不断进阶,难度也越来越大,学生对于循环的理解也将得到进阶。

当然这里还有很多的例子可以在教学中使用,实际课堂反馈,学生对于这些游戏非常感兴趣,对比没有使用游戏导入的部分,学生对这块知识的掌握要更好。

当然同类工具还有很多,在进行资源搜索的过程中,我们还发现了另一个可以利用的游戏工具,来自麻省理工学院的scratch 游戏编程在线学习平台:https://scratch.mit.edu

这两个站点可以说有异曲同工之妙,都可以很直观的去学习编程语句,同时引起学生对编程的兴趣。

当然,类似的工具一定不止局限于以上两种,本文仅基于作者的自身教学经验,将此类理念作分享。通过游戏导入的学习方式,有很多优点。首先,游戏很容易抓住学生的注意力,引起学生的兴趣,激发学生的学习动机。其次,游戏世界里出错并不代表失败,学生可以重复再来,每次失败都是学习的机会。最后,游戏让学习者自己发现探索规律,而不是有老师直接告知结果。

游戏模式的教学需要我们改变传统的授课方式,通过游戏导入激发学生的兴趣,把枯燥的知识点变得生动直观,使学生爱上计算机思维。这种模式同时也提升了程序设计类课程实用性,并培养了学生的综合应用能力。虽然如此,仅仅靠一两次简单的课堂教学转换时不够的,我们需要将整个学习过程系统化,同时考虑整合零碎的学习时间,充分发挥现代信息技术的优势,努力提升学生在课后的自主学习时间。

游戏程序范文第5篇

关键词 机器博弈,UCT,蒙特卡洛树搜索,嵌入式

中图分类号 TP31 文献标识码A doi:10.3969/j.issn.1003-6970.2011.01.020

WinCE-based Go Game Development

CAO Hui-fang 1, LIU Zhi-qing 2

1(Beijing University of Posts and Telecommunications,100876,China) 2(Beijing University of Posts and Telecommunications,100876,China)

【Abstract 】 Game machines, also known as computer game that let the computer play game. Go is strategic two-person board game, and use the Grid board with black and white 2-color stones playing. Computer Go engine developed by Markov decision model, using artificial intelligence, and contains a lot of calculations closely dependent on system resources, the greater the computational, the point of engine selected more precise, the higher thinking depth.The specificity for hardware and software of the embedded system make limitations of its resources and computing power. There are two mainly work included this article: First, transplant Go Game engine used for PC developed by laboratory to WinCE system, and develop Game engine suitable for embedded system to achieve large-scale computing transplant. Let the game engine achieve good results by streamlining the amount of computation in the embedded finite resources; second, develop the Go game interface on WinCE.

【Key words】Computer game, UCT, Monte Carlo tree search, Embedded

0 引言

计算机围棋就是结合人工智能技术教计算机下围棋,以达到与人类棋手相抗衡的目的。老式的围棋程序编程时注重在围棋知识,文中使用的对弈引擎,采用了蒙特卡洛博弈树搜索的思想。UCT搜索是蒙特卡洛树搜索的核心,注重于海量的搜索和随机的下法搜索。因此整个过程是一个大规模的计算,需要大量资源的支持。

嵌入式设备正日益渗透到人们的日常生活中,默默地为我们提供连接和服务,嵌入式设备往往是一个资源有限的系统,它们追求的是在有限的价格上满足一定的功能性要求。通常它们采用那些功能并不强大的CPU,这也是开发者不得不尽可能地压缩嵌入式系统性能的原因。最初的嵌入式设备是单一用途的,它们拥有各自独特的显示方式和用户界面,而今天它们变成了类似PC的系统。它们可以运行很多相同的应用程序。

针对嵌入式资源的限制,如何将对资源有很大依赖性的大规模的计算,成功的移植到嵌入式系统中,并能使其达到类似与在PC上计算的效果。针对此问题,必须对原适用于PC上的游戏引擎做出修改,才能使其在嵌入式系统中成功的运行。

1 游戏设计及框架

Windows CE程序采用消息响应[1]工作方式。当有事件发生时,如触摸笔点击屏幕等,这些统称为事件,Windows CE操作系统产生相应的消息,并把消息发送到相应的窗口;窗口在收到消息后,通过一种所谓的“回调”[2]方式,指示Windows CE操作系统调用相应的消息处理过程,进而完成对事件消息的处理。

嵌入式系统软硬件的特定性,使其在资源和计算能力有很大的局限性,由此,本文开发了适合嵌入式系统的围棋游戏引擎。并根据消息响应的工作方式添加相应的消息处理,从而实现Wince平台上围棋游戏的开发。

1.1 PC围棋游戏引擎的嵌入式移植

围棋游戏[3]的设计中,包括了棋盘,对弈引擎,局面评估等。

游戏的实现中,最主要的是对弈引擎的设计,即在当前诸多可下点中选取出比较好的点,从而使落子位置的选择尽可能准确,提高引擎的棋力水平。

经典的博弈搜索算法[4]主要有minmax算法、negamax算法、alphabets算法、failsoft算法、negascout算法和mtdf算法等等。近年来又有抽象证据搜索、证据数搜索、分解搜索等算法出现。

博弈搜索算法的效率决定于几个因素:状态表示、候选走法产生、确定目标状态、确定相对优势状态的静态评估函数,另外死活搜索也可能是十分重要的影响因素。

文中对弈引擎的设计,采用了蒙特卡洛博弈树搜索的思想。UCT[6]搜索是蒙特卡洛树搜索的核心,在搜索过程中,通过不断对其子节点完成一个UCB1[7]选点的过程,来走完从根节点到叶子节点的一个路径,并完成对叶子节点的评估及展开。在UCT搜索过程中,UCB1是一个通常意义上不错的公式,当然,在实际中,可以根据自己的程序进行调整。

在UCT对弈引擎中,对于整棵博弈树,记录root节点,之后,从跟节点开始,一层一层的运用UCB1公式进行选择,当到达某一叶子节点,对局面进行评估,这样便完成一次模拟。整个过程就是不断的进行模拟,直到到达某一终止条件为止,该终止条件可以是时间或模拟次数。针对嵌入式系统本身的局限性,选择适当的时间或模拟次数,使得程序在允许的资源条件内,最大的发挥计算能力,提高引擎的水平。

为了优化博弈树的搜索,同时采用逐渐扩展的算法,为了能进行逐渐扩展,就必须首先对其叶子节点有个排序,而何时引入这些新的节点,是在模拟的最后,通过对该叶子节点被访问的次数进行判断而决定是否进行扩展。

在博弈树节点的展开过程中,如果不采用任何先验的知识,其子节点在展开时多是随机的,为了避免这种盲目性,将适当的知识引入到节点展开过程中,来对各个节点的重要性有个大致认识,由此来指引其子节点的展开,使之在展开和搜索的过程中具有更高的效率。这个静态排序的工作,是在搜索节点需要展开之前完成的。在排序时,由于排序是为蒙特卡洛树搜索[9]来服务,所以在注重准确性的同时也要兼顾时间效率。但是,由于嵌入式系统内存的限制,不能一味的大量引入知识,选取知识的同时考虑效率。

博弈树搜索是个庞大的,耗内存的过程,为了使其在嵌入式系统上正常的、有效的实现,程序使用了大量剪枝。如在模拟过程中,对节点的选取和扩展。

1.2 DLL的编写

动态链接库(Dynamic Link Library,简称DLL)是一些编译过的可执行的程序模块,可以在应用程序中或其他DLL中被调用。DLL的应用非常广泛,可以实现多个应用程序的代码和资源共享,是WinCE程序设计中的一个非常重要的组成部分。作为一种基于Windows的程序模块,不仅可以包含可执行的代码,还可以包括数据和各种资源等,扩大库文件的使用范围。

本文主要针对9路围棋,实现围棋游戏需要的基本信息及游戏的基本规则,并将其封装为DLL,主要采用了蒙特卡洛树搜索实现每步棋最优点的选取,提高游戏引擎的水平。

DLL调用有两种调用方式,即静态调用方式和动态调用方式。静态调用方式由编译系统完成对DLL的加载和应用程序结束时DLL卸载的编码(如还有其它程序使用该DLL,则Windows对DLL的应用记录减1,直到所有相关程序都结束对该DLL的使用时才释放它),简单实用,能满足一般要求。动态调用方式是由编程者用API函数加载和卸载DLL来达到调用DLL的目的,使用上较复杂,但能更加有效地使用内存,是编制大型应用程序时的重要方式。

DLL的静态调用由编译系统完成对DLL的加载和应用程序结束时DLL卸载,在中静态调用DLL,首先将动态链接库的.LIB文件加入到应用程序的工程中,然后在使用DLL中的函数文件里引用DLL的头文件(.h)即可。

当采用静态方式编译并生成应用程序时,应用程序中的调用函数与LIB文件中的导出符号相匹配,这些符号或标示进入到生成的EXE文件中。当应用程序运行过程中需要加载DLL文件时,操作系统将根据这些信息查寻并加载DLL,然后通过符号或标示实现对DLL函数的动态链接。当加载应用程序的EXE文件时,所有被应用程序调用的DLL文件都被加载到内存中,这时可执行程序直接通过函数名调用DLL的输出函数,其调用方法与调用程序内部函数相同。

1.3 界面的绘制

针对围棋棋盘的特性,将棋盘看作由不同小块组合而成,从而采用分块的思想拼接棋盘。

首先针对拼接棋盘要用到的块元素,读取出每小块的各点像素值,如下图,Fig.2.1为棋盘上的星位处的像素描述:

Fig.2.2为对应像素点描述的位图图片:

根据读出的各个小块元素的像素描述矩阵,拼接出棋盘,添加消息处理,程序中添加响应函数OnPaint(),在OnPaint()中添加代码,实现棋盘及坐标的绘制,在相应的位置调用相应的块元素,拼接得到棋盘。

同时获得游戏棋子的像素描述矩阵。添加绘制棋子的函数drawGoStone(),调用棋子像素描述矩阵,实现棋子的绘制。

添加菜单,通过资源视图中的*.rc,选择“MENU”,然后“新建”在出现的空菜单条上选择第一个空处,修改它的Caption属性为“文件”,可以看到它自动变成了一个菜单项,同时可以看到字母O下面有下滑线,代表热键。

在刚才的菜单下面的子菜单空处继续添加菜单项“新建”、“打开”和“保存”,可以看到由于制表符“\t”的作用,菜单标题中的“Ctrl+N”等快捷键标示都对齐了。选择它们下一个空处,不添加Caption属性,直接在Separator属性前打勾,下一项就变成了分割线。

依照上面的方法,依次添加自己需要的菜单项。

对这些菜单项建立消息映射本质与Button相同,都是接收系统的COMMAND消息,但是因为无法通过双击来简单的建立,VS2008,每个菜单的映射函数非常容易,如:添加 文件菜单下的打开映射,只需要,进入资源视图的菜单界面,在“打开”的地方,右键点击“添加事件处理程序”,然后跳出“事件处理程序向导”,选择COMMAND消息类型,修改函数处理程序名称,点击添加编辑按钮,进入了事件处理程序补充完整。

2 游戏的实现

2.1 布局及实现

该实验的的基本思想,绘制棋盘,连接后台游戏引擎所在的DLL,调用DLL中相应的引擎等接口,实现游戏的过程,同时添加相应界面的刷新,呈现相应游戏过程,游戏终局时,输出游戏结果,伪代码代码如下:

OnPaint()//add realize code to OnPaint

{

drawBoard();

drawCoordinate(X,Y);

drawStone(point,color);

}

doGame//play game , draw the situation at the same time

{

While(!gameEnd){

Engine->play(point,color);

drawGoStone(point,color);

if(deadStone>0){

CRect rect=UpadateRegion();

InvalidateRect(&rect,false);

}

}

Result();//compute result and output

outputResult();

}

Fig.3.1为拼接后的棋盘:

Fig.

Fig.3.2,Fig3.3分别为提取死子前后,界面的刷新:

Fig.Fig.

2.2 界面与DLL连接

本文采用静态调用DLL。配置主程序的属性,单击工程右键->属性->C/C++,添加要用的.h文件所在的路径,同时在Linker->Input添加DLL相对应的.lib,实现与DLL的连接。

在DLL连接时,时常会出现如下的错误,

Windows Mobile 6.0 Unable to start program"%CSIDL_PROGRAM_FILES%\XXX\XXX.exe

此时解决方法大致为两类:

1. 把MFC库动态连接变为静态连接。

Project-->priorities-->Configuration Properties--> General-->Use of MFC:选择Use MFC in a static Library

2. 把工程需要的DLL 拷贝到模拟器的 \Windows或是.Exe所在的文件夹下。具体方法,选择开始->所有程序->vs->remote Tools->remote file viewer选择连接的模拟器,将DLL导入到模拟器。

当DLL有修改后,重新build,此时debug,会发现DLL里的断点变为空心,这是因为rebuild DLL后,该DLL的.pdb(program debug database)版本变化,debug出现问题,断点不是实心,提示错误:

The Breakpoint will not currently be hit. No executable code is currently loaded at this location

解决方法:

在debug时,选debug->windows->modules,可以看到要用到的DLL,查看DLL是否是symbols loaded,若未连接,选择load symbol,选择相应的.pdb。

2.若出现如下错误提示:

此时需要将调用此DLL的主工程下的.lib替换成重新debug后新的.lib版本。

3.结论

本实验成功的将测试程序运行在WinCE模拟器中,得到了满意的结果。与PC比较,由于嵌入式系统软硬件的特定性,使其在资源和计算能力有很大的局限性,所以游戏中涉及到的大规模计算,不得不进行适当的精简,因此,游戏对弈引擎的水平还可以得到进一步提高,到达更好的棋力水平。

参考文献

[1] 张勇,曾炽祥,许波.Windows CE 应用程序设计[M]. 西安 西安电子科技大学出版社 2008 .

[2] 范跃华,张素琴,徐飞.基于WinCE平台的应用程序移植研究[J].西安工业大学学报,2007.

[3] 周振喜,戴国骏,陈晓峰,张国煊.Windows应用程序移植到Windows CE下的策略[J].计算机工程与设计,2004.

[4] 岳鹏 计算机围棋中的算法研究[D].西南大学,西南大学,2007.

[5] 王小春 PC游戏编程(人机博弈) [M].重庆大学出版社 2005.

[6] D.B.Benson Life in the game of GO[J]. Information Sciences 10, 1976, 2:203-213.

[7] E.Berlekamp and D. Wolfe Mathematical Go End-games, Nightmares for the Professional Go Player[J].Ishi press International, 1994: 78-84.

[8] Sylvain Gelly Yizao Wang Rémi Munos and Olivier Teytaud Modification of UCT with patterns in Monte-Carlo Go. Technical Report RR-6062, INRIA, 2006, 30-56.

[9] B.Bouzy and B.Helmstetter Monte Carlo go devElopments. Technical Report RR-6065, INRIA, 2006, 6-8.

[10] 岳鹏 计算机围棋中的算法研究[D],西南大学,西南大学,2007.

[11] 王小春 PC游戏编程(人机博弈) [M].重庆大学出版社 2005.

游戏程序范文第6篇

B游戏软件是A公司开发的一款单机版游戏,A公司对B游戏软件享有著作权。该游戏软件的销售途径有两种:第一,出售实体游戏光盘,光盘包装附激活码(一串数字序列号);第二,从该公司官方网站上免费下载游戏程序,通过网络购买激活码,每个激活码售价人民币50元。2011年4月,嫌疑人叶某在网络上通过搜索发现有人在出售B游戏的破解程序,其购买并亲自试用后,发现只要将该破解程序置于游戏程序根目录内的Bin文件夹下,即可以绕过填写激活码的环节,直接正常运行该游戏软件。后叶某在其淘宝网店销售该破解文件,出售价格为1.7元至3.3元,至案发时销售3000余个。

二、分歧意见

第一种意见:叶某的行为使买受人未经著作权人许可获得了该软件的使用权,并且将非法程序通过上传、下载的方式传播给3000余个买受人,实际上是对软件的发行行为。叶某销售的非法程序现已查证为3000余个,达到了最高人民法院、最高人民检察院《关于办理侵犯知识产权刑事案件具体应用法律若干问题的解释(二)》第1条中规定的,复制品数量合计在500张(份)以上的追诉标准。因此,叶某的行为构成侵犯著作权罪。

第二种意见:叶某的行为本质上是提供绕开或者破坏软件技术措施的工具,侵犯的不是刑法中对于侵犯著作权罪的复制、发行权,不能构成侵犯著作权罪。叶某未经批准和授权,通过网络方式发行电子出版物, 其行为构成非法经营罪。

三、评析意见

笔者同意第二种意见。

(一)叶某行为本质上是提供绕开或者破坏软件技术措施的工具

本案中涉及的软件激活码,是软件开发公司为了维护经济利益,确保使用软件的主体都是经过购买,交付相应费用的人而设计的一种技术措施。软件的技术措施,按照《信息网络传播权保护条例》(以下简称《条例》)中的规定,是指“用于防止、限制未经权利人许可浏览、欣赏作品、表演、录音录像制品的或者通过信息网络向公众提供作品、表演、录音录像制品的有效技术装置或者部件”。软件开发者为了保护经济利益,需要对自己的数字化作品设置密码、加设电子水印或者要求使用者填写激活码(一般是有偿出售),作为使用软件的资格凭证。

本案的B游戏即如此,B游戏提供免费的网上下载,但是如果玩家不购买激活码,即使从网站上免费下载了游戏程序本身,也不能正常进入和运行游戏。行为人叶某所出售的破解程序,是通过将程序安装进入游戏程序本身,改变游戏程序的本身的运行方式,绕过了程序运行中要求玩家填写激活码的认证程序,从而达到不从软件开发者手中购买激活码,也能直接运行游戏的目的。叶某的行为,从本质上说,是有偿提供绕开软件技术措施的工具的行为。

(二)从世界范围看,对于技术措施规避准备行为的刑事认定尚存争议

从世界范围来看,最早正式提出“科技措施”的是 1996 年 12 月世界知识产权组织制定的WCT,其中第 11 条规定了“有关科技措施之义务”,而后,《世界知识产权组织表演及录音制品条约》(The WIPO Performances and Phonograms Treaty)(以下简称 WPPT)也有相关规定。[1]世界上主要的发达国家如英国、美国的著作权法中也有类似规定。

但需要指出的是,虽然国际组织规范和一些国家对于规避技术措施的行为都予以否定性评价,甚至是刑事制裁,但是并非所有与规避技术措施有关的行为都一律受到刑事规制。国际上刑事立法一般将“禁止规避行为”分为“禁止复制行为”和“禁止接触行为”。而在上述二种行为之外,还有“规避准备行为”,即出售、进口、提供对技术保护措施进行破解的装置、设备的行为。

根据 WCT 和 WPPT 内容,两国际条约所禁止的行为是针对“破解有效的科技保护措施的行为”(即规避实施行为),并没有提及破解装置的制造以及销售者的责任。而美国DMCA和欧盟“著作权指令草案”却将破解装置、产品的制造、提供者都推向追究责任的地步,由此引发了许多反对意见。一些学者认为,采取这种保护措施不是以侵权行为为中心,而是以侵权的装置为中心,是与著作权保护的目的背道而驰的[2]。因此,他们对于处罚“规避准备行为”持强烈的反对态度。[3]综上,对于提供规避技术措施工具的行为,即规避准备行为的评价问题,国际领域尚没有形成较为一致的认识。

(三)从我国民事、行政规范领域看,没有将绕开或者破坏技术措施的行为等同于复制、发行行为

在涉及著作权、软件保护、网络信息保护的规范性文件中,我国有不少规范性文件涉及到对技术措施的保护。2010年新修订的《著作权法》第48条、2002年《计算机软件保护条例》第24条和《网络传播权保护条例》第19条也均规定了“故意避开或者破坏著作权人为保护其软件著作权而采取的技术措施的”或者“故意制造、进口或者向他人提供主要用于避开、破坏技术措施的装置或者部件,或者故意为他人避开或者破坏技术措施提供技术服务的”行为,属于侵犯著作权的行为。

虽然上述规范性文件均规定了规避技术措施或者是提供规避技术措施工具行为的侵权性质,但值得注意的是,在上述三个规范性文件中,均毫无例外的将上述行为规定在未经授权的“复制、发行”行为之外。也就是说,从上述法律的体例可以判断,立法者将规避技术措施的行为与复制发行行为规定为不同性质的两种行为。易言之,从这些涉及知识产权的规范性文件的角度看,并没有将规避或者提供规避工具的行为等同为“复制、发行”行为。

(四)从行为本质上看,将技术措施和软件程序本身作为一个整体保护的观点值得商榷

有一种观点认为,应当将软件的技术措施和软件程序本身作为一个完整的权利载体看待,两者是不可分割的权利整体。在此基础上,考虑到现代网络发行方式,即“免费下载+激活使用”,应当认为行为人针对免费下载的软件,销售破解文件,使得买受人可以绕开技术措施直接使用软件,与直接复制、发行权利人软件程序本身并没有本质区别,从而应当认为属于刑法领域内的侵犯著作权罪的规制范围。

诚然,从实际效果的角度来说,或者是从购买者的角度来说,购买破解程序与直接购买复制的或者是未经授权发行的游戏软件本身没有实质的区别,两种行为方式的最终效果都是使购买者不需要向游戏的出品者支付相应的费用,即可运行和使用游戏,从而损害了游戏开发、运营者的经济利益。但是,从行为的特征分析,提供破解程序,与直接复制或者发行软件仍然存在差别。其一,前者行为人本人并没有对软件进行破解和出售,而后者是行为人本身对程序本身进行破解和发行;其二,前者行为人违法所得限于出售破解程序的价值,就本案而言,即每个1.7元-3.3元之间,而后者则是获得程序本身的价值(当然会略低于程序本身)。易言之,前者提供的是一种可能性,购买破解文件的人,有可能进行破解,也可能不进行破解,在行为人出售破解工具的之时,软件本身并没有受到实然的侵害;而后者行为人在出售前的准备阶段,就已经对软件实施了实然侵害。因此,笔者认为,将技术措施和软件程序本身作为一个权利整体,进而认为提供破解文件就是对软件程序本身的变相发行的观点值得商榷。

(五)民事、行政规范性文件中虽然有刑事责任的规定,但是与刑法无法衔接

在前文列举的民事、行政领域内的规范性文件中,有对于规避技术措施或者是提供规律技术措施工具的行为,予以刑事处罚的规定。但是,在刑法对于侵犯著作权罪的规制中,仅规定了复制、发行两种行为作为犯罪构成的客观方面,也就是只有侵犯作品复制、发行权的行为才能认为构成侵犯著作权罪。对于其他权利的侵犯,如对于作品权利管理信息的侵犯,并不是刑法规制的范围。民事、行政法律规制的内容,在刑法上没有被规定,这属于立法之间衔接的问题,不能因为民事、行政领域的规制,直接认定构成犯罪。

综上所诉,叶某未经批准和授权,擅自在网络上发行电子出版物,根据最高人民法院《关于审理非法出版物刑事案件具体应用法律若干问题的解释》的规定,经营电子出版物500份以上的,认为属于非法经营行为情节严重,应当以非法经营罪追究叶某的刑事责任。

注释:

[1]张震:《著作权犯罪若干问题研究》,上海社会科学院2006年硕士论文。

[2]李扬:《网络知识产权法》,湖南大学出版社2002年版,第27页。

游戏程序范文第7篇

关键词:计算机程序设计语言;游戏思想;案例教学法

中图分类号:G642 文献标识码:B

1引言

计算机程序设计语言是高等院校计算机应用及相关专业的专业基础课,是学生进一步加深专业课程学习的基础。在教学中我们发现,因为这门课程要求学生有较强的逻辑思维能力和分析能力,所以很多学生感到学习困难,产生畏难情绪,失去学习的兴趣和信心,对教学效果有较大的影响。

许多学生在进行设计程序时不知何如动手,究其原因,这些学生并不是语句语法没学好,也不是脑子笨,而是没有找到好的学习方法,没有领悟到程序设计的方法和思想,不知道如何利用各种语句和函数的功能、规避各种语句和函数的限制,最终实现程序的要求。因此,这些学生把程序设计看得高深莫测、非常人可做,进而对程序设计产生畏惧感。在高职学院,由于学生的基础相对较弱,这种现象就更加突出。为了帮助这些学生找到学好程序设计的突破口,笔者从教学实践出发,针对这些教学中的问题,探讨了如何有效地通过游戏案例把游戏思想应用于程序设计教学中,以达到提高计算机程序设计语言教学的实效性和增强学生学习兴趣和信心的目的。

2游戏思想在教学中应用的具体案例

在与学生们的日常接触中,我们发现他们当中不乏高手。在一些智力游戏中,他们常常也表现出非凡的才智。无论是,还是智力游戏,往往都包含程序设计的方法和思想。人们在玩这些游戏时,都要在游戏规则下,利用一切可利用的条件,规避各种限制条件,设计一整套实现目标的程序,这一点与程序设计的方法和思想是相通。因此,在计算机程序设计语言教学中,我们采用恰当的案例,通过案例教学法来详细阐述游戏思想与程序设计思想之间的关系,帮助学生理解程序设计的方法和思想。下面通过两个案例来说明如何将游戏思想运用到教学过程中。

2.1案例一

问题:设计一程序,求斐波那契数列(1,1,2,3,5,…)第几项开始大于10000。

这个问题使用数组可能不太好,所以一般常用下列程序段来实现。(因为目前大多数高校都用C语言教学,所以以下程序段用C语言来描述。为了便于后续说明,下列程序段的每条语句标记了行号。)

【C语言描述】

1 a=1;

2 b=1;

3 c=a+b;

4 i=3;

5 while(c

6 {

7 a=b;

8 b=c;

9 c=a+b;

10i=i+1;

11}

12printf(“FibonacciNO.%d>10000”,i);

对于上述程序段中的第7行至第9行代码,许多学生觉得难以理解,或者觉得自己在解决问题时难以灵活运用这种方法。其实,这种方法源自生活中一种很简单的游戏。这种游戏就是:已知甲、乙、丙三个相同的杯子,其中乙、丙分别依次盛有红、蓝两种液体,要求将红、蓝两种液体依次盛入甲、乙两杯中。对于这种游戏,现在的学生不可能完不成。如果能把完成这个游戏的方法和思想与这个程序有机结合起来,学生便可以很好地把握这个问题的程序设计思想。

在这个游戏中,甲、乙,丙三个杯子相当于上述程序中的变量a、b、c,而杯子中的液体相当于变量的值。教师在深入研究教学任务和教学目标后,精心设计或选择恰当的游戏,使学生能够通过完成游戏找到解决程序设计的方法和思想。比如,把这个游戏做以下改进,便可把上述程序设计过程融会到游戏过程中去。

假设在黑板(便于擦拭)上只画了a、b、c、i四个方格。起初,在a格中写入1,在b格中也写入1。然后在c格中写入前两格中的数量之和――2,在i格内填入计数3。现在,要求学生只能利用这四个格子和这种方法,求出斐波那契数列第几项开始大于100(游戏中不要使用太大的数值)。一般的学生稍加思考,也都能很好地完成这个游戏。在学生完成这个游戏的过程中,他们会不自觉地使用与程序设计完全相同的方法和思想,然后将这种方法、思想或过程用计算机语言描述出来。

从这个案例可以看出,初学计算机程序设计的学生往往不了解日常事务的处理方法,也不具备数学建模的能力,所以在学习计算机程序设计之初,一般从解决一些类似日常生活中的小游戏入手。这个案例教学可以培养学生描述解决问题的方法的能力,掌握基本的程序语句语法。

2.2案例二

问题:在12个乒乓球中有且仅有一个次品,它或轻或重于正品。限最多使用三次天平,找出次品,并判断其比正品轻还是重。这个问题主要锻炼学生的分支逻辑思维能力,分析如下:

三次使用天平,将产生三层分支嵌套。第一次使用天平,每边各放4个球,将产生两种结果:平与不平(或三种结果:平,左重右轻,左轻右重)。如果天平左右平衡,则说明天平上的8球全为正品,天平下的4球中含次品。

则:按{分析模块1}来分析:

{分析模块1}第二次使用天平,从8个正品球中取3个放在天平的一边,不妨假设为左边;从含次品的4球中也取3个,放在天平的另一边,即右边。将会出现三种结果:平,左重右轻,左轻右重。

如果平(衡),则{分析模块1.1}剩下1球为次品。

第三次使用天平,便知道次品的轻重(分析模块1.1.1和1.1.2,略)

如果左重右轻,则{分析模块1.2},右边3球含次品,且次品为轻球。

第三次使用天平,从右边3球中任取2球,各放一边。将出现三种结果:平,左重右轻,左轻右重。不难判断出结果来(分析模块1.2.1、1.2.2和1.2.3,略)

如果左轻右重,则{分析模块1.3},右边3球含次品,且次品为重球。

第三次使用天平,从右边3球中任取2球,各放一边。将出现三种结果:平,左重右轻,左轻右重。不难判断出结果来(分析模块1.3.1、1.3.2和1.3.3,略)

否则,说明天平下的4球为正品,天平上的8球含次品。取下天平上的球,分开放置,不妨假设“轻”球放左边,“重”球放右边,然后按{分析模块2}来分析:

{分析模块2} 第二次使用天平,任取右边4“重”球中的3个和左边4“轻”球中的2个,一同放到天平的右边(在不影响天平平衡的情况下,注意区分这5球的“轻”“重”);再取4正品球与剩下的“重”球,一同放到天平的左边。将出现三种结果:平,左重右轻,左轻右重。

如果平,则{分析模块2.1}现在天平上的10球全为正品,天平下的两“轻”球含次品,且次品一定是轻球。第三次使用天平,略。

如果左重右轻,则{分析模块2.2}在左边的1个“重”球与右边的2个“轻”球中含次品,其他球均为正品。

第三次使用天平,再将2个“轻”球分放天平两边。结果可出,后续分析略。

如果左轻右重,则{分析模块2.3},次品包含在右边的3个“重”球中,且次品为重球。第三次使用天平,可出结果,后续分析略。

【C语言描述】

为了便于描述,将12个球用a,b,c,d,e,f,g,h,i,j,k,l分别表示(这步是将日常语言“转化”成计算机语言的关键)。

if (a+b+c+d=e+f+g+h)

{

if (a+b+c=i+j+k)

{

If (a>l) printf(“l is light”)

Else printf(“l is weight”)

}

Else

{

}

}

else

{

}

有些游戏或多或少存在一些难度,如在课堂临时布置,必然影响教学进度。所以应提前布置游戏任务,让学生利用课余时间充分地思考。在案例教学中,教师应注意两点:一是鼓励学生互相讨论。在讨论中,学生的思想可以相互碰撞,相互启发,开拓思路。同时,还可以激发学生的兴趣。二是要督促和引导。由于有些游戏有一定的难度,学生可能会因长时间找不到问题的解决办法而置之脑后或气馁。这时,教师的督促或引导可以帮助学生继续思考。在顺利完成游戏的基础上,可以先要求学生用文字描述完成游戏过程,要求步骤清晰,然后引导学生使用算法描述性的语言,最终要求学生用计算机语言来描述完成游戏的思想和过程。通过这个案例教学,学生把现实语言转化为计算机语言的能力以及灵活运用分支语句的能力将有很大的提高。

3结束语

通过以上案例教学活动,我们发现将游戏引入到计算机程序设计教学很有意义。某些完成游戏的方法和思想与程序设计的方法和思想是相通的。人们在长期的生产实践中,总结设计出了许多游戏,这些游戏往往可以锻炼学生的不同能力,比如学生描述解决方法的能力、步骤设计能力、分支思维能力、数学建模能力等。借助游戏可以使学生更好地领会程序设计的方法和思想,健康有益的游戏可以激发学生的兴趣和潜力,调动学生思考的积极性,开拓学生的思路。

教师在将游戏引入到计算机程序设计教学中,要有步骤地进行。首先要根据教学内容和目标精心设计或选择游戏,这是游戏案例教学法中最关键的一步,它将影响游戏教学法的最终效果。针对不同的游戏,可以提前布置游戏任务,给学生思考和讨论的时间。然后,在顺利完成游戏的基础上,要求每位学生用文字描述完成游戏的过程。最后,要求学生用计算机语言来描述完成游戏的过程,这是教学的最终目的,也是为了培养学生将现实语言转化为计算机语言的能力和灵活运用计算机程序解决实际问题的能力。在上述过程中,教师的作用主要在引导,而解决问题的办法和程序,主要由学生通过自己的思考得来。

教学实践证明,采用这种教学方法的班级,期末考试平均成绩和合格率明显提高,并且学生的思维活跃,学习兴趣高,甚至有些学生还有一些创新的思维方式。所以,在计算机语言课程的教学中,恰当地引入游戏思想,运用案例教学法,既可以帮助学生理解程序设计的方法和思想,又可以启发学生的思维。同时,活跃课堂气氛,寓教于乐,合乎快乐学习的现代教育理论。

参考文献:

[1] 郝桂英.关于计算机程序设计语言课程教学的探索[J].教育与职业,2007(6).

[2] 解晨光.关于高职高专计算机教学改革的研究[J].教育探索,2006(8).

游戏程序范文第8篇

关键词: Java编程; 游戏驱动模式; 自主学习; 计算思维

中图分类号:G642 文献标志码:A 文章编号:1006-8228(2015)01-72-03

Research on teaching reform of Java program design course based on game-driven mode

Zhang Si, Xiang Hua

(Department of Mathematics and Computer Science, Jianghan University, Wuhan, Hubei 430056, China)

Abstract: Games, as powerful teaching tools, have achieved remark able result sinmilitary training and corporate training. Aiming at some practical problems in Java programming course teaching, how to inspire students who has different majors and basic knowledgeby using the game-driven teaching mode are discussed to teach students to understand computational thinking and master the programming skills.

Key words: Java programming; game-driven mode; self learning; computational thinking

0 引言

世界上第一个计算机游戏是由英国剑桥大学A.S. Douglas博士于1952年开发的,他的研究方向是人机交互。计算机游戏随后发展涉及计算机科学研究的许多领域。例如:模拟仿真,人工智能,图形图像,嵌入式开发,人机交互,网络通信以及云计算等。杜克大学人体仿真和病人安全中心主任 Jeffrey Taekman指出:“游戏和虚拟环境是教育的未来。”经常可以看到关于学生废寝忘食地沉迷于游戏世界的报道。学生对于游戏是没有免疫力的,古语有云:“水能载舟,亦能覆舟。”如果教师在教学中能利用游戏的这种吸引力,现有的很多程序设计类课程课堂教学中存在的问题将迎刃而解。

1 现状及问题

1.1 学生水平参差不齐,学习兴趣不高

Java程序设计课程在大学里开设一般作为选修课。课程面向不同专业的学生,这些学生的计算机基础不同,数学底子,抽象思维以及逻辑分析能力也各不相同,关键的是学生的学习动机也各不相同。对于以后不从事程序设计相关工作的学生,其学习兴趣自然不会高。例如非计算机专业学生一般都是以通过等级考试,拿学分为目的。以通过考试为目标的学生,机械式地学习程序语法,当然会觉得课程教学内容枯燥。有相当一部分学生认为大学专业课是重点,程序设计课与专业不相关,学不学都可以。国家教育部对高等学校非计算机专业学生的培养目标是有程序阅读基础,有理解程序的能力,完成相关课程后学生应该能够将程序设计方法应用到自己相关的领域中去。

1.2 学生多,教师少,互动效果差

Java程序设计课程,在大学里一般采用大班授课形式,而从事非计算机专业公共课教学的教师人数很少。以笔者所在学校(江汉大学)为例,选修课人数一般在40人至80人之间,人数多的班达到110人以上,而负责公共课教学任务的计算中心教师只有15人。课程教学一般采取多媒体上机教学。教师通过教学平台软件控制学生机,演示教学内容;学生通过提问的方式与教师交流互动。实验教学一般是学生在机房独立完成实验计划上统一的项目方案,实验课没有实验员,只有一名教师。对于这么悬殊的师生比例,很难做到因材施教。

采用传统课程讲授与实验上机辅导相结合的方式,一个班的学生多时,授课教师无法保证每个学生都能及时消化课堂上的知识。有些比较内向的学生即使不懂也不好意思向教师提问,长期积累,这些学生会越掉越远,出现厌学情绪。上课时间学生心不在焉,看手机,微信聊天,玩扫雷,玩纸牌游戏等情况屡见不鲜。

1.3 教学内容多实验课时少,与实际应用脱节

Java程序设计课程基础内容是学习简单数学算法,数据类型,程序结构,函数方法调用,输入输出处理等;高级内容涵盖面向对象设计,GUI界面设计,网络功能开发,多线程等内容。以江汉大学为例:Java程序设计课程只有48个学时,其中实验为16个学时。教师在规定学时内要让学生掌握以上的全部知识点,每节课的信息量很大。教师上课时只能以讲授理论知识为主而无暇顾及具体实践。除计算机专业学生外,大多数学生都不知道学完以后能做什么,很迷茫,找不到方向。教师单纯讲这些课程内容难免会让学生觉得枯燥无味,同时学生也只能管中窥豹,无法感受程序设计开发的整体过程。学生所学理论知识无法贯穿于实践,更加无法在实际中应用。

如果说算法设计的是计算机科学的内家功夫,那么程序设计语言就是外家功夫。程序设计这门外家功夫讲究的是无招胜有招,而填鸭式的学习语法,无法在真实项目中做到见招拆招。只有学生具备了计算思维[1],那么无论使用何种编程语言,都将轻松入门。

2 游戏教学法

游戏教学法意味着打破传统按章节知识点授课的方式,从实际游戏项目出发,在游戏设计开发的过程中,让学生从亲身经历的案例中分析原理,从实际现象中看出本质,最后将自己抽象领悟出来的概念与通书本上的理论知识相对应。图1是游戏教学模式示意图。

[综合运用][基础功能][创意功能][理论][实践] [课程

知识点] [专业][生活]

图1 游戏教学模式

通过游戏驱动学习[2],有很多优点。首先,游戏很容易抓住学生的注意力,引起学生的兴趣,激发学生的学习动机。其次,游戏世界里GameOver并不代表要受到惩罚,学生可以StartOver,把失败当成一次学习的机会。最后,游戏让学习者自己发现探索规律,而不是有老师阐述告知结果。

对于非计算机专业的学生,通过学习程序设计课程,能够掌握按照计算机方式分析和解决问题的能力,这是基本要求,而学会理性的、合乎逻辑的处事方式才是最终理想效果。游戏教学法不仅让学生学到书本上有的知识,还可以从自己的专业出发,结合实际生活中的一些奇思妙想,在原有经典游戏的基础上开发出一些有创意的功能。

3 实施方法

3.1 课程组织

在传统的教室上课模式基础上改进为“大学计算机公共课全机房教学模式[3]”。教学中,把授课同上机相结合,统一机房教学,通过经典游戏案例教学方式,精讲多练,将学生吸引到教学活动中来,使学生成为课堂教学主体。在多媒体机房,一人一机,即讲即练。

3.2 教学安排

从传统的按知识结构体系的教学模式转变成以游戏项目为中心的教学模式是切实可行的教学方案[4]。在课程教学实践进程中,以游戏案例为导向,以教师的演示和讲解为辅助,学生为主体合作、讨论,教师对课程教学内容进行组织优化,构建培养以自主学习[5]为核心的课程知识体系,选择典型的游戏案例作为教学内容,形成切实可行的游戏开发的教学方案。例如:Java程序设计课程重点难点一般包括:常用系统类的使用,数组的运用,OOP设计及实现,Java多线程,Java图形用户界面设计等。以下用一个游戏为例,阐述如何将游戏从小做大,将知识点隐形地传达给学生。

整个游戏项目开发周期中有三个关键版本:首先是CLI文字显示游戏版本,其次是GUI界面显示游戏版本,最后是基于TCP/IP协议的网络游戏版本。教师可以根据学生掌握情况调节项目开发难度。图2是整个游戏的UML设计图。

<E:\方正创艺5.1\Fit201501\图\zs图2.tif>

图2 游戏设计UML图

在第一个版本中,主要是对学生面向对象编程技能的锻炼。知识点涵盖Java泛型数据类型,函数方法的使用,类的定义,对数据的抽象以及封装,对象的使用,一维和二维数组的使用,文件数据读取生成对象,对象序列化输出以保存游戏状态,游戏事件处理机制,使用继承和多态机制实现地形,以及卡牌的多样性。

<E:\方正创艺5.1\Fit201501\图\zs图3.tif>

图3 游戏GUI界面截图

第二个版本是让学生练习如何使用Java自带的Swing,以及AWT库设计和实现GUI界面。主要工作是设计并实现组成用户界面的各个组件,通过布局管理器合理排布管理它们在容器中的位置。针对各个组件产生的事件编程,处理并响应不同的事件。通过使用双缓冲原理,实现游戏动画的流程效果。图3为演示游戏的GUI界面截图。

第三个版本是在前面单机游戏基础上考察学生对于网络基础知识的理解和掌握情况。其中涉及网络应用的C/S结构,IP地址和端口的概念理解,TCP协议的使用和Java编程实现方式。

3.3 实验教学

游戏有不同的类型题材,学生也有不同的专业背景。对于非计算机专业的学生而言,程序设计是一个全新的领域,计算思维是一种新的思维方式。当人初次接触一个新事物时,抵触和恐惧往往大于好奇和兴奋。

对非计算机专业学生,需要采用投其所好的教学策略。首先从他们熟悉的方向着手,再慢慢地使其解除抵触心理,最后引导其学习并掌握新知识。表1中列举了一些案例。

表1 学生专业与游戏类型对应表

[学生专业\&游戏类型\&例子\&文史专业\&文字类游戏\&“王”字加一笔,变成哪些字\&艺术专业\&图形或音乐类游戏\&“你画我猜”,“听曲识歌”\&外语专业\&单词类游戏\&“Crossword” 线索填单词\&理工专业\&复写经典类型\&“俄罗斯方块”,“扫雷”\&]

学生能力有差异,为了避免一刀切的现象,在实施教学方案时,教师可以根据学生情况调整难度系数。根据学生能力的不同,将游戏划分成不同模块分步完成。

对于基础好的学生,可以直接提出需求,具体实现上留空间让其创造发挥。下面以俄罗斯方块游戏为例:复刻经典游戏-俄罗斯方块,要求使用面向对象程序设计思想,至少用三个以上的类实现功能,为游戏添加一个有趣的新功能。

对于基础一般的学生,可以在给出需求的同时,提供一定的接口,将功能细化,把大任务分解成多个小任务。例如:在素材中有Tetris.java,Shape.java,Board.java三个文件,独立实现源代码中留空的方法函数。

对于基础薄弱的学生,可以提供一个主体功能缺失,辅助功能完备的程序模板,让其实现主要功能函数方法。例如:编译运行素材中的俄罗斯方块游戏,游戏中消除满行方块功能未实现,请在代码指定函数方法处实现该的功能。

3.4 考核评级

平时成绩和期末考试成绩占比分别为40%和60%。平时成绩中又分为两块内容:课堂活跃度和实验完成度,如图4所示。期末考试实行教考分离,计算机上机考试,机器阅卷的形式。

<E:\方正创艺5.1\Fit201501\图\zs图4.tif>

图4 学生成绩考核评级占比

4 结束语

游戏教学模式改变了知识传授方式,通过解决实际问题,把相对独立的知识点融会贯通,潜移默化地培养学生计算思维。游戏教学模式对提升程序设计类课程实用性,培养学生实际应用能力也起到了一定效果。尽管如此,这种教学模式相对于传统教学模式来说有其复杂性,如大大增加了教师的工作量;需要教师投入更大的精力和时间,更加全面,合理地制定教学策略。仅靠一两门课就要求学会不同思维模式之间的转换是不切实际的,下一步游戏教学研究重心会放在如何通过移动平台游戏整合零碎学习时间,大幅提升学生在课堂之外的自主学习时间。

参考文献:

[1] 臧劲松.培养学生计算思维的程序设计课程教学[J].计算机教育,

2012.2:78-80

[2] 张渝江.游戏驱动学习[J].中国信息技术教育,2013.6:102-105

[3] 廖恩阳,刘征.大学计算机公共课全机房教学模式探索[J]. 计算机教

育,2014.18:43-45

[4] 宋瑾钰,愈成海,孙树森.基于项目引导-任务驱动的Java手机游戏开

发教学模式研究[J].中国校外教育,2012.3:162

[5] 刘砚秋,何灵敏,周杭霞,陆慧娟.基于自主学习的大学计算机基础教

游戏程序范文第9篇

[关键词]电子游戏;高校;教学;课程体系

中图分类号:G898.2 文献标识码:A 文章编号:1009-914X(2013)06-0089-01

1、我国电子游戏产业的发展与教学现状

在我国,目前以电脑游戏为代表的电子游戏市场正处于繁荣的高速增长期,并且在未来的几年内仍将保持强劲的态势。2010年,我国网络游戏产业规模达到61亿元,比2004年增长51%。随着政府及相关部门扶持与发展力度不断加大,2006年,我国电脑游戏产业已基本进入理性、成熟的发展期,国产原创电脑游戏的市场占有率正逐渐赶上和超过欧美、日韩的游戏产品.自主研发的国产电脑游戏表现出了强劲的发展势头。据权威机构统计,2005年我国的国产电脑游戏市场占有份额已达到42%,而韩国电脑游戏在我国的市场份额则从68%下降到49%。从这些统计结果中不难看出自主研发的国产电脑游戏“一日千里”的发展速度。

我国高校游戏设计专业的设立大多是建立在动画、漫画、多媒体等专业基础之上的。尽管游戏行业在其项目开发上通常都是采用团队协作的模式,研发过程需要不同专业人员的共同作用。但是游戏行业因为有其自身的行业规则以及受游戏开发硬件技术的限制。目前中国高校的游戏设计专业的教学主要是以游戏美术设计课程的教学,课程教学中心围绕图像设计为主,课程有《游戏原画设计》、《游戏界面设计》、《游戏场景设计》、《三维游戏角色制作》等。这些课程的教学共同点就是设计与制作。对于游戏美术设计课程来说软件学习是设计的重要组成部分,在教学过程中不少课程是基于软件学习基础之上展开的。在游戏设计的教学过程中逐渐形成了侧重软件教学的比重,强调学生对软件技法上的训练,相对忽视美术、设计理论、设计方法等方面的知识教学的现象。而过于追求学生的软件技能、技法训练会导致大多数学生对游戏设计的知识结构在理解上走入误区,轻视了对文学、美术、设计理论知识的学习,会导致学生在今后的游戏创作的过程中虽然有很多天马行空的想法却缺乏基本逻辑性和设计的合理性。

2、高校游戏设计专业的整体课程改革与实践

2.1 教学内容的改革与实践

由于游戏是一种集剧情、美术、音乐、动画、程序等为一体的复合技术,在整个游戏设计开发过程中,会涉及到游戏策划、游戏内容编辑、游戏美工、音频制作、游戏开发、游戏测试等多种角色。而选修该课程的多数学生并不具有很好的程序开发或动漫设计基础,因此,在安排教学内容时,课程体系要突出游戏开发与设计中的原理和方法,并注重基于Flash软件介绍游戏开发和设计的具体实现,主要的教学内容及目的如下:

2.1.1 计算机游戏概述

主要包括计算机游戏的概念及发展历史;计算机游戏的特点;游戏的分类方法及类型包括动作游戏、冒险游戏、角色扮演游戏、策略游戏、模拟游戏、竞速游戏、智力游戏、运动游戏等);游戏运行平台介绍。本部分内容将加深学生对计算机游戏的发展过程、特点等基本知识的了解,掌握游戏的分类方法,树立学生正确的游戏观念。

2.1.2 游戏实现基本技术

主要内容包括游戏编码的组成部分和实现流程(Flas、ActionScfipt编程基础);游戏可视化(Flash中游戏交互的实现);游戏听觉化(Flash中声音的播放)。通过本部分的内容学习,学生将掌握利用Flash设计并制作游戏的基础知识,包括Flash~画制作的基础知识、ActionSefipt编程基础、以及Flash游戏交互方式、声音播放等的实现,为利用Flash制作游戏奠定技术基础。

2.1.3 游戏设计的实现元素

主要内容包括游戏界面设计及故事叙述;游戏中的数学和人工智能;原型化方法以及游戏场景构建;游戏的完成。通过本部分的学习,学生将了解游戏界面设计、故事叙述的基本知识,理解游戏中的数学和人工智能,并通过一些实例分析Flash游戏的具体实现,使学生掌握将有创意的游戏设计转变为可玩的Flash游戏的方法。

2.1.4 游戏的商业层面

主要介绍游戏营销;游戏行业中的经济学。通过本部分内容的学习,学生将了解游戏的营销方式和市场行为,了解游戏的赚钱和花钱之道。

2.2 教学方法的改革与实践

2.2.1 建立立体化的教学环境

为加强课程的教学效果,我们应建立“课堂教学+实验教学+网络教学”的立体化教学环境。

(1)课堂教学。课堂教学的内容主要可以分为两部分:一部分是有关计算机游戏的基本概念和基本知识的介绍,这部分内容比较好理解,主要结合当前比较流行的游戏(OH开心网、魔兽世界等避行讲解,以提高学生的兴趣;另一部分是有关Flash游戏制作的技术,考虑到选修该课程的主要是非计算机专业的学生,大多数学生的编程能力较差,因此在简单介绍ActionScfipt语法规则的基础上,结合实际的Flash游戏实例进行讲解。

(2)实验教学。只有让学生动手,才会使他们感到有成就感,进而才会对课程产生兴趣,学起来才会变得比较从容。因此本课程要安排三个比较大的实验,通过实验,使学生完成动画制作、Flasb游戏编程和游戏制作的整个过程。学生带着老师的问题进行实验,老师在指导过程中搜集和归纳学生遇到的问题,并在下一次课堂教学中及时进行总结和强调。形成课堂一一实验――课堂的循环信息刺激,有利于学生加深对知识的理解,并强化记忆。并且,考虑到有些实验难度较人,因此每个实验都提供了相应的实例和制作视频,使学生可以通过类比对照的方法完成实验。

(3)网络教学。利用学校的网络教学平台,向学生提供课程教学的相关资料、课程信息,以及丰富的网上教学资源,以便于学生在课后自主学习。

2.2.2 综合利用多种教学方法

课堂教学是整个教学活动的另一重要环节,课堂组织是否科学合理直接影响学生学习的质量和效果。在教学过程中,应采取以下有效措施。

(1)根据教学内容,合理安排教学进度,把握教学节奏。该课程涉及内容多,多数同学又不具备相关基础知识。因此在课程进度方面采用“慢快结合,实例示范”的方式。“慢”是为了让学生有充足的时间消化接收新概念;“快”是当讲授日常接触的内容时,使学生理清知识强化记忆即可,避免让学生产生“我知道,没意思”的情绪。

(2)巧设任务(案例),妙用分组讨论,突出探究式教学。该课程要求理论与应用并重,并希望同学能够掌握Flash制作游戏的方法。而在讲解游戏制作时,如果单纯讲程序设计的语法,多数学生都没有兴趣,因此,主要采用案例教学法,结合已设计制作好的Flash游戏进行讲解,既解释语法规则,又剖析了游戏的设计制作过程,从而调动学生进行积极思考和探究,强化理解。课程不要求学生掌握所有的内容,而是根据学生兴趣,有选择性地学习。最后,学生可以通过分组合作完成所设定的任务。

3、结束语

游戏程序范文第10篇

关键词:研究性学习;五步教学模式;高职;游戏程序设计;教学

中图分类号:G642文献标识码:A文章编号:1009-3044(2008)09-11673-01

Teaching Research of Vocational College Game Programming Design Course of Problem-solving Learning

CHEN Dai-jin, ZHOU Cheng

(Computer Department, Kangda Vocational Technical College, Guangzhou 511363, China)

Abstract: This thesis herein discusses mainly the teaching mode of game-designing, and advances a "5-step teaching mode for the course "Game Program Designing" of High Vocational College which is based on task-based theory according to the theory of Constructivism. It proves this mode's important role in making up for the inadequate traditional teaching modes and simultaneously stimulating the student's ability in problem-solving.

Key words: Research learning; 5-step teaching mode; High Vocational Education; Game Program Designing; Teaching Method

1 引言

经过将近一年的教学研究,该院校学生小组开发出了多款高质量的游戏作品,其中游戏作品《武》在2007年“广东省首届高校IT职业技能大赛”中荣获一等奖。

2 问题的提出

传统的计算机教学模式:“讲解―演示―上机练习”,以教师的讲解、演示为中心,学生是被动地接收、模拟性的操作。这种教学形式没有充分体现出游戏设计学科“操作性强、实践性强”的特点,一定程度上扼杀了学生的创造能力、实践能力,不会创造性能动地运用所学知识解决问题。因此,“重传授知识,轻自主研究实践”的传统教学已不能真正实现游戏设计课程的教学目标。

3 “高职《游戏程序设计》五步教学模式”的构思

在《游戏程序设计》课程教学中引入问题驱动,革新传统的《游戏程序设计》教学模式,采用“问题导入-分解任务―自主探究―评价交流D过程反思”的学习模式,把学生置于一种动态、开放、主动、多元的学习环境中,为学生提供更多的获取知识的方式和渠道,充分体现学生自主性学习的地位,最大限度地激发和调动学生探究问题、解决问题的积极性,把培养学生的创新精神及实践能力渗透到《游戏程序设计》课程的教学中,笔者提出了如图1所示“高职《游戏程序设计》五步教学模式”,用于改革高职《游戏程序设计》课程的教学。

戏程序设计》五步教学模式”

4 “高职《游戏程序设计》五步教学模式”的教学研究

(1)理论支撑:本研究基于建构主义学习理论,人本主义理论,教学设计理论,多元教学评价理论。

(2)研究方法:主要有文献研究法,行动研究法,问卷调查法。

(3)研究前的准备:包括研究样本的确定与分析,研究的变量分析,教学内容的选择,学生学习情况问卷前测,学生《游戏程序设计》能力前测,学习资源准备(专题网站构建等),分组,各种观察、评价工具的准备,学生相关档案袋的建立。

(4)研究过程。

a. 第一轮教学研究

教师按照”高职《游戏程序设计》五步教学模式”(以下简称模式)的一般步骤安排教学,目的是让学生初步使用该模式,了解问题驱动、任务、相关步骤和特点。拟通过教学实践,验证该模式的组成环节。

b. 第二轮教学研究

对第一轮研究的设想、做法、内容等进行修正与完善,提出第二轮的研究计划。进一步对模式中的问题设计进行研究,进一步发现模式中的问题:如学习中的问题具体化,和任务紧密相连的程度等,使其更具有操作性。继续开展教学试验,进一步完善学习网站,为学生提供更多的学习资源。

c. 第三轮教学研究

对第二轮出现的问题与不足进行修正与完善,提出第三轮的研究计划,进行第三轮的研究。为了深入研究,本阶段拟定的行动计划是:设计制作多种评价表,采用多种评价方法对模式的学习过程进行评价。继续开展教学试验,进一步发现模式中的问题。

5 结束语

本研究认为,“高职《游戏程序设计》五步教学模式”在教学中“以教师为主导、学生为主体”,能促进学生主动参与知识的建构,使学生对程序设计的兴趣得到提高,学生更易掌握教学内容,学习成绩普遍上升,教学效果好。学生的问题意识、问题解决能力、实践动手能力、自主学习能力得到加强。能够培养学生协作意识,能做到面向全体学生因材施教,能提高学生的综合素质。基于问题驱动的”高职《游戏程序设计》五步教学模式”是改革高职《游戏程序设计》课程教学的一种好方法。

参考文献:

[1] 何克抗. e-Learning的本质――信息技术与学科课程的整合[J]. 电化教育研究,2002(1).

[2] 李克东.教育技术学研究方法[M]. 北京:北京师范大学出版社, 2003.

[3] 乌美娜. 教学设计[M]. 北京:高等教育出版社, 1994.

[4] 余胜泉, 杨晓娟, 何克抗. 基于建构主义的教学设计模式[J]. 电化教育研究,2002(12).

[5] 化得元. 运用现代教育技术促进学生自主学习的思考[J]. 电化教育研究, 2003(8).

上一篇:竣工验收程序范文 下一篇:巨人网络范文