Шрифт:
К сведению
Если вы посмотрите на ролик, который приводится в качестве примера, то увидите, что фон игрового автомата на самом деле располагается на переднем плане. Три окна – это дырки в изображении, сквозь них видно, как проигрывается анимация вращения, а также видны символы на барабанах.
Вы можете указать действия, которые будут совершаться, если деньги на счету игрока закончатся. Можно проверять это условие и, если оно оказывается истинным, переходить к другому кадру. Можно сообщить игроку, что игра окончена, либо предоставить еще 100 долларов, чтобы игрок сыграл еще раз.
Другие возможности
В более сложных игровых автоматах в одном окне могут находиться сразу несколько символов. В некоторых автоматах символы отображаются также и по вертикали, так что игрок может выиграть, если совпадут символы по трем горизонтальным линиям и двум диагоналям. Иногда игрок может выбирать, сколько монет (от одной до пяти) «вставить» в автомат, чтобы определить потенциальный выигрыш (он будет зависеть от величины ставки).
Так как Flash-ролик – не игра на деньги, а просто развлечение, то более важно предусмотреть возможность изменения графики для соответствия различным темам Web-сайтов. Например, для детского сайта можно сделать картинки с конфетами. Изменяя внешний вид автомата и картинки, одну и ту же программу можно использовать для оформления разных сайтов.
Видеопокер
Исходный файл: Videopoker.fla
В казино автоматы с видеопокером располагаются рядом с игровыми автоматами. По существу, они представляют собой то же самое: вы вставляете монету и можете выиграть некоторую сумму денег. Единственное различие состоит в том, что в течение игры вы должны совершать некоторые действия, чтобы повлиять на результат, а автомат будет на них реагировать.
Не ошибитесь: казино всегда выигрывает. Но так как игрок может заменять некоторые карты в течение игры, ему кажется, что у него появляется больше шансов на выигрыш. Такая возможность усложняет написание программы.
Задача проекта
Эта игра состоит из трех шагов. Первый шаг – игра ждет, пока игрок попросит сдать карты. На втором шаге игрок смотрит на пять карт, которые ему раздали, и решает, какие оставить, а какие – поменять. И последний шаг – раздаются новые карты, и подсчитывается сумма выигрыша. После чего осуществляется переход к первому шагу.
Игра должна представить игроку набор из пяти карт, выбранных случайным образом из перемешанной колоды (рис. 15.3).
Рисунок 15.3. Видеопокер показывает игроку пять карт
Затем игрок может выбрать те карты, которые следует поменять (можно поменять все). После замены программа должна рассмотреть окончательный набор карт и подсчитать, сколько они «стоят».
Подход
Первое, что необходимо программе, – это перетасованная колода карт, которая будет представлять собой массив с символьными данными, например «h7», что означает семерка червей. Четыре масти представлены буквами "с", "d", "h" и "s". Туз обозначен "1", то есть «с1» означает туз треф, а валет, дама и король обозначены цифрами «11», «12» и «13» соответственно.
Создать упорядоченную колоду карт просто, совсем другое дело – создание перетасованной колоды. Для этого вы берете упорядоченный массив и, выбирая из него случайным образом элементы, один за другим помещаете их в новый массив.
Затем первые пять карт в массиве отображаются на экране. Под каждой картой располагается кнопка. Один щелчок мыши по ней переворачивает карту, так что будет видна рубашка карты. Второй щелчок возвращает карту в исходное положение на тот случай, если игрок передумал.
Когда игрок будет удовлетворен своим выбором, он щелкает по кнопке Draw (Поменять). Те карты, которые были выбраны для замены, замещаются следующими картами из перетасованной колоды.
Самый сложный фрагмент программного кода нужен для конечной фазы игры. Окончательный массив из пяти карт должен быть оценен с точки зрения покера. Вот список возможных вариантов:
• младшая пара – пара карт одного достоинства (десятка или ниже);
• старшая пара – пара валетов, дам, королей или тузов;
• тройка – три карты одного достоинства;
• стрит – пять карт, ранг каждой из которых на единицу превышает ранг предыдущей карты, например восьмерка, девятка, десятка, валет и дама. Туз может располагаться как перед двойкой, так и после короля;
• флэш – пять карт одной масти;
• фул хаус – пара и три карты одного достоинства;
• каре – четыре карты одного достоинства;
• стрейт флэш – пять карт одной масти, ранг каждой из которых на единицу превышает ранг предыдущей карт;
• роял флэш [18] – стрейт флэш с десяткой, валетом, дамой, королем и тузом.
Для того чтобы определить, удовлетворяет ли набор карт вышеуказанным критериям, необходимо проанализировать массив с картами несколькими способами.
После того как будет определена ценность карт, останется сделать последний шаг – сопоставить ее с суммой выигрыша и увеличить наличность игрока.
Подготовка ролика
Основной библиотечный элемент в данной игре – колода карт, то есть клип с 54 кадрами. Первый кадр отображает пустой контур карты. Во втором кадре содержится рубашка карты. Кадры 3-54 показывают различные карты колоды. Каждый кадр имеет такое же имя, какое используется в коде для идентификации карт. Например, «c1» – туз треф и «h11» – валет червей.
Просмотрите ролик Videopoker.fla и вы увидите, что для клипа "deck" выделена целая папка библиотеки, заполненная графическими изображениями. Это упрощает повторное использование элементов для разных карт.
Ролик составлен из пяти экземпляров клипа "deck" (колода), которые называются "card0", "card1", "card2", "card3" и "card4". В первом кадре нужна только кнопка "Deal" (Раздать), которая отображается также и в третьем кадре.
Во втором кадре находится кнопка "Draw" (Выигрыш), а под каждой картой – кнопка "Hold/Replace" (Оставить/Поменять).
Создание кода
Большая часть кода содержится в первом кадре основной временной шкалы. Начинается она с того, что игроку предоставляется 100 долларов.startGame;
stop;
// "Выдаем" исходную сумму.
function startGame {
cash = 100;
}Как и в предыдущем проекте, перед суммой наличных денег игрока отобразите знак "$".
// Отображаем сумму наличных со знаком доллара.
function showCash {
cashDisplay = "$"+cash;
}Раздача карт начинается с того, что у игрока изымается один доллар. Каждая раздача производится из новой колоды, состоящей из 52 карт. Функция firstDraw берет первые пять карт, а функция showCards помещает клипы соответствующих карт на рабочее поле.
// Сдача карты.
function startDeal {
// Уменьшаем сумму наличных денег.
cash–;
showCash;
// Перетасовываем карты и снова сдаем их.
createDeck;
firstDraw;
showCards;
}Создание полностью произвольной перетасованной колоды включает в себя два шага. Первый – создание упорядоченной колоды. Это осуществляется путем циклического просмотра всех мастей и всех рангов карт и для каждой комбинации добавляется соответствующий элемент массива. Затем программа случайным образом выбирает карты из упорядоченной колоды и помещает их в другой массив. Когда массив заполняется, а предыдущий массив оказывается пустым, у вас получается перетасованная колода карт.
// Создаем перетасованную колоду.
function createDeck {
// Создаем упорядоченную колоду.
suits = ["c","d","s","h"];
temp = new Array;
for(suit=0; suit<4; suit++) {
for (num=1; num<14; 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);
}
}