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

         

Рассмотрение сценария 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.



Содержание раздела