Категории
Самые читаемые
onlinekniga.com » Компьютеры и Интернет » Программирование » Adobe Flash. Создание аркад, головоломок и других игр с помощью ActionScript - Гэри Розенцвейг

Adobe Flash. Создание аркад, головоломок и других игр с помощью ActionScript - Гэри Розенцвейг

Читать онлайн Adobe Flash. Создание аркад, головоломок и других игр с помощью ActionScript - Гэри Розенцвейг

Шрифт:

-
+

Интервал:

-
+

Закладка:

Сделать
1 ... 63 64 65 66 67 68 69 70 71 ... 90
Перейти на страницу:

Клип spin начинается с пустого кадра, где он ждет, пока игрок не щелкнет по рычагу. Кадр прозрачный, так что сквозь него виден клип "symbols".

В остальных кадрах клипа "spin" находится размытая анимация. За изображениями, показанными на рис. 15.2, расположен белый непрозрачный фон, закрывающий клип "symbols" во время вращения колес.

В клипе "symbols" находятся семь кадров, во всех содержатся разные символы. В ролике Slotmachine.fla это изображения желудя, яблока, листа, бревна, луны, солнца и лисы.

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

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

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

on (release) {

pull();

}

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

numTimes–;

if (numTimes <= 0) {

gotoAndStop(1);

_root.spinDone(_name);

} else {

gotoAndPlay(2);

}

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

initGame();

stop();

function initGame() {

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

for (i=1;i<4;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=1; i<4; i++) {

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

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

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

}

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

for (i=1; i<4; i++) {

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

}

}

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

...

Примечание

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

Но вероятность появления одного символа должна отличаться от вероятности появления другого символа. Например, символ с бревном появляется в 29 % случаев. С другой стороны, символ лисы появляется только в 3 % случаев.

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

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

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

function randomSymbol() {

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

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

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

totalChances = 0;

for (j=0; j<chances.length; j++) {

totalChances += chances[j];

}

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

r = 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 == "spin1") {

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

win = calcWin();

cash += win;

showCash();

}

}

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

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

function calcWin() {

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

numAcorns = 0;

for (i=1; i<4; i++) {

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

}

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

firstSymbol = _root["symbol1"]._currentFrame;

threeOfAkind = true;

for(i=2; i<4; 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);

}

К сведению

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

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

Другие возможности

В более сложных игровых автоматах в одном окне могут находиться сразу несколько символов. В некоторых автоматах символы отображаются также и по вертикали, так что игрок может выиграть, если совпадут символы по трем горизонтальным линиям и двум диагоналям. Иногда игрок может выбирать, сколько монет (от одной до пяти) «вставить» в автомат, чтобы определить потенциальный выигрыш (он будет зависеть от величины ставки).

Так как Flash-ролик – не игра на деньги, а просто развлечение, то более важно предусмотреть возможность изменения графики для соответствия различным темам Web-сайтов. Например, для детского сайта можно сделать картинки с конфетами. Изменяя внешний вид автомата и картинки, одну и ту же программу можно использовать для оформления разных сайтов.

Видеопокер

Исходный файл: Videopoker.fla

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

Не ошибитесь: казино всегда выигрывает. Но так как игрок может заменять некоторые карты в течение игры, ему кажется, что у него появляется больше шансов на выигрыш. Такая возможность усложняет написание программы.

Задача проекта

Эта игра состоит из трех шагов. Первый шаг – игра ждет, пока игрок попросит сдать карты. На втором шаге игрок смотрит на пять карт, которые ему раздали, и решает, какие оставить, а какие – поменять. И последний шаг – раздаются новые карты, и подсчитывается сумма выигрыша. После чего осуществляется переход к первому шагу.

1 ... 63 64 65 66 67 68 69 70 71 ... 90
Перейти на страницу:
На этой странице вы можете бесплатно читать книгу Adobe Flash. Создание аркад, головоломок и других игр с помощью ActionScript - Гэри Розенцвейг.
Комментарии