Головоломки Flash

Создание кода



Создание кода

Большая часть кода для этой игры находится в основной временной шкале. Однако сначала разберем те фрагменты кода, которые относятся к клипам.
В ролике Slotmachine.fla под клипом с рычагом размещена кнопка. К ней прикреплен простой сценарий, который вызывает функцию pull, находящуюся в основной временной шкале.

on (release) {
pull();
}

В клипе "spin" содержатся два небольших сценария. Команда stop () находится в первом .кадре. Сценарий, который уменьшает значение счетчика numTimes на единицу, располагается в последнем кадре. Если значение счетчика равно нулю, сценарий переходит к первому кадру ролика и сообщает об этом функции в основной временной шкале. В противном случае клип снова возвращается ко второму кадру.

numTimes--;

if (numTimes

gotoAndStop(l);

_root.spinDone(_name);

} else {

gotoAndPlay(2); }

Большой фрагмент программы в основной временной шкале определяет, сколько денег выиграл пользователь, если выиграл вообще. Программа начинается с того, что случайным образом выбирает кадр для трех символов и предоставляет игроку $100, на которые он может играть в этой виртуальной игре.

initGame() ;

stop();



function initGame() {

// Случайным образом выбираем кадры для трех символов,

for (i=l;i

_root["symbol"+i].gotoAndStop(randomSymbol());

}

// Начинаем со $100.

cash = 100;

showCash();

}

Вместо того чтобы отображать сумму, имеющуюся у игрока, просто цифрами, следующая функция помещает перед ней знак доллара и добавляет переменную cash в displayCash. Эта переменная связана с текстовым полем на рабочем поле.

// Отображаем сумму в долларах,
function showCash() {

cashDisplay.= "$"+cash;

}

Когда игрок щелкает по рычагу, происходит несколько событий. Сначала из суммы наличных денег игрока вычитается $1. Затем клип "arm' переходит ко второму кадру, то есть показывается, что рычаг переходит в нижнее положение. Затем все три клипа "spin" начинают проигрываться. Каждому клипу сообщаются различные значения переменной numTimes - 8,6 и 4 - то есть первая анимация будет проигрываться восемь раз, вторая - шесть и третья - четыре. Также здесь определяется результат каждого вращения, устанавливаются клипы "symbol", хотя они скрыты за непрозрачными анимациями "spin" до тех пор, пока эти анимации не будут проиграны.




// Рычаг переходит в нижнее положение,

function pull(); {

// Когда рычаг приводится в действие,
// каждый раз вычитаем один доллар.
cash--;

showCash() ;

// Воспроизводим анимацию рычага.

_root["arm"].gotoAndPlay(2);

// Воспроизводим анимацию вращения,

for (i=l; i

// Сообщаем, сколько раз нужно вращать барабан.

_root["spin"+i].numTimes = 8-i*2;

_root["spin"+i].gotoAndPlay(2); }

// Выбираем результат для каждого символа случайным образом.

for (i=l; i

_root["symbol"+i].gotoAndStop(randomSymbol());
}}

Запрограммировать случайный выбор символа непросто. Если вероятность выбора каждого из семи символов одинакова, тогда вероятность Я вывода трех совпадений одинакова для любого символа. Другими словами, три изображения желудя появляются так же часто, как и три изображения лисы. То есть не имеет смысла выплачивать различные суммы за совпадения различных картинок.

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

Но вероятность появления одного символа должна отличаться от вероятности появления другого символа. Например, символ с бревном появляется в 29% случаев. С другой стороны, символ лисы появляется только в 3% случаев.
Это осуществляется с помощью массива, куда записывается вероятность появления того или иного символа. Затем произвольным образом выбирается число из этого массива. Если оно попадает в диапазон между нулем и вероятностью появления первого символа, выбирается первый символ. В противном случае программа переходит к следующему числу в массиве. Так происходит до тех пор, пока какой-нибудь символ не будет выбран. Просмотрите следующий код, чтобы увидеть, как работает эта схема.

// Выбираем произвольный символ в зависимости

//от вероятности его появления.

function randomSymbol() {

// Задаем вероятность появления каждого символа.

chances = [29,21,16,12,9,7,6];



// Определяем сумму вероятностей.

totalChances = 0;

for (j=0; j

totalChances += chances[j];

// Выбираем случайное число.

г = int(Math.random()*totalChances);

// Определяем, какой символ это число представляет,
for (j=0; j< chances.length; j++) {

if (r < chances[j]) {

return!j+1);

} else {

r -= chances[ j ] ;
}}}

Когда анимация клипа "spin" завершается, вызывается функция spinDone, которой передается имя экземпляра клипа. Клип "spin1" представляет собой последнюю анимацию в последовательности. Когда эта анимация закончена (то есть все три барабана прекратили вращаться), вызывается функция calcwin, чтобы определить сумму выигрыша.

// Вызываем функцию после каждой анимации вращения,

function spinDone(name) {

// Определяем, последний ли это символ,

// остановились ли барабаны.
if (name == "spinl") {

// Подсчитываем сумму выигрыша,

win = calcWin();

cash += win;
showCash() ;
}}

функция calcWin определяет, совпадают ли три символа, а также подсчитывает число изображений с желудем в последовательности. Если все три символа совпадают, сумма выигрыша определяется тем, какой это символ. В противном случае игрок все равно может выиграть небольшую сумму денег, если в последовательности находятся одно или два изображения желудя.

// Определяем сумму выигрыша,

function calcWin() {

// Выясняем, сколько выпало изображений с желудем

numAcorns = 0;

for (i=l; i

if (_root["symbol"+i]._currentFrame == 2)
numAcorns++;

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

firstSymbol = _root["symboll"]._currentFrame;

threeOfAkind = true;

for(i=2; i

if (_root["symbol"+i]._currentFrame != firstSymbol)
threeOfAKind= false;

// Определяем сумму выигрыша в соответствии с типом символа.

if (threeOfAKind) {

if (firstSymbol == 1) {

win = 20;

} else

if (firstSymbol == 2) {

win = 10;

} else if (firstSymbol ==3) {

win = 30;

} else if (firstSymbol == 4) {

win = 50;

} else if (firstSymbol == 5) {

win = 80;

} else if (firstSymbol == 6) {

win = 100;

} else if (firstSymbol == 7) {

win = 1000;

// Два изображения желудя.

} else if (numAcorns ==2) {

win = 2;

// Один желудь.

} else if (numAcorns ==1) {

win = 1;

// Изображений желудя нет.

} else {

win = 0;

return(win);}


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