Создание кода
Создание кода
Большая часть кода для этой игры находится в основной временной шкале. Однако сначала разберем те фрагменты кода, которые относятся к клипам.
В ролике 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);}