基于Flash的俄罗斯方块毕业论文 - 图文

更新时间:2024-03-23 07:30:01 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

石家庄科技信息职业学院

毕 业 论 文

题目: 基于Flash的俄罗斯方块

学 号: 090124002 姓 名: 蒋雨乘 专业班级:软件技术(游戏方向)09-24 班 指导教师: 刘永伟 完成日期: 2011-12-18

基于FLASH的俄罗斯方块

摘 要:Flash是美国的一家公司(MACROMEDIA公司)于1996年6月推出的优秀网页动画设计软件, 在中国经历了9年的发展时间。曾经在中国风云一时,出现了FALSH热。由于动漫也成为一种时尚的艺术,而且最直接简单的动画创作是就FLASH。我认为它可以自成体系,有它自己独特的表现方法.手段和流通方式及“闪客”生活。甚至我认为它是现代文明的一种符号,新新艺术创作方式,是一种流行于网络的网络文化。FLASH作为新的事物它的应用非常广泛,主要用于网络,FLASH网站片头,FLASH演示动画,FLASH网站,FLASH商业广告,电视,掌上电脑,游戏,MTV,手机屏保,手机彩信,家用电器等等!这些表示FLASH的确是一个非常好的传播载体。它能够引申出非常多的商业机会。能够以多样的效果和形式来充分体现产品或企业形象。现在电脑,网络,手机用户等等都是在不断的增加,网络的发展壮大和完美,电脑更加普及,上网的人更多。正因为它有怎么多的用户,爱好者,创作者和发展平台,使用价值和欣赏价值。我认为FLASH真正的价值是其未来!它是一种新新事物,是一种新的艺术创作和文化。本文将介绍如何利用FLASH设计和开发俄罗斯方块游戏。

矚慫润厲钐瘗睞枥庑赖。 关键词:FLASH;发展;游戏;应用;

2

目录

第一章 引言 4 1.1 Flash概述 4 1.2 FLASH发展 4 1.3 Flash的特点 6 第二章 FLASH版俄罗斯方块游戏开发前期工作 7 2.1 FLASH程序界面介绍 7 2.2 FLASH程序常用快捷键介绍 10 2.3初识Action Script 12 2.4 Photoshop基本概念知识 13 2.5 FLASH版俄罗斯方块设计思路 15 第三章 FLASH版俄罗斯方块游戏开发 16 3.1 俄罗斯方块游戏背景设计 16 3.2 俄罗斯方块游戏方块形状设计 18 3.3 俄罗斯方块游戏操作设计 23 第四章 FLASH版俄罗斯方块游戏开发心得 31 参考文献 31

3

第一章 引言

1.1 Flash概述

Flash 由macromedia公司推出的交互式矢量图和 Web 动画的标准。网页设计者使用 Flash 创作出既漂亮又可改变尺寸的导航界面以及其他奇特的效果。聞創沟燴鐺險爱氇谴净。 flash涉及到的领域:动画游戏制作,网络构件,学习课件,网站广告设计及全flash网站,工控界面等等。主要特点是制作简单,通用性比较大,涉及的领域多,制作出的东西效果都可以做到非常精致。缺点在于有些效果需要别的软件辅助制作等等,不是所有效果都能制作出来。(比如些3d效果,flash就很难制作,只能通过导入的方式或者帧并帧的方式)

FLASH有三重意义:1) FLASH英文本意为“闪光”;2)它是全球流行的电脑动画设计软件;3)它代表用上述软件制作的流行于网络的动画作品。Flash是一种交互式矢量多媒体技术,他的前身是Futureplash,早期网上流行的矢量动画插件。后来由于Macromedia公司收购了Future Splash以后便将其改名为 Flash2,到现在最新的flashcs3。现在网上已经有成千上万个Flash站点,著名的如Macromedia专门ShockRave站点,全部采用了Shockwave Flash 和Director。可以说Flash已经渐渐成为交互式知量的标准,未来网页的一大主流。

本文将借助FLASH里的ActionScript来设计并完成游戏俄罗斯方块的开发。

