Чтение онлайн

на главную - закладки

Жанры

Adobe Flash. Создание аркад, головоломок и других игр с помощью ActionScript

Розенцвейг Гэри

Шрифт:

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

Обязательно просмотрите ролик 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.

// Раздаем игроку одну карту из колоды.

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

}

Поделиться:
Популярные книги

Моя на одну ночь

Тоцка Тала
Любовные романы:
современные любовные романы
короткие любовные романы
5.50
рейтинг книги
Моя на одну ночь

Черный Маг Императора 8

Герда Александр
8. Черный маг императора
Фантастика:
юмористическое фэнтези
попаданцы
аниме
5.00
рейтинг книги
Черный Маг Императора 8

Измена. Отбор для предателя

Лаврова Алиса
1. Отбор для предателя
Фантастика:
фэнтези
5.00
рейтинг книги
Измена. Отбор для предателя

Кодекс Крови. Книга II

Борзых М.
2. РОС: Кодекс Крови
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Кодекс Крови. Книга II

Шаг в бездну

Муравьёв Константин Николаевич
3. Перешагнуть пропасть
Фантастика:
фэнтези
космическая фантастика
7.89
рейтинг книги
Шаг в бездну

Часовая битва

Щерба Наталья Васильевна
6. Часодеи
Детские:
детская фантастика
9.38
рейтинг книги
Часовая битва

Вечная Война. Книга II

Винокуров Юрий
2. Вечная война.
Фантастика:
юмористическая фантастика
космическая фантастика
8.37
рейтинг книги
Вечная Война. Книга II

Хроники странного королевства. Вторжение. (Дилогия)

Панкеева Оксана Петровна
110. В одном томе
Фантастика:
фэнтези
9.38
рейтинг книги
Хроники странного королевства. Вторжение. (Дилогия)

Часовой ключ

Щерба Наталья Васильевна
1. Часодеи
Фантастика:
фэнтези
9.36
рейтинг книги
Часовой ключ

Инвестиго, из медика в маги

Рэд Илья
1. Инвестиго
Фантастика:
фэнтези
городское фэнтези
попаданцы
5.00
рейтинг книги
Инвестиго, из медика в маги

Кротовский, может, хватит?

Парсиев Дмитрий
3. РОС: Изнанка Империи
Фантастика:
попаданцы
альтернативная история
аниме
7.50
рейтинг книги
Кротовский, может, хватит?

Драконий подарок

Суббота Светлана
1. Королевская академия Драко
Любовные романы:
любовно-фантастические романы
7.30
рейтинг книги
Драконий подарок

Очешуеть! Я - жена дракона?!

Амеличева Елена
Фантастика:
юмористическая фантастика
5.43
рейтинг книги
Очешуеть! Я - жена дракона?!

Идеальный мир для Лекаря 9

Сапфир Олег
9. Лекарь
Фантастика:
боевая фантастика
юмористическое фэнтези
6.00
рейтинг книги
Идеальный мир для Лекаря 9