FLASH游戏之俄罗斯方块源代码.docx

上传人:b****5 文档编号:11859073 上传时间:2023-04-06 格式:DOCX 页数:12 大小:17.82KB
下载 相关 举报
FLASH游戏之俄罗斯方块源代码.docx_第1页
第1页 / 共12页
FLASH游戏之俄罗斯方块源代码.docx_第2页
第2页 / 共12页
FLASH游戏之俄罗斯方块源代码.docx_第3页
第3页 / 共12页
FLASH游戏之俄罗斯方块源代码.docx_第4页
第4页 / 共12页
FLASH游戏之俄罗斯方块源代码.docx_第5页
第5页 / 共12页
点击查看更多>>
下载资源
资源描述

FLASH游戏之俄罗斯方块源代码.docx

《FLASH游戏之俄罗斯方块源代码.docx》由会员分享,可在线阅读,更多相关《FLASH游戏之俄罗斯方块源代码.docx(12页珍藏版)》请在冰豆网上搜索。

FLASH游戏之俄罗斯方块源代码.docx

FLASH游戏之俄罗斯方块源代码

N=20;

//行数

WIDTH=20;

//方块边长

level=0;

//开始等级(下落速度)

ret=newArray();

//当前出现的方块

nextret=newArray();

//下一个出现的方块

bg=newArray();

//背景数组

createEmptyMovieClip("panel",1048575);

//所有方块都在此mc里

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

4个小块的位置坐

//初始化方块数组,2*5格式,前四行代表每个方块的标,最后一行第一列是方块形状,第二列是方块旋转方向

}

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

//初始化背景数组,10*20格式

bg.push(newArray(10));

X=Y=panel._x=panel._y=0;

//换为X、Y表示

functionreach(x:

Number,y:

Number,ret:

Object){

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

Number,j:

Number,k:

Number;

for(i=0;i

}

return0;for(j=0;j<10;j++){

if(bg[i][j]==1){

}}for(k=0;k<4;k++){

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

}}return1;

ret.push(newArray

(2));

nextret.push(newArray

(2));

}

functionlrnotout(lorr:

Number,a:

Object){

//lorr==-1代表a往左边一格可行性的判断,lorr==1代表右边一格可行性的判断,iorr==0代表a的位置合理性的判断,出现不合理则返回0

}vari:

Number;

if(iorr==-1){

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

if(x+a[i][0]-1<0||reach(x-1,y-1,a)){

}

}}}return0;

if(lorr==1){

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

if(x+a[i][0]+1>9||reach(x-1,y+1,a)){

}}return0;

if(lorr==0){

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

if(x+a[i][0]<0||x+a[i][0]>9){

}return0;

}

}

return1;

functionrv(a:

Object,ret:

Object){

//方块赋值,将a方块赋值到ret方块}vari:

Number;

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

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

}