残骛楼諍锩瀨濟溆塹籟。 1.2 FLASH发展

Flash 最早期的版本称为Future Splash Animator,当时Future Splash Animator最大的两个用户是微软(Microsoft)和迪斯尼(Disney)。1996年11月,Future Splash Animator卖给了MM(Macromedia.com),同时改名为Flash1.0 。这里不得不提到的人物是乔纳森?盖伊(Jonathan Gay),是他和他的六人小组首先创造了Future Splash Animator,也就是现在Flash的真正前身了。酽锕极額閉镇桧猪訣锥。 Macromedia 公司在1997年6月推出了Flash 2.0 ,1998年5月推出了Flash3.0。但是这些早期版本的Flash所使用的都是Shockwave 播放器。自 Flash 进入4.0 版以后,原来所使用的 Shockwave 播放器便仅供

4

Director 使用。Flash 4.0开始有了自己专用的播放器,称为“Flash Player”,但是为了保持向下相容性,Flash仍然沿用了原有的扩展名:.SWF(Shockwave Flash)。彈贸摄尔霁毙攬砖卤庑。 2000年8月Macromedia 推出了Flash5.0 ,它所支持的播放器为 Flash Player 5。Flash 5.0中的ActionScript已有了长足的进步,并且开始了对XML和Smart Clip(智能影片剪辑)的支持。ActionScript的语法已经开始定位为发展成为一种完整的面向对象的语言,并且遵循ECMAScript的标准,就像javascript那样。謀荞抟箧飆鐸怼类蒋薔。 1.3FLASH的发展方向

Flash被称为是“最为灵活的前台”,由于其独特的时间片段分割(TimeLine)和重组(MC嵌套)技术,结合ActionScitp的对象和流程控制,使得在灵活的界面设计和动画设计成为可能,同时它也是最为小巧的前台。Flash具有跨平台的特性(这点和Java一样),所以无论你处于何种平台,只要你安装了支持的Flash Player,就可以保证它们的最终显示效果的一致,而不必像在以前的网页设计中那样为IE或NetSpace各设计一个版本。同Java一样,它有很强的可移植性。最新的Flash还具有的手机支持功能,可以让用户为自己的手机设计喜爱的功能。当然首先必需要有支持Flash的手机,同时它还可以应用于Pocket PC。那么,Flash可能的发展方向究竟如何?厦礴恳蹒骈時盡继價骚。 1、应用程序开发:由于其独特的跨平台特性、灵活的界面控制以及多媒体特性的使用,使得用Flash制作的应用程序具有很强的生命力。在与用户的交流方面具有其它任何方式都无可比拟的优势。当然,某些功能可能还要依赖于XML或者其它诸如javascript的客户端技术来实现。但目前的现状是:很少有人具有运用Flash进行应用程序开发这方面的经验。但这个难度会随着时间的推移而逐步减弱。事实上,对于大型项目而言,使用Flash此时未免有些言之过早,因为它意味着很大的风险。当然,在最早的时间掌握和积累这方面的经验无疑是一种很大的竞争力。可以将这种技术运用在项目中的一小部分或者小型项目中,以减少开发的风险。茕桢广鳓鯡选块网羈泪。 2、软件系统界面开发:Flash对于界面元素的可控性和它所表达的效

5

粘贴到当前位置 【Ctrl】+【Shift】+【V】 清除 【退格】

复制所选内容 【Ctrl】+【D】 全部选取 【Ctrl】+【A】

取消全选 【Ctrl】+【Shift】+【A】 剪切帧 【Ctrl】+【Alt】+【X】 拷贝帧 【Ctrl】+【Alt】+【C】 粘贴帧 【Ctrl】+【Alt】+【V】 清除贴 【Alt】+【退格】

选择所有帧 【Ctrl】+【Alt】+【A】 编辑元件 【Ctrl】+【E】 首选参数 【Ctrl】+【U】 转到第一个 【HOME】 转到前一个 【PGUP】 转到下一个 【PGDN】 转到最后一个 【END】 放大视图 【Ctrl】+【+】 缩小视图 【Ctrl】+【-】 100%显示 【Ctrl】+【1】 缩放到帧大小 【Ctrl】+【2】 全部显示 【Ctrl】+【3】

