//***************************************************游戏说明**************************************//
//游戏名称:俄罗斯方块
//作者:李鹏(James.Li)
//日期:2004.3.16
//游戏规则:通过方向键控制左侧的下落方块,使得左侧方块积累尽可能得少;
//游戏简介:在游戏开始时,可以设置难度和速度,分别为(0-9)个等级;在游戏中间可以按空格键暂停或者继续游戏;
// 本款游戏只提供顺时针旋转方式,不做方向的选择控制;
///**************************************************程序入口**************************************//
init();
//***************************************************初始化部分************************************//
////////初始化函数////////////
function init() {
////定义变量//
createValues();
////程序绘图//
createBg();
////定义方块儿形状数组//
initArrays();
////建立选择区域逻辑//
setOpt();
////初始化控制键//
keyCtrl();
////初始化选择键//
option();
////键盘跟踪开始,初始化为选择状态//
Key.removeListener(keyListener);
Key.addListener(keyListener_opt);
}
////////定义变量////////////
function createValues() {
////是否为暂停状态标签,初始化为否//
pause = false;
////是否为优先下落标签,初始化为是//
isDroped = true;
////进入状态初始化为“开始游戏”//
isFirst = "start";
////内部记分初始化为0//
tempScore = 0;
////难度等级初始化为0//
levelValue = 0;
////速度等级初始化为0//
speedValue = 0;
////得分表初始化为0//
scoreValue = 0;
}
/////////为mc建立方块显示函数/////
function createUnit(mc) {
////建立方块存储空间//
mc.createEmptyMovieClip("unit", 0);
////绘制方块//
with (mc.unit) {
moveTo(0, 0);
lineStyle(0, "0x000000", 100);
lineTo(10, 0);
lineTo(10, 10);
lineTo(0, 10);
lineTo(0, 0);
lineTo(2, 2);
lineTo(8, 2);
lineTo(8, 8);
lineTo(2, 8);
lineTo(2, 2);
moveTo(8, 2);
lineTo(10, 0);
moveTo(8, 8);
lineTo(10, 10);
moveTo(2, 8);
lineTo(0, 10);
}
}
////////建立方块显示区域(主要区域)//
function createElems() {
////建立显示平台(bg)//
this.createEmptyMovieClip("bg", 0);
////存放层变量初始化为0//
depth = 0;
////建立15行10列的方块显示区域//
for (var i = 0; i<10; i++) {
for (var j = 0; j<16; j++) {
this.bg.createEmptyMovieClip("elem_"+i+"_"+j, depth++);
eval("this.bg.elem_"+i+"_"+j)._x = 5+i*10;
eval("this.bg.elem_"+i+"_"+j)._y = 5+j*10;
//为每个单元绘制方块//
createUnit(eval("this.bg.elem_"+i+"_"+j));
//隐藏单元//
eval("this.bg.elem_"+i+"_"+j)._visible = false;
}
}
}
////////绘制平台的区域分割线////
function createBgLines() {
////开始绘制////
with (this.bg) {
moveTo(0, 0);
lineStyle(0, "0x000000", 100);
lineTo(210, 0);
lineTo(210, 170);
lineTo(0, 170);
lineTo(0, 0);
moveTo(5, 5);
lineTo(105, 5);
lineTo(105, 165);
lineTo(5, 165);
lineTo(5, 5);
}
}
////////绘制预览区域//////////
function createViews() {
/////建立平台///
this.bg.panel.createEmptyMovieClip("nextView", 1);
////层变量初始化为0//
var tempDepth = 0;
////建立预览区域(次要区域)//
for (var i = 0; i<4; i++) {
for (var j = 0; j<4; j++) {
//建立单元//
this.bg.panel.nextView.createEmptyMovieClip("elem_"+i+"_"+j, tempDepth++);
eval("this.bg.panel.nextView.elem_"+i+"_"+j)._x = 5+i*10;
eval("this.bg.panel.nextView.elem_"+i+"_"+j)._y = 5+j*10;
//为每个单元绘制方块//
createUnit(eval("this.bg.panel.nextView.elem_"+i+"_"+j));
//隐藏单元//
eval("this.bg.panel.nextView.elem_"+i+"_"+j)._visible = false;
}
}
this.bg.panel.nextView._y = 20;
this.bg.panel.nextView._x = 10;
delete tempDepths;
}
////////绘制显示文本区域//
function createTexts() {
////建立标题文本//
this.bg.panel.createTextField("nextText", 0, 0, 0, 50, 20);
var textFormat = new TextFormat();
textFormat.size = 12;
this.bg.panel.nextText.selectable = false;
this.bg.panel.nextText.text = "NEXT";
this.bg.panel.nextText.setTextFormat(textFormat);
//调用建立文本函数,建立“难度”、“速度”、“得分”、“游戏入口”和作者签名文本//
createTextAndValue(this.bg.panel, "level", 2, 0, 60, textFormat);
createTextAndValue(this.bg.panel, "speed", 3, 0, 80, textFormat);
createTextAndValue(this.bg.panel, "score", 4, 0, 100, textFormat);
createTextAndValue(this.bg.panel, isFirst, 5, 0, 120, textFormat);
addAuthorName(this.bg.panel, 40, 145, 6, textFormat);
}
////////建立功能区域////
function createPanels() {
////建立平台///
this.bg.createEmptyMovieClip("panel", depth++);
this.bg.panel._x = 110;
this.bg.panel._y = 5;
////调用函数建立预览和文本区域//
createViews();
createTexts();
}
////////建立游戏总平台////
function createBg() {
/////建立主要显示区域、区域分割线和功能区域///
createElems();
createBgLines();
createPanels();
}
/////////建立文本函数//////
function createTextAndValue(local, mcName, depth, mc_x, mc_y, tf) {
////获得路径//
local.createEmptyMovieClip(mcName+"_mc", depth);
eval(local+"."+mcName+"_mc")._x = mc_x;
eval(local+"."+mcName+"_mc")._y = mc_y;
////建立名称与内容文本//
eval(local+"."+mcName+"_mc").createTextField(mcName+"Text", 0, 0, 0, 50, 20);
eval(local+"."+mcName+"_mc").createTextField(mcName+"Value", 1, 50, 0, 50, 20);
eval(local+"."+mcName+"_mc."+mcName+"Text").selectable = false;
eval(local+"."+mcName+"_mc."+mcName+"Text").text = mcName.toUpperCase();
eval(local+"."+mcName+"_mc."+mcName+"Text").setTextFormat(tf);
eval(local+"."+mcName+"_mc."+mcName+"Value").selectable = false;
eval(local+"."+mcName+"_mc."+mcName+"Value").text = eval(mcName+"Value");
eval(local+"."+mcName+"_mc."+mcName+"Value").setTextFormat(tf);
}
////////作者署名函数/////
function addAuthorName(local, x, y, depth, tf) {
local.createEmptyMovieClip("author_mc", depth);
local.author_mc._x = x;
local.author_mc._y = y;
local.author_mc.createTextField("authorText", 0, 0, 0, 300, 20);
local.author_mc.authorText.selectable = false;
local.author_mc.authorText.text = "JAMES.LEE";
tf.size = 10;
local.author_mc.authorText.setTextFormat(tf);
}
////////建立选择功能区域函数//
function setOpt() {
///////重置文本//
createTexts();
////建立选择框//
if (this.bg.panel.selectFrame == undefined) {
this.bg.panel.createEmptyMovieClip("selectFrame", 10);
with (this.bg.panel.selectFrame) {
moveTo(0, 2);
lineStyle(0, "0x666666", 100);
lineTo(90, 2);
lineTo(90, 15);
lineTo(0, 15);
lineTo(0, 2);
}
}
////定义或定位当前选择位置//
if (currentOpt == undefined) {
currentOpt = 2;
}
if (isFirst == "start") {
///建立可以选择的数组//
currentOptArray = ["level", "speed", "start"];
} else {
currentOptArray = [isFirst];
if (currentOpt == 2) {
currentOpt = 0;
}
}
///选择框定位//
this.bg.panel.selectFrame._y = eval("this.bg.panel."+currentOptArray[currentOpt]+"_mc")._y;
}
////////建立下落方块的函数///
function createDrop() {
////建立平台//
this.bg.createEmptyMovieClip("drop", 1000);
///定位//
this.bg.drop._x = this.bg.elem_3_0._x;
this.bg.drop._y = this.bg.elem_3_0._y+getRow()*10;
//定义位置跟踪变量//
row = getRow();
col = 3;
var tempDepth = 0;
for (var i = 0; i<4; i++) {
for (var j = 0; j<4; j++) {
//建立单元//
this.bg.drop.createEmptyMovieClip("elem_"+i+"_"+j, tempDepth++);
var temp_mc = eval("this.bg.drop.elem_"+i+"_"+j);
temp_mc._x = i*10;
temp_mc._y = j*10;
//建立单元孪生体,real为显示体,temp为试探体//
temp_mc.createEmptyMovieClip("real", 0);
temp_mc.createEmptyMovieClip("temp", 1);
//为孪生体绘制方块//
createUnit(temp_mc.real);
createUnit(temp_mc.temp);
//显示体隐藏//
temp_mc.real._visible = false;
//定义试探体的一个属性,为形状标记,true表示该单元是形状的组成部分,false表示不是//
temp_mc.temp.selected = eval("array"+currentID)[i][j];
//隐藏试探体//
temp_mc.temp._visible = false;
}
}
delete tempDepths;
////////反复启动下降函数,时间间隔为1000毫秒减去速度等级的100倍,等级越高,下落越快//
interval = setInterval(dropDown, 1000-100*speedValue);
}
////////方块形状数组//////
function initArrays() {
//////1-4为长条形///
array1 = [[0, 0, 0, 0], [0, 0, 0, 0], [1, 1, 1, 1], [0, 0, 0, 0]];
array2 = [[0, 1, 0, 0], [0, 1, 0, 0], [0, 1, 0, 0], [0, 1, 0, 0]];
array3 = array1;
array4 = array2;
//////5-8为正方形///
array5 = [[0, 0, 0, 0], [0, 1, 1, 0], [0, 1, 1, 0], [0, 0, 0, 0]];
array6 = array5;
array7 = array5;
array8 = array5;
//////9-16为两种方向的之字形///
array9 = [[0, 0, 0, 0], [1, 1, 0, 0], [0, 1, 1, 0], [0, 0, 0, 0]];
array10 = [[0, 0, 0, 0], [0, 1, 0, 0], [1, 1, 0, 0], [1, 0, 0, 0]];
array11 = array9;
array12 = array10;
array13 = [[0, 0, 0, 0], [0, 0, 0, 0], [0, 1, 1, 0], [1, 1, 0, 0]];
array14 = [[0, 0, 0, 0], [1, 0, 0, 0], [1, 1, 0, 0], [0, 1, 0, 0]];
array15 = array13;
array16 = array14;
//////17-20为丁字形///
array17 = [[0, 0, 0, 0], [0, 1, 0, 0], [1, 1, 0, 0], [0, 1, 0, 0]];
array18 = [[0, 0, 0, 0], [0, 0, 0, 0], [1, 1, 1, 0], [0, 1, 0, 0]];
array19 = [[0, 0, 0, 0], [0, 1, 0, 0], [0, 1, 1, 0], [0, 1, 0, 0]];
array20 = [[0, 0, 0, 0], [0, 1, 0, 0], [1, 1, 1, 0], [0, 0, 0, 0]];
/////21-28为两种方向的L形///
array21 = [[0, 0, 0, 0], [0, 0, 0, 0], [1, 1, 1, 0], [1, 0, 0, 0]];
array22 = [[0, 0, 0, 0], [0, 1, 0, 0], [0, 1, 0, 0], [0, 1, 1, 0]];
array23 = [[0, 0, 0, 0], [0, 0, 1, 0], [1, 1, 1, 0], [0, 0, 0, 0]];
array24 = [[0, 0, 0, 0], [1, 1, 0, 0], [0, 1, 0, 0], [0, 1, 0, 0]];
array25 = [[0, 0, 0, 0], [1, 0, 0, 0], [1, 1, 1, 0], [0, 0, 0, 0]];
array26 = [[0, 0, 0, 0], [0, 1, 0, 0], [0, 1, 0, 0], [1, 1, 0, 0]];
array27 = [[0, 0, 0, 0], [0, 0, 0, 0], [1, 1, 1, 0], [0, 0, 1, 0]];
array28 = [[0, 0, 0, 0], [0, 1, 1, 0], [0, 1, 0, 0], [0, 1, 0, 0]];
}
////***********************************************功能函数**********************************//
///////选择函数//
function selectOpt(num) {
//条件为准备开始状态下//
if (isFirst == "start") {
currentOpt += num;
if (currentOpt == -1) {
currentOpt = 2;
}
if (currentOpt == 3) {
currentOpt = 0;
}
} else {
//暂停状态下不可选择//
currentOpt = 0;
}
//刷新选择框//
setOpt();
}
////////修改等级函数//
function modify(num) {
//条件为只有在准备开始状态下才可以修改//
if (isFirst == "start") {
if (currentOpt<2) {
var tempValue = eval(currentOptArray[currentOpt]+"Value");
tempValue += num;
if (tempValue == -1) {
tempValue = 9;
}
if (tempValue == 10) {
tempValue = 0;
}
set(currentOptArray[currentOpt]+"Value", tempValue);
}
createTexts();
}
}
////////设置难度(难度越高,堆积的方块越高)////////
function setLevel(level) {
for (var i = 0; i<10; i++) {
for (var j = (16-level); j<16; j++) {
eval("this.bg.elem_"+i+"_"+j)._visible = random(2);
}
}
}
/////////获取下落方块的初始行高(标准是紧邻主显示区域的上边缘)///
function getRow() {
if (currentID == 2 || currentID == 4 || currentID == 10 || currentID == 12 || currentID == 14 || currentID == 16 || currentID == 17 || currentID == 24 || currentID == 26) {
return -2;
} else if (currentID == 1 || currentID == 3) {
return -4;
} else {
return -3;
}
}
///////显示预览//
function setView() {
/////取得预览形状id//
viewID = random(28)+1;
for (var i = 0; i<4; i++) {
for (var j = 0; j<4; j++) {
eval("this.bg.panel.nextView.elem_"+i+"_"+j)._x = i*10;
eval("this.bg.panel.nextView.elem_"+i+"_"+j)._y = j*10;
//为预览区域的单元绘制方块//
createUnit(eval("this.bg.panel.nextView.elem_"+i+"_"+j));
//按照形状id对应的数组显示形状//
eval("this.bg.panel.nextView.elem_"+i+"_"+j)._visible = eval("array"+viewID)[i][j];
}
}
}
////扫描函数//
function scan() {
//屏蔽键盘控制//
Key.removeListener(keyListener);
//定义层记录变量,初始化为0//
var tempLayer = 0;
for (var j = 0; j<16; j++) {
//定义单元记数变量,初始化为0//
var first = 0;
for (var i = 0; i<10; i++) {
var temp_mc = eval("this.bg.elem_"+i+"_"+j);
if (temp_mc._visible) {
//如果同层的单元为显示状态,记数变量加1//
first++;
}
//如果记数变量达到10,说明此行已满//
if (first>=10) {
//层记录加1//
tempLayer++;
//调用消行函数//
layer(j, tempLayer);
}
}
}
delete tempLayer;
//重置函数//
reset();
}
/////定义消行函数////
function layer(row, num) {
//加分//
setText(this.bg.panel, "score", scoreValue+num*50);
//内部记分//
tempScore += num*50;
//判断内部记分,进行速度跟踪//
if ((tempScore-(1000+speedValue*50))>=0) {
speedValue++;
if (speedValue == 10) {
speedValue = 0;
}
tempScore = 0;
}
//重置速度文本//
setText(this.bg.panel, "speed", speedValue);
for (var i = 0; i<10; i++) {
var temp_mc = eval("this.bg.elem_"+i+"_"+row);
//消行//
temp_mc._visible = false;
for (var j = row; j>0; j--) {
//串行//
eval("this.bg.elem_"+i+"_"+j)._visible = eval("this.bg.elem_"+i+"_"+(j-1))._visible;
}
}
}
/////定义文本跟踪函数//
function setText(local, mcName, value) {
var textFormat = new TextFormat();
textFormat.size = 12;
set(mcName+"Value", value);
eval(local+"."+mcName+"_mc."+mcName+"Value").text = eval(mcName+"Value");
eval(local+"."+mcName+"_mc."+mcName+"Value").setTextFormat(textFormat);
}
///////显示提示文本//
function setTempText(value) {
this.bg.createEmptyMovieClip;
this.bg.createTextField("tempText", 10000, 15, 50, 80, 20);
var tf = new TextFormat();
tf.align = "center";
this.bg.tempText.selectable = false;
this.bg.tempText.text = value;
this.bg.tempText.border = true;
this.bg.tempText.background = true;
this.bg.tempText.backgroundColor = "0xffffff";
this.bg.tempText.setTextFormat(tf);
}
///////扔掉提示文本函数//
function removeTempText() {
this.bg.tempText.removeTextField();
}
////////游戏结束画面函数//
function restart() {
if (up == undefined) {
up = true;
}
if (c == undefined) {
c = 15;
}
if (c>=-10) {
if (up) {
for (var i = 0; i<10; i++) {
eval("this.bg.elem_"+i+"_"+c)._visible = true;
}
c--;
} else {
for (var i = 0; i<10; i++) {
eval("this.bg.elem_"+i+"_"+c)._visible = false;
}
c++;
if (c == 16) {
clearInterval(interval_over);
delete c;
delete up;
/////游戏开始//
gameStart();
}
}
} else {
up = false;
c = 0;
}
}
/////*******************************************键盘控制反应函数**********************************////
///////建立键盘控制方式的侦听//
function keyCtrl() {
keyListener = new Object();
keyListener.onKeyDown = function() {
updateAfterEvent();
if (Key.isDown(Key.LEFT)) {
if (!isDroped) {
left();
}
} else if (Key.isDown(Key.RIGHT)) {
if (!isDroped) {
right();
}
} else if (Key.isDown(Key.DOWN)) {
dropDown();
} else if (Key.isDown(Key.UP)) {
rotation();
} else if (Key.isDown(Key.SPACE)) {
if (!pause) {
isFirst = "resume";
paused();
setOpt();
pause = true;
}
}
};
}
///////建立键盘的选择侦听///
function option() {
keyListener_opt = new Object();
keyListener_opt.onKeyDown = function() {
updateAfterEvent();
if (Key.isDown(Key.LEFT)) {
modify(-1);
} else if (Key.isDown(Key.RIGHT)) {
modify(1);
} else if (Key.isDown(Key.DOWN)) {
selectOpt(1);
} else if (Key.isDown(Key.UP)) {
selectOpt(-1);
} else if (Key.isDown(Key.ENTER)) {
if (currentOpt == 2) {
if (isFirst == "start") {
isFirst = "pause";
startGame();
} else if (isFirst == "resume") {
resumeGame();
}
}
} else if (Key.isDown(Key.SPACE)) {
if (pause) {
isFirst = "pause";
resumeGame();
pause = false;
}
}
};
}
////////左移函数//
function left() {
////定义可以移动标签,初始化为可以//
var leftFlag = true;
for (var i = 0; i<4; i++) {
for (var j = 0; j<4; j++) {
var temp_mc = eval("this.bg.drop.elem_"+i+"_"+j);
//试探体左移//
temp_mc.temp._x -= 10;
////条件为此单元是要显示的单元//
if (temp_mc.temp.selected == 1) {
///条件为可以显示的区域//
if (!eval("this.bg.elem_"+(i-1+col)+"_"+(j+row))._visible && (col+i)>0 && (col+i)<=9) {
} else {
////不可显示//
leftFlag = false;
}
}
}
}
////检查标签///
if (!leftFlag) {
for (var i = 0; i<4; i++) {
for (var j = 0; j<4; j++) {
var temp_mc = eval("this.bg.drop.elem_"+i+"_"+j);
//试探体归位//
temp_mc.temp._x = temp_mc.real._x;
}
}
} else {
//列跟踪变量减1//
col -= 1;
for (var i = 0; i<4; i++) {
for (var j = 0; j<4; j++) {
var temp_mc = eval("this.bg.drop.elem_"+i+"_"+j);
//显示体到位//
temp_mc.real._x = temp_mc.temp._x;
}
}
}
delete leftFlag;
}
///右移函数///
function right() {
///定义是否可以移动标签,初始化为可以//
var rightFlag = true;
for (var i = 0; i<4; i++) {
for (var j = 0; j<4; j++) {
var temp_mc = eval("this.bg.drop.elem_"+i+"_"+j);
//试探体右移//
temp_mc.temp._x += 10;
//条件为将要显示的单元//
if (temp_mc.temp.selected == 1) {
//条件为可以显示的区域//
if (!eval("this.bg.elem_"+(i+1+col)+"_"+(j+row))._visible && (col+i)<9 && (col+i)>=0) {
} else {
//不可以移动//
rightFlag = false;
}
}
}
}
//检查标签//
if (!rightFlag) {
for (var i = 0; i<4; i++) {
for (var j = 0; j<4; j++) {
var temp_mc = eval("this.bg.drop.elem_"+i+"_"+j);
//试探体归位//
temp_mc.temp._x = temp_mc.real._x;
}
}
} else {
//列跟踪变量加1//
col += 1;
for (var i = 0; i<4; i++) {
for (var j = 0; j<4; j++) {
var temp_mc = eval("this.bg.drop.elem_"+i+"_"+j);
//显示体到位//
temp_mc.real._x = temp_mc.temp._x;
}
}
}
delete rightFlag;
}
//////下降函数//
function dropDown() {
//定义是否可以下降的标签,初始化为可以下降//
var dropFlag = true;
for (var i = 0; i<4; i++) {
for (var j = 0; j<4; j++) {
var temp_mc = eval("this.bg.drop.elem_"+i+"_"+j);
//试探体下降//
temp_mc.temp._y += 10;
//条件为将要显示的区域//
if (temp_mc.temp.selected == 1) {
//条件为处在主要区域之外的单元//
if (eval("this.bg.elem_"+(i+col)+"_"+(j+1+row)) == undefined) {
//隐藏该单元//
temp_mc.real._visible = false;
} else {
//条件为优先下落//
if (isDroped) {
//取消优先下落//
isDroped = false;
}
//显示该单元//
temp_mc.real._visible = true;
}
//条件为可以显示的区域//
if (!eval("this.bg.elem_"+(i+col)+"_"+(j+1+row))._visible && (row+j)<15) {
} else {
//不可以下落//
dropFlag = false;
}
}
}
}
//检查标签//
if (!dropFlag) {
for (var i = 0; i<4; i++) {
for (var j = 0; j<4; j++) {
var temp_mc = eval("this.bg.drop.elem_"+i+"_"+j);
//条件为显示的单元//
if (temp_mc.temp.selected == 1) {
//条件为处在主要区域之外//
if (eval("this.bg.elem_"+(i+col)+"_"+(j+row)) == undefined) {
//启动游戏结束函数//
gameOver();
//跳出函数//
return;
} else {
//通知主要区域的单元留影//
eval("this.bg.elem_"+(i+col)+"_"+(j+row))._visible = true;
}
}
}
}
//启动扫描函数//
scan();
} else {
//行跟踪函数加1//
row++;
for (var i = 0; i<4; i++) {
for (var j = 0; j<4; j++) {
var temp_mc = eval("this.bg.drop.elem_"+i+"_"+j);
//显示体到位//
temp_mc.real._y = temp_mc.temp._y;
}
}
}
delete dropFlag;
}
//旋转函数//
function rotation() {
//定义是否可以旋转标签,初始化为可以//
var rotationFlag = true;
//保存当前的形状id//
var tempID = currentID;
//判断id,保证形状循环旋转//
if (tempID%4 == 0) {
tempID -= 3;
} else {
tempID++;
}
for (var i = 0; i<4; i++) {
for (var j = 0; j<4; j++) {
var temp_mc = eval("this.bg.drop.elem_"+i+"_"+j);
//试探体旋转//
temp_mc.temp.selected = eval("array"+tempID)[i][j];
//条件为将要显示的单元//
if (temp_mc.temp.selected == 1) {
//条件为可以显示的区域//
if (!eval("this.bg.elem_"+(i+col)+"_"+(j+row))._visible && (row+j)<15 && (col+i)<=9 && (col+i)>=0) {
} else {
//不可以旋转//
rotationFlag = false;
}
}
}
}
//检查标签//
if (!rotationFlag) {
for (var i = 0; i<4; i++) {
for (var j = 0; j<4; j++) {
var temp_mc = eval("this.bg.drop.elem_"+i+"_"+j);
//试探体归位//
temp_mc.temp.selected = eval("array"+currentID)[i][j];
}
}
} else {
//当前形状id到位//
currentID = tempID;
for (var i = 0; i<4; i++) {
for (var j = 0; j<4; j++) {
var temp_mc = eval("this.bg.drop.elem_"+i+"_"+j);
//显示体到位//
temp_mc.real._visible = eval("array"+currentID)[i][j];
//显示形状标记到位//
temp_mc.temp.selected = eval("array"+currentID)[i][j];
}
}
}
delete tempID;
delete rotationFlag;
}
////***********************************************流程函数************************************//
////////激活游戏////
function activeAll() {
/////预览数组id//
viewID = random(28)+1;
/////定义下落的方块的形状id//
currentID = viewID;
/////建立下落主体//
createDrop();
////预览//
setView();
}
//////重置函数//
function reset() {
//重新初始化优先下落变量//
isDroped = true;
//启动键盘控制//
Key.addListener(keyListener);
//停止下落//
clearInterval(interval);
//形状id到位//
currentID = viewID;
//重新建立下落方块//
createDrop();
//显示预览//
setView();
}
//定义游戏结束函数//
function gameOver() {
//停止下落//
clearInterval(interval);
//屏蔽控制//
Key.removeListener(keyListener);
//扔掉下落方块//
this.bg.drop.removeMovieClip();
//显示游戏结束提示文本//
setTempText("GAME OVER");
//游戏结束画面//
interval_over = setInterval(restart, 50);
}
///////游戏准备开始函数//
function gameStart() {
//得分归零//
scoreValue = 0;
//内部记分归零//
tempScore = 0;
//当前选择框锁定游戏开始位置//
currentOpt = 2;
//扔掉提示文本//
removeTempText();
//游戏状态为准备开始游戏//
isFirst = "start";
//建立选择功能区//
setOpt();
////键盘为选择方式//
Key.addListener(keyListener_opt);
}
///////游戏开始//
function startGame() {
///激活游戏//
activeAll();
///设置难度//
setLevel(levelValue);
//键盘为控制方式//
Key.removeListener(keyListener_opt);
Key.addListener(keyListener);
//刷新选择框//
setOpt();
}
////////暂停函数//
function paused() {
////显示暂停提示文本//
setTempText("PAUSE");
////停止下落//
clearInterval(interval);
////键盘为选择方式//
Key.removeListener(keyListener);
Key.addListener(keyListener_opt);
}
///////回到游戏函数//
function resumeGame() {
///扔掉提示文本//
removeTempText();
///刷新选择框//
setOpt();
////键盘为控制方式//
Key.removeListener(keyListener_opt);
Key.addListener(keyListener);
///开始下落//
interval = setInterval(dropDown, 1000-100*speedValue);
}
//游戏名称:俄罗斯方块
//作者:李鹏(James.Li)
//日期:2004.3.16
//游戏规则:通过方向键控制左侧的下落方块,使得左侧方块积累尽可能得少;
//游戏简介:在游戏开始时,可以设置难度和速度,分别为(0-9)个等级;在游戏中间可以按空格键暂停或者继续游戏;
// 本款游戏只提供顺时针旋转方式,不做方向的选择控制;
///**************************************************程序入口**************************************//
init();
//***************************************************初始化部分************************************//
////////初始化函数////////////
function init() {
////定义变量//
createValues();
////程序绘图//
createBg();
////定义方块儿形状数组//
initArrays();
////建立选择区域逻辑//
setOpt();
////初始化控制键//
keyCtrl();
////初始化选择键//
option();
////键盘跟踪开始,初始化为选择状态//
Key.removeListener(keyListener);
Key.addListener(keyListener_opt);
}
////////定义变量////////////
function createValues() {
////是否为暂停状态标签,初始化为否//
pause = false;
////是否为优先下落标签,初始化为是//
isDroped = true;
////进入状态初始化为“开始游戏”//
isFirst = "start";
////内部记分初始化为0//
tempScore = 0;
////难度等级初始化为0//
levelValue = 0;
////速度等级初始化为0//
speedValue = 0;
////得分表初始化为0//
scoreValue = 0;
}
/////////为mc建立方块显示函数/////
function createUnit(mc) {
////建立方块存储空间//
mc.createEmptyMovieClip("unit", 0);
////绘制方块//
with (mc.unit) {
moveTo(0, 0);
lineStyle(0, "0x000000", 100);
lineTo(10, 0);
lineTo(10, 10);
lineTo(0, 10);
lineTo(0, 0);
lineTo(2, 2);
lineTo(8, 2);
lineTo(8, 8);
lineTo(2, 8);
lineTo(2, 2);
moveTo(8, 2);
lineTo(10, 0);
moveTo(8, 8);
lineTo(10, 10);
moveTo(2, 8);
lineTo(0, 10);
}
}
////////建立方块显示区域(主要区域)//
function createElems() {
////建立显示平台(bg)//
this.createEmptyMovieClip("bg", 0);
////存放层变量初始化为0//
depth = 0;
////建立15行10列的方块显示区域//
for (var i = 0; i<10; i++) {
for (var j = 0; j<16; j++) {
this.bg.createEmptyMovieClip("elem_"+i+"_"+j, depth++);
eval("this.bg.elem_"+i+"_"+j)._x = 5+i*10;
eval("this.bg.elem_"+i+"_"+j)._y = 5+j*10;
//为每个单元绘制方块//
createUnit(eval("this.bg.elem_"+i+"_"+j));
//隐藏单元//
eval("this.bg.elem_"+i+"_"+j)._visible = false;
}
}
}
////////绘制平台的区域分割线////
function createBgLines() {
////开始绘制////
with (this.bg) {
moveTo(0, 0);
lineStyle(0, "0x000000", 100);
lineTo(210, 0);
lineTo(210, 170);
lineTo(0, 170);
lineTo(0, 0);
moveTo(5, 5);
lineTo(105, 5);
lineTo(105, 165);
lineTo(5, 165);
lineTo(5, 5);
}
}
////////绘制预览区域//////////
function createViews() {
/////建立平台///
this.bg.panel.createEmptyMovieClip("nextView", 1);
////层变量初始化为0//
var tempDepth = 0;
////建立预览区域(次要区域)//
for (var i = 0; i<4; i++) {
for (var j = 0; j<4; j++) {
//建立单元//
this.bg.panel.nextView.createEmptyMovieClip("elem_"+i+"_"+j, tempDepth++);
eval("this.bg.panel.nextView.elem_"+i+"_"+j)._x = 5+i*10;
eval("this.bg.panel.nextView.elem_"+i+"_"+j)._y = 5+j*10;
//为每个单元绘制方块//
createUnit(eval("this.bg.panel.nextView.elem_"+i+"_"+j));
//隐藏单元//
eval("this.bg.panel.nextView.elem_"+i+"_"+j)._visible = false;
}
}
this.bg.panel.nextView._y = 20;
this.bg.panel.nextView._x = 10;
delete tempDepths;
}
////////绘制显示文本区域//
function createTexts() {
////建立标题文本//
this.bg.panel.createTextField("nextText", 0, 0, 0, 50, 20);
var textFormat = new TextFormat();
textFormat.size = 12;
this.bg.panel.nextText.selectable = false;
this.bg.panel.nextText.text = "NEXT";
this.bg.panel.nextText.setTextFormat(textFormat);
//调用建立文本函数,建立“难度”、“速度”、“得分”、“游戏入口”和作者签名文本//
createTextAndValue(this.bg.panel, "level", 2, 0, 60, textFormat);
createTextAndValue(this.bg.panel, "speed", 3, 0, 80, textFormat);
createTextAndValue(this.bg.panel, "score", 4, 0, 100, textFormat);
createTextAndValue(this.bg.panel, isFirst, 5, 0, 120, textFormat);
addAuthorName(this.bg.panel, 40, 145, 6, textFormat);
}
////////建立功能区域////
function createPanels() {
////建立平台///
this.bg.createEmptyMovieClip("panel", depth++);
this.bg.panel._x = 110;
this.bg.panel._y = 5;
////调用函数建立预览和文本区域//
createViews();
createTexts();
}
////////建立游戏总平台////
function createBg() {
/////建立主要显示区域、区域分割线和功能区域///
createElems();
createBgLines();
createPanels();
}
/////////建立文本函数//////
function createTextAndValue(local, mcName, depth, mc_x, mc_y, tf) {
////获得路径//
local.createEmptyMovieClip(mcName+"_mc", depth);
eval(local+"."+mcName+"_mc")._x = mc_x;
eval(local+"."+mcName+"_mc")._y = mc_y;
////建立名称与内容文本//
eval(local+"."+mcName+"_mc").createTextField(mcName+"Text", 0, 0, 0, 50, 20);
eval(local+"."+mcName+"_mc").createTextField(mcName+"Value", 1, 50, 0, 50, 20);
eval(local+"."+mcName+"_mc."+mcName+"Text").selectable = false;
eval(local+"."+mcName+"_mc."+mcName+"Text").text = mcName.toUpperCase();
eval(local+"."+mcName+"_mc."+mcName+"Text").setTextFormat(tf);
eval(local+"."+mcName+"_mc."+mcName+"Value").selectable = false;
eval(local+"."+mcName+"_mc."+mcName+"Value").text = eval(mcName+"Value");
eval(local+"."+mcName+"_mc."+mcName+"Value").setTextFormat(tf);
}
////////作者署名函数/////
function addAuthorName(local, x, y, depth, tf) {
local.createEmptyMovieClip("author_mc", depth);
local.author_mc._x = x;
local.author_mc._y = y;
local.author_mc.createTextField("authorText", 0, 0, 0, 300, 20);
local.author_mc.authorText.selectable = false;
local.author_mc.authorText.text = "JAMES.LEE";
tf.size = 10;
local.author_mc.authorText.setTextFormat(tf);
}
////////建立选择功能区域函数//
function setOpt() {
///////重置文本//
createTexts();
////建立选择框//
if (this.bg.panel.selectFrame == undefined) {
this.bg.panel.createEmptyMovieClip("selectFrame", 10);
with (this.bg.panel.selectFrame) {
moveTo(0, 2);
lineStyle(0, "0x666666", 100);
lineTo(90, 2);
lineTo(90, 15);
lineTo(0, 15);
lineTo(0, 2);
}
}
////定义或定位当前选择位置//
if (currentOpt == undefined) {
currentOpt = 2;
}
if (isFirst == "start") {
///建立可以选择的数组//
currentOptArray = ["level", "speed", "start"];
} else {
currentOptArray = [isFirst];
if (currentOpt == 2) {
currentOpt = 0;
}
}
///选择框定位//
this.bg.panel.selectFrame._y = eval("this.bg.panel."+currentOptArray[currentOpt]+"_mc")._y;
}
////////建立下落方块的函数///
function createDrop() {
////建立平台//
this.bg.createEmptyMovieClip("drop", 1000);
///定位//
this.bg.drop._x = this.bg.elem_3_0._x;
this.bg.drop._y = this.bg.elem_3_0._y+getRow()*10;
//定义位置跟踪变量//
row = getRow();
col = 3;
var tempDepth = 0;
for (var i = 0; i<4; i++) {
for (var j = 0; j<4; j++) {
//建立单元//
this.bg.drop.createEmptyMovieClip("elem_"+i+"_"+j, tempDepth++);
var temp_mc = eval("this.bg.drop.elem_"+i+"_"+j);
temp_mc._x = i*10;
temp_mc._y = j*10;
//建立单元孪生体,real为显示体,temp为试探体//
temp_mc.createEmptyMovieClip("real", 0);
temp_mc.createEmptyMovieClip("temp", 1);
//为孪生体绘制方块//
createUnit(temp_mc.real);
createUnit(temp_mc.temp);
//显示体隐藏//
temp_mc.real._visible = false;
//定义试探体的一个属性,为形状标记,true表示该单元是形状的组成部分,false表示不是//
temp_mc.temp.selected = eval("array"+currentID)[i][j];
//隐藏试探体//
temp_mc.temp._visible = false;
}
}
delete tempDepths;
////////反复启动下降函数,时间间隔为1000毫秒减去速度等级的100倍,等级越高,下落越快//
interval = setInterval(dropDown, 1000-100*speedValue);
}
////////方块形状数组//////
function initArrays() {
//////1-4为长条形///
array1 = [[0, 0, 0, 0], [0, 0, 0, 0], [1, 1, 1, 1], [0, 0, 0, 0]];
array2 = [[0, 1, 0, 0], [0, 1, 0, 0], [0, 1, 0, 0], [0, 1, 0, 0]];
array3 = array1;
array4 = array2;
//////5-8为正方形///
array5 = [[0, 0, 0, 0], [0, 1, 1, 0], [0, 1, 1, 0], [0, 0, 0, 0]];
array6 = array5;
array7 = array5;
array8 = array5;
//////9-16为两种方向的之字形///
array9 = [[0, 0, 0, 0], [1, 1, 0, 0], [0, 1, 1, 0], [0, 0, 0, 0]];
array10 = [[0, 0, 0, 0], [0, 1, 0, 0], [1, 1, 0, 0], [1, 0, 0, 0]];
array11 = array9;
array12 = array10;
array13 = [[0, 0, 0, 0], [0, 0, 0, 0], [0, 1, 1, 0], [1, 1, 0, 0]];
array14 = [[0, 0, 0, 0], [1, 0, 0, 0], [1, 1, 0, 0], [0, 1, 0, 0]];
array15 = array13;
array16 = array14;
//////17-20为丁字形///
array17 = [[0, 0, 0, 0], [0, 1, 0, 0], [1, 1, 0, 0], [0, 1, 0, 0]];
array18 = [[0, 0, 0, 0], [0, 0, 0, 0], [1, 1, 1, 0], [0, 1, 0, 0]];
array19 = [[0, 0, 0, 0], [0, 1, 0, 0], [0, 1, 1, 0], [0, 1, 0, 0]];
array20 = [[0, 0, 0, 0], [0, 1, 0, 0], [1, 1, 1, 0], [0, 0, 0, 0]];
/////21-28为两种方向的L形///
array21 = [[0, 0, 0, 0], [0, 0, 0, 0], [1, 1, 1, 0], [1, 0, 0, 0]];
array22 = [[0, 0, 0, 0], [0, 1, 0, 0], [0, 1, 0, 0], [0, 1, 1, 0]];
array23 = [[0, 0, 0, 0], [0, 0, 1, 0], [1, 1, 1, 0], [0, 0, 0, 0]];
array24 = [[0, 0, 0, 0], [1, 1, 0, 0], [0, 1, 0, 0], [0, 1, 0, 0]];
array25 = [[0, 0, 0, 0], [1, 0, 0, 0], [1, 1, 1, 0], [0, 0, 0, 0]];
array26 = [[0, 0, 0, 0], [0, 1, 0, 0], [0, 1, 0, 0], [1, 1, 0, 0]];
array27 = [[0, 0, 0, 0], [0, 0, 0, 0], [1, 1, 1, 0], [0, 0, 1, 0]];
array28 = [[0, 0, 0, 0], [0, 1, 1, 0], [0, 1, 0, 0], [0, 1, 0, 0]];
}
////***********************************************功能函数**********************************//
///////选择函数//
function selectOpt(num) {
//条件为准备开始状态下//
if (isFirst == "start") {
currentOpt += num;
if (currentOpt == -1) {
currentOpt = 2;
}
if (currentOpt == 3) {
currentOpt = 0;
}
} else {
//暂停状态下不可选择//
currentOpt = 0;
}
//刷新选择框//
setOpt();
}
////////修改等级函数//
function modify(num) {
//条件为只有在准备开始状态下才可以修改//
if (isFirst == "start") {
if (currentOpt<2) {
var tempValue = eval(currentOptArray[currentOpt]+"Value");
tempValue += num;
if (tempValue == -1) {
tempValue = 9;
}
if (tempValue == 10) {
tempValue = 0;
}
set(currentOptArray[currentOpt]+"Value", tempValue);
}
createTexts();
}
}
////////设置难度(难度越高,堆积的方块越高)////////
function setLevel(level) {
for (var i = 0; i<10; i++) {
for (var j = (16-level); j<16; j++) {
eval("this.bg.elem_"+i+"_"+j)._visible = random(2);
}
}
}
/////////获取下落方块的初始行高(标准是紧邻主显示区域的上边缘)///
function getRow() {
if (currentID == 2 || currentID == 4 || currentID == 10 || currentID == 12 || currentID == 14 || currentID == 16 || currentID == 17 || currentID == 24 || currentID == 26) {
return -2;
} else if (currentID == 1 || currentID == 3) {
return -4;
} else {
return -3;
}
}
///////显示预览//
function setView() {
/////取得预览形状id//
viewID = random(28)+1;
for (var i = 0; i<4; i++) {
for (var j = 0; j<4; j++) {
eval("this.bg.panel.nextView.elem_"+i+"_"+j)._x = i*10;
eval("this.bg.panel.nextView.elem_"+i+"_"+j)._y = j*10;
//为预览区域的单元绘制方块//
createUnit(eval("this.bg.panel.nextView.elem_"+i+"_"+j));
//按照形状id对应的数组显示形状//
eval("this.bg.panel.nextView.elem_"+i+"_"+j)._visible = eval("array"+viewID)[i][j];
}
}
}
////扫描函数//
function scan() {
//屏蔽键盘控制//
Key.removeListener(keyListener);
//定义层记录变量,初始化为0//
var tempLayer = 0;
for (var j = 0; j<16; j++) {
//定义单元记数变量,初始化为0//
var first = 0;
for (var i = 0; i<10; i++) {
var temp_mc = eval("this.bg.elem_"+i+"_"+j);
if (temp_mc._visible) {
//如果同层的单元为显示状态,记数变量加1//
first++;
}
//如果记数变量达到10,说明此行已满//
if (first>=10) {
//层记录加1//
tempLayer++;
//调用消行函数//
layer(j, tempLayer);
}
}
}
delete tempLayer;
//重置函数//
reset();
}
/////定义消行函数////
function layer(row, num) {
//加分//
setText(this.bg.panel, "score", scoreValue+num*50);
//内部记分//
tempScore += num*50;
//判断内部记分,进行速度跟踪//
if ((tempScore-(1000+speedValue*50))>=0) {
speedValue++;
if (speedValue == 10) {
speedValue = 0;
}
tempScore = 0;
}
//重置速度文本//
setText(this.bg.panel, "speed", speedValue);
for (var i = 0; i<10; i++) {
var temp_mc = eval("this.bg.elem_"+i+"_"+row);
//消行//
temp_mc._visible = false;
for (var j = row; j>0; j--) {
//串行//
eval("this.bg.elem_"+i+"_"+j)._visible = eval("this.bg.elem_"+i+"_"+(j-1))._visible;
}
}
}
/////定义文本跟踪函数//
function setText(local, mcName, value) {
var textFormat = new TextFormat();
textFormat.size = 12;
set(mcName+"Value", value);
eval(local+"."+mcName+"_mc."+mcName+"Value").text = eval(mcName+"Value");
eval(local+"."+mcName+"_mc."+mcName+"Value").setTextFormat(textFormat);
}
///////显示提示文本//
function setTempText(value) {
this.bg.createEmptyMovieClip;
this.bg.createTextField("tempText", 10000, 15, 50, 80, 20);
var tf = new TextFormat();
tf.align = "center";
this.bg.tempText.selectable = false;
this.bg.tempText.text = value;
this.bg.tempText.border = true;
this.bg.tempText.background = true;
this.bg.tempText.backgroundColor = "0xffffff";
this.bg.tempText.setTextFormat(tf);
}
///////扔掉提示文本函数//
function removeTempText() {
this.bg.tempText.removeTextField();
}
////////游戏结束画面函数//
function restart() {
if (up == undefined) {
up = true;
}
if (c == undefined) {
c = 15;
}
if (c>=-10) {
if (up) {
for (var i = 0; i<10; i++) {
eval("this.bg.elem_"+i+"_"+c)._visible = true;
}
c--;
} else {
for (var i = 0; i<10; i++) {
eval("this.bg.elem_"+i+"_"+c)._visible = false;
}
c++;
if (c == 16) {
clearInterval(interval_over);
delete c;
delete up;
/////游戏开始//
gameStart();
}
}
} else {
up = false;
c = 0;
}
}
/////*******************************************键盘控制反应函数**********************************////
///////建立键盘控制方式的侦听//
function keyCtrl() {
keyListener = new Object();
keyListener.onKeyDown = function() {
updateAfterEvent();
if (Key.isDown(Key.LEFT)) {
if (!isDroped) {
left();
}
} else if (Key.isDown(Key.RIGHT)) {
if (!isDroped) {
right();
}
} else if (Key.isDown(Key.DOWN)) {
dropDown();
} else if (Key.isDown(Key.UP)) {
rotation();
} else if (Key.isDown(Key.SPACE)) {
if (!pause) {
isFirst = "resume";
paused();
setOpt();
pause = true;
}
}
};
}
///////建立键盘的选择侦听///
function option() {
keyListener_opt = new Object();
keyListener_opt.onKeyDown = function() {
updateAfterEvent();
if (Key.isDown(Key.LEFT)) {
modify(-1);
} else if (Key.isDown(Key.RIGHT)) {
modify(1);
} else if (Key.isDown(Key.DOWN)) {
selectOpt(1);
} else if (Key.isDown(Key.UP)) {
selectOpt(-1);
} else if (Key.isDown(Key.ENTER)) {
if (currentOpt == 2) {
if (isFirst == "start") {
isFirst = "pause";
startGame();
} else if (isFirst == "resume") {
resumeGame();
}
}
} else if (Key.isDown(Key.SPACE)) {
if (pause) {
isFirst = "pause";
resumeGame();
pause = false;
}
}
};
}
////////左移函数//
function left() {
////定义可以移动标签,初始化为可以//
var leftFlag = true;
for (var i = 0; i<4; i++) {
for (var j = 0; j<4; j++) {
var temp_mc = eval("this.bg.drop.elem_"+i+"_"+j);
//试探体左移//
temp_mc.temp._x -= 10;
////条件为此单元是要显示的单元//
if (temp_mc.temp.selected == 1) {
///条件为可以显示的区域//
if (!eval("this.bg.elem_"+(i-1+col)+"_"+(j+row))._visible && (col+i)>0 && (col+i)<=9) {
} else {
////不可显示//
leftFlag = false;
}
}
}
}
////检查标签///
if (!leftFlag) {
for (var i = 0; i<4; i++) {
for (var j = 0; j<4; j++) {
var temp_mc = eval("this.bg.drop.elem_"+i+"_"+j);
//试探体归位//
temp_mc.temp._x = temp_mc.real._x;
}
}
} else {
//列跟踪变量减1//
col -= 1;
for (var i = 0; i<4; i++) {
for (var j = 0; j<4; j++) {
var temp_mc = eval("this.bg.drop.elem_"+i+"_"+j);
//显示体到位//
temp_mc.real._x = temp_mc.temp._x;
}
}
}
delete leftFlag;
}
///右移函数///
function right() {
///定义是否可以移动标签,初始化为可以//
var rightFlag = true;
for (var i = 0; i<4; i++) {
for (var j = 0; j<4; j++) {
var temp_mc = eval("this.bg.drop.elem_"+i+"_"+j);
//试探体右移//
temp_mc.temp._x += 10;
//条件为将要显示的单元//
if (temp_mc.temp.selected == 1) {
//条件为可以显示的区域//
if (!eval("this.bg.elem_"+(i+1+col)+"_"+(j+row))._visible && (col+i)<9 && (col+i)>=0) {
} else {
//不可以移动//
rightFlag = false;
}
}
}
}
//检查标签//
if (!rightFlag) {
for (var i = 0; i<4; i++) {
for (var j = 0; j<4; j++) {
var temp_mc = eval("this.bg.drop.elem_"+i+"_"+j);
//试探体归位//
temp_mc.temp._x = temp_mc.real._x;
}
}
} else {
//列跟踪变量加1//
col += 1;
for (var i = 0; i<4; i++) {
for (var j = 0; j<4; j++) {
var temp_mc = eval("this.bg.drop.elem_"+i+"_"+j);
//显示体到位//
temp_mc.real._x = temp_mc.temp._x;
}
}
}
delete rightFlag;
}
//////下降函数//
function dropDown() {
//定义是否可以下降的标签,初始化为可以下降//
var dropFlag = true;
for (var i = 0; i<4; i++) {
for (var j = 0; j<4; j++) {
var temp_mc = eval("this.bg.drop.elem_"+i+"_"+j);
//试探体下降//
temp_mc.temp._y += 10;
//条件为将要显示的区域//
if (temp_mc.temp.selected == 1) {
//条件为处在主要区域之外的单元//
if (eval("this.bg.elem_"+(i+col)+"_"+(j+1+row)) == undefined) {
//隐藏该单元//
temp_mc.real._visible = false;
} else {
//条件为优先下落//
if (isDroped) {
//取消优先下落//
isDroped = false;
}
//显示该单元//
temp_mc.real._visible = true;
}
//条件为可以显示的区域//
if (!eval("this.bg.elem_"+(i+col)+"_"+(j+1+row))._visible && (row+j)<15) {
} else {
//不可以下落//
dropFlag = false;
}
}
}
}
//检查标签//
if (!dropFlag) {
for (var i = 0; i<4; i++) {
for (var j = 0; j<4; j++) {
var temp_mc = eval("this.bg.drop.elem_"+i+"_"+j);
//条件为显示的单元//
if (temp_mc.temp.selected == 1) {
//条件为处在主要区域之外//
if (eval("this.bg.elem_"+(i+col)+"_"+(j+row)) == undefined) {
//启动游戏结束函数//
gameOver();
//跳出函数//
return;
} else {
//通知主要区域的单元留影//
eval("this.bg.elem_"+(i+col)+"_"+(j+row))._visible = true;
}
}
}
}
//启动扫描函数//
scan();
} else {
//行跟踪函数加1//
row++;
for (var i = 0; i<4; i++) {
for (var j = 0; j<4; j++) {
var temp_mc = eval("this.bg.drop.elem_"+i+"_"+j);
//显示体到位//
temp_mc.real._y = temp_mc.temp._y;
}
}
}
delete dropFlag;
}
//旋转函数//
function rotation() {
//定义是否可以旋转标签,初始化为可以//
var rotationFlag = true;
//保存当前的形状id//
var tempID = currentID;
//判断id,保证形状循环旋转//
if (tempID%4 == 0) {
tempID -= 3;
} else {
tempID++;
}
for (var i = 0; i<4; i++) {
for (var j = 0; j<4; j++) {
var temp_mc = eval("this.bg.drop.elem_"+i+"_"+j);
//试探体旋转//
temp_mc.temp.selected = eval("array"+tempID)[i][j];
//条件为将要显示的单元//
if (temp_mc.temp.selected == 1) {
//条件为可以显示的区域//
if (!eval("this.bg.elem_"+(i+col)+"_"+(j+row))._visible && (row+j)<15 && (col+i)<=9 && (col+i)>=0) {
} else {
//不可以旋转//
rotationFlag = false;
}
}
}
}
//检查标签//
if (!rotationFlag) {
for (var i = 0; i<4; i++) {
for (var j = 0; j<4; j++) {
var temp_mc = eval("this.bg.drop.elem_"+i+"_"+j);
//试探体归位//
temp_mc.temp.selected = eval("array"+currentID)[i][j];
}
}
} else {
//当前形状id到位//
currentID = tempID;
for (var i = 0; i<4; i++) {
for (var j = 0; j<4; j++) {
var temp_mc = eval("this.bg.drop.elem_"+i+"_"+j);
//显示体到位//
temp_mc.real._visible = eval("array"+currentID)[i][j];
//显示形状标记到位//
temp_mc.temp.selected = eval("array"+currentID)[i][j];
}
}
}
delete tempID;
delete rotationFlag;
}
////***********************************************流程函数************************************//
////////激活游戏////
function activeAll() {
/////预览数组id//
viewID = random(28)+1;
/////定义下落的方块的形状id//
currentID = viewID;
/////建立下落主体//
createDrop();
////预览//
setView();
}
//////重置函数//
function reset() {
//重新初始化优先下落变量//
isDroped = true;
//启动键盘控制//
Key.addListener(keyListener);
//停止下落//
clearInterval(interval);
//形状id到位//
currentID = viewID;
//重新建立下落方块//
createDrop();
//显示预览//
setView();
}
//定义游戏结束函数//
function gameOver() {
//停止下落//
clearInterval(interval);
//屏蔽控制//
Key.removeListener(keyListener);
//扔掉下落方块//
this.bg.drop.removeMovieClip();
//显示游戏结束提示文本//
setTempText("GAME OVER");
//游戏结束画面//
interval_over = setInterval(restart, 50);
}
///////游戏准备开始函数//
function gameStart() {
//得分归零//
scoreValue = 0;
//内部记分归零//
tempScore = 0;
//当前选择框锁定游戏开始位置//
currentOpt = 2;
//扔掉提示文本//
removeTempText();
//游戏状态为准备开始游戏//
isFirst = "start";
//建立选择功能区//
setOpt();
////键盘为选择方式//
Key.addListener(keyListener_opt);
}
///////游戏开始//
function startGame() {
///激活游戏//
activeAll();
///设置难度//
setLevel(levelValue);
//键盘为控制方式//
Key.removeListener(keyListener_opt);
Key.addListener(keyListener);
//刷新选择框//
setOpt();
}
////////暂停函数//
function paused() {
////显示暂停提示文本//
setTempText("PAUSE");
////停止下落//
clearInterval(interval);
////键盘为选择方式//
Key.removeListener(keyListener);
Key.addListener(keyListener_opt);
}
///////回到游戏函数//
function resumeGame() {
///扔掉提示文本//
removeTempText();
///刷新选择框//
setOpt();
////键盘为控制方式//
Key.removeListener(keyListener_opt);
Key.addListener(keyListener);
///开始下落//
interval = setInterval(dropDown, 1000-100*speedValue);
}
浙公网安备 33010602011771号