Пособие по написанию WAP-сайтов

         

Отображение результата «вращения барабанов» игорного автомата



Рисунок 23.2. Отображение результата «вращения барабанов» игорного автомата




Приглашение пользователю на «вращение барабанов» игорного автомата



Рисунок 23.1. Приглашение пользователю на «вращение барабанов» игорного автомата




Рассмотрение приложения blotMachme



Рассмотрение приложения blotMachme

При запуске приложения SlotMachine WML-страница SlotMachine.wml выводит наэкран приглашение пользователю начать игру. Чтобы реализовать игорный автомат, приложение задействует переменные, которые соответствуют трем рядампо три колонки. Для ссылки на переменные в программном коде используютсяимена rlcl, rlc2, rlc3 и так далее. Вывод на экран значений переменных выполняется в виде таблицы размером три на три. WML-страница SlotMachine.wml реализуется с помощью следующего программного кода:

&lt?xml version="1.0"?&gt &lt!DOCTYPE wml PUBLIC "-//WAPFORUM//DTD WML 1.1//EN" "http://www.wapforum.org/DTD/wml_1.1.xml"&gt

&ltwml&gt

&lthead&gt

&ltmeta http-equiv="Cache-Control" content="max-age=0" forua="true"/&gt

&lt/head&gt

&ltcard id="SlotMachine"&gt

&ltonevent type="ontimer"&gt

&ltgo href="#Init" /&gt

&lt/onevent&gt

&lttimer name="InitTime" value="600" /&gt

&ltp align="center" mode="nowrap"&gt



Slot Machine&ltbr/&gt

&lttable align="center" columns="5"&gt

&lttr&gt

&lttd&gt&lt/td&gt &lttd&gt&ltimg alt="" src="" localsrc= "minus" /&gt&lt/td&gt &lttd&gt&ltimg alt="" src="" localsrc= "minus" /&gt&lt/td&gt &lttd&gt&ltimg alt="" src="" localsrc= "minus" /&gt&lt/td&gt &lttd> &lt/td&gt

&lt/tr&gt

&lttr&gt

&lttd&gt=&lt/td&gt &lttd&gt&ltimg alt="" src="" localsrc= "minus" /&gt&lt/td&gt &lttd&gt&ltimg alt="" src="" localsrc= "minus" /&gt&lt/td&gt &lttd&gt&ltimg alt="" src="" localsrc= "minus" /&gt&lt/td&gt &lttd&gt=&lt/td&gt




&lt/tr&gt

&lttr&gt

&lttd> &lt/td&gt &lttd&gt&ltimg alt="" src="" localsrc= "minus" /&gt&lt/td&gt &lttd&gt&ltimg alt="" src="" localsrc= "minus" /&gt&lt/td&gt &lttd&gt&ltimg alt="" src="" localsrc= "minus" /&gt&lt/td&gt &lttd> &lt/td&gt

&lt/tr&gt

&lt/table&gt

&ltdo type="accept" label="Start"&gt

&ltgo href="#Init" /&gt

&lt/do&gt

&lt/p&gt

&lt/card&gt

&ltcard id="Init"&gt

&ltonevent type="onenterforward"&gt

&ltrefresh&gt

&ltsetvar name="r1c1" value="minus" /&gt &ltsetvar name="r1c2" value="minus" /&gt &ltsetvar name="r1c3" value="minus" /&gt

&ltsetvar name="r2c1" value="dollarsign" /&gt &ltsetvar name="r2c2" value="dollarsign" /&gt &ltsetvar name="r2c3" value="dollarsign" /&gt

&ltsetvar name="r3c1" value="minus" /&gt &ltsetvar name="r3c2" value="minus" /&gt &ltsetvar name="r3c3" value="minus" /&gt

&ltsetvar name="cash" value="100" /&gt

&ltsetvar name="LoopCounter" value="0" /&gt

&ltsetvar name="SpinTime" value="1" /&gt

&lt/refresh&gt

&lt/onevent&gt

&ltp align="center" mode="nowrap"&gt

Slot Machine&ltbr/&gt

&lttable align="center" columns="5"&gt

&lttr&gt

&lttd> &lt/td&gt &lttd&gt&ltimg alt="" src="" localsrc= "$(r1c1)" /&gt&lt/td&gt &lttd&gt&ltimg alt="" src="" localsrc= "$(r1c2)" /&gt&lt/td&gt &lttd&gt&ltimg alt="" src="" localsrc= "$(r1c3)" /&gt&lt/td&gt &lttd> &lt/td&gt



