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


Создание кода - часть 4


// Раздающий берет еще одну карту до тех пор,

// пока сумма очков меньше 17.

function dealerMove() {

if (handValue(dealerHand) < 17) {

dealCard(dealerHand);

shoCards();

gotoAndPlay("Dealer");

// Раздающий закончил набирать карты.

} else {

decidewinner();

}}

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

// Подсчитываем очки,

function handValue(hand) {

total = 0;

асе = false;

for (i=0; i

// Добавляем ранг карты.

val = Number(hand[i].substr(1,2));

11 За валета, даму и короля начисляем 10 очков,
if (val > 10) val = 10;

total += val;

// Запоминаем, если был найден туз.

if (val == 1) асе = true;

}

// Туз может стоить 11 очков, если у игрока не будет перебора.

if ((асе) and (total

return(total);
}

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

// Определяем победителя или случай игры в ничью,

function decideWinner() {

showCash();

if (playerValue > 21) {

result = "You Busted!";

} else if (dealerValue > 21) {

cash += bet*2;

result = "Dealer Busts. You Win!";

} else if (dealerValue > playerValue) {

result = "You Lose!";

} else if (dealerValue == playerValue) {

cash += bet;

result = "Tie!";

} else if (dealerValue < playerValue) {

cash += bet*2;

result = "You Win!";

}

showCash(); gotoAndPlay("Done");

}

В кадре Done находится кнопка Next Hand (Сыграть еще раз), которая вызывает следующую функцию, проверяющую, осталось ли в колоде 26 карт. Если в колоде карт меньше, заново создается перетасованная колода. Если осталось достаточное количество карт, вызывается функция initHand, и игра возвращается к кадру "Bet". В любом случае вызывается функция resetCards, которая устанавливает все находящиеся на рабочем поле клипы "deck" в первый кадр, благодаря чему карты не остаются на экране.

// Начинаем следующую раздачи карт.

function newDeaK) { resetCards();

// Если в колоде менее 26 карт,

// Создаем новую перетасованную колоду,

if (deck.length < 26) {

gotoAndPlay("shuffle");

} else {

initHand();

gotoAndPlay("Bet");

}}

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

function resetCards() {

for (i=0; i

_root["dealer"+i.gotoAndStop(1);

} for (i=0; i

_root t"player"+i].gotoAndStop(1);

}}




Начало  Назад  Вперед



Книжный магазин