PetriNetwork
1.0.0
PetriNetwork - библиотека на ActionScript 3, моделирующая функционирование сети Петри. Разработана для создания интерактивной Flash-анимации в обучающей среде Гипертест
Сеть Петри представляет собой двудольный ориентированный мультиграф, состоящий из вершин двух типов — позиций и переходов, соединённых между собой дугами. Вершины одного типа не могут быть соединены непосредственно. В позициях могут размещаться метки (маркеры), способные перемещаться по сети.
Событием называют срабатывание перехода, при котором метки из входных позиций этого перехода перемещаются в выходные позиции. События происходят мгновенно, либо разновременно, при выполнении некоторых условий.
import PetriNetManager.State;
import PetriNetManager.StateTransition;
import PetriNetManager.ActionResult;
import PetriNetManager.SceneManager;
import PetriNetManager.StatesUpdateEventHandler;
import flash.display.DisplayObject;var sceneMgr = new SceneManager();var sett:Object = {
//Номера позиций
states: [1,2,3,4,5],
//Количество маркеров в каждой позиции
markers: [1,0,0,0,0],
//Массив объектов переходов
transitions:[{
//номер перехода
id: 1,
//Входные позиции
inputStates:[1],
//Выходные позиции
outputStates:[2]
},
{
id: 2,
inputStates:[2],
outputStates:[3]
},
{
id: 3,
inputStates:[1],
outputStates:[5]
}
]
};sceneMgr.initFromObject(sett);helpBtn.addEventListener(MouseEvent.CLICK, helpBtnInvoke);
function helpBtnInvoke(e:MouseEvent):void {
sceneMgr.makeAction(1);
}function statesChangedHandler(e:StatesUpdateEventHandler){
for each (var s:State in e.States){
trace(s.Id + " " + s.hasMarkers());
}
trace ("-----------------------------");
//Если срабатывает первый переход
if(e.States[0].hasMarkers()){
//переходим на другой фон
bg1.gotoAndStop(1);
//меняем текст в навигационном окне
curStr = "Зайдите в меню HELP или нажмите CTRL+SHIFT+D";
}
if(e.States[1].hasMarkers()){
bg1.gotoAndStop(2);
curStr = "Выберите пункт Default Keymap Reference";
}
if(e.States[2].hasMarkers()){
bg1.gotoAndStop(3);
curStr = "Список со всеми горячими клавишами";
}
if(e.States[4].hasMarkers()){
bg1.gotoAndStop(4);
curStr = "Форма поиска команды";
}
}
sceneMgr.addEventListener(StatesUpdateEventHandler.STATES_UPDATE_EVENT, statesChangedHandler); sceneMgr.initFromJson(net1.json);