&lt/tr&gt

&lttr&gt

&lttd&gt=&lt/td&gt &lttd&gt&ltimg alt="" src="" localsrc= "$(r2c1)" /&gt&lt/td&gt &lttd&gt&ltimg alt="" src="" localsrc= "$(r2c2)" /&gt&lt/td&gt &lttd&gt&ltimg alt="" src="" localsrc= "$(r2c3)" /&gt&lt/td&gt &lttd&gt=&lt/td&gt

&lt/tr&gt

&lttr&gt

&lttd> &lt/td&gt &lttd&gt&ltimg alt="" src="" localsrc= "$(r3c1)" /&gt&lt/td&gt &lttd&gt&ltimg alt="" src="" localsrc= "$(r3c2)" /&gt&lt/td&gt &lttd&gt&ltimg alt="" src="" localsrc= "$(r3c3)" /&gt&lt/td&gt &lttd> &lt/td&gt

&lt/tr&gt

&lt/table&gt

$$$(cash)

&ltdo type="accept" label="Spin"&gt

&ltgo href="SlotMachineSpin.wml" /&gt

&lt/do&gt

&lt/p&gt

&lt/card&gt

&lt/wml&gt

Первые два элемента WML-страницы сообщают WAP-браузерам версию WAP-спецификации, которую поддерживает приложение. В данном случае WML-страница совместима с XML 1.0 и описанием типа документа (DTD) версии 1.1, разработанным ассоциацией WAP Forum. Любая WML-страница, размещаемаяпосле информации о версии, начинается с тега <WML>. В конце каждой WML-страницы должен находиться соответствующий тег </WML>, который завершаетэлементы WML-страницы. Теги <HEAD> и </HEAD>, располагающиеся после тега<WML>, позволяют указывать данные о WML-странице, включая метаданные и информацию управляющую доступом

Элемент <meta> позволяет определять для WML-страницы метаинформацию. Внашем случае параметр http~equiv=Cache-Control сообщает WAP-браузеру, чтоданная часть метаинформации относится к системе кэширования памяти.


Аналогично, параметр content=max-age= o сообщает браузеру, что максимальное время, в течение которого должно выполняться кэширование WML-страницы, равнонулю секунд; то есть, браузер должен не запоминать, а повторно загружать данные с сервера каждый раз, когда поступает запрос. Для данной книги нулевоезначение было выбрано, чтобы помочь читателю в разработке программы. Привыборе нулевого значения каждый раз, когда происходит изменение, это изменение передается на телефон. В реально эксплуатируемом приложении статическое меню, подобное рассматриваемому здесь, по-видимому, должно использовать интервал хранения, установленный по умолчанию, равным 30 дням. Наконец, параметр forua="true" определяет, что данное значение Cache-Controlпредназначено для телефона и не должно удаляться каким-либо промежуточнымагентом.

При запуске приложения выполняется ветвление программного кода и переходна локальную карту Init, которая присваивает символам верхнего и нижнего ряда знаки минуса, а символам среднего ряда - знаки доллара. Кроме того, для отображения в таблице пиктограмм, таких как бубны и черви, карта Init используетв элементе <img> опцию localsrc. С помощью опции localsrc приложение получает пиктограммы из ПЗУ телефона.

Когда пользователь выбирает кнопку Spin (Вращение), приложение вызываетWML-страницу SlotMachineSpin.wml, со следующим программным кодом:

&lt?xml version="1.0"?&gt &lt!DOCTYPE wml PUBLIC "-//WAPFORUM//DTD WML 1.1//EN" "http://www.wapforum.org/DTD/wml_1.1.xml"&gt

&ltwml&gt

&lthead&gt

&ltmeta http-equiv="Cache-Control" content="max-age=0" forua="true"/&gt

&lt/head&gt

&ltcard id="Spin"&gt

&ltonevent type="ontimer"&gt

&ltgo href="SlotMachine.wmls#Spin()" /&gt

&lt/onevent&gt

&lttimer name="SpinTime" value="1" /&gt

&ltp align="center" mode="nowrap"&gt



Slot Machine&ltbr/&gt

&lttable align="center" columns="5"&gt

&lttr&gt

&lttd> &lt/td&gt &lttd&gt&ltimg alt="" src="" localsrc= "$(r1c1)" /&gt&lt/td&gt &lttd&gt&ltimg alt="" src="" localsrc= "$(r1c2)" /&gt&lt/td&gt &lttd&gt&ltimg alt="" src="" localsrc= "$(r1c3)" /&gt&lt/td&gt &lttd> &lt/td&gt

