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);
}
}
Функция firstDrawберет пять карт из колоды и помещает их в массив cards,а также создает небольшой массив hold,в котором хранятся имена тех карт, которые игрок хочет оставить.
// Сдаем первые пять карт.
function firstDraw() {
cards = new Array();
for (i=0; i<5; i++) {
cards.push(deck.pop());
}
// Допускаем, что игрок оставляет все карты.
hold = [true, true, true, true, true];
showCards();
}
Для того чтобы преобразовать содержимое массива 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берет две карты и сравнивает их. Для каждой карты из символьной строки она выбирает первый и второй символы, то есть игнорирует нулевой символ. Таким образом, карта c/ становится "7", а «c13» – «13».
Затем функция возвращает один из трех вариантов ответов: -1 – первая карта меньше по достоинству второй карты, 0 – карты одинакового достоинства, и 1 – ранг первой карты на единицу больше ранга второй.
Эта функция необходима для команды sort, использующейся в функции
handValue.Если для сортировки не будет специальной функции, программа попытается отсортировать массив
handпо алфавиту, то есть все трефы будут расположены перед бубнами, так как трефовая масть начинается с буквы "c", а бубновая – с "d". А вам нужно, чтобы карты были отсортированы в соответствии с их рангом.
// Эта функция используется командой сортировки для определения,
Читать дальше
Конец ознакомительного отрывка
Купить книгу