Игра в очко, или двадцать одно
С помощью набора правил, следующая функция определяет победителя. В случае выигрыша игрока не только корректируется сумма наличных, но и определяется значение переменной 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
<
dealerHand.length; i
+
+
) {
_root[
"dealer"
+
i.gotoAndStop(
1
);
}
for
(i
=
0
; i
<
playerHand.length; i
+
+
) {
_root[
"player"
+
i].gotoAndStop(
1
);
}
}
К сведению
Основная временная шкала этого ролика – самая сложная из всех игр, рассмотренных в этой книге. Поэтому важно просмотреть ролик на Web-сайте, чтобы получить четкое представление о том, что и где расположено.
Также необходимо создать текстовые поля, в которых будут отображаться сумма очков игрока и раздающего, ставка, сумма наличных и результат.
Другие возможности
Эта игра очень хороша для изучения языка ActionScript, но она разочарует игроков в двадцать одно, играющих на деньги. Поэтому для хороших ActionScript-программистов далее представлено руководство, как добавить некоторые возможности этой игры, которые были опущены.
Легче всего добавить возможность раздачи только двух карт. Для этого нужно создать кнопку Double (Удваивание ставки) в кадре с меткой "Player". Когда игрок щелкнет по ней, ему дадут еще одну карту, ставка еще раз будет вычтена из суммы наличных денег, и игра перейдет к раздающему. Однако прежде следует убедиться, что игрок не взял какие-либо дополнительные карты, поскольку такая раздача возможна только тогда, когда у игрока на руках первые две карты.
Возможность страхования создать немного сложнее, так как при этом надо написать еше одну "ветвь" программы. Страхование возникает тогда, когда раздающему показывается туз. В этом случае игрок может застраховаться от того, что у раздающего будет 21, на сумму, обычно равную ставке. Если было взято страхование, и у раздающего 21 очко, игра заканчивается. Игрок теряет исходную ставку, но получает страховую сумму.
Разделение – сложное дополнение к игре. Если у игрока две карты одного достоинства, например две девятки, тогда ему может быть разрешено разделить карты на два расклада, каждый из которых будет начинаться с девятки. Следовательно, чтобы можно было хранить карты игрока в одном массиве playerHand, вы должны создать массив из массивов. В большинстве случаев в таком массиве playerHand содержится один массив, который отражает расклад на одной руке. Если игрок разделит карты, то в массиве будут содержаться два массива. Игроку обычно позволяется разделять карты несколько раз, таким образом, в массиве playerHand может содержаться три, четыре и более массивов. Затем нужно сыграть с каждым раскладом игрока. Вы понимаете, насколько это усложняет каждую часть игры. Игрок может выиграть, проиграть или сыграть в ничью по нескольким или всем своим раскладам.