&lt/tr&gt

&lttr&gt

&lttd&gt=&lt/td&gt &lttd&gt&ltimg alt="" src="" localsrc= "$(r2c1)" /&gt&lt/td&gt &lttd&gt&ltimg alt="" src="" localsrc= "$(r2c2)" /&gt&lt/td&gt &lttd&gt&ltimg alt="" src="" localsrc= "$(r2c3)" /&gt&lt/td&gt &lttd&gt=&lt/td&gt

&lt/tr&gt

&lttr&gt

&lttd> &lt/td&gt &lttd&gt&ltimg alt="" src="" localsrc= "$(r3c1)" /&gt&lt/td&gt &lttd&gt&ltimg alt="" src="" localsrc= "$(r3c2)" /&gt&lt/td&gt &lttd&gt&ltimg alt="" src="" localsrc= "$(r3c3)" /&gt&lt/td&gt &lttd> &lt/td&gt

&lt/tr&gt

&lt/table&gt

$$$(cash)

&lt/p&gt

&lt/card&gt

&lt/wml&gt

Чтобы выполнить операцию «вращения барабанов» игорного автомата, WML- страница использует таймер, который заставляет приложение делать паузу в долю секунды между вызовами функции Spin. Каждый раз, когда срабатывает таймер, WML-страница вызывает функцию Spin, находящуюся в файлеSlotMachine.wmls в виде программного кода WMLScript. Для определения значенийпеременных rlcl, rlc2 и так далее, функция Spin использует случайные числа.После завершения функцией обработки, для которой она предназначена, WML-страница выводит на экран новые установки.


Рассмотрение сценария SlotMachine.wmls >



Рассмотрение сценария SlotMachine.wmls >

Когда пользователь выбирает кнопку Spin (Вращение), приложение SlotMachineвызывает функцию Spin, находящуюся в файле сценария SlotMachine.wmls. Функция Spin, в свою очередь, выполняет обработку, обеспечивающую перемещениеэлементов во время «вращения барабанов». Для моделирования вращающихсябарабанов игорного автомата, приложение использует цикл, в котором текущеесодержимое экрана вращается без отображения, а вращение девяти новых случайных символов выводится на экран. После завершения «вращения барабанов»игорного автомата, WML-страница вызывает функцию WinCash, находящуюся вовтором WMLScript-файле, имя которого SlotMachine2.wmls. СценарийSlotMachine.wmls реализуется с помощью следующего программного кода:

use url SlotMachine2 "SlotMachine2.wmls";

extern function Spin()