按轮廓显示 【Ctrl】+【Shift】+【Alt】+【O】 高速显示 【Ctrl】+【Shift】+【Alt】+【F】 消除锯齿显示 【Ctrl】+【Shift】+【Alt】+【A】 消除文字锯齿 【Ctrl】+【Shift】+【Alt】+【T】 显示隐藏时间轴 【Ctrl】+【Alt】+【T】

显示隐藏工作区以外部分 【Ctrl】+【Shift】+【W】显示隐藏标尺 【Ctrl】+【Shift】+【Alt】+【R】

11

2.3初识ActionScript 1.简介

ActionScript 是针对 Adobe Flash Player 运行时环境的编程语言,它在 Flash 内容和应用程序中实现了交互性、数据处理以及其它许多功能。構氽頑黉碩饨荠龈话骛。 ActionScript 是由 Flash Player 中的 ActionScript 虚拟机 (AVM) 来执行的。ActionScript 代码通常被编译器编译成\字节码格式\(一种由计算机编写且能够为计算机所理解的编程语言),如 Adobe Flash CS3 Professional 或 Adobe® Flex? Builder? 的内置编译器或 Adobe® Flex? SDK 和 Flex? Data Services 中提供的编译器。字节码嵌入 SWF 文件中,SWF 文件由运行时环境 Flash Player 执行。輒峄陽檉簖疖網儂號泶。 ActionScript 3.0 提供了可靠的编程模型,具备面向对象编程的基本知识的开发人员对此模型会感到似曾相识。ActionScript 3.0 中的一些主要功能包括:尧侧閆繭絳闕绚勵蜆贅。 一个新增的 ActionScript 虚拟机,称为 AVM2,它使用全新的字节码指令集,可使性能显著提高识饒鎂錕缢灩筧嚌俨淒。 一个更为先进的编译器代码库,它更为严格地遵循 ECMAScript (ECMA 262) 标准,并且相对于早期的编译器版本,可执行更深入的优化凍鈹鋨劳臘锴痫婦胫籴。 一个扩展并改进的应用程序编程接口 (API),拥有对对象的低级控制和真正意义上的面向对象的模型

一种基于即将发布的 ECMAScript (ECMA-262) 第 4 版草案语言规范的核心语言

一个基于 ECMAScript for XML (E4X) 规范(ECMA-357 第 2 版)的 XML API。E4X 是 ECMAScript 的一种语言扩展,它将 XML 添加为语言的本机数据类型。恥諤銪灭萦欢煬鞏鹜錦。 一个基于文档对象模型 (DOM) 第 3 级事件规范的事件模型

12

2.ActionScript 3.0 的优点

ActionScript 3.0 的脚本编写功能超越了 ActionScript 的早期版本。它旨在方便创建拥有大型数据集和面向对象的可重用代码库的高度复杂应用程序。虽然 ActionScript 3.0 对于在 Adobe Flash Player 9 中运行的内容并不是必需的,但它使用新型的虚拟机 AVM2 实现了性能的改善。ActionScript 3.0 代码的执行速度可以比旧式 ActionScript 代码快 10 倍。鯊腎鑰诎褳鉀沩懼統庫。 旧版本的 ActionScript 虚拟机 AVM1 执行 ActionScript 1.0 和 ActionScript 2.0 代码。为了向后兼容现有内容和旧内容,Flash Player 9 支持 AVM1。硕癘鄴颃诌攆檸攜驤蔹。 ActionScript 3.0 中的新增功能

虽然 ActionScript 3.0 包含 ActionScript 编程人员所熟悉的许多类和功能,但 ActionScript 3.0 在架构和概念上是区别于早期的 ActionScript 版本的。ActionScript 3.0 中的改进部分包括新增的核心语言功能,以及能够更好地控制低级对象的改进 Flash Player API.阌擻輳嬪諫迁择楨秘騖。 2.4 Photoshop基本概念知识

