Иллюстрированный самоучитель по созданию Flash-игр

Игровой автомат

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

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

Но вероятность появления одного символа должна отличаться от вероятности появления другого символа. Например, символ с бревном появляется в 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 == "spinl") {
        // Подсчитываем сумму выигрыша,
        win = calcWin();
        cash += win;
        showCash();
    }
}

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

// Определяем сумму выигрыша,
function calcWin() {
    // Выясняем, сколько выпало изображений с желудем
    numAcorns = 0;
    for (i = l; i < 4; i++) {
        if (_root["symbol" + i]._currentFrame == 2)
            numAcorns++;
        // Проверяем, совпадают ли три символа.
        firstSymbol = _root["symboll"]._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-сайтов. Например, для детского сайта можно сделать картинки с конфетами. Изменяя внешний вид автомата и картинки, одну и ту же программу можно использовать для оформления разных сайтов.

Если Вы заметили ошибку, выделите, пожалуйста, необходимый текст и нажмите CTRL + Enter, чтобы сообщить об этом редактору.