CN103425469A - 基于mda技术的***代码生成方法 - Google Patents
基于mda技术的***代码生成方法 Download PDFInfo
- Publication number
- CN103425469A CN103425469A CN2012101574625A CN201210157462A CN103425469A CN 103425469 A CN103425469 A CN 103425469A CN 2012101574625 A CN2012101574625 A CN 2012101574625A CN 201210157462 A CN201210157462 A CN 201210157462A CN 103425469 A CN103425469 A CN 103425469A
- Authority
- CN
- China
- Prior art keywords
- game
- gdl
- mobile phone
- file
- scene
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
Images
Landscapes
- Stored Programmes (AREA)
Abstract
本发明涉及一种基于MDA技术的***代码生成方法,其包括以下步骤:S1:解析模板文件,生成与技术无关的游戏基本框架和游戏场景;S2:解析GDL文件;任何一个***由游戏主循环和若干场景构成;而每个场景由对象、游戏运行中对象的状态改变和游戏动作、一组对象发生的各种事件组成,所以需要在GDL描述文件中注册事件以及事件处理,定义游戏对象和动作;通过对输入文件GDL进行了维护,代码生成器可以实现游戏的功能逻辑;S3:将模板文件中指定的GFC类与游戏主程序和游戏场景程序一起编译、打包,生成***应用程序。本发明极大地降低了移动终端多媒体应用的设计和开发门槛。
Description
技术领域
本发明涉及一种基于MDA技术的***代码生成方法,属于无线通信技术领域。
背景技术
***开发过程中存在大量重复的编码工作,使得游能的核心模型。戏开发人员将大量时间浪费在重复代码的开发上,进而不能很好地集中精力于***的逻辑设计。代码生成技术并不是一项新兴技术,现存的工具提供了大量的解决方案。模型驱动架构(Model DrivenArchitecture,MDA)是一个可以从***模型变换未实现代码的软件开发框架。核心技术包括统一建模语言(Uniform Modeling Language,UML)、元对象设施(Mete Object Facility,MOF)、基于XML的元数据交换(XML Metadata Interchange,XMI)。MDA能够创建出机器可读和高度抽象的模型,这些模型以独立于实现的技术开发,以标准化的方式储存。因此,这些模型可以被重复访问,并被自动转化为纲要(schema)、代码框架(codeskeleton)、测试工具(test harness)、集成化代码以及各种部署描述。工程师们只需要建立表达业务逻辑的PIM,剩下的工作都将由MDA引擎自动完成。平台无关模型PIM是抽象出与实现技术无关、完整描述业务功能的核心模型。
但是,如果想把这些方案应用到无线手机终端游戏的开发中,就会遇到很多困难。另外,在各款手机终端上开发的***存在不能通用的问题,原因在于各款手机终端的MIDP/CLDC版本各不相同。
发明内容
鉴于现有技术的不足和局限,本发明在研究MDA代码生成技术的基础上,开发建立了一种基于MDA技术的***代码生成方法,使得能够根据客户的需求生成能够在各种终端平台上运行的***,因而解决了***代码重复编写、移植繁琐的一系列问题,极大地降低了移动终端多媒体应用的设计和开发门槛。
本发明是通过下述技术方案来解决上述技术问题的:一种基于MDA技术的***代码生成方法,其特征在于,其包括以下步骤:
S1:解析模板文件,生成与技术无关的游戏基本框架和游戏场景,实现从PIM到PSM的转换;
S2:解析GDL文件,GDL是生成***的主要输入文件,代码生成器根据GDL文件中的元素和子元素的属性生成各具特色的游戏;任何一个***由游戏主循环和若干场景构成;而每个场景由对象、游戏运行中对象的状态改变和游戏动作、一组对象发生的各种事件组成,所以需要在GDL描述文件中注册事件以及事件处理,定义游戏对象和动作;通过对输入文件GDL进行了维护,代码生成器可以实现游戏的功能逻辑;将与技术无关的PIM用游戏的具体逻辑实现和终端的CLDC/MIDP版本填充后实现了具体的PDM;
S3:将模板文件中指定的GFC类与游戏主程序和游戏场景程序一起编译、打包,生成***应用程序。
本发明的积极进步效果在于:本发明使得能够根据客户的需求生成能够在各种终端平台上运行的***,因而解决了***代码重复编写、移植繁琐的一系列问题,极大地降低了移动终端多媒体应用的设计和开发门槛。
附图说明
图1是本发明中将PIM模型转化生成***代码的流程图;
图2是本发明的结构示意图;
图3是本发明中S2过程中需要用到的GDL的整体结构图;
图4是本发明中S2过程中需要用提到的扩展性文件结构图;
图5是本发明中S1过程中解析模板文件流程图;
图6是本发明中S2过程中解析GDL文件流程图。
具体实施方式
下面结合附图描述一个由上述代码生气器生成的游戏实例:
代码生成器实现机制
对***程序的抽象建模PIM模型由2个部分构成:游戏基本框架和游戏场景内容。要将与技术实现无关的核心模型变成与平台有关的与各个手机终端有密切联系的PSM(Platform Specific Model),需要应用MDA代码生成机制,其主要思想是针对不同实现技术制定多个映射规则。然后通过这些映射规则及辅助工具将PIM转换成与具体实现技术相关的应用模型PSM。最后,将经过充实的PSM转换成代码。这个过程如图1所示。
PIM可以被转换到一个或者多个特定平台模型PSM,对于每种特定的技术平台都会生成独立的PSM。PSM是针对选择的实现技术、平台而对***定做的模型。通过OMG的标准映射,工具尽可能地自动完成转换,以减少手工编程时不明确的部分。程序员根据各种手机终端的特性,以便生成的游戏能够适应在各种手机中使用,来对PSM加以修改,对PSM的改变也能够反映到PIM中去。对每个PSM都转换到代码,由于PSM跟具体的实现技术很接近,因此跟最终的***代码之间的转换很直接。通过图2的从PIM向PSM的转换,便可以将一个与具体终端CLDC/MIDP版本无关的***PIM模型生成与各个具体版本相关的***代码。
代码生成器的结构
***都是一些场景画面的循环渲染,读取保存模型的文件,解析游戏定义语言(Game Definition Language,GDL)文件内容,根据代码生成器内部机制将由XML文件格式存储的PIM变成生成***代码。从以上代码生成器的代码生成流程可以设计代码生成器的结构,如图2所示。
要实现将一个PIM模型通过代码生成器映射为所需要的代码,首先要将模型转换为代码生成器可以读取的文件(模型的建立通过UML语言),然后代码生成器从这些输入文件中提取出模型中的信息并生成***应用代码。通过比较和研究,提供给代码生成器作为输入文件的最好方法就是使用一种统一的、容易验证的而且能够完整描述模型信息的数据格式,以XML形式存储的GDL文件和模板文件以及扩展描述文件正好提供了这一切。
使用这种代码生成器,开发人员一般不需要直接写***代码,这些乏味的工作交给GDL文件和模板文件以及扩展性描述文件来完成。所要做的工作就是维护GDL文件和模板文件以及扩展性描述文件。
模板文件是生成的源代码文件的模板,通过将同类型生成文件的相同部分提取出来,可以避免在源码生成器中硬编码,以提高***的可维护性。游戏源代码包含一个游戏主程序、一个或多个游戏场景程序。游戏主程序从GFC类Game派生,游戏场景程序从GFC类Scenario派生。对于GDL描述文件中的每一个<Senario>元素,源码生成器都会生成一个游戏场景程序。主程序模板文件mygameTemplate.txt和mysenarioTemplate.txt内容如下:
GDL是基于XML的应用,它对游戏的场景内容进行中性描述,与特定无关,用于对***的内容进行描述。这些内容是游戏开发者通过在对象编辑器、逻辑控制编辑器、事件编辑器中的操作添加的,是IDE和***代码生成器之问传递信息的媒介。GDL描述文件设计的核心思想主要有2点:面向对象和事件驱动。一个***可以抽象为一组游戏对象,每个游戏对象都具有一定的属性和行为。同时,各个游戏对象之间通过各种方式进行交互,比如发送和接收消息,并执行相应的动作。因此,GDL描述文件需要记录***中出现的各种游戏对象,描述它们的属性,还需要记录驱动游戏运行的各种事件和事件发生时相关对象执行的动作,描述它们之间的各种交互。业务模型是与技术无关的模型,***的一些共性可以提炼出来。业务模型提炼一个***的基本结构,并确定各模块的基本功能和模块间的消息传递路径。这一部分可以通过定义一组基础类库来实现,供开发生成游戏时调用;游戏场景内容属于游戏制作者在开发上进行的可视化操作。GDL描述文件可以划分为3个部分,分别是对象定义、事件处理和逻辑控制。GDL文件结构如图3所示。
扩展描述文件是一系列XML文件,它描述了GDL元素和游戏源代码的对应关系。为了保持业务模型的稳定性(接口变动少),把它设计得足够精简,只让它实现一些最基本的底层游戏功能。仅靠这些功能不足以方便地设计出拥有复杂的运行逻辑和丰富的运行效果的游戏。为此,引入一系列扩展描述文件,这些文件利用CLDC/MIDPAPI和GFCAPI来定义游戏设计中用到的各种游戏元素(即各种GDL元素)的实现代码。如果将来需要增加新的游戏元素,不必修改GFC,只要加入相应的扩展描述文件即可。图4根元素<Entity>封装了整个游戏元素的信息,它可以包含多个<ActionImpl>子元素,后者主要完成3个方面的功能,分别是声明和初始化代表游戏元素的程序变量,以及翻译与这些游戏元素相关的GDL元素<Action>。下面简述<Actionlmpl>各子元素的功能。
mapTo:<ActionImpl>对应源代码块由其子元素<mapTo>的值给出,它通过CDATA段标记表明为非解析数据。
param:源代码调用CLDC/MIDP和GFC的API时需要传入一些参数,<ActionImpl>的子元素<param>负责说明这些参数的数据类型及默认值。参数值可以从当前处理的GDL元素及其子元素<param>的属性值取得。
import:每个<import>负责引入一个在源代码块中需要用到的GFC类,其属性name指明了该GFC类的类名。
本发明基于MDA技术的***代码生成方法包括以下步骤:
S1:解析模板文件,生成与技术无关的游戏基本框架和游戏场景,实现从PIM到PSM的转换,如图5所示。生成游戏框架包括设置游戏界面的大小和帮助信息。将游戏主程序需要使用的GFC类***主程序模板文件mygameTemplate.txt的#imports标识的位置。在生成游戏场景中,将成员变量声明代码***游戏场景模板mygameTemplate.txt的#variableDef标识的位置。其中,成员变量可以划分为3类,分别是游戏角色、游戏控件和事件***。将游戏场景程序需要使用的GFC类***场景模板文件mysenarioTemplate.txt的#imports标识的位置。
S2:解析GDL文件,GDL是生成***的主要输入文件,代码生成器根据GDL文件中的元素和子元素的属性生成各具特色的游戏。任何一个***由游戏主循环和若干场景构成。而每个场景由对象、游戏运行中对象的状态改变和游戏动作、一组对象发生的各种事件组成,所以需要在GDL描述文件中注册事件以及事件处理,定义游戏对象和动作,如图6所示。
S21:对象定义:游戏Game元素<Game>负责对整个***的信息进行封装,其属性及初始化如下:1)id:hit;2)firstScenario:begin;3)width:500;4)height400;5)configuration:1.1;6)profile:2.0。游戏角色Sprite:Sprite是游戏画面上独立移动的图形。元素<SpriteTypes>定义游戏中出现的所有Sprite的类型集合,它可以包含多个<SpriteType>元素,每个<SpriteType>表示以同一幅图片为图标的一类Sprite,其属性包括:1)source_id:wood;2)source_image:wood.png;3)destination id:human;4)destination image;human.png。游戏场景Scenario:游戏场景是游戏的情节单元,游戏可以由一个或多个场景组成。元素<Scenarios>是游戏中所有场景的集合,它包含多个<Scenario>元素,后者描述某一场景的信息,其属性包括:1)id:begin;2)sequence:l。
S22:事件注册及处理:开发生成的***采用事件驱动模型,游戏对象之间通过event.action机制进行交互。当游戏中某个事件发生以后,有若干游戏对象会作为事件的接收者收到消息,并执行相应的动作。事件按触发方式可以分为2类:一类由硬件装置触发,如键盘事件;另一类由游戏中的内部对象触发,如碰撞事件。事件的接收者需要预先在事件***中进行注册,事件***只将消息发送给注册过的接收者。事件的注册方式的代码如下所示:
以上的代码片段定义了一个碰撞事件CollisionEvent。该事件在源对象wood_0与目标对象human_0发生碰撞时被触发,使得对象human_0执行更换图标的动作changeSpriteImage,将自己的图标更换为图片apple.png。在GDL描述文件中,每个<Scenario>中都含有唯一的一个<Listeners>,记录该场景中可能发生的所有事件。每个<Listeners>中可包含多个<Listener>,后者负责定义一个特定的事件,而每个<Listener>有多个<Action>,<Listener>属性包括:1)event:hit;2)keyValue:l;3)src:wood;4)target:human。每个<Listener>中可以包含多个<Action>,每个<Action>定义一个与该事件关联的游戏对象在事件发生时执行的动作。<Action>的属性包括id:游戏对象执行的动作名称,它与该类游戏对象的扩展描述文件中<ActionImpl>元素的属性name同值。每个<Action>qh可以包含多个<param>,每个<param>定义一个调用游戏对象的方法时需要传入的参数,其属性包括:1)id:2;2)value:human。
S23:动作生成:通过GDL文件与可扩展性文件映射来生成对象的动作。
例如:GDL文件的元素
<Action id"changeSpriteImage"objType="Spritelnstance"objlD="human_0">
<param id"image"value="apple.png"/>
</Action>
由属性objType的值执行动作changespriteImage的游戏对象为Spritelnstance类型的实例。通过GDL映射规则文件找到处理该类游戏对象的扩展描述文件SpriteInstance.xml,并通过<Action>的id属性值changeSpriteImage找到对应的<Actionlmpl>,代码如下所示:
对以${}标识的参数进行替换即得源代码:human_0.setImilename("apple.png");
通过以上操作已经对输入文件GDL进行了维护,代码生成器可以实现游戏的功能逻辑。将与技术无关的PIM用游戏的具体逻辑实现和终端的CLDC/MIDP版本填充后实现了具体的PDM。
S3:最后,编译器会将模板文件中的#imports中指定的GFC类与游戏主程序和游戏场景程序一起编译、打包,生成***应用程序。
经过以上步骤实现了一个游戏名称为hit,midp版本号为1.1,cldc版本为2.0的***。具体内容是:木板在初始化场景中以一个速度飞行,小人以一个速度飞行。当两者发生碰撞时,产生碰撞事件,木板变成空心木板,小人变成苹果。
以上所述并不用于限制本发明,凡在本发明的精神和原则之内,所做的任何等同替换、改进等,均应包含在本发明的保护范围之内。
Claims (1)
1.一种基于MDA技术的***代码生成方法,其特征在于,其包括以下步骤:
S1:解析模板文件,生成与技术无关的游戏基本框架和游戏场景,实现从PIM到PSM的转换;
S2:解析GDL文件,GDL是生成***的主要输入文件,代码生成器根据GDL文件中的元素和子元素的属性生成各具特色的游戏;任何一个***由游戏主循环和若干场景构成;而每个场景由对象、游戏运行中对象的状态改变和游戏动作、一组对象发生的各种事件组成,所以需要在GDL描述文件中注册事件以及事件处理,定义游戏对象和动作;通过对输入文件GDL进行了维护,代码生成器可以实现游戏的功能逻辑;将与技术无关的PIM用游戏的具体逻辑实现和终端的CLDC/MIDP版本填充后实现了具体的PDM;
S3:将模板文件中指定的GFC类与游戏主程序和游戏场景程序一起编译、打包,生成***应用程序。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN2012101574625A CN103425469A (zh) | 2012-05-17 | 2012-05-17 | 基于mda技术的***代码生成方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN2012101574625A CN103425469A (zh) | 2012-05-17 | 2012-05-17 | 基于mda技术的***代码生成方法 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN103425469A true CN103425469A (zh) | 2013-12-04 |
Family
ID=49650274
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN2012101574625A Pending CN103425469A (zh) | 2012-05-17 | 2012-05-17 | 基于mda技术的***代码生成方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN103425469A (zh) |
Cited By (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN105320499A (zh) * | 2014-06-04 | 2016-02-10 | ***通信集团广西有限公司 | 一种应用程序的适配方法和相关装置 |
CN106502677A (zh) * | 2016-10-30 | 2017-03-15 | 合肥微匠信息科技有限公司 | 一种基于模型驱动的嵌入式控制软件开发方法 |
CN107632833A (zh) * | 2017-07-31 | 2018-01-26 | 广州神马移动信息科技有限公司 | 轻应用的生成方法、设备及电子设备 |
CN110297633A (zh) * | 2019-06-28 | 2019-10-01 | 百度在线网络技术(北京)有限公司 | 代码转换方法、装置、设备和存储介质 |
CN110876850A (zh) * | 2018-09-05 | 2020-03-13 | 网易(杭州)网络有限公司 | 一种手游编辑的方法及装置 |
JP2021009665A (ja) * | 2019-06-28 | 2021-01-28 | バイドゥ オンライン ネットワーク テクノロジー (ベイジン) カンパニー リミテッド | ファイル生成方法、装置、デバイス及び記憶媒体 |
Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101055521A (zh) * | 2007-04-04 | 2007-10-17 | 中兴通讯股份有限公司 | 映射规则的可视化生成方法及*** |
CN101169713A (zh) * | 2006-10-25 | 2008-04-30 | 中兴通讯股份有限公司 | 支持转换引擎与映射规则相分离的模型转换框架及其方法 |
-
2012
- 2012-05-17 CN CN2012101574625A patent/CN103425469A/zh active Pending
Patent Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101169713A (zh) * | 2006-10-25 | 2008-04-30 | 中兴通讯股份有限公司 | 支持转换引擎与映射规则相分离的模型转换框架及其方法 |
CN101055521A (zh) * | 2007-04-04 | 2007-10-17 | 中兴通讯股份有限公司 | 映射规则的可视化生成方法及*** |
Non-Patent Citations (1)
Title |
---|
丁月华等: "MDA技术在***开发中的应用", 《计算机工程》 * |
Cited By (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN105320499A (zh) * | 2014-06-04 | 2016-02-10 | ***通信集团广西有限公司 | 一种应用程序的适配方法和相关装置 |
CN106502677A (zh) * | 2016-10-30 | 2017-03-15 | 合肥微匠信息科技有限公司 | 一种基于模型驱动的嵌入式控制软件开发方法 |
CN107632833A (zh) * | 2017-07-31 | 2018-01-26 | 广州神马移动信息科技有限公司 | 轻应用的生成方法、设备及电子设备 |
CN110876850A (zh) * | 2018-09-05 | 2020-03-13 | 网易(杭州)网络有限公司 | 一种手游编辑的方法及装置 |
CN110876850B (zh) * | 2018-09-05 | 2023-04-07 | 网易(杭州)网络有限公司 | 一种手游编辑的方法及装置 |
CN110297633A (zh) * | 2019-06-28 | 2019-10-01 | 百度在线网络技术(北京)有限公司 | 代码转换方法、装置、设备和存储介质 |
JP2021009665A (ja) * | 2019-06-28 | 2021-01-28 | バイドゥ オンライン ネットワーク テクノロジー (ベイジン) カンパニー リミテッド | ファイル生成方法、装置、デバイス及び記憶媒体 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN103544005B (zh) | 一种Android自定义控件的扩展开发方法及装置 | |
CN110825362A (zh) | 低代码应用软件开发***及方法 | |
CN111290778B (zh) | Ai模型的包装方法、平台及电子设备 | |
CN103425469A (zh) | 基于mda技术的***代码生成方法 | |
CN103500087A (zh) | 一种基于maven插件和freemarker模版的代码生成方法及装置 | |
CN101482817B (zh) | 基于黑盒的大粒度Java构件组装方法 | |
CN106547681B (zh) | 数据自动加载并复用模拟服务测试的方法和装置 | |
WO1998024020A2 (en) | Method and system for generating software code | |
CN103019928A (zh) | 一种自动化测试方法和*** | |
CN103714290B (zh) | 一种软件行为获取、监控与验证方法 | |
CN101604241A (zh) | 一种嵌入式***的代码生成方法 | |
CN101980546B (zh) | 智能网平台、业务执行方法和分析业务异常的方法 | |
Sarjoughian et al. | Behavioral DEVS metamodeling | |
CN116974620A (zh) | 应用程序的生成方法、运行方法以及相应的装置 | |
CN115878112A (zh) | 一种多方复杂商业协议智能合约生成***及其生成方法 | |
CN110097464B (zh) | 智能合约的生成方法、装置、电子设备与存储介质 | |
CN102707934B (zh) | 一种以脚本形式表示增值业务流程的实现方法和*** | |
CN104063231A (zh) | 一种基于hit-tena的试验资源快速接入方法 | |
CN110275923B (zh) | 插件化图形的管理方法及设备 | |
CN111399829A (zh) | 一种基于模型驱动的波形建模方法及终端 | |
CN102508648A (zh) | 一种图形引擎实现方法 | |
JP2010049439A (ja) | ソフトウェアモデルを用いたシステム構築方法およびモデリング装置 | |
CN114489861A (zh) | 目标组件转化方法、装置、电子设备及可读存储介质 | |
CN103176830A (zh) | 基于类图和活动图相结合生成c++代码的方法 | |
US7634721B1 (en) | Composite component architecture using javaserver pages (JSP) tags |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
WD01 | Invention patent application deemed withdrawn after publication |
Application publication date: 20131204 |
|
WD01 | Invention patent application deemed withdrawn after publication |