functionrotate(ret:

Object){

ret的

//根据方块ret最后一行(分别是形状指示变量和旋转方向变量)为前四行赋以具体形状值

switch(ret[4][0]){

case0:

//方形

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

rv(a,ret);

return;

case1:

//长形

switch(ret[4][1]){

case1:

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

if(lrnotout(0,a)&&!

reach(x,y-1,a)){

rv(a,ret);

}

return;

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

if(lrnotout(0,a)&&!

reach(x,y-1,a)){

rv(a,ret);

}

return;

case0:

}

case2:

//Z形

switch(ret[4][1]){

case1:

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

if(lrnotout(0,a)&&!

reach(x,y-1,a)){}rv(a,ret);

return;

case0:

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

if(lrnotout(0,a)&&!

reach(x,y-1,a)){}rv(a,ret);

return;

}

case3:

//反Z形

switch(ret[4][1]){

case1:

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

if(lrnotout(0,a)&&!

reach(x,y-1,a)){rv(a,ret);

}

return;

case0:

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

if(lrnotout(0,a)&&!

reach(x,y-1,a)){rv(a,ret);

}

return;

}

case4:

//T形

switch(ret[4][1]){

case3:

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

if(lrnotout(0,a)&&!

reach(x,y-1,a)){}rv(a,ret);

return;

case0:

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

if(lrnotout(0,a)&&!

reach(x,y-1,a)){rv(a,ret);

}

return;

case1:

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

if(lrnotout(0,a)&&!

reach(x,y-1,a)){}rv(a,ret);

return;

case2:

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

if(lrnotout(0,a)&&!

reach(x,y-1,a)){}rv(a,ret);

return;

}

case5:

//倒L形

switch(ret[4][1]){

case3:

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

if(lrnotout(0,a)&&!

reach(x,y-1,a)){

rv(a,ret);

}

return;

case0:

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

if(lrnotout(0,a)&&!

reach(x,y-1,a)){rv(a,ret);

}

return;

case1:

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

if(lrnotout(0,a)&&!

reach(x,y-1,a)){rv(a,ret);

}

return;

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

if(lrnotout(0,a)&&!

reach(x,y-1,a)){rv(a,ret);

}

return;

case2:

case6:

//L形

switch(ret[4][1]){

case3:

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

if(lrnotout(0,a)&&!

reach(x,y-1,a)){}rv(a,ret);

return;

case0:

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

if(lrnotout(0,a)&&!

reach(x,y-1,a)){}rv(a,ret);

return;

case1:

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

if(lrnotout(0,a)&&!

reach(x,y-1,a)){rv(a,ret);

}

return;

case2:

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

}if(lrnotout(0,a)&&!

reach(x,y-1,a)){

}rv(a,ret);

return;

}

}

functiongenerate(ret:

Object){

}//随机产生方块函数(可进一步修正)ret[4][0]=Math.floor(Math.random()*7);ret[4][1]=Math.floor(Math.random()*4);rotate(ret);

//完成方块ret的具体形状的赋值functioninit(){

//初始化背景、方块、运动函数

vari:

Number,j:

Number;

for(i=0;i

//初始化背景,边界为1,其余为''

}for(j=0;j<10;j++){

}if(i==N-1){

bg[i][j]=1;

}else{

bg[i][j]='';

}

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

//为当前方块赋初值0ret[i][0]=ret[i][1]=0;

}

generate(ret);

//产生当前方块

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();

//下落及判断

}

};

}

functiondrawblock(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();

functionerase(){

//删除一行方块

varn:

Number=0,i:

Number,j:

Number,k:

Number,l:

Number;

for(i=0;i

for(j=0;j<10;j++){

if(bg[i][j]==''){

//如果该行有空,则开始判断下一行

i++,j=-1;

if(i==N-1){

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

break;

}

}elseif(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]='';

}

n++;

//此次删除行数变量增一

if((lines+n)%30==0){

//删除行数总数到30的倍数则等级上升

}level=(level+1)%10;

}}

}

}

lines+=n,score+=(n*n+n)*50;

//总行数增n,计算得分

functiondisplay(){

Turbo

//显示函数,采用全部清除再重绘制的方法(因为这个程序本来是在C2.0的文本环境下完成的)

vari:

Number,j:

Number;

panel.clear();

with(panel){

//画边界

lineStyle(1,0x0000FF);

}

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

//当前方块占据的地方赋值为边界类型1

bg[y+ret[i][1]][x+ret[i][0]]=1;

for(i=0;i

//绘制背景方块

for(j=0;j<10;j++){i*WIDTH+Y,j*WIDTH+WIDTH+X,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);

if(bg[i][j]==1){drawblock(j*WIDTH+X,i*WIDTH+WIDTH+Y);

}}

}

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

//绘制当前方块

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

}

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

//当前方块绘制完毕,重新将当前位置改为''

bg[y+ret[i][1]][x+ret[i][0]]='';

}

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;functiongo(){//下落函数if(!

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

//当前方块下落一格是否碰到边界或方块

}else{

//碰到边界或方块score+=10;

//得10分display();

//重新绘制

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

//修改背景数组,将当前方块的位置改为边界类型

bg[y+ret[ii][1]][x+ret[ii][0]]=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);_tetris._x+=200;

_tetris._y+=50;

_tetris._xscale=300;

_tetris._yscale=300;

_tetris.background=true;

y++;

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

display();

//重新绘制

}}}_tetris.text="GameOver!

";onEnterFrame=function(){//停止下落

};

functionkey(){

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)){

//右移可行性判断

}x++;

display();

if(Key.isDown(Key.DOWN)){

//键盘控制下落

}go();

if(Key.isDown(Key.SPACE)){

//一键下落到底

}

if(Key.isDown(82)){

//重新开始游戏}init();

while(!

reach(x,y,ret)){y++;

}

go();

}

init();

//初始化

setInterval(key,80);

//每个80毫秒执行一次键盘事件函数createTextField("hinttxt",33324,200,20,300,50);

hinttxt.text="键盘键:

上,下,左,右,R(reset),空格";

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高等教育 > 医学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1