Photoshop:它是由Adobe公司开发的图形处理系列软件之一,主要应用于在图像处理、广告设计的一个电脑软件。最先它只是在Apple机(MAC)上使用,后来也开发出了for window的版本。下面是这个软件里一些基本的概念。氬嚕躑竄贸恳彈瀘颔澩。 位图:又称光栅图,一般用于照片品质的图像处理,是由许多像小方块一样的\像素\组成的图形。由其位置与颜色值表示,能表现出颜色阴影的变化。在Photoshop主要用于处理位图。釷鹆資贏車贖孙滅獅赘。 矢量图:通常无法提供生成照片的图像物性,一般用于工程技术绘图。如灯光的质量效果很难在一幅矢量图表现出来。怂阐譜鯪迳導嘯畫長凉。 分辨率:每单位长度上的像素叫做图像的分辨率,简单讲即是电脑的图像给读者自己观看的清晰与模糊,分辨率有很多种。如屏幕分辨率,扫描仪的分辨率,打印分辨率。谚辞調担鈧谄动禪泻類。 13

图像尺寸与图像大小及分辨率的关系:如图像尺寸大,分辨率大,文件较大,所占内存大,电脑处理速度会慢,相反,任意一个因素减少,处理速度都会加快。嘰觐詿缧铴嗫偽純铪锩。 通道:在PS中,通道是指色彩的范围,一般情况下,一种基本色为一个通道。如RGB颜色,R为红色,所以R通道的范围为红色,G为绿色,B为蓝色。熒绐譏钲鏌觶鷹緇機库。 图层:在PS中,一般多是用到多个图层制作每一层好象是一张透明纸,叠放在一起就是一个完整的图像。对每一图层进行修改处理,对其它的图层不含造成任何的影响。鶼渍螻偉阅劍鲰腎邏蘞。 图像的色彩模式:

1)RGB彩色模式:又叫加色模式,是屏幕显示的最佳颜色,由红、绿、蓝三种颜色组成,每一种颜色可以有0-255的亮度变化。纣忧蔣氳頑莶驅藥悯骛。 2)CMYK彩色模式:由品蓝,品红,品黄和黑色组成,又叫减色模式。一般打印输出及印刷都是这种模式,所以打印图片一般都采用CMYK模式。

颖刍莖蛺饽亿顿裊赔泷。 3)HSB彩色模式:是将色彩分解为色调,饱和度及亮度通过调整色调,饱和度及亮度得到颜色和变化。

4)Lab彩色模式:这种模式通过一个光强和两个色调来描述一个色调叫a,另一个色调叫b。它主要影响着色调的明暗。一般RGB转换成CMYK都先经Lab的转换。濫驂膽閉驟羥闈詔寢賻。 5)索引颜色:这种颜色下图像像素用一个字节表示它最多包含有256色的色表储存并索引其所用的颜色,它图像质量不高,占空间较少。銚銻縵哜鳗鸿锓謎諏涼。 6)灰度模式:即只用黑色和白色显示图像,像素0值为黑色,像素255为白色。

7)位图模式:像素不是由字节表示,而是由二进制表示,即黑色和白色由二进制表示,从而占磁盘空间最小。

2.5 FLASH版俄罗斯方块设计思路

14

首先我们利用photoshop制作和处理一张图片作为我们游戏的背景图片,制作好后,打开FLASH软件新建FLASH文档,文档建立好后,将制作好的背景图片导入到舞台,作为游戏的背景,最后也是最重要

ActionScript代码的设计和开发。代码设计中我们首先进行游戏的界面设计,我们需要将游戏界面分为两部分,一部分是游戏方块叠加部分,一部分是游戏的分数部分,界面设计好后进行俄罗斯方块游戏中方块形状的设计和定义以及游戏在运行过程中方块的叠加和消行加分设计,然后我们设计和开发游戏的初识状态及游戏运行过程中用户对方块的变形和移动操作。挤貼綬电麥结鈺贖哓类。

