《(网络版)Flash中国象棋》由会员分享,可在线阅读,更多相关《(网络版)Flash中国象棋(24页珍藏版)》请在金锄头文库上搜索。
1、Neusoft成都东软信息技术职业学院毕业实习报告毕业实习报告题目系别学生姓名学号专业班级指导教师(网络版)Flash中国象棋2008年3月18日2008年6月6日摘要这是我第二款自主研发的Flash游戏,采用ActionScript3.0脚本语言,主要目的还是想加强对新版本的熟练运用。目的显然是达到了,无论是图像的处理,声音的处理,相关类库的运用,功能函数的编写,动画制作,各个模块的划分,还是事件运用等都已经达到了我预期的目标。唯一让我遗憾的是脚本是写在内部,按照新版本开发目的,应该把脚本写在脱离Flash本身以外的,但对这一块我还不习惯,所以还是采用 2.0 的方式写在了内部,在调用一些全
2、局变量和全局函数的过程中遇到了很大的困惑, 这也是将代码写在内部唯一的困扰, 求助了很多朋友,才解决了相关问题。游戏难点在于棋子载入的摆放和移动上。 应为是 2 用户游戏, 所控制的棋子是不同的,采用的是根据服务器发送的 ID 号进行阵营的划分,并分别对所控制的棋子进行监听以达到分别控制而不会影响另一阵营的棋子。 棋子的移动采用方案是:在整个棋盘的“十字交叉”出放置一个对象,目的是获取固定的移动点,当鼠标点击“十字交叉”处时,实际上获取的是这个对象的坐标,这样每个棋子移动就很规范了,不会出现位置偏差。关键字: ActionScript3.0 ActionScript2.0 Flash 游戏 交
3、互程序目录摘要 - 2 -目录- 3 -第一章 引言 - 5 -第二章 程序分析 - 6 -2.1 游戏功能 - 6 -2.2 操作分析 - 6 -2.3 对象控制 - 7 -2.4 连接socket服务器 -7 -2.5 执行过程 - 7 -第三章 编写游戏原型- 8 -3.1 创建游戏舞台 - 8 -3.1.1 项目准备 - 8 -3.1.2 片头制作 - 8 -3.1.3 音效 - 9 -3.2 服务器连接- 11 -3.2.1 创建 XMLSocket 连接 -11 -3.2.2 发送数据 - 11 -3.2.3 接收数据 - 12 -3.3 棋子摆放划分- 12 -3.4 棋子移动控
4、制 - 15 -3.5 移动规则 - 16 -3.5.1 车的移动规则: -16 -3.5.2 马的移动规则 -17 -3.5.3 像的移动规则 -18 -3.5.4 仕的移动规则 -19 -3.5.5 帅将移动规则: -19-3.5.6 兵的移动 -20-第四章 数据传递与解析- 22 -致谢: -24-参考文献-25-第一章 引言可以毫不夸张地说:是 Actionscript的发展推动着Flash应用的不断成功。而Flash应用的不断成功,也为 ActionScript的发展提供了更广阔的舞台。随着 FlexBuilder2 和 Flash CS3的发布,ActionScritpt 3.0
5、 横空出世了。 .ActionScript3.0 的推出使脚本语言的发展上升到新的高度。 人们对交互体验需求的日益增长, Flash 已经突破网站设计的单一领域,扩展到诸如动画制作,交互设计,视频点播,手持移动设备,在线社区,游戏制作等诸多领域。我一直认为,无论是flashCS3也好,Flex Builder也好,或者什么都好,作为开发环境而言, 并没有优劣之分。 直到现在, 我群里还有好多人在争论到底哪一个更好些的问题。其实,无论是RIA 何种应用,游戏,网站,动画展示等,无非都是以“ swf”为后缀的文件,用Flash Playe解析呈现而已,这是Flash在终端所展示的形态。如果熟悉Ac
6、tionScript, ,在这个平台里,你可以尽情地按照你的想象来发挥,我相信现在的 Actionscript3.0 有着非常优秀的架构体系和宽广的应用。知识点之间的交叉贯通和灵活搭配是ActionScript3.0 开发的难点。本flash游戏是一个带有简单服务器的交互游戏, 通过本地客户端向异地客户端发送信息进行响应操作, 用户可以通过鼠标的点击来生成一个数据包, 并将这个数据包发送给服务端, 通过服务端转发给异地客户端, 涉及到 ActionScript3.0 开发中所有的主要知识,包括sockt 通信,流程控制,数组操作,面向对象开发,图形图像操作等。在自由运用这些知识的基础上,最终完
7、成交互游戏的程序开发。第二章程序分析在开始编写游戏代码之前,需要分析游戏的功能和模块划分,确定用户的操 作方式。2.1 游戏功能在玩家执行游戏时,程序游戏能够动态的加载库里面的元件和图形和声音。 创建如图示的游戏场景,1210.0,1 I I :|1300U登陆前登陆中登陆前和登陆中我们可以视作一个片头,程序的真正场景是登陆后的场景。在登陆后的场景中包含3种主要元素:游戏舞台,棋子,棋盘,棋盘交叉点。从 库里面加载的棋子和棋盘交叉点都被程序摆放在棋盘的相应位置上,棋盘交叉点是看不见的它与背景同色。游戏舞台提供了游戏的屏幕界面,是所有游戏元件的 载体。2.2 操作分析交互游戏必须提供交互功能。游
8、戏中将会有鼠标控制。当用户使用鼠标操作 游戏屏幕上的棋子时,游戏程序需要处理棋子的移动,并将移动的信息发送给服 务器。所有的棋子都能够接受用户的鼠标单击。但是只有自己的棋子才能移动。 且每颗棋子有自己的移动规则限制。2.3 对象控制在控制棋子的移动中, 我们并不需要去指定某个具体的棋子的移动, 我们可以建立一个Sprite 对象,使它成为所有棋子的载体,在点击棋子时,将棋子对象赋值给这个载体,控制这个载体就是控制指定的棋子。2.4 连接socket 服务器要连接socket服务器首先要知道服务器的域名或IP地址,还要知道端口, 使用XMLSocket,用connect。方法进行连接,该方法接受
9、两个参数,即IP和端口。2.5 执行过程在游戏场景创建后, 程序必须侦听用户的操作。 游戏是通过发送数据包来进行 2 人交互游戏的, 所以这里涉及到解析信息, 并对信息作出相应的操作。 首先从第一个用户开始,当他输入IP和端口号,点击登陆按钮时,这时已经开始了信息的传递,连接上服务器以后,服务器会自动给用户分配一个ID ,并保持在等待状态,一旦有其他玩家登陆,服务器会再次向1 号用户发送信息,提示可以进入游戏,双方就可以同时进入游戏。游戏进行时, 用户采用鼠标移动棋子的位置, 程序要及时发送事件数据给服务器,使另外的用户作出操作。第三章 编写游戏原型对于功能较为复杂的项目, 一般需要开发一个实
10、现最核心功能的原型。 在编写原型的过程中,实现游戏的最基本结构和功能。除了最基本的程序功能之外,原型中应该包含丰富的调试信息输出,以便于程序的追踪和改进。在本游戏中, 游戏原型被限定为最基础的程序支持功能。 我们要建立的游戏原型如同一幢基础的地基,在最终的作品中发挥基础的作用。从编码风格的角度考察,在编写游戏原型时采用的代码更趋于清晰和易懂,而不是偏重性能和效率。3.1 创建游戏舞台3.1.1 项目准备运行Flash CS3环境,新建ActionScritp3.0项目,设置理想的舞台宽高,将相关图片导入到库中, 如游戏背景图片, 这里我们不用动态加载背景图片了, 直接从库中拖出放入舞台, 调整
11、背景大小, 使之与舞台等宽高。 新建一个影片剪辑,绘制一个棋盘,棋盘格子间隔为 60 像素。完毕后拖到舞台。3.1.2 片头制作制作一个枫树叶向下飘落的片头, 在元件中运用引导线和补间动画使枫树叶向下飘落,制作完毕我们就来动态的载入它var yezi=new piao()yezi.height=300yezi.width=250yezi.x=277;yezi.y=353;addChild(yezi)这段代码创建了一个piao的对象yezi, piao是枫叶飘落元件的连接名, 对 yezi 的操作既是对元件的操作,设置完毕后将其显示addChild(yezi) 。制作两个棋盘的旋转特效var x
12、uan:Sprite=new Sprite()addChild(xuan)var xu1=new xuanzhuan() var xu2=new xuanzhuan()xu1.x=200xu2.x=380xu1.y=xu2.y=290xuan.addChild(xu1)xuan.addChild(xu2)xuan.addEventListener (Event.ENTER_FRAME,xuanEnterFrame);function xuanEnterFrame(eve:Event):voidxu1.rotation+=1; xu2.rotation-=1 这段代码创建了一个Sprite对象x
13、uan,它将做为以下xu1和xu2父对象,方 便对xu1和xu2的同时控制,设置完xu1和xu2 (两个棋盘的对象)的位置后要 让它旋转,对xuan 注册一个侦监听函数xuan.addEventListener(Event.ENTER_FRAME,xuanEnterFrame);函数 xuanEnterFrame功能为 xu1.rotation+=1; xu2.rotation-=1 , 即棋盘 1 每侦顺时针旋转1, 棋盘 2 每侦逆时针旋转 1。3.1.3 音效本游戏有 3 个音效元件,分别为背景音效,胜利音效,失败音效。/ 背景声音var chl:SoundChannelvar temp
14、st:SoundTransform var mysound:Sound=new BJ()/揩景音乐chl= mysound.play(0,200000); /重 0 位置开始播放,播放200000遍tempst=chl.soundTransformtempst.volume=0.5/声音大小chl.soundTransform=tempst/-胜利声音定义var sheng:SoundChannelvar tempst_1:SoundTransformvar s_l:Sound=new shengli()/sheng=s_l.play(0,1)/播放一遍/tempst_1=sheng.soundTransform /先不启用/tempst_1.volume=0.5/声音大小/sheng.soundTransform=tempst_1/ 失败声音定义var bai:SoundChannelvar tempst_2:SoundTransformvar s_b:Sound=new shibai()/bai=s_b.play(0,1)/播放一遍/tempst_2=sheng.soundTransform /先不启用/tempst_2.volume=0.5/声音大小/bai.soundTransform=tempst_