Как для игрока, так и для раздающего создается массив, в котором представлены карты, имеющиеся на руках. Вам нужно будет подумать насчет первой карты раздающего, так как она не должна быть видна до тех пор, пока игрок не закончит набирать карты.
В отличие от видеопокера оценка расклада в этой игре проста. Единственная сложность: туз может стоить как одно, так и 11 очков. Однако, так как два туза дадут 22 очка, второй туз никак не может стоить 11. То есть все, что нужно, – определить, есть ли на руках туз, подсчитать, что он равен единице, а затем добавить 10, если при этом на руках не будет перебора. Например, расклад с тройкой, девяткой и тузом рассматривается как 13 очков, потому что если считать, что туз стоит 11, то на руках окажется 23 очка, то есть перебор.
Подготовка ролика
В отличие от видеопокера на руках может быть от двух до 11 карт. Для каждого расклада создаются 11 экземпляров клипов, имена которых изменяются от «playerO» до «player10» и от «dealerO» до «dealer10». Кадры клипа «deck» – пусты. Следовательно, когда вы поместите клип на рабочее поле, вы не увидите ничего, кроме меток, которые устанавливаются программой Flash для клипов по умолчанию. На рис. 15.5 показаны все 22 метки.
Рисунок 15.5. Все карты представлены в виде маленьких кружочков, меток клипа, так как на данный момент карты не видны
В этом ролике сложная основная временная шкала. Каждая метка представляет собой различный этап игры. На рис. 15.6 показана шкала в момент, когда видна большая часть меток.
Рисунок 15.6. В сложной основной временной шкале игры в очко для каждого шага существует помеченный кадр
В процессе игры указатель текущего кадра передвигается вдоль основной временной шкалы. Каждый ключевой кадр содержит различные функции. Сам код расположен в первом ключевом кадре.
Обязательно просмотрите ролик Blackjack.fla, размещенный на Web-сайте, чтобы самому увидеть, где расположены ключевые кадры и какие функции они вызывают.
Создание кода
Первый кадр вызывает функцию
initGame(), но после нее не идет команда stop(), так как указатель должен двигаться и перейти к кадру «shuffle».
initGame();
Функция initGame() определяет исходную сумму наличных денег игрока.
function initGame() {
cash = 100;
showCash();
}
Функция createDeckпохожа на одноименную функцию, используемую в видеопокере, но здесь она шесть раз добавляет каждую карту, чтобы создать шесть колод карт. Один из недостатков использования шести колод состоит в том, что программе требуется время для их перетасовки. Следовательно, кадр "shuffle" появляется перед ключевым кадром, вызывающим функцию createDeck.Поэтому слово «shuffle» (Идет перетасовка колоды) появится на экране прежде, чем код начнет тасовать карты. Следовательно, игрок не должен удивляться, почему его компьютер вдруг «завис».
// Создаем перетасованную колоду карт.
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.
// Раздаем игроку одну карту из колоды.
Читать дальше
Конец ознакомительного отрывка
Купить книгу