- Любовные романы
- Фантастика и фэнтези
- Ненаучная фантастика
- Ироническое фэнтези
- Научная Фантастика
- Фэнтези
- Ужасы и Мистика
- Боевая фантастика
- Альтернативная история
- Космическая фантастика
- Попаданцы
- Юмористическая фантастика
- Героическая фантастика
- Детективная фантастика
- Социально-психологическая
- Боевое фэнтези
- Русское фэнтези
- Киберпанк
- Романтическая фантастика
- Городская фантастика
- Технофэнтези
- Мистика
- Разная фантастика
- Иностранное фэнтези
- Историческое фэнтези
- LitRPG
- Эпическая фантастика
- Зарубежная фантастика
- Городское фентези
- Космоопера
- Разное фэнтези
- Книги магов
- Любовное фэнтези
- Постапокалипсис
- Бизнес
- Историческая фантастика
- Социально-философская фантастика
- Сказочная фантастика
- Стимпанк
- Романтическое фэнтези
- Ироническая фантастика
- Детективы и Триллеры
- Проза
- Юмор
- Феерия
- Новелла
- Русская классическая проза
- Современная проза
- Повести
- Контркультура
- Русская современная проза
- Историческая проза
- Проза
- Классическая проза
- Советская классическая проза
- О войне
- Зарубежная современная проза
- Рассказы
- Зарубежная классика
- Очерки
- Антисоветская литература
- Магический реализм
- Разное
- Сентиментальная проза
- Афоризмы
- Эссе
- Эпистолярная проза
- Семейный роман/Семейная сага
- Поэзия, Драматургия
- Приключения
- Детская литература
- Загадки
- Книга-игра
- Детская проза
- Детские приключения
- Сказка
- Прочая детская литература
- Детская фантастика
- Детские стихи
- Детская образовательная литература
- Детские остросюжетные
- Учебная литература
- Зарубежные детские книги
- Детский фольклор
- Буквари
- Книги для подростков
- Школьные учебники
- Внеклассное чтение
- Книги для дошкольников
- Детская познавательная и развивающая литература
- Детские детективы
- Домоводство, Дом и семья
- Юмор
- Документальные книги
- Бизнес
- Работа с клиентами
- Тайм-менеджмент
- Кадровый менеджмент
- Экономика
- Менеджмент и кадры
- Управление, подбор персонала
- О бизнесе популярно
- Интернет-бизнес
- Личные финансы
- Делопроизводство, офис
- Маркетинг, PR, реклама
- Поиск работы
- Бизнес
- Банковское дело
- Малый бизнес
- Ценные бумаги и инвестиции
- Краткое содержание
- Бухучет и аудит
- Ораторское искусство / риторика
- Корпоративная культура, бизнес
- Финансы
- Государственное и муниципальное управление
- Менеджмент
- Зарубежная деловая литература
- Продажи
- Переговоры
- Личная эффективность
- Торговля
- Научные и научно-популярные книги
- Биофизика
- География
- Экология
- Биохимия
- Рефераты
- Культурология
- Техническая литература
- История
- Психология
- Медицина
- Прочая научная литература
- Юриспруденция
- Биология
- Политика
- Литературоведение
- Религиоведение
- Научпоп
- Психология, личное
- Математика
- Психотерапия
- Социология
- Воспитание детей, педагогика
- Языкознание
- Беременность, ожидание детей
- Транспорт, военная техника
- Детская психология
- Науки: разное
- Педагогика
- Зарубежная психология
- Иностранные языки
- Филология
- Радиотехника
- Деловая литература
- Физика
- Альтернативная медицина
- Химия
- Государство и право
- Обществознание
- Образовательная литература
- Учебники
- Зоология
- Архитектура
- Науки о космосе
- Ботаника
- Астрология
- Ветеринария
- История Европы
- География
- Зарубежная публицистика
- О животных
- Шпаргалки
- Разная литература
- Зарубежная литература о культуре и искусстве
- Пословицы, поговорки
- Боевые искусства
- Прочее
- Периодические издания
- Фанфик
- Военное
- Цитаты из афоризмов
- Гиды, путеводители
- Литература 19 века
- Зарубежная образовательная литература
- Военная история
- Кино
- Современная литература
- Военная техника, оружие
- Культура и искусство
- Музыка, музыканты
- Газеты и журналы
- Современная зарубежная литература
- Визуальные искусства
- Отраслевые издания
- Шахматы
- Недвижимость
- Великолепные истории
- Музыка, танцы
- Авто и ПДД
- Изобразительное искусство, фотография
- Истории из жизни
- Готические новеллы
- Начинающие авторы
- Спецслужбы
- Подростковая литература
- Зарубежная прикладная литература
- Религия и духовность
- Старинная литература
- Справочная литература
- Компьютеры и Интернет
- Блог
Adobe Flash. Создание аркад, головоломок и других игр с помощью ActionScript - Гэри Розенцвейг
Шрифт:
Интервал:
Закладка:
Рисунок 15.4. Расклад, когда раздающий выиграл, так как у него 21, а у игрока только 18 очков
В этой простой игре игроку и раздающему дается по две карты. Первая карта раздающего остается лежать рубашкой вверх до тех пор, пока игрок не закончит набирать карты. Игрок может брать карты до тех пор, пока у него не окажется двадцать одно очко или более. Затем компьютер выдает карты раздающему, пока у того не будет минимум 17 очков.
Если с первыми двумя картами у игрока 21 очко, он сразу же выигрывает и получает дополнительно 50 % суммы выигрыша. Если у раздающего получается 21, игра сразу же приостанавливается. Если же так не случилось, то выигрывает тот, у кого на руках большее количество очков, не превышающее 21.
Игрок может контролировать свои ставки (от 5 до 25 долларов), каждый раз повышая ставку на пять долларов.Подход
Как и в видеопокере, здесь есть массив deck, в котором содержится перетасованная колода карт. Разница заключается в том, что в этой игре в массиве находятся шесть колод. В игре в очко такой массив называется shoe.
Как для игрока, так и для раздающего создается массив, в котором представлены карты, имеющиеся на руках. Вам нужно будет подумать насчет первой карты раздающего, так как она не должна быть видна до тех пор, пока игрок не закончит набирать карты.
В отличие от видеопокера оценка расклада в этой игре проста. Единственная сложность: туз может стоить как одно, так и 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.
// Раздаем игроку одну карту из колоды.
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");
}Кадр «Dealer» проигрывается снова и снова, каждый раз вызывается функция dealerMove, проверяется сумма очков раздающего, больше ли она 17 или нет. Правилами казино определено, что раздающий берет еще одну карту до тех пор, пока сумма очков не превысила 16. Когда раздающий закончил набирать карты, вызывается функция decideWinner.
// Раздающий берет еще одну карту до тех пор,
// пока сумма очков меньше 17.