第三章 FLASH版俄罗斯方块游戏开发

3.1 俄罗斯方块游戏界面设计

游戏界面是用户能够直接看到的部分,也是最直观的部分。我们首先先建一个空白的FLASH文档,文档建立好后我们将制作好的图片导入到舞台中央作为游戏的背景,然后在帧1处利用ActionScript进行游戏的界面设计,具体的代码如下:赔荊紳谘侖驟辽輩袜錈。 N = 20; //行数 WIDTH = 20; //方块边长 level = 0;

//开始等级(下落速度) ret = new Array(); //当前出现的方块 nextret = new Array(); //下一个出现的方块 bg = new Array();

15

//背景数组

createEmptyMovieClip(\//所有方块都在此mc里 for (i=0; i<5; i++) {

//初始化方块数组,2*5格式,前四行代表每个方块的4个小块的位置坐标,最后一行第一列是方块形状,第二列是方块旋转方向塤礙籟馐决穩賽釙冊庫。 ret.push(new Array(2)); nextret.push(new Array(2)); }

for (i=0; i<20; i++) { //初始化背景数组,10*20格式 bg.push(new Array(10)); }

X = Y=panel._x=panel._y=0; //换为X、Y表示

function reach(x:Number, y:Number, ret:Object) {

//x、y为方块位置,ret为方块形状,若方块ret下落一格碰到边界或者方块返回1

var i:Number, j:Number, k:Number; for (i=0; i

if (x+ret[k][0] == j && y+ret[k][1]+1 == i) { return 1; } } } }

16

}

return 0; }

3.2 俄罗斯方块游戏方块形状设计

在俄罗斯方块游戏中方块的形状是使用者直接可以看到的,在俄罗斯方块游戏中一共有7种形状,分别是方形、长形,Z形,反Z形,T形,L形,反L形。实现这7种形状的具体代码如下:裊樣祕廬廂颤谚鍘羋蔺。 function rv(a:Object, ret:Object) { //方块赋值,将a方块赋值到ret方块 var i:Number;

for (i=0; i<5; i++) {

ret[i][0]=a[i][0], ret[i][1]=a[i][1]; } }

