broadcast chan up[N], down[N], left[N], right[N], start, leftRed, rightRed;
-chan reg;
+chan reg, finish;
bool grid[6][6];</declaration>\r
<template>\r
<transition>\r
<source ref="id2"/>\r
<target ref="id2"/>\r
- <label kind="guard" x="-288" y="-68">x>0 && !grid[x-1][y]</label>\r
- <label kind="synchronisation" x="-288" y="-51">down[id]!</label>\r
- <label kind="assignment" x="-288" y="-34">x:=x-1</label>\r
+ <label kind="guard" x="-280" y="8">x>0 && !grid[x-1][y]</label>\r
+ <label kind="synchronisation" x="-246" y="102">down[id]!</label>\r
+ <label kind="assignment" x="-340" y="34">grid[x+length-1][y]:=false,
+grid[x-1][y]:=true,
+x:=x-1</label>\r
<nail x="-306" y="8"/>\r
<nail x="-136" y="0"/>\r
</transition>\r
<transition>\r
<source ref="id2"/>\r
<target ref="id2"/>\r
- <label kind="guard" x="-306" y="-204">x+length < 6 && !grid[x+length][y]</label>\r
- <label kind="synchronisation" x="-314" y="-153">up[id]!</label>\r
- <label kind="assignment" x="-306" y="-178">x:=x+1</label>\r
+ <label kind="guard" x="-306" y="-263">x+length < 6 && !grid[x+length][y]</label>\r
+ <label kind="synchronisation" x="-221" y="-204">up[id]!</label>\r
+ <label kind="assignment" x="-331" y="-229">grid[x][y]:=false,
+grid[x+length][y]:=true,
+x:=x+1</label>\r
<nail x="-323" y="-102"/>\r
<nail x="-195" y="-178"/>\r
<nail x="-110" y="-102"/>\r
<transition>\r
<source ref="id5"/>\r
<target ref="id5"/>\r
- <label kind="guard" x="-135" y="8">y>0 && !grid[x][y-1]</label>\r
- <label kind="synchronisation" x="-135" y="25">left[id]!</label>\r
- <label kind="assignment" x="-135" y="42">y:=y-1</label>\r
+ <label kind="guard" x="-170" y="153">y>0 && !grid[x][y-1]</label>\r
+ <label kind="synchronisation" x="-119" y="119">left[id]!</label>\r
+ <label kind="assignment" x="-221" y="51">grid[x][y-1]:=true,
+grid[x][y+length-1]:=true,
+y:=y-1</label>\r
<nail x="-153" y="42"/>\r
<nail x="-34" y="42"/>\r
</transition>\r
<transition>\r
<source ref="id5"/>\r
<target ref="id5"/>\r
- <label kind="guard" x="-160" y="-102">y+length < 6 && !grid[x][y+length]</label>\r
- <label kind="synchronisation" x="-160" y="-85">right[id]!</label>\r
- <label kind="assignment" x="-160" y="-68">y:=y+1</label>\r
+ <label kind="guard" x="-204" y="-221">y+length < 6 && !grid[x][y+length]</label>\r
+ <label kind="synchronisation" x="-127" y="-195">right[id]!</label>\r
+ <label kind="assignment" x="-263" y="-161">grid[x][y+length]:=true,
+grid[x][y]:=false,
+y:=y+1</label>\r
<nail x="-178" y="-102"/>\r
<nail x="-34" y="-102"/>\r
</transition>\r
</template>\r
<template>\r
<name>Player</name>\r
- <declaration>int[0,N] registered;</declaration>\r
- <location id="id6" x="-680" y="-246">\r
+ <declaration>int[0,N] registered;
+bool done = 0;</declaration>\r
+ <location id="id6" x="-493" y="-255">\r
</location>\r
- <location id="id7" x="-799" y="-246">\r
+ <location id="id7" x="-680" y="-246">\r
</location>\r
- <init ref="id7"/>\r
+ <location id="id8" x="-799" y="-246">\r
+ </location>\r
+ <init ref="id8"/>\r
<transition>\r
<source ref="id7"/>\r
<target ref="id6"/>\r
+ <label kind="synchronisation" x="-629" y="-272">finish?</label>\r
+ <label kind="assignment" x="-662" y="-250">done := 1</label>\r
+ </transition>\r
+ <transition>\r
+ <source ref="id8"/>\r
+ <target ref="id7"/>\r
<label kind="guard" x="-781" y="-280">registered == N</label>\r
<label kind="synchronisation" x="-781" y="-263">start!</label>\r
</transition>\r
<transition>\r
- <source ref="id7"/>\r
- <target ref="id7"/>\r
+ <source ref="id8"/>\r
+ <target ref="id8"/>\r
<label kind="synchronisation" x="-875" y="-365">reg?</label>\r
<label kind="assignment" x="-926" y="-382">registered := registered+1</label>\r
<nail x="-892" y="-263"/>\r
grid[x][3] = true;
grid[x+1][3] = true;
}</declaration>\r
- <location id="id8" x="51" y="-59">\r
+ <location id="id9" x="493" y="-51">\r
</location>\r
- <location id="id9" x="-93" y="-68">\r
+ <location id="id10" x="51" y="-59">\r
</location>\r
- <location id="id10" x="-204" y="-68">\r
+ <location id="id11" x="-93" y="-68">\r
+ </location>\r
+ <location id="id12" x="-204" y="-68">\r
<urgent/>\r
</location>\r
- <init ref="id10"/>\r
+ <init ref="id12"/>\r
<transition>\r
- <source ref="id8"/>\r
- <target ref="id8"/>\r
- <label kind="guard" x="-7" y="-42">x > 0 && grid[x-1][3]</label>\r
- <label kind="synchronisation" x="-7" y="-25">leftRed!</label>\r
- <label kind="assignment" x="-7" y="-8">x := x-1, grid[x+1][3] := false, grid[x-1][3] := true</label>\r
+ <source ref="id10"/>\r
+ <target ref="id9"/>\r
+ <label kind="guard" x="416" y="-93">x == 4</label>\r
+ <label kind="synchronisation" x="416" y="-76">finish!</label>\r
+ </transition>\r
+ <transition>\r
+ <source ref="id10"/>\r
+ <target ref="id10"/>\r
+ <label kind="guard" x="0" y="161">x > 0 && grid[x-1][3]</label>\r
+ <label kind="synchronisation" x="25" y="119">leftRed!</label>\r
+ <label kind="assignment" x="-85" y="85">grid[x+1][3]:=false,
+grid[x-1][3]:=true,
+x:=x-1</label>\r
<nail x="-25" y="42"/>\r
<nail x="178" y="51"/>\r
</transition>\r
<transition>\r
- <source ref="id8"/>\r
- <target ref="id8"/>\r
- <label kind="guard" x="1" y="-135">x+2 < 6 && grid[x+2][3]</label>\r
- <label kind="synchronisation" x="1" y="-118">rightRed!</label>\r
- <label kind="assignment" x="1" y="-101">x := x+1, grid[x][3] := false, grid[x+2][3] := true</label>\r
+ <source ref="id10"/>\r
+ <target ref="id10"/>\r
+ <label kind="guard" x="-17" y="-255">x+2 < 6 && grid[x+2][3]</label>\r
+ <label kind="synchronisation" x="25" y="-221">rightRed!</label>\r
+ <label kind="assignment" x="-85" y="-187">grid[x-1][3]:=false,
+grid[x+2][3]:=true,
+x:=x+1</label>\r
<nail x="-17" y="-144"/>\r
<nail x="144" y="-136"/>\r
</transition>\r
<transition>\r
- <source ref="id9"/>\r
- <target ref="id8"/>\r
+ <source ref="id11"/>\r
+ <target ref="id10"/>\r
<label kind="synchronisation" x="-75" y="-80">start?</label>\r
</transition>\r
<transition>\r
- <source ref="id10"/>\r
- <target ref="id9"/>\r
+ <source ref="id12"/>\r
+ <target ref="id11"/>\r
<label kind="synchronisation" x="-186" y="-85">reg!</label>\r
<label kind="assignment" x="-186" y="-68">register()</label>\r
</transition>\r
V5 = VertCar(3, 4, 5, 2);
V6 = VertCar(2, 5, 1, 3);
H7 = HorzCar(2, 6, 3, 4);
-H8 = HorzCar(2, 7, 3, 2);
+H8 = RedCar(7, 2); //RED
V9 = VertCar(3, 8, 0, 0);
HA = HorzCar(2, 9, 1, 0);
VB = VertCar(2, 10, 3, 0);
</system>\r
<queries>\r
+ <query>\r
+ <formula>E<> Player.done == 1\r
+ </formula>\r
+ <comment>\r
+ </comment>\r
+ </query>\r
</queries>\r
</nta>\r