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

// Отображаем карты на руках у игрока и раздающего.

function showCards {

// Отображаем первую карту раздающего, когда игроку

// все карты розданы.

if (showDealerFirstCard) {

_root["dealer0"].gotoAndStop(dealerHand[0]);

} else {

_root["dealer0"].gotoAndStop(2);

}

// Показываем остальные карты раздающего.

for (i=1; i

_root["dealer"+i].gotoAndStop(dealerHand[i]);

}

// Показываем все карты игрока.

for (i=0; 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.

function dealerMove {

if (handValue(dealerHand) < 17) {

dealCard(dealerHand);

shoCards;

gotoAndPlay("Dealer");

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

} else {

decideWinner;

}

}

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

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

function handValue(hand) {

total = 0;

ace = false;

for (i=0; i

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

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

// За валета, даму и короля начисляем 10 очков.

if (val > 10) val = 10;

total += val;

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

if (val == 1) ace = true;

}

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

if ((ace) and (total <= 11)) total += 10;

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 newDeal {

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["player"+i].gotoAndStop(1);

}

}

К сведению

Основная временная шкала этого ролика – самая сложная из всех игр, рассмотренных в этой книге. Поэтому важно просмотреть ролик на Web-сайте, чтобы получить четкое представление о том, что и где расположено.

Также необходимо создать текстовые поля, в которых будут отображаться сумма очков игрока и раздающего, ставка, сумма наличных и результат.

Другие возможности

Эта игра очень хороша для изучения языка ActionScript, но она разочарует игроков в двадцать одно, играющих на деньги. Поэтому для хороших ActionScript-программистов далее представлено руководство, как добавить некоторые возможности этой игры, которые были опущены.

Легче всего добавить возможность раздачи только двух карт. Для этого нужно создать кнопку Double (Удваивание ставки) в кадре с меткой "Player". Когда игрок щелкнет по ней, ему дадут еще одну карту, ставка еще раз будет вычтена из суммы наличных денег, и игра перейдет к раздающему. Однако прежде следует убедиться, что игрок не взял какие-либо дополнительные карты, поскольку такая раздача возможна только тогда, когда у игрока на руках первые две карты.

Возможность страхования создать немного сложнее, так как при этом надо написать еще одну ветвь программы. Страхование возникает тогда, когда раздающему показывается туз. В этом случае игрок может застраховаться от того, что у раздающего будет 21, на сумму, обычно равную ставке. Если было взято страхование, и у раздающего 21 очко, игра заканчивается. Игрок теряет исходную ставку, но получает страховую сумму.

Разделение – сложное дополнение к игре. Если у игрока две карты одного достоинства, например две девятки, тогда ему может быть разрешено разделить карты на два расклада, каждый из которых будет начинаться с девятки. Следовательно, чтобы можно было хранить карты игрока в одном массиве playerHand, вы должны создать массив из массивов. В большинстве случаев в таком массиве playerHand содержится один массив, который отражает расклад на одной руке. Если игрок разделит карты, то в массиве будут содержаться два массива. Игроку обычно позволяется разделять карты несколько раз, таким образом, в массиве playerHand может содержаться три, четыре и более массивов. Затем нужно сыграть с каждым раскладом игрока. Вы понимаете, насколько это усложняет каждую часть игры. Игрок может выиграть, проиграть или сыграть в ничью по нескольким или всем своим раскладам.

Перейти на страницу:

Похожие книги

Основы программирования в Linux
Основы программирования в Linux

В четвертом издании популярного руководства даны основы программирования в операционной системе Linux. Рассмотрены: использование библиотек C/C++ и стан­дартных средств разработки, организация системных вызовов, файловый ввод/вывод, взаимодействие процессов, программирование средствами командной оболочки, создание графических пользовательских интерфейсов с помощью инструментальных средств GTK+ или Qt, применение сокетов и др. Описана компиляция программ, их компоновка c библиотеками и работа с терминальным вводом/выводом. Даны приемы написания приложений в средах GNOME® и KDE®, хранения данных с использованием СУБД MySQL® и отладки программ. Книга хорошо структурирована, что делает обучение легким и быстрым. Для начинающих Linux-программистов

Нейл Мэтью , Ричард Стоунс , Татьяна Коротяева

ОС и Сети / Программирование / Книги по IT
97 этюдов для архитекторов программных систем
97 этюдов для архитекторов программных систем

Успешная карьера архитектора программного обеспечения требует хорошего владения как технической, так и деловой сторонами вопросов, связанных с проектированием архитектуры. В этой необычной книге ведущие архитекторы ПО со всего света обсуждают важные принципы разработки, выходящие далеко за пределы чисто технических вопросов.?Архитектор ПО выполняет роль посредника между командой разработчиков и бизнес-руководством компании, поэтому чтобы добиться успеха в этой профессии, необходимо не только овладеть различными технологиями, но и обеспечить работу над проектом в соответствии с бизнес-целями. В книге более 50 архитекторов рассказывают о том, что считают самым важным в своей работе, дают советы, как организовать общение с другими участниками проекта, как снизить сложность архитектуры, как оказывать поддержку разработчикам. Они щедро делятся множеством полезных идей и приемов, которые вынесли из своего многолетнего опыта. Авторы надеются, что книга станет источником вдохновения и руководством к действию для многих профессиональных программистов.

Билл де Ора , Майкл Хайгард , Нил Форд

Программирование, программы, базы данных / Базы данных / Программирование / Книги по IT
Программист-прагматик. Путь от подмастерья к мастеру
Программист-прагматик. Путь от подмастерья к мастеру

Находясь на переднем крае программирования, книга "Программист-прагматик. Путь от подмастерья к мастеру" абстрагируется от всевозрастающей специализации и технических тонкостей разработки программ на современном уровне, чтобы исследовать суть процесса – требования к работоспособной и поддерживаемой программе, приводящей пользователей в восторг. Книга охватывает различные темы – от личной ответственности и карьерного роста до архитектурных методик, придающих программам гибкость и простоту в адаптации и повторном использовании.Прочитав эту книгу, вы научитесь:Бороться с недостатками программного обеспечения;Избегать ловушек, связанных с дублированием знания;Создавать гибкие, динамичные и адаптируемые программы;Избегать программирования в расчете на совпадение;Защищать вашу программу при помощи контрактов, утверждений и исключений;Собирать реальные требования;Осуществлять безжалостное и эффективное тестирование;Приводить в восторг ваших пользователей;Формировать команды из программистов-прагматиков и с помощью автоматизации делать ваши разработки более точными.

А. Алексашин , Дэвид Томас , Эндрю Хант

Программирование / Книги по IT