function rotate(ret:Object) {

//根据方块ret最后一行(分别是形状指示变量和旋转方向变量)为ret的前四行赋以具体形状值 switch (ret[4][0]) { case 0 : //方形

a = [[1, 0], [2, 0], [1, 1], [2, 1], [0, 0]]; rv(a, ret); return; case 1 : //长形

switch (ret[4][1]) { case 1 :

a = [[0, 0], [1, 0], [2, 0], [3, 0], [1, 0]];

17

if (lrnotout(0, a) && !reach(x, y-1, a)) { rv(a, ret); } return; case 0 :

a = [[1, 0], [1, 1], [1, 2], [1, 3], [1, 1]]; if (lrnotout(0, a) && !reach(x, y-1, a)) { rv(a, ret); } return; } case 2 : //Z形

switch (ret[4][1]) { case 1 :

a = [[0, 1], [1, 1], [1, 2], [2, 2], [2, 0]]; if (lrnotout(0, a) && !reach(x, y-1, a)) { rv(a, ret); } return; case 0 :

a = [[2, 0], [1, 1], [2, 1], [1, 2], [2, 1]]; if (lrnotout(0, a) && !reach(x, y-1, a)) { rv(a, ret); } return; } case 3 : //反Z形

18

switch (ret[4][1]) { case 1 :

a = [[1, 1], [2, 1], [0, 2], [1, 2], [3, 0]]; if (lrnotout(0, a) && !reach(x, y-1, a)) { rv(a, ret); } return; case 0 :

a = [[1, 0], [1, 1], [2, 1], [2, 2], [3, 1]]; if (lrnotout(0, a) && !reach(x, y-1, a)) { rv(a, ret); } return; } case 4 : //T形

switch (ret[4][1]) { case 3 :

a = [[1, 0], [0, 1], [1, 1], [2, 1], [4, 0]]; if (lrnotout(0, a) && !reach(x, y-1, a)) { rv(a, ret); } return; case 0 :

a = [[1, 0], [0, 1], [1, 1], [1, 2], [4, 1]]; if (lrnotout(0, a) && !reach(x, y-1, a)) { rv(a, ret); } return;

19

case 1 :

a = [[0, 1], [1, 1], [2, 1], [1, 2], [4, 2]]; if (lrnotout(0, a) && !reach(x, y-1, a)) { rv(a, ret); } return; case 2 :

a = [[1, 0], [1, 1], [2, 1], [1, 2], [4, 3]]; if (lrnotout(0, a) && !reach(x, y-1, a)) { rv(a, ret); } return; } case 5 : //倒L形

switch (ret[4][1]) { case 3 :

a = [[1, 0], [2, 0], [1, 1], [1, 2], [5, 0]]; if (lrnotout(0, a) && !reach(x, y-1, a)) { rv(a, ret); } return; case 0 :

a = [[0, 1], [0, 2], [1, 2], [2, 2], [5, 1]]; if (lrnotout(0, a) && !reach(x, y-1, a)) { rv(a, ret); } return; case 1 :

20

a = [[2, 0], [2, 1], [1, 2], [2, 2], [5, 2]]; if (lrnotout(0, a) && !reach(x, y-1, a)) { rv(a, ret); } return; case 2 :

a = [[0, 1], [1, 1], [2, 1], [2, 2], [5, 3]]; if (lrnotout(0, a) && !reach(x, y-1, a)) { rv(a, ret); } return; } case 6 : //L形

switch (ret[4][1]) { case 3 :

a = [[1, 0], [2, 0], [2, 1], [2, 2], [5, 0]]; if (lrnotout(0, a) && !reach(x, y-1, a)) { rv(a, ret); } return; case 0 :

a = [[0, 1], [1, 1], [2, 1], [0, 2], [5, 1]]; if (lrnotout(0, a) && !reach(x, y-1, a)) { rv(a, ret); } return; case 1 :

a = [[1, 0], [1, 1], [1, 2], [2, 2], [5, 2]];

21

if (lrnotout(0, a) && !reach(x, y-1, a)) { rv(a, ret); } return; case 2 :

a = [[2, 1], [0, 2], [1, 2], [2, 2], [5, 3]]; if (lrnotout(0, a) && !reach(x, y-1, a)) { rv(a, ret); } return; }}}

3.3 俄罗斯方块游戏操作设计

