91824841

показан фрагмент ролика, когда


clip._x = solutionx + i*horizSpace;

clip._y = solutiony;

clip.foroAndStop(solution[i]+2);
}}

На 14. 6 показан фрагмент ролика, когда игра уже проиграна. Функция showSolution поместила правильную последовательность (решение) внизу экрана.



Рисунок 14.6 Игра проиграна, код поместил правильную последовательность решения внизу экрана

Единственный оставшийся фрагмент кода - небольшой сценарий, прикрепленный к кнопке в каждом клипе "rock". Его задача состоит в том, чтобы переключать цвета один за другим и возвращаться к первому кадру (пустому месту), если пользователь щелкнул определенное число раз. Этот код также проверяет свойство active, чтобы убедиться, что ряд - текущий.

on (press) {

if (active) {

f = _currentFrame+1;

if (f > 6) f = 1;
gotoAndStop(f);
}}



Функция dropPeg использует полезную функцию pegThere, которой передается расположение отверстия и которая возвращает значение true, если именно в этом месте обнаружен клип "peg".

function pegThere(x.у) {
// Выясняем, находится ли в этом месте колышек,
for (i=0;i peg = _root["peg"+i];
if ((peg._x == x) and (peg._y == y)) {
return true;
}}
return false;
}

Во время игры внизу экрана все время находится кнопка Restart Game (Начать заново), которая позволяет заново начать игру, когда больше нельзя сделать ни одного действия или когда пользователь понимает, что плохо начал игру. Эта кнопка должна не только вызывать функцию initGame, но и очищать оставшиеся клипы "peg" и "hole".

function restartGamef) {
// Удаляем все клипы,
for (i=0;i _root["peg"+i].removeMovieClip();
_root["hole"+i].removeMovieClip();
}
// Начинаем новую игру.
initGame();
}

Код, прикрепленный к кнопке, расположенной внутри клипа "peg» очень прост. Все, что он делает, это передает функциям действия press и release.

on (press) {
_root.dragPeg(this);
}


on (release) {
_root.dropPeg(this);
}





if (thisColor == 5) {

// Если да, просматриваем все блоки над ним.

for(var i=y-1;i> = 0;i —- ) {

// Если блок не пустой.

aboveCoior = _root[ "block "+x+" ,"+i] ._currentframe;

if (aboveCoior != 5) {

// Смещаем его вниз.

_root["block "+x+""+y].gotoAndStop(aboveCoior);

_root["block "+x+" "+i].gotoAndStop(5)

break;

}}}}}}

После того как все блоки передвинуты, может оказаться, что некоторые столбцы пустые. Если так произошло, весь столбец справа от пустого должен быть сдвинут влево, чтобы закрыть промежуток.
Чтобы это осуществить, функция collapseAcross движется сквозь все столбцы слева направо. Если найден пустой столбец, за которым следует непустой, то последний сдвигается влево на одну позицию.
Этот процесс повторятся снова и снова, пока не перестанут попадаться пустые столбцы. Тогда цикл оканчивается, и функция выполнена.

function collapseAcross() {

// Продолжаем, пока есть пустые столбцы,

do {

n = 0;

// Проверяем все столбцы,

for(var x=0;x

// Если текущий столбец пустой.

if (_root["block "+x+" 11"]._currentframe = = 5) {

// Если следующий - полный, if (_root["block "+(x+1)+" 11"] _currentframe != 5)

{ n++;

// Смещаем все блоки.

for(var у=0,-у

c = _root["block "+(x+1)+" "+y]._currentframe;

_root["block "+x+" "+y].gotoAndStop(c);

_root["block "+(x+1)+" "+y].gotoAndStop(5);

}}}}
// цикол прекращается, если больше не обнаружено пустых столбцов

} while (n > 0);

}


Содержание раздела