Adobe Flash. Создание аркад, головоломок и других игр с помощью ActionScript
Шрифт:
В процессе игры указатель текущего кадра передвигается вдоль основной временной шкалы. Каждый ключевой кадр содержит различные функции. Сам код расположен в первом ключевом кадре.
Обязательно просмотрите ролик Blackjack.fla, размещенный на Web-сайте, чтобы самому увидеть, где расположены ключевые кадры и какие функции они вызывают.
Создание кода
Первый кадр вызывает функцию initGame , но после нее не идет команда stop, так как указатель должен двигаться и перейти к кадру «shuffle».initGame;
Функция initGame определяет исходную сумму наличных денег игрока.
function initGame {
cash = 100;
showCash;
}Функция createDeck похожа
// Создаем перетасованную колоду карт.
function createDeck {
// Создаем упорядоченную колоду.
suits = ["c", "d", "s", "h"];
temp = new Array;
for (i=0; i<6; i++) {
for (suit=0; suit<4; suit++) {
for (num=1; num<4; num++) {
temp.push(suits[suit]+num);
}
}
}
// Карты выбираются случайным образом до тех пор, пока
// колода не будет перемешана.
deck = new Array;
while (temp.length>0) {
r = int(Math.random*temp.length);
deck.push(temp[r]);
temp.splice(r,1);
}
}В функции initHand создаются массивы playerHand и dealerHand. Переменной showDealerFirstCard присваивается значение false, по умолчанию делается ставка в пять долларов.
// Инициализируем массивов расклада и определяем сумму ставки.
function initHand {
playerHand = new Array;
dealerHand = new Array;
showDealerFirstCard = false;
bet = 5;
showBet;
}Когда игрок щелкает по кнопке Add to bet (Повысить ставку), вызывается функция addToBet, которая повышает ставку на пять долларов и не позволяет сделать ставку, превышающую 25 долларов.
// Функция увеличивает ставку игрока вплоть до 25 долларов.
function addToBet {
bet += 5;
if (bet > 25) bet = 25;
showBet;
}Когда игрок щелкает по кнопке Deal (Раздать), вызывается функция makeBet, которая вычитает сумму ставки из суммы наличных игрока. Затем ролик проходит по четырем кадрам от «Deal1» до «Deal4».
// Вычитаем сумму ставки из суммы наличных денег игрока.
function makeBet {
cash -= bet;
showCash;
}В каждом из четырех кадров вызывается функция dealCard, дважды с использованием массива playerHand и дважды – dealerHand. При выполнении этой функции по две карты раздаются игроку и раздающему. Также в каждом кадре вызывается функция showCards.
// Раздаем игроку одну карту из колоды.
function dealCard(hand) {
hand.push(deck.pop);
}Функции showBet и showCash отображают текущую ставку и текущую сумму наличных с добавлением знака "$" впереди. Не забудьте создать соответствующие текстовые
// Отображаем сумму наличности со знаком "$".
function showCash {
cashDisplay = "$" + cash;
}
// Отображаем сумму ставки со знаком "$".
function showBet {
betDisplay = "$" + bet;
}Функция showCards просматривает карты, имеющиеся на руках у игрока и раздающего, и помещает соответствующие клипы на рабочее поле. С помощью переменной showDealerFirstCard указывается, отображается ли первая карта раздающего или показывается всего лишь рубашка карты.
// Отображаем карты на руках у игрока и раздающего.
function showCards {
// Отображаем первую карту раздающего, когда игроку
// все карты розданы.
if (showDealerFirstCard) {
_root["dealer0"].gotoAndStop(dealerHand[0]);
} else {
_root["dealer0"].gotoAndStop(2);
}
// Показываем остальные карты раздающего.
for (i=1; i<dealerHand.length; i++) {
_root["dealer"+i].gotoAndStop(dealerHand[i]);
}
// Показываем все карты игрока.
for (i=0; i<playerHand.length; i++) {
_root["player"+i].gotoAndStop(playerHand[i]);
}
// Отображаем сумму карт на руках.
playerValue = handValue(playerHand);
dealerValue = handValue(dealerHand);
}После того как были розданы первые две карты, существует вероятность того, что у кого-то уже двадцать одно очко. Если у игрока, то он сразу же выигрывает, сумма выигрыша составляет 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");
}