俄罗斯方块游戏之所以流行是因为它简单的界面和操作,游戏过程中我们只要通过电脑上的方向键就可以进行游戏,具体实现该功能的代码如下:仓嫗盤紲嘱珑詁鍬齊驁。 function key() {

if (Key.isDown(Key.UP)) { rotate(ret); display(); }

if (Key.isDown(Key.LEFT)) { if (lrnotout(-1, ret)) { //左移可行性判断 x--; display(); } }

if (Key.isDown(Key.RIGHT)) {

22

if (lrnotout(1, ret)) { //右移可行性判断 x++; display(); } }

if (Key.isDown(Key.DOWN)) { //键盘控制下落 go(); }

if (Key.isDown(Key.SPACE)) { //一键下落到底

while (!reach(x, y, ret)) { y++; } go(); }

if (Key.isDown(82)) { //重新开始游戏 init(); } } init(); //初始化

setInterval(key, 80);

//每个80毫秒执行一次键盘事件函数

createTextField(\瀧。 3.4 俄罗斯方块游戏运行后台设计

绽萬璉轆娛閬蛏鬮绾23

玩过俄罗斯方块游戏的都知道,方块从上面随机的产生,我们可以利用方向键改变方块的形状和位置,而方块的移动也不是无界的,当方块移动到游戏区边界时方块将无法移动,具体的设计代码如下:骁顾燁鶚巯瀆蕪領鲡赙。 function generate(ret:Object) { //随机产生方块函数(可进一步修正) ret[4][0] = Math.floor(Math.random()*7); ret[4][1] = Math.floor(Math.random()*4); rotate(ret);

//完成方块ret的具体形状的赋值 }

function init() {

//初始化背景、方块、运动函数 var i:Number, j:Number; for (i=0; i

//初始化背景,边界为219,其余为' ' for (j=0; j<10; j++) { if (i == N-1) { bg[i][j] = 219; } else {

bg[i][j] = ' '; } } }

for (i=0; i<5; i++) { //为当前方块赋初值0 ret[i][0] = ret[i][1]=0; }

generate(ret); //产生当前方块

24

generate(nextret); //产生下一个方块

y=0, x=3, score=lines=0, level=0; //当前位置坐标和计分系统初始化 _tetris.removeTextField();

//如果从结束过的游戏恢复,删除结束标志 display(); //显示画面 frameflag = 0; //标示下落时间间隔

onEnterFrame = function () { frameflag++;

if (10-frameflag

//根据等级level确定下落时间间隔 frameflag = 0; go(); //下落及判断 } }; }

function drawblock(a, b, c, d) { //绘制方块的小块 with (panel) {

beginFill(0x000FFF, 100); lineStyle(1, 0xFF00FF);

moveTo(panel._x+a, panel._y+b); lineTo(panel._x+c, panel._y+b); lineTo(panel._x+c, panel._y+d); lineTo(panel._x+a, panel._y+d);

25

lineTo(panel._x+a, panel._y+b); endFill(); } }

function erase() { //删除一行方块

var n:Number = 0, i:Number, j:Number, k:Number, l:Number;惲锟缟馭篩凉。 for (i=0; i

//如果该行有空,则开始判断下一行 i++, j=-1; if (i == N-1) {

//行N-1为底线,不判断 break; }

} else if (j == 9) {

//判断到该行最后一列都没有空 for (k=i; k>=1; k--) { //上方方块下落

for (l=0; l<10; l++) { bg[k][l] = bg[k-1][l]; } }

for (l=0; l<10; l++) { //删除该行 bg[0][l] = ' '; }

瑣钋濺暧26

n++;

//此次删除行数变量增一 if ((lines+n)0 == 0) {

//删除行数总数到30的倍数则等级上升 level = (level+1); } } } }

lines += n, score += (n*n+n)*50; //总行数增n,计算得分 }

function display() {

//显示函数,采用全部清除再重绘制的方法 var i:Number, j:Number; panel.clear(); with (panel) { //画边界

lineStyle(1, 0x0000FF); moveTo(panel._x, panel._y);

lineTo(panel._x+WIDTH*10, panel._y);

lineTo(panel._x+WIDTH*10, panel._y+WIDTH*(N-1)); lineTo(panel._x, panel._y+WIDTH*(N-1)); lineTo(panel._x, panel._y); }

for (i=0; i<4; i++) {

//当前方块占据的地方赋值为边界类型219 bg[y+ret[i][1]][x+ret[i][0]] = 219; }

27

for (i=0; i

for (j=0; j<10; j++) { if (bg[i][j] == 219) {

drawblock(j*WIDTH+X, i*WIDTH+Y, j*WIDTH+WIDTH+X, i*WIDTH+WIDTH+Y);鎦诗涇艳损楼紲鯗餳類。 } } }

for (i=0; i<4; i++) { //绘制当前方块

drawblock(nextret[i][0]*WIDTH+14*WIDTH+X, nextret[i][1]*WIDTH+12*WIDTH+Y, nextret[i][0]*WIDTH+WIDTH+14*WIDTH+X,

nextret[i][1]*WIDTH+WIDTH+12*WIDTH+Y);栉缏歐锄棗鈕种鵑瑶锬。 }

for (i=0; i<4; i++) {

//当前方块绘制完毕,重新将当前位置改为' ' bg[y+ret[i][1]][x+ret[i][0]] = ' '; }

createTextField(\ //绘制计分系统

createTextField(\ createTextField(\ _lvltxt.text = \ _scrtxt.text = \ _lnstxt.text = \}

function go() {

28

//下落函数

var sss:Number = reach(x, y, ret); //当前方块下落一格是否碰到边界或方块 var ii:Number; if (!sss) { y++;

//如果当前方块下落一格没有碰到边界或方块则下落一格 }

display(); //重新绘制 if (sss) { //碰到边界或方块 display(); //重新绘制

for (ii=0; ii<4; ii++) {

//修改背景数组,将当前方块的位置改为边界类型 bg[y+ret[ii][1]][x+ret[ii][0]] = 219; } erase();

//删除行判断及执行 rv(nextret, ret);

//将下一个方块赋值为当前方块 y=0, x=3; //重置方块位置 generate(nextret); //生成下一个方块 display(); //重新绘制

if (reach(x, y, ret)) {

29

//如果下一格碰到方块则游戏结束

createTextField(\20);辔烨棟剛殓攬瑤丽阄应。 _tetris._x += 200; _tetris._y += 50; _tetris._xscale = 300; _tetris._yscale = 300; _tetris.background = true; _tetris.text = \ onEnterFrame = function () { //停止下落 }; } } }

function key() {

if (Key.isDown(Key.UP)) { rotate(ret); display(); }

if (Key.isDown(Key.LEFT)) { if (lrnotout(-1, ret)) { //左移可行性判断 x--; display(); } }

if (Key.isDown(Key.RIGHT)) { if (lrnotout(1, ret)) {

30

//右移可行性判断 x++; display(); }

第四章 FLASH版俄罗斯方块游戏开发心得

通过FLASH版俄罗斯方块游戏设计,我不仅复习熟练了相关的课程、专业,还学习掌握了很多以前不曾掌握的知识,同时也认识到还有很多基础知识要去学习,去巩固。在以后的时间里,我将花费大量的时间用于学习上,以弥补自己不足的地方。峴扬斕滾澗辐滠兴渙藺。 参考文献

[1] 陈青,Flash 2004标准案例教材.人民有点出版社,2006. [2] 瑞哈特(美),曹铭。Flash宝典,电子工业出版社,2003. [3] 赵子江,变形动画制作教程.北京:机械工业出版社,2000. [4] 美国Adobe公司,Adobe Flash CS4 ActionScript 3.0中文版经典教程.人民邮电出版社2009.詩叁撻訥烬忧毀厉鋨骜。 [5] 马谧挺, 闪魂——Flash CS4完美入门与案例精解.清华大学出版社,2009.

[6] 吴涛,Flash MX2004 ActionScript动画设计. 北京科海电子出版社,2005则鯤愜韋瘓賈晖园栋泷。 [7] Adobe专家委员会,Adobe Flash CS3案例风暴. 人民邮电出版社,2008

31

//右移可行性判断 x++; display(); }

第四章 FLASH版俄罗斯方块游戏开发心得

通过FLASH版俄罗斯方块游戏设计,我不仅复习熟练了相关的课程、专业,还学习掌握了很多以前不曾掌握的知识,同时也认识到还有很多基础知识要去学习,去巩固。在以后的时间里,我将花费大量的时间用于学习上,以弥补自己不足的地方。峴扬斕滾澗辐滠兴渙藺。 参考文献

[1] 陈青,Flash 2004标准案例教材.人民有点出版社,2006. [2] 瑞哈特(美),曹铭。Flash宝典,电子工业出版社,2003. [3] 赵子江,变形动画制作教程.北京:机械工业出版社,2000. [4] 美国Adobe公司,Adobe Flash CS4 ActionScript 3.0中文版经典教程.人民邮电出版社2009.詩叁撻訥烬忧毀厉鋨骜。 [5] 马谧挺, 闪魂——Flash CS4完美入门与案例精解.清华大学出版社,2009.

[6] 吴涛,Flash MX2004 ActionScript动画设计. 北京科海电子出版社,2005则鯤愜韋瘓賈晖园栋泷。 [7] Adobe专家委员会,Adobe Flash CS3案例风暴. 人民邮电出版社,2008

31

本文来源:https://www.bwwdw.com/article/lyp8.html

Top