91824841

Элементы мозаики имеются со всех


return("below");

}}

// Элементы мозаики имеются со всех сторон,

return ("none");

}

Если перед выражением стоит восклицательный знак, значит, OHO отрицается, то есть true превращается в false, a false в true. Эта операция известна как логическое не (not). Например, в предыдущем коде проверяется не tileThere, a not tileThere.

Функция findEmpty использует метод tileThere, чтобы определить, находится ли элемент на определенном месте. Метод tileThere вызывается для определения элементов слева, справа, снизу и сверху.

// Проверяем, находится ли элемент мозаики на определенном месте,

function tileThere (thisx, thisy) {

// Просматриваем элементы на предмет совпадения координат,

for (i=l;i

// Выясняем, совпадают ли значения положения

//по горизонтали,

if (_root["tile"+i]._x == thisx) {

// Совпадает ли положение по вертикали,

if (_root["tile"+i]._у == thisy) {

return true;



}
}} // Эти координаты соответствуют пустому квадратику,

return false;

}

После того как было решено переместить элемент, вызывается функция moveTile. Эта же функция используется, когда игрок перемешает элементы.

// Перемещаем элемент в определенном направлении,

function moveTile (tile, direction) {

if (direction == "above") {

_root[tile]._y -= tileDist;

} else if (direction == "below") {

_root[tile]._y += tileDist;

} else if (direction == "left") {

_root[tile]._x -= tileDist;

} else if (direction == "right") {

_root[tile]._x += tileDist;

}}

После того как контроль передается игроку, надо определить, по какому элементу щелкнули мышкой. Для этого вызывается функция tileUnderMouse.

// Определяем, по какому элементу щелкнул игрок,

function tileUnderMouse О {

for (i = l; i< = 15; i + +) {

if (_root["tile"+i].hitTest(_xmouse, _ymouse)) {

return (i);
}

}}

Сценарий в основной временной шкале заканчивается вызовом функции initGame и выводом на экран перемешанных элементов.

initGame();

stop();

Игрок взаимодействует с картинкой мозаики посредством клипа "actions», расположенным вне рабочего поля. Клип воспринимает щелчок мыши, определяет, по какому элементу щелкнул пользователь, и перемещает этот элемент.

onClipEvent (mouseDown) {

// Определяем, по какому элементу щелкнул пользователь.

tileClicked = _root.tileUnderMouse();

// Определяем, есть ли рядом пустое пространство.

emptySpace = _root.findEmpty("tile"+tileClicked);
// Перемещаем элемент на свободное место.

_root.moveTile("tile"+tileClicked, emptySpace);

}



function clickCard (clip){

// Проверяем, отображены ли две карты,

if (secondclip != 0) {

// Располагаем эти две карты рубашками вверх,

firstclip.gotoAndStop(1);

secondclip.gotoAndStop(1);

firstclip = 0;

secondclip = 0;

}

// Проверяем, щелкнул ли пользователь дважды

//по одной и той же карте,

if (firstclip == clip) {

// Переворачиваем карту,

firstclip.gotoAndStop(1);

firstclip = 0;

// Выясняем, есть ли хоть одна перевернутая карта.
} else if (firstclip == 0); {

// Переворачиваем первую карту,

clip.gotoAndStop(clip.picture+1);

firstclip = clip;

// Одна карта должна быть перевернута

} else {

// Переворачиваем вторую карту.

clip.gotoAndStop(clip.picture+1);
secondclip = clip;

// Проверяем, совпадают ли карты.

if (firstclip.picture == secondclip.picture) {

// Удаляем обе карты.

firstclip.removeMovieClip();

secondclip.removeMovieClip();

firstClip = 0;

secondclip = 0;

}
}}

Вот все, что нужно для игры. У кнопки внутри клипа "Cards" только одна строчка кода, которая передает основной временной шкале информацию о том, что по клипу щелкнули.

on (press) {

// Передаем основной временной шкале информацию о щелчке мышью
_root.clickCard(this);
}



fullPicture.button._y = у;

// Делаем кнопку невидимой.

fullPicture.button._alpha = 0;

// Запускаем таймер.

startTime = getTimer();
}

В конце функции setupRound. переменной startTime присваивается текущее время. Это время используется следующим фрагментом кода, который все время пересчитывает бонусные очки. Он берет текущее время,вычитает startTime, а потом вычитает итог из 30000 миллисекунд. В результате бонусное время начинается с 30000 миллисекунд и происходит обратный отсчет до 0. Вместо того чтобы поместить этот процесс в клип "actions", я просто назначил функцию событию onEnterFrame. Это новый прием, появившийся в версии MX.

// Пересчитывем бонусные очки при каждом обращении к кадру.

_root.onEnterFrame = function!) {

// Бонус равен 30000 минус значение startTime.

bonus = 30000-Math.floor(getTimer() - startTime);

if (bonus< 0) bonus = 0;

displayBonus = "BONUS: "+bonus;
}

Другое событие, нуждающееся в отслеживании, это onMouseDown. Когда оно происходит, используется hitTest, чтобы определить, нажал ли пользователь на скрытую кнопку. Если да, то кнопка становится видимой (полупрозрачной) и ролик переходит к другому кадру. Количество бонусных очков прибавляется к общему количеству, и очки показываются на экране.

// Определяем функцию, отслеживающую нажатие кнопки мыши

// (листенер).
- _root.onMouseDown = function!) {

// Смотрим,щелкнул ли пользователь по мыши,

if (fullPicture.button.hitTest (_root ._xmouse,_root ._ymouse)) {

// Смотрим, была ли кнопка спрятана,

if (fullPicture.button._alpha < 50) {

// Показываем кнопку.

fullPicture.button._alpha = 50;

// Начисляем очки, score += bonus;

displayScore = "SCORE:"+score;

i f (roundNum < 3) {

// Если не все картинки пройдены,показываем

// следующую.

gotoAndStop("next");

} else{

// Если была последняя - заканчиваем игру.

gotoAndStop("game over");

}}

}}


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