FLASH游戏之俄罗斯方块源代码.doc_第1页
FLASH游戏之俄罗斯方块源代码.doc_第2页
FLASH游戏之俄罗斯方块源代码.doc_第3页
FLASH游戏之俄罗斯方块源代码.doc_第4页
FLASH游戏之俄罗斯方块源代码.doc_第5页
已阅读5页,还剩6页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

N = 20;/行数WIDTH = 20;/方块边长level = 0;/开始等级(下落速度)ret = new Array();/当前出现的方块nextret = new Array();/下一个出现的方块bg = new Array();/背景数组createEmptyMovieClip(panel, 1048575);/所有方块都在此mc里for (i=0; i5; i+) /初始化方块数组,2*5格式,前四行代表每个方块的4个小块的位置坐标,最后一行第一列是方块形状,第二列是方块旋转方向ret.push(new Array(2);nextret.push(new Array(2);for (i=0; i20; 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下落一格碰到边界或者方块返回1var i:Number, j:Number, k:Number;for (i=0; iN; i+) for (j=0; j10; j+) if (bgij = 1) for (k=0; k4; k+) if (x+retk0 = j & y+retk1+1 = i) return 1;return 0;function lrnotout(lorr:Number, a:Object) /lorr=-1代表a往左边一格可行性的判断,lorr=1代表右边一格可行性的判断,lorr=0代表a的位置合理性的判断,出现不合理则返回0var i:Number;if (lorr = -1) for (i=0; i4; i+) if (x+ai0-10 | reach(x-1, y-1, a) return 0;if (lorr = 1) for (i=0; i9 | reach(x-1, y+1, a) return 0;if (lorr = 0) for (i=0; i4; i+) if (x+ai09) return 0;return 1;function rv(a:Object, ret:Object) /方块赋值,将a方块赋值到ret方块var i:Number;for (i=0; i5; i+) reti0=ai0, reti1=ai1;function rotate(ret:Object) /根据方块ret最后一行(分别是形状指示变量和旋转方向变量)为ret的前四行赋以具体形状值switch (ret40) case 0 :/方形a = 1, 0, 2, 0, 1, 1, 2, 1, 0, 0;rv(a, ret);return;case 1 :/长形switch (ret41) case 1 :a = 0, 0, 1, 0, 2, 0, 3, 0, 1, 0;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 (ret41) 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形switch (ret41) 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 (ret41) 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;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 (ret41) 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 :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 (ret41) case 3 :a = 1, 0, 2, 0, 2, 1, 2, 2, 6, 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, 6, 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, 6, 2;if (lrnotout(0, a) & !reach(x, y-1, a) rv(a, ret);return;case 2 :a = 2, 1, 0, 2, 1, 2, 2, 2, 6, 3;if (lrnotout(0, a) & !reach(x, y-1, a) rv(a, ret);return;function generate(ret:Object) /随机产生方块函数(可进一步修正)ret40 = Math.floor(Math.random()*7);ret41 = Math.floor(Math.random()*4);rotate(ret);/完成方块ret的具体形状的赋值function init() /初始化背景、方块、运动函数var i:Number, j:Number;for (i=0; iN; i+) /初始化背景,边界为1,其余为 for (j=0; j10; j+) if (i = N-1) bgij = 1; else bgij = ;for (i=0; i5; i+) /为当前方块赋初值0reti0 = reti1=0;generate(ret);/产生当前方块generate(nextret);/产生下一个方块y=0, x=3, score=lines=0, level=0;/当前位置坐标和计分系统初始化_tetris.removeTextField();/如果从结束过的游戏恢复,删除结束标志display();/显示画面frameflag = 0;/标示下落时间间隔onEnterFrame = function () frameflag+;if (10-frameflaglevel) /根据等级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);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; iN-1; i+) for (j=0; j=1; k-) /上方方块下落for (l=0; l10; l+) bgkl = bgk-1l;for (l=0; l10; l+) /删除该行bg0l = ;n+;/此次删除行数变量增一if (lines+n)%30 = 0) /删除行数总数到30的倍数则等级上升level = (level+1)%10;lines += n, score += (n*n+n)*50;/总行数增n,计算得分function display() /显示函数,采用全部清除再重绘制的方法(因为这个程序本来是在Turbo C 2.0的文本环境下完成的)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; i4; i+) /当前方块占据的地方赋值为边界类型1bgy+reti1x+reti0 = 1;for (i=0; iN-1; i+) /绘制背景方块for (j=0; j10; j+) if (bgij = 1) drawblock(j*WIDTH+X, i*WIDTH+Y, j*WIDTH+WIDTH+X, i*WIDTH+WIDTH+Y);for (i=0; i4; i+) /绘制当前方块drawblock(nextreti0*WIDTH+14*WIDTH+X, nextreti1*WIDTH+12*WIDTH+Y, nextreti0*WIDTH+WIDTH+14*WIDTH+X, nextreti1*WIDTH+WIDTH+12*WIDTH+Y);for (i=0; i4; i+) /当前方块绘制完毕,重新将当前位置改为 bgy+reti1x+reti0 = ;createTextField(_lvltxt, 1, 270, 100, 100, 20);/绘制计分系统createTextField(_scrtxt, 2, 270, 130, 100, 20);createTextField(_lnstxt, 3, 270, 160, 100, 20);_lvltxt.text = Level: +level;_scrtxt.text = Score: +score;_lnstxt.text = Lines: +lines;function go() /下落函数if (!(reach(x, y, ret) /当前方块下落一格是否碰到边界或方块y+;/如果当前方块下落一格没有碰到边界或方块则下落一格display();/重新绘制else /碰到边界或方块score += 10;/得10分display();/重新绘制for (var ii=0; ii4; ii+) /修改背景数组,将当前方块的位置改为边界类型bgy+retii1x+retii0 = 1;erase();/删除行判断及执行rv(nextret, ret);/将下一个方块赋值为当前方块y=0, x=3;/重置方块位置generate(nextret);/生成下一个方块display();/重新绘制if (reach(x, y, ret) /如果下一格碰到方块则游戏结束createTextField(_tetris, 100000, WIDTH*3.3, WIDTH*N/3, 70, 20);_t

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论