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