基于Asp .net、XML与Flash架构的火车车厢重排问题虚拟实验开发
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
基于、XML与Flash架构的火车车厢重排问题虚拟实验开发
摘要:当前,XML(Extensible Makeup Language)是跨平台数据结构的最佳选择,应用广泛。它是一种通用的、跨平台的数据描述方法,相比于一般的记事本文件,完全采用了Unicode 编码和条理清晰的分层标签。介绍了和Flash之间通过XML文件传递信息解决火车重排堆栈问题。Flash使抽象的数据结构问题转化为具象的动画呈现给学生,有助于学生理解问题、编写程序。
关键词:XML;;Flash;虚拟实验;火车车厢重排
0引言
当前,XML是跨平台数据结构的最佳选择。XML全称为可扩展标记语言(Extensible Makeup Language)。它是一种通用的、跨平台的数据描述方法,也是未来存储信息的方式,其应用无处不在。XML是可扩展的、与平台无关的语言,相比于一般记事本文件,它完全采用Unicode 编码和条理清晰的分层标签并且支持国际化。
Flash是专业的动画创作工具,可以开发有吸引力、表现力的用户界面和丰富的应用程序。它开发的文件数据量小,可以以插件方式工作、“流”形式文件播放以及实时交互。因此,Flash成功地渗入到网络动画、音乐电视、广告、教学、游戏等多个领域。
是基于通用语言的编译运行程序,其强大的适应性,几乎可以使它运行在Web 应用软件开发者全部的平台上。通用语言的基本库、消息机制、数据接口的处理都能无缝整合到的Web
应用中。也是languageindependent(语言独立化)的,支持C#(C++和Java的结合体)、VB、Jscript、C++、F++等语言。
与Flash之间传值
在中对数据进行处理后,生成XML树,然后通过XML 文件在Flash端接收XML文件,解析XML树后,根据传入的参数进行操作。[1]其通信原理如图1所示。
端生成XML文件的代码如下:
System.Xml.XmlTextWriter xmlWriter = new XmlTextWriter (Server.MapPath("./1234.xml"),System.Text.Encoding.UTF8);//声明一个xmlWriter变量用于编写XML文件
xmlWriter.Formatting = Formatting.Indented;//用于生成良好的显示格式,增强可读性
xmlWriter.WriteStartDocument();
xmlWriter.WriteStartElement("数据");//生成一个结点
xmlWriter.WriteStartElement("单次");
xmlWriter.WriteAttributeString("车厢",firstNum.ToString());//写入节点的属性
xmlWriter.WriteAttributeString("铁轨",secondNum.ToString());
xmlWriter.WriteAttributeString("出入",thirdNum.ToString());
xmlWriter.WriteEndElement();
xmlWriter.WriteEndDocument();//写文档结束
xmlWriter.Close();//关闭textWriter
Flash端接收XML文件的代码如下:
var myXML:XML= new XML;
var XML_URL:String = "1234.xml";
var myXMLURL:URLRequest = new URLRequest(XML_URL);
public var myLoader:URLLoader = new URLLoader (myXMLURL);
public function Motion()
{
myLoader.addEventListener("complete",xmlLoaded);
}
2火车重排堆栈问题动画实现
笔者在学习数据结构时发现授课内容比较抽象,需要具体的图解动态地描述问题。教师需要在word中或在PowerPoint中采用绘图方式让学生理解。但这种方式比较费事,教师需要一边讲解,一边手动拖动物体使学生理解。所以笔者采用基于、XML与Flash相互通信的方式,使数据结构中火车车厢重排问题动态显示。
问题描述:一列货车共有n节车厢,每节车厢将停放在不同的车站。假定n个车站的编号分别为1~n,货车列车按照第n站至第1站的次序经过这些车站。为了便于从列车上卸掉相应的车厢,必须重新排列车厢,使车厢从前至后按编号1~n的次序排列。在一个转轨站里完成车厢的重排工作,在转轨站里有一个入轨、一个出轨和k个缓冲轨H1、H2、H3。开始时,n节车厢的货车从入轨处进入转轨站,
转轨结束时各车厢从右到左按编号1~n的次序离开转轨站(通过出轨处)。在图2(a)中n=9,车厢从后至前的顺序为5,8,1,7,4,2,9,6,3。图2(b)给出了按所要求的次序重新排列后的结果。[2]对课本上的代码重新编写,制作出简单的网页界面用于解决火车车厢重排问题,如图3所示。其中在堆栈中可以选择利用顺序表和链式表解决问题,选择了车厢个数为9个,铁轨个数和车厢编号后点击“确认输入完成”按钮。如果铁轨的个数足够,再点击“排序输出”按钮即可显示解决问题的方案,如图4所示;如果铁轨个数不足,则会提示再输入新增铁轨数,如图5所示。(选择车厢个数为9个,需要的铁轨个数为3个。)
自动生成的XML文件如图6所示。车厢的每一次运动都作为XML文件的1个节点。而每个节点都包括车厢的编号、车厢对应的铁轨以及车厢的运动方式。如此设计XML的节点是为了方便Flash 读取,并动态生成动画。
笔者采用FlashAS3.0语言动态实现火车重排动画。首先定义铁轨的属性,利用graphics函数定义缓冲铁轨的形状,代码如下:public function initial():void
{
graphics.lineStyle(1,0xff0000,1);
graphics.moveTo(0,0);
//graphics.moveTo代表起始点位置,x,y;
graphics.lineTo(0,210);