1、 基于设计模式的游戏框架设计摘要 :设计模式并不是直接用来完成代码的编写 ,而是描述在各种不同的情况下 ,要怎么解决问题的一种方案。使用设计模式是为了可重用代码、让代码更容易被他人理解、保证代码可靠性。本文应用设计模式中的模板方法模式为不同的Windows 视频游戏搭建了一个可复用的框架。关键词 :设计模式;模板方法模式;windows 游戏框架Abstract : Design pattern is not directly used to complete the preparation of the code,but described a scheme to solve the pro
2、blem in a variety of different situations.Use of design patterns is reuse code, to make the code easier to be understood, to ensure the reliability of the code .In this paper ,we use the design pattern in the template method pattern for different Windows video game to build a reusable framework.Key
3、Words: Design pattern 、the template method pattern 、windows game framework1、引言“模式”这个词来源于克里斯托夫亚历山大的模式语言(A pattern Language) 一书 ,书中提到 :“每一个模式描述了一个在我们周围不断重复发生的问题 ,以及该问题的解决方案的核心。这样 ,你就能一次又一次地使用该方案而不必做重复劳动”。后来 ,“模式”一词被引入到计算机科学领域 。设计模式并不是直接用来完成代码的编写 ,而是描述在各种不同的情况下 ,要怎么解决问题的一种方案。设计模式在软件设计中起着非常重要的作用 ,使用设计模式
4、可以提高软件的可维护性和复用性。模板方法模式是设计模式中常用的一种模式 ,本文应用该模式设计了一个 Windows 游戏程序框架 ,可在不同的视频游戏程序中使用。2、 设计模式 在软件开发中,一般有 3 个类型的模式:代码模式、设计模式和系统模式。代码模式指的是编程过程中各种编程技巧;设计模式协助完成系统的模式,主要实现系统功能;系统模式是设计整个系统结构。软件设计模式是利用面向对象技术来解决特定环境中的问题的方法,是针对软件设计过程中某个特定环境下出现的问题的可重用软件设计方案。它不仅是过去的成功解决方案,还是经验的总结,更是智慧的结晶。它可以共享过去的成功经验,降低解决问题的复杂度,提高设
5、计的模块化。 设计模式是在特定背景下,描述解决一个设计问题的多个类及类与类之间的通信的对象的描述。一个设计结构的主要方面是由模式抽象和命名来确定的,这些设计结构是可复用的。Alexander 给出过模式的经典定义,每个模式都是对一个在某种环境下不断出现的问题和解决这个问题的方案核心的描述。有了这些模式,就可以省略许多重复的工作,高效利用现有方案。不同的设计模式都是针对不同问题提出的,所以一般认为一个设计模式有四个基本要素:模式名称、问题、解决方案、效果。开发人员根据开发时出现的具体问题选用不同的模式,使得设计更合理、可重用性更高。设计模式包括创建型模式、结构型模式和行为模式三大类几十种模式。常
6、用的软件设计模式有23种,它包括工厂模式、建造模式、工厂方法模式、原始模型模式、单例模式、适配器(变压器)模式、桥梁模式、合成模式、装饰模式、门面模式、享元模式、代理模式、责任连锁模式、命令模式、解释器模式、迭代子模式、备忘录模式、观察者模式、状态模式、策略模式、模板方法模式、访问者模式。3、 模板方法模式介绍模板方法模式需要开发抽象类和具体子类设计师之间的协作。一个设计师负责给出一个算法的轮廓和骨架,另一些设计师则负责给出这个算法的各个逻辑步骤。代表这些具体步骤的方法称做基本方法;而将这些基本方法汇总起来的方法叫做模板方法,这个设计模式的名字就是从此而来。 模板方法模式,简单理解就是将关键的
7、业务方法、逻辑或算法封装起来,而把具体的一些容易变化的步骤留给子类来进行具体不同的设置,具体表现就是实现父类的方法。模板方法模式先指定一个顶级逻辑框架,而将逻辑的细节留给具体的子类去实现。即模板方法模式把我们不知道具体实现的步骤封装成抽象方法 ,提供一个按正确顺序调用它们的具体方法 ,构成一个抽象基类。子类通过继承这个抽象基类去实现各个步骤的抽象方法 ,而工作流程却由父类控制。换句话说 ,模板方法模式是定义一个操作中的算法的骨架 ,将一些步聚声明为抽象方法延迟到子类,让子类去实现。不同的子类可以以不同的方式实现这些抽象方法。模板方法模式是一个很简单的模式,却被非常广泛的使用。之所以简单是因为模
8、板方法模式仅仅使用到继承的关系。模板方法模式的设计思想是:作为模板的方法定义在父类(父类为抽象类),而方法定义使用抽象方法,实现抽象方法的是子类,要在子类实现方法,才能决定具体的操作。如果在不同的子类执行不同实现就可以发展出不同的处理内容。不过,无论在哪个子类执行任何一种实现,处理的大致流程都还是要依照父类制定的方式。模板方法模式适用于一次性实现一个算法的不变的部分,并将可变的行为留给子类来实现。使用模板方法模式可以将代码的公共行为提取出来,达到复用的目的。而且,在模板方法模式中,是由父类的模板方法来控制子类中的具体实现。模板方法模式在框架设计中得到了广泛的应用。4、 Windows 游戏程序
9、框架设计要设计一个可以重复使用的 Windows 游戏程序框架 ,首先要分析出在游戏程序中哪些操作是稳定的 ,完成后不需要修改并可供其他部分使用,分析出哪些是变化的,具有其自身独有的特点。然后用父类将稳定的算法步骤和框架封装起来 ,而由子类实现那些可能发生变化的细节 ,这也正是模板方法模式的精髓。一款 Windows 视频游戏程序通常应该遵循三大步骤 :1)初始化系统 ,准备游戏数据 ;2)开始游戏循环 :判定状态 ,并对当前状态进行处理 ,处理过程包括获取输入、计算并更新数据以及输出 ;3)清理数据 ,释放系统。就是说 ,所有的 Windows 视频游戏程序的框架及操作过程都是确定的 。但是
10、 ,在这个过程中 ,某些细节即某些步骤的具体实现是我们不知道的,依据不同的游戏以及不同的过程实现的方法也不同,即我们无法确定具体的实现方法,我们必须根据具体情况去实现。对于不同的游戏 ,需要初始化的数据不同 ,在循环中处理输入、更新游戏数据的方式以及游戏过程中处理方法也不同 ,最后需要清除的数据也不同。那么 ,我们就可以将一个 Windows 游戏程序中固定的算法骨架放在父类中 ,让父类将算法步骤进行封装,而将那些随游戏的不同而不断变化的步骤延迟到子类中再实现。不同的子类可以实现这些不同的抽象类。在具体的程序设计过程中 ,首先,我们可以定义一个框架类 , 假设将其命名为 CApplicatio
11、n。在这个框架类中主要包括以下几个关键函数 :定义游戏程序框架的函数 Run(),初始化函数 Init()、帧处理函数 Frame() 和清理函数 Shutdown()。Run() 函数部分关键代码如下所示 :BOOL CApplication:Run()MyRegisterClass(); / 注册窗口类InitInstance(); / 创建、显示窗口Init(); / 初始化函数while(Msg.message != WM_QUIT)if (PeekMessage(&Msg, NULL, 0, 0, PM_REMOVE) / 如果有消息则进行消息处理TranslateMessage()
12、;DispatchMessage();else / 如果没有消息 ,则进行游戏的处理Frame(); / 进行每一帧的处理 ;Shutdown(); / 清理函数return TRUE;在上述代码中 ,MyRegisterClass() 和 InitInstance() 是每一个Windows 应用程序必须要实现的功能 ,因此 ,将它们封装在框架类中。而 Init()、Frame() 和 Shutdown() 这 3 个函数则根据游戏的不同而不同 ,因此 ,在框架类中可以将这 3 个函数定义为纯虚函数 ,它们的具体实现则延迟到子类中。通过这种方式 ,我们就达到了利用模板方法模式搭建游戏程序框架
13、的目的。5、 小结本文结合了一个具体的应用,研究了软件设计模式中模板方法模式,并使用该模式搭建了一个游戏的使用框架,可用来开发Windows视频游戏,为软件开发者快速设计此类游戏提供了可能。参考文献:1计春雷.软件设计模式及其应用研究.上海电机学院学报,2006,9(5):46一49.2邹娟,田玉敏.软件设计模式的选择与实现.计算机工程,2004,30(10):79一813张洁.设计模式在游戏框架设计中的应用. 科技传播,2011,20.4Erich Gamm, Richard Helm, Ralph Johnson, John Vlissides著.设计模式:可复用面向对象软件的基础.机械工业出版社,2000,6.5美Jim Adams著.DirectX角色扮演游戏编程.黄际洲,刘刚译.重庆大学出版社,2006,2.7程杰.大话设计模式.清华大学出版社,2007,12.8美Robert C. Martin著.敏捷软件开发:原则、模式与实践.邓辉,译. 清华大学出版社,2003,9.9张慧军.设计模式在电子商城中的研究与应用.电脑开发与应用,2010,01.10秦海玉.Windows游戏程序设计基础.电子工业出版社,2011-10.7