Видеопокер
Для того чтобы преобразовать содержимое массива cards в то, что игрок видит на экране, функция showCards на рабочем поле устанавливает кадры для каждого из пяти экземпляров клипа. Кадры должны соответствовать символьной строке, расположенной в массиве hand.
// Определяем вид клипов карт, сданных игроку.
function
showCards() {
for
(i
=
0
; i
<
5
; i
+
+
) {
_root[
"card"
+
i].gotoAndStop(cards[i]);
}
}
После того как все карты будут показаны игроку, он должен решить, что делать дальше. Кнопка "Hold/Draw" под каждой картой вызывает функцию holdDraw и передает ей число от 0 до 4.
Первый раз, когда щелкают по кнопке, программа изменяет экземпляр клипа так, что отображается рубашка карты. Если игрок щелкает по ней еще раз, карта возвращается в исходное состояние. Игрок может сколько угодно переворачивать карты, прежде чем щелкнуть по кнопке Draw.
В массиве hold будет находиться значение true, если игрок хочет оставить соответствующую карту, и false, если хочет ее заменить.
// Переворачиваем карту, предназначенную для замены,
function
holdDraw(cardNum) {
// Переворачиваем карту, которая находится среди тех,
// которые игрок хочет оставить,
if
(hold[cardNum]) {
_root[
"card"
+
cardNum].gotoAndStop(
"back"
);
hold[cardNum]
=
false
;
// Если карта перевернута еще раз, оставляем ее.
}
else
{
_root[
"card"
+
cardNum].gotoAndStop(cards[cardNum]);
hold[cardNum]
=
true
;
}
}
Когда игрок щелкает по кнопке "Draw", функция secondDraw заменяет те карты, для которых в массиве hold значения были равны false. Затем вызывается функция showCards, чтобы изменения были отражены на экране.
Затем программа с помощью функции handvalue определяет, какой расклад имеется у игрока. Ценность расклада передается функции winning, которая рассчитывает, какую сумму следует добавить к величине cash (сумме наличных). Переменная resultsDisplay используется для отображения этих значений на экране.
// Заменяем карты и определяем выигрыш,
function
secondDraw() {
// Заменяем карты,
for
(i
=
0
; i
<
5
; i
+
+
) {
if
(!hold[i]
>
{
cards[i]
=
deck.pop();
showCards();
// Определяем, что на руках у игрока.
handVal
=
handValue(cards);
// Расчитываем сумму выигрыша.
winAmt
=
winning(handVal);
resultsDisplay
=
handVal
+
": "
+
winAmt;
// Добавляем сумму выигрыша к имеющейся сумме наличных,
cash
+
=
winAmt;
showCash();
gotoAndPlay(
"done"
);
}
}
}
Прежде чем перейти к рассмотрению функции handvalue, необходимо создать функцию compareHands. Функция handvalue сортирует карты на руках у игрока по возрастанию. Программа Flash ничего не знает о колоде игральных карт, так что вам придется "научить" ее распознавать сочетания покера.
Функция compareHands берет две карты и сравнивает их. Для каждой карты из символьной строки она выбирает первый и второй символы, то есть игнорирует нулевой символ. Таким образом, карта "с7" становится "7", а "с13" – "13".
Затем функция возвращает один из трех вариантов ответов: – 1 – первая карта меньше по достоинству второй карты, 0 – карты одинакового достоинства, и 1 – ранг первой карты на единицу больше ранга второй.
Эта функция необходима для команды sort, использующейся в функции handvalue. Если для сортировки не будет специальной функции, программа попытается отсортировать массив hand по алфавиту, то есть все трефы будут расположены перед бубнами, так как трефовая масть начинается с буквы "с", а бубновая – с "d". А вам нужно, чтобы карты были отсортированы в соответствии с их рангом.
// Эта функция используется командой сортировки для определения,
// какие карты идут первыми,
function
compareHands(a, b) {
// Получаем ранг карты.
numa
=
Number(a.substr(
1
,
2
));
numb
=
Number(b.substr(
1
,
2
));
// Возвращаем - 1, 0 или 1 в зависимости
//от результата сравнения,
if
(numa
<
numb)
return
(
-
1
);
if
(numa
=
=
numb)
return
(
0
);
if
(numa
>
numb)
return
(
1
);
}