{

var Loop = WMLBrowser.getVar("LoopCounter");

if (Loop == 0)

{ Loop = 1;

var cash = WMLBrowser.getVar("cash"); cash = Lang.parseInt(cash); cash -= 10; cash = String.format("%1.1d", cash); WMLBrowser.setVar("cash", cash);

var Dummy = Lang.seed("InitTime");

WMLBrowser.setVar("r1c1", "blankhalf"); WMLBrowser.setVar("r1c2", "blankhalf"); WMLBrowser.setVar("r1c3", "blankhalf");

WMLBrowser.setVar("r2c1", "blankhalf"); WMLBrowser.setVar("r2c2", "blankhalf"); WMLBrowser.setVar("r2c3", "blankhalf");

WMLBrowser.setVar("r3c1", "blankhalf"); WMLBrowser.setVar("r3c2", "blankhalf"); WMLBrowser.setVar("r3c3", "blankhalf");

WMLBrowser.setVar("SpinTime", 3);

}

else if (Loop == 1)

{ Loop = 2;

WMLBrowser.setVar("r1c1", SlotMachine2#GetSymbol()); WMLBrowser.setVar("r1c2", SlotMachine2#GetSymbol()); WMLBrowser.setVar("r1c3", SlotMachine2#GetSymbol());

WMLBrowser.setVar("SpinTime", 3); }




else if (Loop == 2)

{ Loop = 3;

WMLBrowser.setVar("r2c1", WMLBrowser.getVar("r1c1")); WMLBrowser.setVar("r2c2", WMLBrowser.getVar("r1c2")); WMLBrowser.setVar("r2c3", WMLBrowser.getVar("r1c3"));

WMLBrowser.setVar("r1c1", SlotMachine2#GetSymbol()); WMLBrowser.setVar("r1c2", SlotMachine2#GetSymbol()); WMLBrowser.setVar("r1c3", SlotMachine2#GetSymbol());

WMLBrowser.setVar("SpinTime", 3);

}

else if (Loop == 3)

{ Loop = 4;

WMLBrowser.setVar("r3c1", WMLBrowser.getVar("r2c1")); WMLBrowser.setVar("r3c2", WMLBrowser.getVar("r2c2")); WMLBrowser.setVar("r3c3", WMLBrowser.getVar("r2c3"));

WMLBrowser.setVar("r2c1", WMLBrowser.getVar("r1c1")); WMLBrowser.setVar("r2c2", WMLBrowser.getVar("r1c2")); WMLBrowser.setVar("r2c3", WMLBrowser.getVar("r1c3"));

WMLBrowser.setVar("r1c1", SlotMachine2#GetSymbol()); WMLBrowser.setVar("r1c2", SlotMachine2#GetSymbol()); WMLBrowser.setVar("r1c3", SlotMachine2#GetSymbol());

WMLBrowser.setVar("SpinTime", 3);

}

else if (Loop == 4)

{ Loop = 5;

WMLBrowser.setVar("r3c1", WMLBrowser.getVar("r2c1")); WMLBrowser.setVar("r3c2", WMLBrowser.getVar("r2c2")); WMLBrowser.setVar("r3c3", WMLBrowser.getVar("r2c3"));

WMLBrowser.setVar("r2c1", WMLBrowser.getVar("r1c1")); WMLBrowser.setVar("r2c2", WMLBrowser.getVar("r1c2")); WMLBrowser.setVar("r2c3", WMLBrowser.getVar("r1c3"));

WMLBrowser.setVar("r1c1", SlotMachine2#GetSymbol()); WMLBrowser.setVar("r1c2", SlotMachine2#GetSymbol()); WMLBrowser.setVar("r1c3", SlotMachine2#GetSymbol());

WMLBrowser.setVar("SpinTime", 3);

}

else if (Loop == 5)

{ Loop = 6;

WMLBrowser.setVar("r3c1", WMLBrowser.getVar("r2c1")); WMLBrowser.setVar("r3c2", WMLBrowser.getVar("r2c2")); WMLBrowser.setVar("r3c3", WMLBrowser.getVar("r2c3"));



WMLBrowser.setVar("r2c1", WMLBrowser.getVar("r1c1")); WMLBrowser.setVar("r2c2", WMLBrowser.getVar("r1c2")); WMLBrowser.setVar("r2c3", WMLBrowser.getVar("r1c3"));

WMLBrowser.setVar("r1c1", SlotMachine2#GetSymbol()); WMLBrowser.setVar("r1c2", SlotMachine2#GetSymbol()); WMLBrowser.setVar("r1c3", SlotMachine2#GetSymbol());

WMLBrowser.setVar("SpinTime", 1);

}

else if (Loop == 6)

{

SlotMachine2#WinCash();

}

WMLBrowser.setVar("LoopCounter", Loop);

WMLBrowser.refresh(); }

Как вы уже знаете, в настоящее время WMLScript- код необходимо размещать вотдельном файле, отличном от файла страницы WML-карт и предварять имякаждой функции ключевым словом extern. Первая строка сценария сообщаетбраузеру о том, что сценарий использует функции, находящиеся в WMLScript-файле SlotMachine2.wmls. Затем программа вызывает функцию WMLBrowsr. getVarдля выборки значения глобальной переменной LoopCounter, используемойсценарием для подсчета количества «вращений барабанов» игорного автомата.Далее программный код содержит серию ветвлений if-else, которыевыполняют обработку, характерную для текущего цикла. Например, в первомцикле должно выполняться вращение только одного набора символов, тогда какво втором цикле должно выполняться вращение двух наборов и так далее.

Для выборки и присвоения переменным символов приложение активизируетфункции WMLBrowser. getVar и WMLBrowser. setVar. Чтобы извлечь новые символы, сценарий вызывает функцию GetSymbol, находящуюся в файлеSlotMachine2.wmls. Для получения символа функция GetSymbol использует генератор случайных чисел.

В начале каждого цикла таймеру присваивается значение SpinTime. Это значениезаменяет используемую по умолчанию величину, которая определяется в элементе <timer> из файла SlotMachineSpin.wml. В данном случае с помощью переменной SpinTime устанавливается задержка в 0.3 секунды.

extern function GetSymbol()

{



var temp = Lang.random(10);

if (temp < 4) return "blankhalf"; else if (temp < 7) return "heart"; else if (temp < 9) return "gem"; else return "dollarsign";

}

extern function WinCash()

{

var cash = WMLBrowser.getVar("cash"); cash = Lang.parseInt(cash);

var r2c1 = WMLBrowser.getVar("r2c1"); var r2c2 = WMLBrowser.getVar("r2c2"); var r2c3 = WMLBrowser.getVar("r2c3");

if ((r2c1 == "heart") && (r2c2 == "heart") && (r2c3 == "heart")) cash += 50; else if ((r2c1 == "heart") && (r2c3 == "heart")) cash += 25; else if ((r2c1 == "heart") (r2c3 == "heart")) cash += 10;

else if ((r2c1 == "gem") && (r2c2 == "gem") && (r2c3 == "gem")) cash += 250;

else if ((r2c1 == "dollarsign") && (r2c2 == "dollarsign") && (r2c3 == "dollarsign")) cash += 1000;

if (cash < 10) { Dialogs.alert("Game Over!"); WMLBrowser.go("SlotMachine.wml"); } else { cash = String.format("%1.1d", cash); WMLBrowser.setVar("cash", cash);

WMLBrowser.go("SlotMachineSpinAgain.wml"); }

}

После завершения «вращения барабанов» игорного автомата сценарий вызываетфункцию winCash, находящуюся в файле SlotMachine2.wmls. Функция winCash устанавливает факт выигрыша, и если таковой имеется, обновляет сумму выигрыша пользователя. Наконец, приложение вызывает функцию WMLBrowser. refreshдля обновления информации, отображаемой на экране. Файл SlotMachine2,wmlsсодержит следующий программный код:

&lt?xml version="1.0"?&gt &lt!DOCTYPE wml PUBLIC "-//WAPFORUM//DTD WML 1.1//EN" "http://www.wapforum.org/DTD/wml_1.1.xml"&gt

&ltwml&gt

&lthead&gt

&ltmeta http-equiv="Cache-Control" content="max-age=0" forua="true"/&gt



&lt/head&gt

&ltcard id="SpinAgain"&gt

&ltonevent type="onenterforward"&gt

&ltrefresh&gt

&ltsetvar name="LoopCounter" value="0" /&gt

&ltsetvar name="SpinTime" value="1" /&gt

&lt/refresh&gt

&lt/onevent&gt

&ltp align="center" mode="nowrap"&gt

Slot Machine&ltbr/&gt

&lttable align="center" columns="5"&gt

&lttr&gt

&lttd> &lt/td&gt &lttd&gt&ltimg alt="" src="" localsrc= "$(r1c1)" /&gt&lt/td&gt &lttd&gt&ltimg alt="" src="" localsrc= "$(r1c2)" /&gt&lt/td&gt &lttd&gt&ltimg alt="" src="" localsrc= "$(r1c3)" /&gt&lt/td&gt &lttd> &lt/td&gt

&lt/tr&gt

&lttr&gt

&lttd&gt=&lt/td&gt &lttd&gt&ltimg alt="" src="" localsrc= "$(r2c1)" /&gt&lt/td&gt &lttd&gt&ltimg alt="" src="" localsrc= "$(r2c2)" /&gt&lt/td&gt &lttd&gt&ltimg alt="" src="" localsrc= "$(r2c3)" /&gt&lt/td&gt &lttd&gt=&lt/td&gt

&lt/tr&gt

&lttr&gt

&lttd> &lt/td&gt &lttd&gt&ltimg alt="" src="" localsrc= "$(r3c1)" /&gt&lt/td&gt &lttd&gt&ltimg alt="" src="" localsrc= "$(r3c2)" /&gt&lt/td&gt &lttd&gt&ltimg alt="" src="" localsrc= "$(r3c3)" /&gt&lt/td&gt &lttd> &lt/td&gt

&lt/tr&gt

&lt/table&gt

$$$(cash)

&ltdo type="accept" label="Spin"&gt

&ltgo href="SlotMachineSpin.wml" /&gt

&lt/do&gt

&lt/p&gt

&lt/card&gt

&lt/wml&gt

Как вы можете видеть, WML-страница сбрасывает счетчик циклов и таймер в исходное состояние, затем отображает текущие установки игорного автомата и остаток игровых денег. При выборе пользователем опции Spin (Вращение), программа загружает ранее рассмотренную WML-страницу SlotMachineSpin.wml.