Пособие по написанию 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содержит следующий программный код: <?xml version="1.0"?> <!DOCTYPE wml PUBLIC "-//WAPFORUM//DTD WML 1.1//EN" "http://www.wapforum.org/DTD/wml_1.1.xml"> <wml> <head> <meta http-equiv="Cache-Control" content="max-age=0" forua="true"/> </head> <card id="SpinAgain"> <onevent type="onenterforward"> <refresh> <setvar name="LoopCounter" value="0" /> <setvar name="SpinTime" value="1" /> </refresh> </onevent> <p align="center" mode="nowrap"> Slot Machine<br/> <table align="center" columns="5"> <tr> <td> </td> <td><img alt="" src="" localsrc= "$(r1c1)" /></td> <td><img alt="" src="" localsrc= "$(r1c2)" /></td> <td><img alt="" src="" localsrc= "$(r1c3)" /></td> <td> </td> </tr> <tr> <td>=</td> <td><img alt="" src="" localsrc= "$(r2c1)" /></td> <td><img alt="" src="" localsrc= "$(r2c2)" /></td> <td><img alt="" src="" localsrc= "$(r2c3)" /></td> <td>=</td> </tr> <tr> <td> </td> <td><img alt="" src="" localsrc= "$(r3c1)" /></td> <td><img alt="" src="" localsrc= "$(r3c2)" /></td> <td><img alt="" src="" localsrc= "$(r3c3)" /></td> <td> </td> </tr> </table> $$$(cash) <do type="accept" label="Spin"> <go href="SlotMachineSpin.wml" /> </do> </p> </card> </wml>
Как вы можете видеть, WML-страница сбрасывает счетчик циклов и таймер в исходное состояние, затем отображает текущие установки игорного автомата и остаток игровых денег. При выборе пользователем опции Spin (Вращение), программа загружает ранее рассмотренную WML-страницу SlotMachineSpin.wml.









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