91824841

вызывается функция spinDone, которой передается


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

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);}



// Заменяем карты и определяем выигрыш,

function secondDraw() {

// Заменяем карты, for (i=0; i

if (!hold[i]> { cards[i] = deck.pop();

showCards();

// Определяем, что на руках у игрока.

handVal = handValue(cards);

// Расчитываем сумму выигрыша.

winAmt = winning(handVal);

resultsDisplay = handVal + ": " + winAmt;

// Добавляем сумму выигрыша к имеющейся сумме наличных,

cash += winAmt;

showCash();

gotoAndPlay("done");

}

Прежде чем перейти к рассмотрению функции handvalue, необходимо создать функцию compareHands. Функция handvalue сортирует карты на руках у игрока по возрастанию. Программа Flash ничего не знает о колоде игральных карт, так что вам придется "научить" ее распознавать сочетания покера.
Функция compareHands берет две карты и сравнивает их. Для каждой карты из символьной строки она выбирает первый и второй символы, то есть игнорирует нулевой символ. Таким образом, карта "с7" становится "7", а "с13" - "13".
Затем функция возвращает один из трех вариантов ответов: -1 - первая карта меньше по достоинству второй карты, 0 - карты одинакового достоинства, и 1 - ранг первой карты на единицу больше ранга второй.
Эта функция необходима для команды sort, использующейся в функции handvalue. Если для сортировки не будет специальной функции, программа попытается отсортировать массив hand по алфавиту, то есть все трефы будут расположены перед бубнами, так как трефовая масть начинается с буквы "с", а бубновая - с "d". А вам нужно, чтобы карты были отсортированы в соответствии с их рангом.

// Эта функция используется командой сортировки для определения,
// какие карты идут первыми,

function compareHands(a,b) {

// Получаем ранг карты.

numa = Number(a.substr(1,2));

numb = Number (b. subs t r (1,2) ) ;

// Возвращаем -1, 0 или 1 в зависимости

//от результата сравнения,

if (numa < numb) return(-1);

if (numa == numb) return(O);

if (numa > numb) return(1);}



}

После того как были розданы первые две карты, существует вероятность того, что у кого-то уже двадцать одно очко. Если у игрока, то он сразу же выигрывает, сумма выигрыша составляет 150% от ставки. Если же у раздающего, то игрок проигрывает.

// Проверяем, есть ли 21 очко,

function checkForBlackjack() {

// Если двадцать одно у игрока,

// выигрыш составляет 150% ставки.

if (playerHand.length == 2) and (playerValue == 21)) {

cash += bet*2.5;

showCash();

result = "Blackjack!";

gotoAndPlay("Done");

// Если у раздающего двадцать одно, игрок проиграл.

} else if ((dealeerHand.length == 2) and (dealerHand == 21)) {

result = "Dealer has blackjack!";

gotoAndPlay("Done");
}}

После того как были розданы первые четыре карты, ролик переходит в режим ожидания, к кадру "Player". В этом кадре находятся две кнопки: «Hit” (Еще) и "Stay" (Хватит). Игрок может щелкнуть по кнопке Hit" и запросить еще одну карту, при этом вызывается функция hit. Если с новой картой у игрока 21 очко или больше, игра автоматически переходит дальше к кадру выигрыша или проигрыша соответственно.

// Игрок берет еще одну карту.

function hit() {

dealCard(playeerHand);

showCards();

playerValue = handValue(playerHand);

// Если у игрока 21 очко или больше, выясняем,

// сколько очков у раздающего.

if (playerValue >= 21) startDealer();
}

Когда игрок закончит набирать карты, очередь переходит к раздающему. Функция startDealer начинается с того, что переменной showDealerFirstCard присваивается значение true. Когда снова вызывается функция showCards, отображается первая карта раздающего. Затем игра переходит к кадру "Dealer".

// Отображаем первую карту раздающего,

// теперь он может набирать себе карты.

function startDealer() {

showDealerFirstCard = true;

showCards(0);

gotoAndPlay("Dealer");

}

Кадр "Dealer" проигрывается снова и снова, каждый раз вызывается функция dealerMove, проверяется сумма очков раздающего, больше ли она 17 или нет. Правилами казино определено, что раздающий берет еще одну карту до тех пор, пока сумма очков не превысила 16. Когда раздающий закончил набирать карты, вызывается функция decideWinner.



_root.onMouseDown = function() {

var card = undefined;

(18) // Смотрим, был ли щелчок по одной из карт пирамиды.

for(var i=27;i>=0;i--) {

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

var card = _root["card"+i];

break;

}}

(19)// Если был, закрывают ли эту карту другие карты?

if (card != undefined) {

if (cardPresent(card.row+l,card.col) or cardPresent(card.row+1,card.col+l)) {

card = undefined;

}}

(20)// Был ли щелчок по стопке карт, лежащих мастью вверх?

if (card == undefined) {

if (stackl.hitTest(_xmouse,_ymouse)) {

card = stack1;

}}

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

if (card != undefined) {

(21)// Первая выбранная карта,

if (firstCard == undefined) {

firstCard = card;

// Игнорируем второй щелчок по той же карте.

} else if (firstCard == card) {

(22)// Если выбраны две карты и их сумма равна 13.

} else if (cardValueffirstCard) + cardValue(card) == 13) {

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

removeCard(card);

removeCard(firstCard);

firstCard = undefined;

// В противном случае считаем, что это первая выбранная

// карта.

} else {

firstCard = card;

}}

(23)// Если выбрана одна карта, и это "король"

if (cardValueffirstCard) ==13) {

removeCardffirstcard);

firstCard = undefined;

}}

(24)// Если щелкнули по колоде закрытых карт, переворачиваем

// очередную карту.

if (stackO.hitTest(_xmouse,_ymouse)) {

stackl.value = deck.pop();

stackl.gotoAndStop(stackl.value);

stack.push(stackl.value);

// Когда закрытая колода кончается, удаляем ее.

if (deck.length == 0) {

stackO.removeMovieClip();

}}

(25)// Помещаем рамку около выделенной карты,

if (firstCard != undefined) {

outline._x = firstCard._x;

outline._y = firstCard._y;

} else {

outline._x = -1000;}

(26)// Если удалена первая карта в пирамиде, значит игрок

// выиграл.

if (_root["card0"] == undefined) {

gotoAndStop("game over");

}}

Осталось рассмотреть несколько полезных функций. Первая, removeCard, удаляет карту из колоды открытых карт или из пирамиды. Чтобы удалить карту из открытой колоды , она должна просто отправить клип "stack1" к кадру, который представляет предыдущую карту. Именно в этом месте оказывается полезным массив stack. Каждая карта, положенная мастью вверх, добавляется к stack. Чтобы достать карту опять, вам нужно удалить последнюю карту из массива stack и затем обратиться к последнему члену этого массива. Если карта оказалась из пирамиды, то клип просто удаляется.


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