<?xml version="1.0"?>
<?xml-stylesheet type="text/css" href="https://wiki.weizmann.ac.il/playgo/skins/common/feed.css?303"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
		<id>https://wiki.weizmann.ac.il/playgo/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Yaaritn</id>
		<title>WeizmannWiki - User contributions [en]</title>
		<link rel="self" type="application/atom+xml" href="https://wiki.weizmann.ac.il/playgo/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Yaaritn"/>
		<link rel="alternate" type="text/html" href="https://wiki.weizmann.ac.il/playgo/index.php?title=Special:Contributions/Yaaritn"/>
		<updated>2026-06-10T08:24:47Z</updated>
		<subtitle>User contributions</subtitle>
		<generator>MediaWiki 1.22.4</generator>

	<entry>
		<id>https://wiki.weizmann.ac.il/playgo/index.php?title=PlayGo_Feature_List</id>
		<title>PlayGo Feature List</title>
		<link rel="alternate" type="text/html" href="https://wiki.weizmann.ac.il/playgo/index.php?title=PlayGo_Feature_List"/>
				<updated>2014-04-30T15:45:22Z</updated>
		
		<summary type="html">&lt;p&gt;Yaaritn: /* Java API for LSC Creation */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Play-out strategies  ==&lt;br /&gt;
&lt;br /&gt;
LSC specifications or `programs' may be underspecified, since the language allows various kinds of non-determinism. Thus, a special mechanism is needed in order to execute LSC programs. This execution mechanism is generically termed [[Language &amp;amp; Concepts#Play-Out|''play-out'']]. The core of the [[Language &amp;amp; Concepts#Play-Out|play-out]] process is a strategy mechanism that is responsible for choosing the next method to execute. The choice is based on the specification and the current state of the system.&lt;br /&gt;
&lt;br /&gt;
Different kinds of play-out mechanisms may be defined. Each may be viewed as a different operational semantics for LSC.&lt;br /&gt;
&lt;br /&gt;
PlayGo uses a [http://en.wikipedia.org/wiki/Strategy_pattern strategy pattern] to allow the definition, implementation, and use of new, user-defined play-out strategies. It also includes several built-in, pre-defined play-out strategies, which we now describe.&lt;br /&gt;
&lt;br /&gt;
=== Naïve play-out  ===&lt;br /&gt;
&lt;br /&gt;
The ''naïve play-out'' strategy is the simplest one. It arbitrarily chooses a non-violating method from among the current set of methods that are enabled for execution in at least one chart, but which are not violating in any chart.&lt;br /&gt;
&lt;br /&gt;
=== Random play-out  ===&lt;br /&gt;
&lt;br /&gt;
The ''random play-out'' strategy is similar to the naïve play-out strategy. However, it chooses the next method to execute randomly, using a 'seed' number. The user can either choose a constant seed, in which case the same method will be selected in repeated runs, or ask PlayGo to use random seed, thus causing different, random method selection in each run.&lt;br /&gt;
&lt;br /&gt;
=== Interactive play-out  ===&lt;br /&gt;
&lt;br /&gt;
The ''interactive play-out'' strategy allows the user to choose the next method to execute. The user is presented with a dialog that lists all the currently enabled non-violating methods and is expected to select one of them. The selected method is returned to the play-out mechanism for execution.&lt;br /&gt;
&lt;br /&gt;
=== Smart play-out  ===&lt;br /&gt;
&lt;br /&gt;
''Smart play-out'' is a smarter, safer way of choosing the next method to execute. It considers not only the current set of enabled non-violating methods, but also looks ahead and picks up a finite sequence of methods that will lead to a successful (non-violating) [[LSC Reference#Step_and_Superstep|superstep]], if any such sequence exists.&lt;br /&gt;
&lt;br /&gt;
To compute a safe superstep, PlayGo uses model-checking techniques. This is done by challenging the model checker to prove that there is no superstep that can take place without violating the LSC specification. If no such superstep exists, there is no way to proceed. But if there is such a superstep, the model checker provides it as a counter-example. PlayGo uses the counter-example to guide the execution.&lt;br /&gt;
&lt;br /&gt;
Smart play-out is implemented in PlayGo using [http://jtlv.ysaar.net/ JTLV].&lt;br /&gt;
&lt;br /&gt;
Smart play-out was first described in &amp;lt;ref&amp;gt; D. Harel, H. Kugler, R. Marelly and A. Pnueli, &amp;quot;Smart Play-Out of Behavioral Requirements&amp;quot;, Proc. 4th Int. Conf. on Formal Methods in Computer-Aided Design (FMCAD 2002), November 2002, pp. 378-398.&amp;lt;/ref&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Synthesis  ===&lt;br /&gt;
&lt;br /&gt;
Looking one superstep forward, as is done in the smart play-out strategy, may not be enough, because a safe superstep does not guarantee future execution free of dead locks. An adverse environment may be able to cause the system to fail in satisfying the requirements. Thus, PlayGo offers another strategy, based on the technology of ''controller synthesis''. Controller synthesis takes the LSC specification and attempts to compute a controller whose behavior is guaranteed to satisfy the requirements set by the specification. The computed controller is then used to guide the play-out mechanism. For the case where the LSC specification is unrealizable and a controller cannot be synthesized, PlayGo offers a debugging mode termed [[PlayGo Feature List#Counter_play-out|counter play-out]].&lt;br /&gt;
&lt;br /&gt;
Synthesis for LSC was first described in &amp;lt;ref&amp;gt;D. Harel and H. Kugler, “Synthesizing state-based object systems from LSC specifications,” Int. J. Found. Comput. Sci.,vol. 13, no. 1, pp. 5–51, 2002&amp;lt;/ref&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
The variant of LSC synthesis used in PlayGo is described in &amp;lt;ref&amp;gt;S. Maoz and Y. Sa’ar, “Assume-Guarantee Scenarios: Semantics and Synthesis,” Proc. 15th Int. Conf. on Model Driven Engineering Languages and Systems (MoDELS), LNCS 7590, pp. 335-351, Springer, 2012&amp;lt;/ref&amp;gt;. This variant is stronger than previous variants of LSC synthesis, as it supports environment assumptions. It is implemented using [http://jtlv.ysaar.net/ JTLV], following the symbolic fixpoint algorithm described in &amp;lt;ref&amp;gt;N. Piterman, A. Pnueli, and Y. Sa’ar, “Synthesis of Reactive(1) Designs,” in VMCAI, ser. LNCS, vol. 3855. Springer,2006, pp. 364–380.&amp;lt;/ref&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== S2A-BPJ play-out ===&lt;br /&gt;
&lt;br /&gt;
The ''S2A-BPJ play-out'' strategy considers not only the LSC specification but also scenarios written in BPJ. It does that by enclosing the BPJ decision mechanism&lt;br /&gt;
inside an S2A strategy and delegating the decision from S2A&lt;br /&gt;
to BPJ. This way, BPJ b-threads may become aware of S2A&lt;br /&gt;
events. In the other direction, S2A is aware of the BPJ events&lt;br /&gt;
by having a lifeline representing the BPJ environment&lt;br /&gt;
and monitoring relevant events that are carried out by BPJ.&lt;br /&gt;
&lt;br /&gt;
== Counter play-out  ==&lt;br /&gt;
&lt;br /&gt;
An LSC specification may be unrealizable. That is, if an adverse environment can force any possible execution to violate the guarantees that the system needs to satisfy, a controller cannot be synthesized.&lt;br /&gt;
&lt;br /&gt;
Counter play-out is an interactive debugging method for unrealizable LSC specifications. When such a specification is identified, PlayGo generates a controller that plays the role of the environment and lets the engineer play the role of the system. During execution, the former chooses environment moves such that the latter is forced to eventually fail in satisfying the system's requirements. This results in an interactive, guided execution, which can lead to the root causes of unrealizability. The generated controller constitutes a proof that the specification is conflicting and cannot be realized.&lt;br /&gt;
&lt;br /&gt;
Counter play-out is based on a counter strategy, which is computed in PlayGo by solving a Rabin game using a symbolic, fixpoint algorithm. Counter play-out is described in &amp;lt;ref&amp;gt;S. Maoz and Y. Sa’ar, “Counter Play-Out: Executing Unrealizable Scenario-Based Specifications,” to appear in ICSE'13 (2013)&amp;lt;/ref&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Semantic Zoom  ==&lt;br /&gt;
&lt;br /&gt;
Large LSCs are difficult to view and navigate. To address this, PlayGo offers a ''semantic zoom'' feature. It allows one to zoom-in and zoom-out of the chart, based on custom weights on the chart's elements (messages, conditions, etc.).&lt;br /&gt;
&lt;br /&gt;
Zooming in and out reveals and hides chart elements. Hidden elements are replaced with a placeholder, to allows the user to understand the context of the remaining elements. Consecutive placeholders are merged into a single, darker-colored placeholder. Effectively, the user can view the most important elements that fit on the screen, while the placeholders hint at the missing information.&lt;br /&gt;
&lt;br /&gt;
In different contexts, different chart elements may be considered more important than others. Thus, the custom weights of the elements are calculated according to the task at hand (debugging, understanding inter-dependencies, etc.). The user can choose a strategy to use for calculating the weights.&lt;br /&gt;
&lt;br /&gt;
Semantic zoom in PlayGo is described in &amp;lt;ref&amp;gt;M. Gordon and D. Harel, &amp;quot;Semantic Navigation Strategies for Scenario-Based Programming&amp;quot;, Proc. IEEE Symp. on Visual Languages and Human-Centric Computing (VL/HCC 2010), 2010, pp.219-226.&amp;lt;/ref&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
[[Image:ATM.ZoomOut.png|500px]] [[Image:ATM.png]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;font-size: smaller;&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color: rgb(0, 128, 128);&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;font-family: Tahoma;&amp;quot;&amp;gt;Figure 1: On the right, the full LSC. On the left, a zoomed-out view. Note the gray scale placeholders, which hide LSC elements. The darker it is, the more elements it hides.&lt;br /&gt;
&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 The green dotted ellipse marks the most recent placeholder that was added or changed during zoom-out.&lt;br /&gt;
 When zooming in, the last added element is marked with this green dotted ellipse.&amp;lt;span style=&amp;quot;color: rgb(0, 128, 128);&amp;quot;&amp;gt; &amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[http://www.youtube.com/watch?v=dDSszMjanXs Watch a Semantic Zoom demo]&lt;br /&gt;
&lt;br /&gt;
== Natural language play-in  ==&lt;br /&gt;
&lt;br /&gt;
PlayGo supports a number of ways to define LSCs: manual editing, play-in, natural language play-in and show &amp;amp;amp; tell.&lt;br /&gt;
&lt;br /&gt;
Natural language play-in allows the user to create LSCs through a natural language textual interface rather than by drawing the elements or interacting with the system.&lt;br /&gt;
&lt;br /&gt;
The language is controlled and structured English fragment accepted by a CFG parser especially developed for the semantics of LSCs. It allows writing requirements in separate sentences and parsing them into LSCs that can be later executed. Here are two examples of requirements:&lt;br /&gt;
&lt;br /&gt;
#''when the user presses the d button, if the display mode is time, the display mode changes to date, otherwise if the display mode is date, the display mode changes to time''&lt;br /&gt;
#''when the user presses the a button, if the display mode is time, the display mode changes to alarm, otherwise if the display mode is alarm, the display mode changes to chime, otherwise if the display mode is chime, the display mode changes to stopwatch, otherwise if the display mode is stopwatch, the display mode changes to time''&lt;br /&gt;
&lt;br /&gt;
The language is domain-general, and uses the wordnet dictionary &amp;lt;ref&amp;gt; Princeton University &amp;quot;About WordNet.&amp;quot; WordNet. Princeton University. 2010. [http://wordnet.princeton.edu wordnet] &amp;lt;/ref&amp;gt; to decide which part of speech is to be used (e.g., noun, verb, adjective, etc.) and what element in the model matches each word. The user can disambiguate terms where necessary, and the selections are persistent for the model, assuming the writer refers to the same objects / actions using the same words.&lt;br /&gt;
&lt;br /&gt;
Natural language play-in is described in &amp;lt;ref&amp;gt; M. Gordon and D. Harel, &amp;quot;Generating Executable Scenarios from Natural Language&amp;quot;, Proc. 10th Int. Conf. on Comput. Linguistics and Intelligent Text Processing (CICLing'09),  Lecture Notes In Computer Science, vol. 5449. Springer-Verlag, Berlin, Heidelberg, 2009, pp. 456-467.&amp;lt;/ref&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
More about [http://www.weizmann.ac.il/mediawiki/playgo/index.php/How_to_Play-In#Natural_language_play-in How to Play-In with NL].&lt;br /&gt;
&lt;br /&gt;
== Show &amp;amp;amp; tell play-in  ==&lt;br /&gt;
&lt;br /&gt;
Show &amp;amp;amp; Tell is a play-in feature that allows the user to create LSCs through a natural language textual interface combined with the classical play-in technique of interacting with the GUI of the system.&lt;br /&gt;
&lt;br /&gt;
The 'TELL' part is based on natural language play-in; see above.&lt;br /&gt;
&lt;br /&gt;
The 'SHOW' part allows the user to point at or manipulate objects in the GUI or the [[Language &amp;amp; Concepts#System_Model|System Model]] in order to create parts of the LSC. A description of the recorded interaction is first added to the requirements text, and when the user approves it the LSC is created.&lt;br /&gt;
&lt;br /&gt;
The interaction is interpreted according to the action performed by the user and the current parsing state for the entered text at the time of interaction. The user can click on a button and refer to its name, or drag a slider and refer to the drag operation.&lt;br /&gt;
&lt;br /&gt;
For example, if the state of the textual part is &amp;quot;when the user clicks...&amp;quot; and the user clicks the cancel button, the suggested addition to the text will be &amp;quot;the cancel-button&amp;quot;. However, if the state of the text is &amp;quot;when ...&amp;quot;, with the same interaction, the suggested addition to the text will be &amp;quot;the user clicks the cancel-button&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
The parsing is performed online using an active chart parser, and the show &amp;amp;amp; tell algorithm tests possible completions for the incompleted parse and finds the best fit and longest possible addition. If more than one possible addition exists, the user is prompted to choose from a list of the possibilities.&lt;br /&gt;
&lt;br /&gt;
Show &amp;amp;amp; tell is described in &amp;lt;ref&amp;gt;M. Gordon, D. Harel, &amp;quot;Show-and-Tell Play-In: Combining Natural Language with User Interaction for Specifying Behavior&amp;quot;, Proc. IADIS Interfaces and Human Computer Interaction 2011 (IHCI 2011), pp. 360-364.&amp;lt;/ref&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
[http://www.wisdom.weizmann.ac.il/~michalk/Projects/SaT/ More about show &amp;amp;amp; tell]&lt;br /&gt;
&lt;br /&gt;
== Trace exploration and visualization  ==&lt;br /&gt;
&lt;br /&gt;
PlayGo provides ways to explore and visualize traces of LSC executions. A trace log may be generated during play-out and it can then be visually explored using the [http://www.weizmann.ac.il/mediawiki/playgo/index.php/The_Tracer Tracer] and the [http://www.cs.bgu.ac.il/~geraw/SupWebSite/ TraceVis] tools.&lt;br /&gt;
&lt;br /&gt;
The Tracer is described in &amp;lt;ref&amp;gt; S. Maoz and D. Harel, &amp;quot;On Tracing Reactive Systems&amp;quot;, Software and System Modeling (SoSyM), 10(4): 447-468 (2011)&amp;lt;/ref&amp;gt;. TraceVis is described in &amp;lt;ref&amp;gt;N. Eitan, M. Gordon, D. Harel, A. Marron and G. Weiss, &amp;quot;On Visualization and Comprehension of Scenario-Based Programs&amp;quot;, Proc. 19th Int. Conf. on Program Comprehension (ICPC), 2011, pp. 189-192.&amp;lt;/ref&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt; [[Image:Tracer.png|800px|A trace of a pacman game in the Tracer tool]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;font-size: smaller;&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color: rgb(0, 128, 128);&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;font-family: Tahoma;&amp;quot;&amp;gt;Figure 2: A trace of a pacman game in the Tracer tool.&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color: rgb(0, 128, 128);&amp;quot;&amp;gt; &amp;lt;/span&amp;gt; &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Image:TraceVis.png|800px|A trace of a pacman game in the TraceVis]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;font-size: smaller;&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color: rgb(0, 128, 128);&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;font-family: Tahoma;&amp;quot;&amp;gt;Figure 3: A trace of a pacman game in the TraceVis.&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color: rgb(0, 128, 128);&amp;quot;&amp;gt; &amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Scenario inter-dependency visualization  ==&lt;br /&gt;
&lt;br /&gt;
PlayGo provides a graph-based visualization of inter-dependencies between LSCs.&lt;br /&gt;
&lt;br /&gt;
[[Image:SIVExample.png|800px|Scenario inter-dependency visualization]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;font-size: smaller;&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color: rgb(0, 128, 128);&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;font-family: Tahoma;&amp;quot;&amp;gt;Figure 4: Scenario inter-dependency visualization of an ATM model. Dependencies of three types are shown.&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color: rgb(0, 128, 128);&amp;quot;&amp;gt; &amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Each LSC is represented by a node. Edges represent various kinds of inter-dependencies between the LSCs. There are three kinds of inter-dependencies that the graph visualizes:&lt;br /&gt;
&lt;br /&gt;
#Causal edge: A directed edge that represents a message in execution mode in the source LSC being potentially unifiable with a message in monitor mode in the target LSC. This edge type represents the possibility that, during runtime, the source LSC might trigger the target LSC. Causal edges are denoted by brown directed arrows.&lt;br /&gt;
#Sync edge: An undirected edge that represents a message in execution mode in one LSC being potentially unifiable with a message in execution mode in the other. This edge type represents the possibility that two LSCs might have to synchronize their execution. Sync edges are undirected and are denoted by green lines.&lt;br /&gt;
#Shared object edge: An undirected edge that represents that the two LSCs containing lifelines of the same object. Shared object edges are undirected and are denoted by purple lines.&lt;br /&gt;
&lt;br /&gt;
The graph-based visualization of inter-dependencies was presented in &amp;lt;ref&amp;gt;D. Harel and I. Segall, &amp;quot;Visualizing Inter-Dependencies Between Scenarios&amp;quot;, Proc. ACM Symp. on Software Visualization (SOFTVIS'08), 2008, pp. 145-153.&amp;lt;/ref&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Composition  ==&lt;br /&gt;
&lt;br /&gt;
PlayGo supports the notion of object composition in scenario-based specifications. Roughly, in order to deal with object composition, the LSC language is extended with appropriate syntax and semantics that allow the specification and interpretation of scenario hierarchies – trees of scenarios – based on the object composition hierarchy in the underlying model. Object composition for LSC is described in &amp;lt;ref&amp;gt;Y. Atir, D. Harel, A. Kleinbort, and S. Maoz, &amp;quot;Object Composition in Scenario-Based Programming&amp;quot;, FASE 2008, pp. 301-316.&amp;lt;/ref&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Polymorphism  ==&lt;br /&gt;
&lt;br /&gt;
PlayGo supports an extended, polymorphic variant of scenario-based specification. Roughly, lifelines may be marked as symbolic and are labeled with class names rather than specific object names. In this case, the lifeline is not statically bound to a concrete object. Instead, it may dynamically bind, at execution time, to any object of the class or any of its sub classes. This results in a scenario-based behavioral subtyping mechanism.&amp;lt;br&amp;gt; Polymorphism is described in &amp;lt;ref&amp;gt;S. Maoz,   Polymorphic Scenario-Based Specification Models: Semantics and Applications Software and Systems Modeling (SoSyM), 11 (3), 2012, pp. 327-345.&amp;lt;/ref&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Java API for LSC Creation  ==&lt;br /&gt;
&lt;br /&gt;
PlayGo provides a Java API for the purpose of directly coding a non-graphic version of an LSC. Below is a code sample for creating an LSC that describes the basic move of a memory game.&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;code&amp;gt;&amp;lt;big&amp;gt;&amp;lt;span style=&amp;quot;font-size: larger;&amp;quot;&amp;gt;void createMemoryGameMoveLSC()&lt;br /&gt;
 {&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 LSCInteraction memoryGameMoveLSC = memoryGameCollaboration.createLSC(&amp;quot;MemoryGameMove&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 LSCLifeline user = memoryGameMoveLSC.createLSCLifeline&lt;br /&gt;
                        (&amp;quot;User&amp;quot;, &amp;quot;Env&amp;quot;, LifelineType.USER, Binding.STATIC);&lt;br /&gt;
 LSCLifeline mc1Lifeline = memoryGameMoveLSC.createLSCLifeline&lt;br /&gt;
                        (&amp;quot;memoryCard1&amp;quot;, &amp;quot;MemoryCard&amp;quot;, LifelineType.SYSTEM, Binding.DYNAMIC);&lt;br /&gt;
 LSCLifeline mc2Lifeline = memoryGameMoveLSC.createLSCLifeline&lt;br /&gt;
                        (&amp;quot;memoryCard2&amp;quot;, &amp;quot;MemoryCard&amp;quot;, LifelineType.SYSTEM, Binding.DYNAMIC);&lt;br /&gt;
 LSCLifeline memoryPanelLifeline = memoryGameMoveLSC.createLSCLifeline&lt;br /&gt;
                        (&amp;quot;memoryPanel&amp;quot;, &amp;quot;MemoryPanel&amp;quot;, LifelineType.SYSTEM, Binding.STATIC);&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 memoryGameMoveLSC.createLSCMessage(user, mc1Lifeline, &amp;quot;flipUp&amp;quot;, Temperature.Cold, ExecutionKind.MONITORED);&lt;br /&gt;
 memoryGameMoveLSC.createLSCMessage(user, mc2Lifeline, &amp;quot;flipUp&amp;quot;, Temperature.Cold, ExecutionKind.MONITORED);&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 ArrayList&amp;amp;lt;LSCLifeline&amp;amp;gt; conditionLifelines = new ArrayList&amp;amp;lt;LSCLifeline&amp;amp;gt;();&lt;br /&gt;
 conditionLifelines.add(mc1Lifeline);&lt;br /&gt;
 conditionLifelines.add(mc2Lifeline);&lt;br /&gt;
 conditionLifelines.add(memoryPanelLifeline);&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 LSCStateInvariant sync = memoryGameMoveLSC.createLSCSyncConstraint(conditionLifelines);&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 memoryGameMoveLSC.createLSCMessage&lt;br /&gt;
               (memoryPanelLifeline, memoryPanelLifeline, &amp;quot;beep&amp;quot;, Temperature.Hot, ExecutionKind.EXECUTE);&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 LSCStateInvariant condition = memoryGameMoveLSC.createLSCOpaqueCondition&lt;br /&gt;
               (&amp;quot;!memoryCard1.match(memoryCard2)&amp;quot;, conditionLifelines, &amp;quot;!memoryCard1.match(memoryCard2)&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 memoryGameMoveLSC.createLSCMessage(mc1Lifeline, mc1Lifeline, &amp;quot;flipDown&amp;quot;, Temperature.Hot, ExecutionKind.EXECUTE);&lt;br /&gt;
 memoryGameMoveLSC.createLSCMessage(mc2Lifeline, mc2Lifeline, &amp;quot;flipDown&amp;quot;, Temperature.Hot, ExecutionKind.EXECUTE);&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 } &amp;lt;/span&amp;gt;&amp;lt;/big&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This code represents the LSC shown in the figure below:&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Image:LSCExample.png|frame|left|An LSC describing the basic rule of a memory game]]&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt; &amp;lt;br&amp;gt; &amp;lt;br&amp;gt; &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Java API|More about Java API]]&lt;br /&gt;
&lt;br /&gt;
== References  ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;/div&gt;</summary>
		<author><name>Yaaritn</name></author>	</entry>

	<entry>
		<id>https://wiki.weizmann.ac.il/playgo/index.php?title=Baby_Monitor_Specification</id>
		<title>Baby Monitor Specification</title>
		<link rel="alternate" type="text/html" href="https://wiki.weizmann.ac.il/playgo/index.php?title=Baby_Monitor_Specification"/>
				<updated>2014-03-11T13:44:08Z</updated>
		
		<summary type="html">&lt;p&gt;Yaaritn: /* Requirements */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;br&amp;gt; &amp;lt;sub&amp;gt;&amp;lt;/sub&amp;gt;&amp;lt;sup&amp;gt;&amp;lt;/sup&amp;gt;The list below is the Baby Monitor system's requirements in [http://en.wikipedia.org/wiki/Controlled_natural_language controlled English]. These are valid requirements that can be used for [[PlayGo Features List#Natural_Language_Play-in|NL play-in]]. &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Requirements  ==&lt;br /&gt;
&lt;br /&gt;
{| width=&amp;quot;100%&amp;quot; border=&amp;quot;1&amp;quot; align=&amp;quot;left&amp;quot; cellpadding=&amp;quot;1&amp;quot; cellspacing=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;col&amp;quot; width=&amp;quot;10%&amp;quot; | LSC Name&lt;br /&gt;
! scope=&amp;quot;col&amp;quot; width=&amp;quot;50%&amp;quot; | Requirement in Natural Language Text&lt;br /&gt;
! scope=&amp;quot;col&amp;quot; width=&amp;quot;35&amp;quot; | Comments&lt;br /&gt;
! scope=&amp;quot;col&amp;quot; width=&amp;quot;5%&amp;quot; | LSC&lt;br /&gt;
|-&lt;br /&gt;
| Lsc1&lt;br /&gt;
| when the user clicks the increase_temperature_button, the temperature_threshold increases&lt;br /&gt;
| &amp;lt;br&amp;gt;&lt;br /&gt;
| [[Image:NL1.jpg|thumb|left|80x50px|LSC]]&lt;br /&gt;
|-&lt;br /&gt;
| Lsc2&lt;br /&gt;
| when the user clicks the decrease_temperature_button, the temperature_threshold decreases&lt;br /&gt;
|&lt;br /&gt;
| [[Image:NL2.jpg|thumb|left|80x50px|LSC]]&lt;br /&gt;
|-&lt;br /&gt;
| Lsc3&lt;br /&gt;
| when the user clicks a TempChange, the temperature_display color changes to yellow and the temperature_display displays the temperature_threshold value&lt;br /&gt;
|&lt;br /&gt;
| [[Image:NL3.jpg|thumb|left|80x50px|LSC]]&lt;br /&gt;
|-&lt;br /&gt;
| Lsc4&lt;br /&gt;
| when the baby_unit temperature changes, the temperature_display displays the baby_unit temperature and the temperature_display color changes to green&amp;lt;br&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
| [[Image:NL4.jpg|thumb|left|80x50px|LSC]]&lt;br /&gt;
|-&lt;br /&gt;
| Lsc5&lt;br /&gt;
| when the baby_unit temperature changes, if the baby_unit temperature is greater than temperature_threshold, the alert_light state changes to blinking&amp;lt;br&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
| [[Image:NL5.jpg|thumb|left|80x50px|LSC]]&lt;br /&gt;
|-&lt;br /&gt;
| Lsc6&lt;br /&gt;
| when the baby_unit temperature changes, if the baby_unit temperature is greater than temperature_threshold, the mobile_unit beeps&lt;br /&gt;
|&lt;br /&gt;
| [[Image:NL6.jpg|thumb|left|80x50px|LSC]]&lt;br /&gt;
|-&lt;br /&gt;
| Lsc7&lt;br /&gt;
| when the alert_light state changes to blinking, as long as the mobile_unit state is on and the user does not click the reset_alert_button, the alert_light state changes to on and one second elapses and the alert_light state changes to off and two seconds elapse&amp;lt;br&amp;gt;&lt;br /&gt;
| This requirement is not parsed in the current version of the NL play-in&lt;br /&gt;
| [[Image:Lsc7.jpg|thumb|left|LSC]]&lt;br /&gt;
|-&lt;br /&gt;
| Lsc8&lt;br /&gt;
| when the user clicks the baby_unit_power_button, the baby_unit state changes to on&lt;br /&gt;
|&lt;br /&gt;
| [[Image:NL8.jpg|thumb|left|80x50px|LSC]]&lt;br /&gt;
|-&lt;br /&gt;
| Lsc9&lt;br /&gt;
| when the user clicks the mobile_unit_power_button, if the mobile_unit state is off, the mobile_unit state changes to on, otherwise if the mobile_unit state is on, the mobile_unit state changes to off&lt;br /&gt;
|&lt;br /&gt;
| [[Image:NL9.jpg|thumb|left|80x50px|LSC]]&lt;br /&gt;
|-&lt;br /&gt;
| Lsc10&lt;br /&gt;
| when the mobile_unit state changes to on, as long as the mobile_unit state is on, if two seconds have elapsed and the baby_unit does not connect to the mobile_unit, the connection_light color changes to red&lt;br /&gt;
| This requirement is not parsed in the current version of the natural language play-in&lt;br /&gt;
| [[Image:Lsc10.jpg|thumb|left|LSC]]&lt;br /&gt;
|-&lt;br /&gt;
| Lsc11&lt;br /&gt;
| when the baby_unit state changes to on, as long as the mobile_unit state is on, the baby_unit connects to the mobile_unit and two seconds elapse&lt;br /&gt;
|&lt;br /&gt;
| [[Image:NL11.jpg|thumb|left|80x50px|LSC]]&lt;br /&gt;
|-&lt;br /&gt;
| Lsc12&lt;br /&gt;
| when the baby_unit connects to the mobile_unit, the connection_light color changes to green&amp;lt;span class=&amp;quot;Apple-tab-span&amp;quot; style=&amp;quot;white-space:pre&amp;quot;&amp;gt;	&amp;lt;/span&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
| [[Image:NL12.jpg|thumb|left|80x50px|LSC]]&lt;br /&gt;
|-&lt;br /&gt;
| Lsc13&lt;br /&gt;
| when the user clicks the reset_button, the baby_unit resets and the antenna position changes to close and the antenna init and the antenna position changes to open&lt;br /&gt;
|&lt;br /&gt;
| [[Image:NL13.jpg|thumb|left|80x50px|LSC]]&lt;br /&gt;
|-&lt;br /&gt;
| Lsc14&lt;br /&gt;
| when the baby_unit resets, the baby_unit connects to the mobile_unit, the antenna position must be open&lt;br /&gt;
|&lt;br /&gt;
| [[Image:Lsc14.jpg|thumb|left|LSC]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt; &amp;lt;br&amp;gt;&amp;amp;nbsp;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Download the Baby Monitor Example  ==&lt;br /&gt;
&lt;br /&gt;
Below are downloads of the wrist watch final application, as well as of the LSC project that can be opened and modified in PlayGo.&lt;br /&gt;
&lt;br /&gt;
=== Baby Monitor final application (runnable jar)  ===&lt;br /&gt;
&lt;br /&gt;
[[Media:BabyMonitorExampleSwingGUI.zip|Runnable Baby Monitor with Swing GUI]] &amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
To run the baby monitor, simply extract the downloaded zip and double click the jar file.&lt;br /&gt;
&lt;br /&gt;
=== Baby Monitor LSC project  ===&lt;br /&gt;
&lt;br /&gt;
[[Media:BabyMonitorSwing.zip|The Baby Monitor LSC Project (for development purposes)]] &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Installation Instructions  ====&lt;br /&gt;
&lt;br /&gt;
#Extract the downloaded zip.&lt;br /&gt;
#[[Download PlayGo|Download PlayGo]].&lt;br /&gt;
#Import the downloaded project to your workspace:&lt;br /&gt;
##From the File menu choose Import--&amp;amp;gt;General--&amp;amp;gt;Existing Projects into Workspace.&lt;br /&gt;
##Click the 'Next' button.&lt;br /&gt;
##When prompted, select the directory to which you extracted the downloaded baby monitor example.&lt;br /&gt;
##Click finish.&lt;br /&gt;
#The baby monitor example project is now part of your workspace. You can start playing with it. For details refer to [[How to Play-Out|how to play out]].&lt;/div&gt;</summary>
		<author><name>Yaaritn</name></author>	</entry>

	<entry>
		<id>https://wiki.weizmann.ac.il/playgo/index.php?title=Baby_Monitor_Specification</id>
		<title>Baby Monitor Specification</title>
		<link rel="alternate" type="text/html" href="https://wiki.weizmann.ac.il/playgo/index.php?title=Baby_Monitor_Specification"/>
				<updated>2014-03-11T13:40:06Z</updated>
		
		<summary type="html">&lt;p&gt;Yaaritn: /* Requirements */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;br&amp;gt; &amp;lt;sub&amp;gt;&amp;lt;/sub&amp;gt;&amp;lt;sup&amp;gt;&amp;lt;/sup&amp;gt;The list below is the Baby Monitor system's requirements in [http://en.wikipedia.org/wiki/Controlled_natural_language controlled English]. These are valid requirements that can be used for [[PlayGo Features List#Natural_Language_Play-in|NL play-in]]. &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Requirements  ==&lt;br /&gt;
&lt;br /&gt;
{| width=&amp;quot;100%&amp;quot; border=&amp;quot;1&amp;quot; align=&amp;quot;left&amp;quot; cellpadding=&amp;quot;1&amp;quot; cellspacing=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;col&amp;quot; width=&amp;quot;10%&amp;quot; | LSC Name&lt;br /&gt;
! scope=&amp;quot;col&amp;quot; width=&amp;quot;50%&amp;quot; | Requirement in Natural Language Text&lt;br /&gt;
! scope=&amp;quot;col&amp;quot; width=&amp;quot;35&amp;quot; | Comments&lt;br /&gt;
! scope=&amp;quot;col&amp;quot; width=&amp;quot;5%&amp;quot; | LSC&lt;br /&gt;
|-&lt;br /&gt;
| Lsc1&lt;br /&gt;
| when the user clicks the increase_temperature_button, the temperature_threshold increases&lt;br /&gt;
| &amp;lt;br&amp;gt;&lt;br /&gt;
| [[Image:NL1.jpg|thumb|left|80x50px|LSC]]&lt;br /&gt;
|-&lt;br /&gt;
| Lsc2&lt;br /&gt;
| when the user clicks the decrease_temperature_button, the temperature_threshold decreases&lt;br /&gt;
|&lt;br /&gt;
| [[Image:NL2.jpg|thumb|left|80x50px|LSC]]&lt;br /&gt;
|-&lt;br /&gt;
| Lsc3&lt;br /&gt;
| when the user clicks a change_temperature_button, the temperature_display color changes to yellow and the temperature_display displays the temperature_threshold value&lt;br /&gt;
|&lt;br /&gt;
| [[Image:NL3.jpg|thumb|left|80x50px|LSC]]&lt;br /&gt;
|-&lt;br /&gt;
| Lsc4&lt;br /&gt;
| when the baby_unit temperature changes, the temperature_display displays the baby_unit temperature and the temperature_display color changes to green&amp;lt;br&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
| [[Image:NL4.jpg|thumb|left|80x50px|LSC]]&lt;br /&gt;
|-&lt;br /&gt;
| Lsc5&lt;br /&gt;
| when the baby_unit temperature changes, if the baby_unit temperature is greater than temperature_threshold, the alert_light state changes to blinking&amp;lt;br&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
| [[Image:NL5.jpg|thumb|left|80x50px|LSC]]&lt;br /&gt;
|-&lt;br /&gt;
| Lsc6&lt;br /&gt;
| when the baby_unit temperature changes, if the baby_unit temperature is greater than temperature_threshold, the mobile_unit beeps&lt;br /&gt;
|&lt;br /&gt;
| [[Image:NL6.jpg|thumb|left|80x50px|LSC]]&lt;br /&gt;
|-&lt;br /&gt;
| Lsc7&lt;br /&gt;
| when the alert_light state changes to blinking, as long as the mobile_unit state is on and the user does not click the reset_alert_button, the alert_light state changes to on and one second elapses and the alert_light state changes to off and two seconds elapse&amp;lt;br&amp;gt;&lt;br /&gt;
| This requirement is not parsed in the current version of the NL play-in&lt;br /&gt;
| [[Image:Lsc7.jpg|thumb|left|LSC]]&lt;br /&gt;
|-&lt;br /&gt;
| Lsc8&lt;br /&gt;
| when the user clicks the baby_unit_power_button, the baby_unit state changes to on&lt;br /&gt;
|&lt;br /&gt;
| [[Image:NL8.jpg|thumb|left|80x50px|LSC]]&lt;br /&gt;
|-&lt;br /&gt;
| Lsc9&lt;br /&gt;
| when the user clicks the mobile_unit_power_button, if the mobile_unit state is off, the mobile_unit state changes to on, otherwise if the mobile_unit state is on, the mobile_unit state changes to off&lt;br /&gt;
|&lt;br /&gt;
| [[Image:NL9.jpg|thumb|left|80x50px|LSC]]&lt;br /&gt;
|-&lt;br /&gt;
| Lsc10&lt;br /&gt;
| when the mobile_unit state changes to on, as long as the mobile_unit state is on, if two seconds have elapsed and the baby_unit does not connect to the mobile_unit, the connection_light color changes to red&lt;br /&gt;
| This requirement is not parsed in the current version of the natural language play-in&lt;br /&gt;
| [[Image:Lsc10.jpg|thumb|left|LSC]]&lt;br /&gt;
|-&lt;br /&gt;
| Lsc11&lt;br /&gt;
| when the baby_unit state changes to on, as long as the mobile_unit state is on, the baby_unit connects to the mobile_unit and two seconds elapse&lt;br /&gt;
|&lt;br /&gt;
| [[Image:NL11.jpg|thumb|left|80x50px|LSC]]&lt;br /&gt;
|-&lt;br /&gt;
| Lsc12&lt;br /&gt;
| when the baby_unit connects to the mobile_unit, the connection_light color changes to green&amp;lt;span class=&amp;quot;Apple-tab-span&amp;quot; style=&amp;quot;white-space:pre&amp;quot;&amp;gt;	&amp;lt;/span&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
| [[Image:NL12.jpg|thumb|left|80x50px|LSC]]&lt;br /&gt;
|-&lt;br /&gt;
| Lsc13&lt;br /&gt;
| when the user clicks the reset_button, the baby_unit resets and the antenna position changes to close and the antenna init and the antenna position changes to open&lt;br /&gt;
|&lt;br /&gt;
| [[Image:NL13.jpg|thumb|left|80x50px|LSC]]&lt;br /&gt;
|-&lt;br /&gt;
| Lsc14&lt;br /&gt;
| when the baby_unit resets, the baby_unit connects to the mobile_unit, the antenna position must be open&lt;br /&gt;
|&lt;br /&gt;
| [[Image:Lsc14.jpg|thumb|left|LSC]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt; &amp;lt;br&amp;gt;&amp;amp;nbsp;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Download the Baby Monitor Example  ==&lt;br /&gt;
&lt;br /&gt;
Below are downloads of the wrist watch final application, as well as of the LSC project that can be opened and modified in PlayGo.&lt;br /&gt;
&lt;br /&gt;
=== Baby Monitor final application (runnable jar)  ===&lt;br /&gt;
&lt;br /&gt;
[[Media:BabyMonitorExampleSwingGUI.zip|Runnable Baby Monitor with Swing GUI]] &amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
To run the baby monitor, simply extract the downloaded zip and double click the jar file.&lt;br /&gt;
&lt;br /&gt;
=== Baby Monitor LSC project  ===&lt;br /&gt;
&lt;br /&gt;
[[Media:BabyMonitorSwing.zip|The Baby Monitor LSC Project (for development purposes)]] &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Installation Instructions  ====&lt;br /&gt;
&lt;br /&gt;
#Extract the downloaded zip.&lt;br /&gt;
#[[Download PlayGo|Download PlayGo]].&lt;br /&gt;
#Import the downloaded project to your workspace:&lt;br /&gt;
##From the File menu choose Import--&amp;amp;gt;General--&amp;amp;gt;Existing Projects into Workspace.&lt;br /&gt;
##Click the 'Next' button.&lt;br /&gt;
##When prompted, select the directory to which you extracted the downloaded baby monitor example.&lt;br /&gt;
##Click finish.&lt;br /&gt;
#The baby monitor example project is now part of your workspace. You can start playing with it. For details refer to [[How to Play-Out|how to play out]].&lt;/div&gt;</summary>
		<author><name>Yaaritn</name></author>	</entry>

	<entry>
		<id>https://wiki.weizmann.ac.il/playgo/index.php?title=File:WteKingPosition.png</id>
		<title>File:WteKingPosition.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.weizmann.ac.il/playgo/index.php?title=File:WteKingPosition.png"/>
				<updated>2014-03-11T13:32:48Z</updated>
		
		<summary type="html">&lt;p&gt;Yaaritn: uploaded a new version of &amp;quot;Image:WteKingPosition.png&amp;quot;: replace image, the previous image used object square instead of class Square&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Yaaritn</name></author>	</entry>

	<entry>
		<id>https://wiki.weizmann.ac.il/playgo/index.php?title=File:BlkKingPosition.png</id>
		<title>File:BlkKingPosition.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.weizmann.ac.il/playgo/index.php?title=File:BlkKingPosition.png"/>
				<updated>2014-03-11T13:29:20Z</updated>
		
		<summary type="html">&lt;p&gt;Yaaritn: uploaded a new version of &amp;quot;Image:BlkKingPosition.png&amp;quot;: replace image, previous image uses object square instead of class Square&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Yaaritn</name></author>	</entry>

	<entry>
		<id>https://wiki.weizmann.ac.il/playgo/index.php?title=Chess_Game_Example</id>
		<title>Chess Game Example</title>
		<link rel="alternate" type="text/html" href="https://wiki.weizmann.ac.il/playgo/index.php?title=Chess_Game_Example"/>
				<updated>2014-03-11T13:20:42Z</updated>
		
		<summary type="html">&lt;p&gt;Yaaritn: /* Example 1 with NL-Play-In */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This is a protected page for the Chess Game Example.&lt;br /&gt;
&lt;br /&gt;
The '''chess game example''' demonstrates the creation of a chess game for two-players. Chess game has many rules which we have implemented in this example, see [[http://en.wikipedia.org/wiki/Chess chess]]. On his turn, the user plays by mouse clicking the game pieces and the chess board's squares. A click on a square highlights valid user moves for the selected piece. The game GUI is implemented with [http://en.wikipedia.org/wiki/Swing_(Java) Swing], and the game behavior is implemented with LSCs. This example demonstrates LSCs creation in two different ways, which also generates different LSCs: &amp;lt;br&amp;gt;&lt;br /&gt;
# Using the [[PlayGo_Feature_List#Natural_language_play-in | natural language interface to LSCs]] (NL-Play-In).&lt;br /&gt;
# Using the LSC Editor.&amp;amp;nbsp;&lt;br /&gt;
&lt;br /&gt;
== Game Board  ==&lt;br /&gt;
&lt;br /&gt;
[[Image:ChessGUIScreenShot.png]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Example 1 with NL-Play-In  ==&lt;br /&gt;
&lt;br /&gt;
The LSCs in this section were created using [[PlayGo Feature List#Natural_language_play-in|NL-Play-In]].&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{| width=&amp;quot;100%&amp;quot; border=&amp;quot;1&amp;quot; align=&amp;quot;left&amp;quot; cellpadding=&amp;quot;1&amp;quot; cellspacing=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;col&amp;quot; width=&amp;quot;15%&amp;quot; | Name&lt;br /&gt;
! scope=&amp;quot;col&amp;quot; width=&amp;quot;70%&amp;quot; | Requirement in Natural Language Text&lt;br /&gt;
! scope=&amp;quot;col&amp;quot; width=&amp;quot;15%&amp;quot; | LSC&lt;br /&gt;
|-&lt;br /&gt;
| SelectSource&lt;br /&gt;
| when the user clicks any Square, if the board sourcetargetValue is &amp;quot;0&amp;quot; and the Square type is not &amp;quot;vacent&amp;quot; then the Square selectSource and the board sourcetargetValue changes to &amp;quot;1&amp;quot;.&amp;amp;nbsp;&lt;br /&gt;
|&lt;br /&gt;
[[Image:SelectSource.png|thumb|left|LSC]]&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| SetPossiblePosition&lt;br /&gt;
| when any Square selectSource then the Square setPossibleSquares . &amp;amp;nbsp;&lt;br /&gt;
|&lt;br /&gt;
[[Image:SetPossiblePositionNL.png|thumb|left|LSC]]&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| SelectTarget&lt;br /&gt;
| when the user clicks any Square, if the board sourcetargetValue is &amp;quot;1&amp;quot; then the Square selectTarget and the board sourcetargetValue changes to &amp;quot;0&amp;quot;.&amp;amp;nbsp;&lt;br /&gt;
|&lt;br /&gt;
[[Image:SelectTarget.png|thumb|left|LSC]]&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| CheckPossibility&lt;br /&gt;
| when any Square selectTarget then the Square checkPossibility. &amp;amp;nbsp;&lt;br /&gt;
|&lt;br /&gt;
[[Image:CheckPossibility.png|thumb|left|LSC]]&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| MovePiece&lt;br /&gt;
| when any Square checkPossibility, if the Square possibility is &amp;quot;true&amp;quot; then the Square MovePiece. &amp;amp;nbsp;&lt;br /&gt;
|&lt;br /&gt;
[[Image:MoveSource.png|thumb|left|LSC]]&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| ChangeTurn&lt;br /&gt;
| when any Square MovePiece, if the board state is &amp;quot;black&amp;quot; then the board state changes to &amp;quot;white&amp;quot; otherwise if the board state is &amp;quot;white&amp;quot; then the board state changes to &amp;quot;black&amp;quot; . &amp;amp;nbsp;&lt;br /&gt;
|&lt;br /&gt;
[[Image:TurnChange.png|thumb|left|LSC]]&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| WrongTurn&lt;br /&gt;
| when any Square selectSource, if the Square type is &amp;quot;black&amp;quot; and the board state is &amp;quot;white&amp;quot; then the Square showMessage. &amp;amp;nbsp;&lt;br /&gt;
|&lt;br /&gt;
[[Image:WrongTurn1.png|thumb|left|LSC]]&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| WrongTurn2&lt;br /&gt;
| when any Square selectSource, if the Square type is &amp;quot;white&amp;quot; and the board state is &amp;quot;black&amp;quot; then the Square showMessage. &amp;amp;nbsp;&lt;br /&gt;
|&lt;br /&gt;
[[Image:WrongTurn2.png|thumb|left|LSC]]&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| ResetBoard&lt;br /&gt;
| when any Square showMessage then the board sourcetargetValue changes to &amp;quot;0&amp;quot;. &amp;amp;nbsp;&lt;br /&gt;
|&lt;br /&gt;
[[Image:ResetBoard.png|thumb|left|LSC]]&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| checkmate&lt;br /&gt;
| when any Square MovePiece then the Square check_CheckMate &amp;amp;nbsp;&lt;br /&gt;
|&lt;br /&gt;
[[Image:Checkmate-NL.png|thumb|left|LSC]]&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| BlkKingPosition&lt;br /&gt;
| when any Square MovePiece, if the Square piecename is &amp;quot;blkking&amp;quot; then the board BlkkingPosition changes to the Square position&amp;amp;nbsp;&lt;br /&gt;
|&lt;br /&gt;
[[Image:BlkKingPosition.png|thumb|left|LSC]]&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| WteKingPosition&lt;br /&gt;
| when any Square MovePiece, if the Square piecename is &amp;quot;wteking&amp;quot; then the board WtekingPosition changes to the Square position &amp;amp;nbsp;&lt;br /&gt;
|&lt;br /&gt;
[[Image:WteKingPosition.png|thumb|left|LSC]]&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| Newgame&lt;br /&gt;
| when the user click the newgame then the newgame loadnewgame and the board reset &amp;amp;nbsp;&lt;br /&gt;
|&lt;br /&gt;
[[Image:NewGame.png|thumb|left|LSC]]&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| ShowScoreblack&lt;br /&gt;
| when the board state change then the BlkScore show the board blackPoint &amp;amp;nbsp;&lt;br /&gt;
|&lt;br /&gt;
[[Image:ShowScoreblack.png|thumb|left|LSC]]&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| ShowScorewhite&lt;br /&gt;
| when the board state change then the WteScore show the board whitePoint &amp;amp;nbsp;&lt;br /&gt;
|&lt;br /&gt;
[[Image:ShowScorewhite.png|thumb|left|LSC]]&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| ShowNextTurn&lt;br /&gt;
| when the board state change then the NextTurndisplay show the board state &amp;amp;nbsp;&lt;br /&gt;
| [[Image:ShowNextTurn.png|thumb|left|LSC]]&lt;br /&gt;
|-&lt;br /&gt;
| ResetPossiblePosition&lt;br /&gt;
| when any Square selectTarget then the Square reset &amp;amp;nbsp;&lt;br /&gt;
| [[Image:ResrPossiblePositionNL.png|thumb|left|LSC]]&lt;br /&gt;
|-&lt;br /&gt;
| WrongTurnReset&lt;br /&gt;
| when any Square showMessage then the Square reset &amp;amp;nbsp;&lt;br /&gt;
| [[Image:WrongTurnReset.png|thumb|left|LSC]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;amp;nbsp;&amp;lt;br&amp;gt;&amp;amp;nbsp;&lt;br /&gt;
&lt;br /&gt;
=== Download the ChessProject Example  ===&lt;br /&gt;
&lt;br /&gt;
Below are links for downloading the ChessProject final application, as well as the LSC project that can be opened and modified in PlayGo.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== ChessProject final application (runnable jar)  ====&lt;br /&gt;
&lt;br /&gt;
[[Media:ChessProjectSwingGUI.zip|Runnable ChessProject with Swing GUI]] &amp;lt;br&amp;gt;&amp;lt;br&amp;gt; To run the ChessProject, simply extract the downloaded zip and double click the jar file.&amp;lt;br&amp;gt; &amp;amp;nbsp;&lt;br /&gt;
&lt;br /&gt;
==== ChessProject LSC project  ====&lt;br /&gt;
&lt;br /&gt;
[[Media:ChessProject.zip|The ChessProject LSC Project (for development purposes)]] &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== Installation Instructions  =====&lt;br /&gt;
&lt;br /&gt;
#Extract the downloaded zip.&lt;br /&gt;
#[[Download PlayGo|Download PlayGo]].&lt;br /&gt;
#Import the downloaded project to your workspace:&lt;br /&gt;
##From the File menu choose Import--&amp;amp;gt;General--&amp;amp;gt;Existing Projects into Workspace.&lt;br /&gt;
##Click the 'Next' button.&lt;br /&gt;
##When prompted, select the directory to which you extracted the downloaded ChessProject example.&lt;br /&gt;
##Click finish.&lt;br /&gt;
#The ChessProject example project is now part of your workspace. You can start playing with it. For details refer to [[How to Play-Out|how to play out]].&lt;br /&gt;
&lt;br /&gt;
== Example 2 ==&lt;br /&gt;
&lt;br /&gt;
The following LSCs were created using the LSC editor. Our intention was to create a specification with more than one symbolic lifeline in the LSCs, which was not supported by NL-Play-In.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{| width=&amp;quot;100%&amp;quot; border=&amp;quot;1&amp;quot; align=&amp;quot;left&amp;quot; cellpadding=&amp;quot;1&amp;quot; cellspacing=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;col&amp;quot; width=&amp;quot;15%&amp;quot; | Name&lt;br /&gt;
! scope=&amp;quot;col&amp;quot; width=&amp;quot;70%&amp;quot; | Requirement&lt;br /&gt;
! scope=&amp;quot;col&amp;quot; width=&amp;quot;15%&amp;quot; | LSC&lt;br /&gt;
|-&lt;br /&gt;
| PieceClick&lt;br /&gt;
| When the user click any square Sq1, and then click any square Sq2, if the board next turn is equals to the Sq1 piece type and if the Sq1 is a source then the square Sq1 check_Move square Sq2.&amp;amp;nbsp;&lt;br /&gt;
|&lt;br /&gt;
[[Image:ClickonPiece.png|thumb|left|LSC]]&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| MovePiece&lt;br /&gt;
| When a square Sq1 check_Move square Sq2, canmove is assigned with whether the movement of piece from square Sq1 to Sq2 is possible, &amp;amp;nbsp;if the piece canmove and Sq1 piecetype is not equals to Sq2 piecetype then the square Sq1 move_Piece to square Sq2.&lt;br /&gt;
| [[Image:MovePiece.png|thumb|left|LSC]]&lt;br /&gt;
|-&lt;br /&gt;
| Square RemovePiece&lt;br /&gt;
| When&amp;amp;nbsp;the square Sq1 move_Piece to square Sq2, &amp;amp;nbsp;then the square Sq2 emptyPiece the square Sq2.&lt;br /&gt;
| [[Image:RemovePiece.png|thumb|left|LSC]]&lt;br /&gt;
|-&lt;br /&gt;
| NextMove&lt;br /&gt;
| When the square Sq1 move_Piece to square Sq2, if the board next turn is &amp;quot;white&amp;quot; the board next turn changes to &amp;quot;black&amp;quot; otherwise if the board next turn is &amp;quot;black&amp;quot; the board next turn changes to &amp;quot;white&amp;quot;.&lt;br /&gt;
| [[Image:NextMove.png|thumb|left|LSC]]&lt;br /&gt;
|-&lt;br /&gt;
| SetSource&lt;br /&gt;
| When the user click any square Sq1, if the Issource is &amp;quot;empty&amp;quot; then the square Sq1's possible positions are set and the IsSource changes to &amp;quot;set&amp;quot;. &amp;amp;nbsp;&lt;br /&gt;
| [[Image:SetSource.png|thumb|left|LSC]]&lt;br /&gt;
|-&lt;br /&gt;
| ShowMessage&lt;br /&gt;
| When the user click any square Sq1, if the square IsSource is &amp;quot;empty&amp;quot; and the board next turn not equals the Sq1 piecetype then the square showmessage and the Issource is set to &amp;quot;empty&amp;quot;.&lt;br /&gt;
| [[Image:ShowMessage.png|thumb|left|LSC]]&lt;br /&gt;
|-&lt;br /&gt;
| ShowMessageReset&lt;br /&gt;
| When the user click any square Sq1, if the square IsSource is &amp;quot;empty&amp;quot; and the board next turn not equals the Sq1 piecetype then the square showmessage and the Issource is set to &amp;quot;empty&amp;quot;.&lt;br /&gt;
| [[Image:ShowmessageReset.jpg|thumb|left|LSC]]&lt;br /&gt;
|-&lt;br /&gt;
| ResetPossiblePosition&lt;br /&gt;
| When the user click any square Sq1, the square Sq1 setPossiblePosition and the user click any other square Sq2 then the Sq2 resetPossiblePosition of the Sq1.&lt;br /&gt;
| [[Image:ResetPossiblePosition.png|thumb|left|LSC]]&lt;br /&gt;
|-&lt;br /&gt;
| CheckMate&lt;br /&gt;
| When the any square Sq2 emptypiece any square Sq1, then isCheck is assigned whether there is any checkmate, if the checkmate is true then the square show the checkmate otherwise square removecheckmate.&lt;br /&gt;
| [[Image:Checkmate.png|thumb|left|LSC]]&lt;br /&gt;
|-&lt;br /&gt;
| kingposition&lt;br /&gt;
| When the any square Sq2 emptypiece any square Sq1, if the Sq2 piecname is wteking then the Sq1 removecheckMate and the board wtekingposition is set to the Sq2 position else if the Sq2 piecname is blkking then the Sq1 removecheckMate and the board blkkingposition is set to the Sq2 position .&lt;br /&gt;
| [[Image:Kingposition.png|thumb|left|LSC]]&lt;br /&gt;
|-&lt;br /&gt;
| showturn&lt;br /&gt;
| When the board set the Next_turn to any then the NextTurn show the board Next turn.&lt;br /&gt;
| [[Image:Showturn.png|thumb|left|LSC]]&lt;br /&gt;
|-&lt;br /&gt;
| BlackPiecepoint&lt;br /&gt;
| When the any square Sq2 emptypiece any square Sq1, if the board Next_turn is white then the blk_score show the black point.&lt;br /&gt;
| [[Image:Blackpiecepoint.png|thumb|left|LSC]]&lt;br /&gt;
|-&lt;br /&gt;
| WhitePiecepoint&lt;br /&gt;
| When the any square Sq2 emptypiece any square Sq1, if the board Next_turn is black then the wte_score show the white point.&lt;br /&gt;
| [[Image:Whitepiecepoint.png|thumb|left|LSC]]&lt;br /&gt;
|-&lt;br /&gt;
| GameOver&lt;br /&gt;
| When the any square Sq1 movePiece to any square Sq2, if the board black point is 0 then the white won the game otherwise if the board white point is 0 then the black won the game&lt;br /&gt;
| [[Image:GameOver.png|thumb|left|LSC]]&lt;br /&gt;
|-&lt;br /&gt;
| Loadgame&lt;br /&gt;
| when the user click NewGame then the NewGame load new game&lt;br /&gt;
| [[Image:LoadGame.png|thumb|left|LSC]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt; &amp;amp;nbsp; &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Download the ChessGame Example  ===&lt;br /&gt;
&lt;br /&gt;
Below are downloads of the ChessGame final application, as well as the LSC project that can be opened and modified in PlayGo.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== ChessGame final application (runnable jar)  ====&lt;br /&gt;
&lt;br /&gt;
[[Media:ChessGameSwingGUI.zip|Runnable Chess Game with Swing GUI]] &amp;lt;br&amp;gt;&amp;lt;br&amp;gt; To run the ChessGame, simply extract the downloaded zip and double click the jar file.&amp;lt;br&amp;gt; &amp;amp;nbsp;&lt;br /&gt;
&lt;br /&gt;
==== ChessGame LSC project  ====&lt;br /&gt;
&lt;br /&gt;
[[Media:ChessGame.zip|The ChessGame LSC Project (for development purposes)]] &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== Installation Instructions  =====&lt;br /&gt;
&lt;br /&gt;
#Extract the downloaded zip.&lt;br /&gt;
#[[Download PlayGo|Download PlayGo]].&lt;br /&gt;
#Import the downloaded project to your workspace:&lt;br /&gt;
##From the File menu choose Import--&amp;amp;gt;General--&amp;amp;gt;Existing Projects into Workspace.&lt;br /&gt;
##Click the 'Next' button.&lt;br /&gt;
##When prompted, select the directory to which you extracted the downloaded ChessGame example.&lt;br /&gt;
##Click finish.&lt;br /&gt;
#The ChessGame example project is now part of your workspace. You can start playing with it. For details refer to [[How to Play-Out|how to play out]].&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Graph and Connections  ==&lt;br /&gt;
&lt;br /&gt;
'''Example1-ChessProject'''&amp;lt;br&amp;gt;&amp;amp;nbsp;&amp;lt;br&amp;gt;[[Image:SivChessGame.png|SIV Graph]]&amp;lt;br&amp;gt; Dependency graph for example #1. This graph shows clusters (communities). The LSC MovePiece is selected here and the connected LSCs are colored (blue or pink). Green edges indicate unified messages between LSCs. &amp;lt;br&amp;gt;For details, see [[http://www.weizmann.ac.il/mediawiki/harelgroup/index.php/SIV_Plugin | SIV-Plugin]]. &amp;lt;br&amp;gt;&amp;amp;nbsp;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Example2-ChessGame'''&amp;lt;br&amp;gt;&amp;amp;nbsp;&amp;lt;br&amp;gt;[[Image:ChessSIV-example2.png|SIV Graph]]&amp;lt;br&amp;gt; Dependency graph for example #2. This graph shows clusters (communities). The LSC MovePiece is selected here and the connected LSCs are colored (blue or pink). Green edges indicate unified messages between LSCs.&amp;lt;br&amp;gt; Note: messages were unified here regardless of the parameters, since parameters are symbolic, e.g., MovePiece(String piecename). &amp;lt;br&amp;gt;For details, see[[http://www.weizmann.ac.il/mediawiki/harelgroup/index.php/SIV_Plugin | SIV-Plugin]].&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;amp;nbsp;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== SystemModel  ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;amp;nbsp;&amp;lt;br&amp;gt; Example1-ChessProject&amp;lt;br&amp;gt;&amp;amp;nbsp;[[Image:ChessProjectSystemModel.png|SystemModel]] &amp;lt;br&amp;gt;&amp;amp;nbsp;&amp;lt;br&amp;gt; Example2-ChessGame&amp;lt;br&amp;gt;&amp;amp;nbsp;[[Image:ChessGameSystemmodel.png|System Model]] &amp;lt;br&amp;gt;&amp;amp;nbsp;&amp;lt;br&amp;gt;&lt;/div&gt;</summary>
		<author><name>Yaaritn</name></author>	</entry>

	<entry>
		<id>https://wiki.weizmann.ac.il/playgo/index.php?title=Chess_Game_Example</id>
		<title>Chess Game Example</title>
		<link rel="alternate" type="text/html" href="https://wiki.weizmann.ac.il/playgo/index.php?title=Chess_Game_Example"/>
				<updated>2014-03-10T11:39:09Z</updated>
		
		<summary type="html">&lt;p&gt;Yaaritn: /* Example 1 with NL-Play-In */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This is a protected page for the Chess Game Example.&lt;br /&gt;
&lt;br /&gt;
The '''chess game example''' demonstrates the creation of a chess game for two-players. Chess game has many rules which we have implemented in this example, see [[http://en.wikipedia.org/wiki/Chess chess]]. On his turn, the user plays by mouse clicking the game pieces and the chess board's squares. A click on a square highlights valid user moves for the selected piece. The game GUI is implemented with [http://en.wikipedia.org/wiki/Swing_(Java) Swing], and the game behavior is implemented with LSCs. This example demonstrates LSCs creation in two different ways, which also generates different LSCs: &amp;lt;br&amp;gt;&lt;br /&gt;
# Using the [[PlayGo_Feature_List#Natural_language_play-in | natural language interface to LSCs]] (NL-Play-In).&lt;br /&gt;
# Using the LSC Editor.&amp;amp;nbsp;&lt;br /&gt;
&lt;br /&gt;
== Game Board  ==&lt;br /&gt;
&lt;br /&gt;
[[Image:ChessGUIScreenShot.png]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Example 1 with NL-Play-In  ==&lt;br /&gt;
&lt;br /&gt;
The LSCs in this section were created using [[PlayGo Feature List#Natural_language_play-in|NL-Play-In]]. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
{| width=&amp;quot;100%&amp;quot; border=&amp;quot;1&amp;quot; align=&amp;quot;left&amp;quot; cellpadding=&amp;quot;1&amp;quot; cellspacing=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;col&amp;quot; width=&amp;quot;15%&amp;quot; | Name &lt;br /&gt;
! scope=&amp;quot;col&amp;quot; width=&amp;quot;70%&amp;quot; | Requirement in Natural Language Text &lt;br /&gt;
! scope=&amp;quot;col&amp;quot; width=&amp;quot;15%&amp;quot; | LSC&lt;br /&gt;
|-&lt;br /&gt;
| SelectSource &lt;br /&gt;
| when the user clicks any Square, if the board sourcetargetValue is &amp;quot;0&amp;quot; and the Square type is not &amp;quot;vacent&amp;quot; then the Square selectSource and the board sourcetargetValue changes to &amp;quot;1&amp;quot;.&amp;amp;nbsp; &lt;br /&gt;
| &lt;br /&gt;
[[Image:SelectSource.png|thumb|left|LSC]] &lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| SetPossiblePosition &lt;br /&gt;
| when any Square selectSource then the Square setPossibleSquares . &amp;amp;nbsp; &lt;br /&gt;
| &lt;br /&gt;
[[Image:SetPossiblePositionNL.png|thumb|left|LSC]] &lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| SelectTarget &lt;br /&gt;
| when the user clicks any Square, if the board sourcetargetValue is &amp;quot;1&amp;quot; then the Square selectTarget and the board sourcetargetValue changes to &amp;quot;0&amp;quot;.&amp;amp;nbsp; &lt;br /&gt;
| &lt;br /&gt;
[[Image:SelectTarget.png|thumb|left|LSC]] &lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| CheckPossibility &lt;br /&gt;
| when any Square selectTarget then the Square checkPossibility. &amp;amp;nbsp; &lt;br /&gt;
| &lt;br /&gt;
[[Image:CheckPossibility.png|thumb|left|LSC]] &lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| MovePiece &lt;br /&gt;
| when any Square checkPossibility, if the Square possibility is &amp;quot;true&amp;quot; then the Square MovePiece. &amp;amp;nbsp; &lt;br /&gt;
| &lt;br /&gt;
[[Image:MoveSource.png|thumb|left|LSC]] &lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| ChangeTurn &lt;br /&gt;
| when any Square MovePiece, if the board state is &amp;quot;black&amp;quot; then the board state changes to &amp;quot;white&amp;quot; otherwise if the board state is &amp;quot;white&amp;quot; then the board state changes to &amp;quot;black&amp;quot; . &amp;amp;nbsp; &lt;br /&gt;
| &lt;br /&gt;
[[Image:TurnChange.png|thumb|left|LSC]] &lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| WrongTurn &lt;br /&gt;
| when any Square selectSource, if the Square type is &amp;quot;black&amp;quot; and the board state is &amp;quot;white&amp;quot; then the Square showMessage. &amp;amp;nbsp; &lt;br /&gt;
| &lt;br /&gt;
[[Image:WrongTurn1.png|thumb|left|LSC]] &lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| WrongTurn2 &lt;br /&gt;
| when any Square selectSource, if the Square type is &amp;quot;white&amp;quot; and the board state is &amp;quot;black&amp;quot; then the Square showMessage. &amp;amp;nbsp; &lt;br /&gt;
| &lt;br /&gt;
[[Image:WrongTurn2.png|thumb|left|LSC]] &lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| ResetBoard &lt;br /&gt;
| when any Square showMessage then the board sourcetargetValue changes to &amp;quot;0&amp;quot;. &amp;amp;nbsp; &lt;br /&gt;
| &lt;br /&gt;
[[Image:ResetBoard.png|thumb|left|LSC]] &lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| checkmate &lt;br /&gt;
| when any Square MovePiece then the Square check_CheckMate &amp;amp;nbsp; &lt;br /&gt;
| &lt;br /&gt;
[[Image:Checkmate-NL.png|thumb|left|LSC]] &lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| BlkKingPosition.png &lt;br /&gt;
| when any Square MovePiece, if the Square piecename is &amp;quot;blkking&amp;quot; then the board BlkkingPosition changes to the Square position&amp;amp;nbsp; &lt;br /&gt;
| &lt;br /&gt;
[[Image:BlkKingPosition.png|thumb|left|LSC]] &lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| WteKingPosition &lt;br /&gt;
| when any Square MovePiece, if the Square piecename is &amp;quot;wteking&amp;quot; then the board WtekingPosition changes to the Square position &amp;amp;nbsp; &lt;br /&gt;
| &lt;br /&gt;
[[Image:WteKingPosition.png|thumb|left|LSC]] &lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| Newgame &lt;br /&gt;
| when the user click the newgame then the newgame loadnewgame and the board reset &amp;amp;nbsp; &lt;br /&gt;
| &lt;br /&gt;
[[Image:NewGame.png|thumb|left|LSC]] &lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| ShowScoreblack &lt;br /&gt;
| when the board state change then the BlkScore show the board blackPoint &amp;amp;nbsp; &lt;br /&gt;
| &lt;br /&gt;
[[Image:ShowScoreblack.png|thumb|left|LSC]] &lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| ShowScorewhite &lt;br /&gt;
| when the board state change then the WteScore show the board whitePoint &amp;amp;nbsp; &lt;br /&gt;
| &lt;br /&gt;
[[Image:ShowScorewhite.png|thumb|left|LSC]] &lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| ShowNextTurn &lt;br /&gt;
| when the board state change then the NextTurndisplay show the board state &amp;amp;nbsp; &lt;br /&gt;
| [[Image:ShowNextTurn.png|thumb|left|LSC]]&lt;br /&gt;
|-&lt;br /&gt;
| ResetPossiblePosition &lt;br /&gt;
| when any Square selectTarget then the Square reset &amp;amp;nbsp; &lt;br /&gt;
| [[Image:ResrPossiblePositionNL.png|thumb|left|LSC]]&lt;br /&gt;
|-&lt;br /&gt;
| WrongTurnReset &lt;br /&gt;
| when any Square showMessage then the Square reset &amp;amp;nbsp; &lt;br /&gt;
| [[Image:WrongTurnReset.png|thumb|left|LSC]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;amp;nbsp;&amp;lt;br&amp;gt;&amp;amp;nbsp; &lt;br /&gt;
&lt;br /&gt;
=== Download the ChessProject Example  ===&lt;br /&gt;
&lt;br /&gt;
Below are links for downloading the ChessProject final application, as well as the LSC project that can be opened and modified in PlayGo.&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
==== ChessProject final application (runnable jar)  ====&lt;br /&gt;
&lt;br /&gt;
[[Media:ChessProjectSwingGUI.zip|Runnable ChessProject with Swing GUI]] &amp;lt;br&amp;gt;&amp;lt;br&amp;gt; To run the ChessProject, simply extract the downloaded zip and double click the jar file.&amp;lt;br&amp;gt; &amp;amp;nbsp; &lt;br /&gt;
&lt;br /&gt;
==== ChessProject LSC project  ====&lt;br /&gt;
&lt;br /&gt;
[[Media:ChessProject.zip|The ChessProject LSC Project (for development purposes)]] &amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
===== Installation Instructions  =====&lt;br /&gt;
&lt;br /&gt;
#Extract the downloaded zip. &lt;br /&gt;
#[[Download PlayGo|Download PlayGo]]. &lt;br /&gt;
#Import the downloaded project to your workspace: &lt;br /&gt;
##From the File menu choose Import--&amp;amp;gt;General--&amp;amp;gt;Existing Projects into Workspace. &lt;br /&gt;
##Click the 'Next' button. &lt;br /&gt;
##When prompted, select the directory to which you extracted the downloaded ChessProject example. &lt;br /&gt;
##Click finish. &lt;br /&gt;
#The ChessProject example project is now part of your workspace. You can start playing with it. For details refer to [[How to Play-Out|how to play out]].&lt;br /&gt;
&lt;br /&gt;
== Example 2 ==&lt;br /&gt;
&lt;br /&gt;
The following LSCs were created using the LSC editor. Our intention was to create a specification with more than one symbolic lifeline in the LSCs, which was not supported by NL-Play-In.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{| width=&amp;quot;100%&amp;quot; border=&amp;quot;1&amp;quot; align=&amp;quot;left&amp;quot; cellpadding=&amp;quot;1&amp;quot; cellspacing=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;col&amp;quot; width=&amp;quot;15%&amp;quot; | Name&lt;br /&gt;
! scope=&amp;quot;col&amp;quot; width=&amp;quot;70%&amp;quot; | Requirement&lt;br /&gt;
! scope=&amp;quot;col&amp;quot; width=&amp;quot;15%&amp;quot; | LSC&lt;br /&gt;
|-&lt;br /&gt;
| PieceClick&lt;br /&gt;
| When the user click any square Sq1, and then click any square Sq2, if the board next turn is equals to the Sq1 piece type and if the Sq1 is a source then the square Sq1 check_Move square Sq2.&amp;amp;nbsp;&lt;br /&gt;
|&lt;br /&gt;
[[Image:ClickonPiece.png|thumb|left|LSC]]&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| MovePiece&lt;br /&gt;
| When a square Sq1 check_Move square Sq2, canmove is assigned with whether the movement of piece from square Sq1 to Sq2 is possible, &amp;amp;nbsp;if the piece canmove and Sq1 piecetype is not equals to Sq2 piecetype then the square Sq1 move_Piece to square Sq2.&lt;br /&gt;
| [[Image:MovePiece.png|thumb|left|LSC]]&lt;br /&gt;
|-&lt;br /&gt;
| Square RemovePiece&lt;br /&gt;
| When&amp;amp;nbsp;the square Sq1 move_Piece to square Sq2, &amp;amp;nbsp;then the square Sq2 emptyPiece the square Sq2.&lt;br /&gt;
| [[Image:RemovePiece.png|thumb|left|LSC]]&lt;br /&gt;
|-&lt;br /&gt;
| NextMove&lt;br /&gt;
| When the square Sq1 move_Piece to square Sq2, if the board next turn is &amp;quot;white&amp;quot; the board next turn changes to &amp;quot;black&amp;quot; otherwise if the board next turn is &amp;quot;black&amp;quot; the board next turn changes to &amp;quot;white&amp;quot;.&lt;br /&gt;
| [[Image:NextMove.png|thumb|left|LSC]]&lt;br /&gt;
|-&lt;br /&gt;
| SetSource&lt;br /&gt;
| When the user click any square Sq1, if the Issource is &amp;quot;empty&amp;quot; then the square Sq1's possible positions are set and the IsSource changes to &amp;quot;set&amp;quot;. &amp;amp;nbsp;&lt;br /&gt;
| [[Image:SetSource.png|thumb|left|LSC]]&lt;br /&gt;
|-&lt;br /&gt;
| ShowMessage&lt;br /&gt;
| When the user click any square Sq1, if the square IsSource is &amp;quot;empty&amp;quot; and the board next turn not equals the Sq1 piecetype then the square showmessage and the Issource is set to &amp;quot;empty&amp;quot;.&lt;br /&gt;
| [[Image:ShowMessage.png|thumb|left|LSC]]&lt;br /&gt;
|-&lt;br /&gt;
| ShowMessageReset&lt;br /&gt;
| When the user click any square Sq1, if the square IsSource is &amp;quot;empty&amp;quot; and the board next turn not equals the Sq1 piecetype then the square showmessage and the Issource is set to &amp;quot;empty&amp;quot;.&lt;br /&gt;
| [[Image:ShowmessageReset.jpg|thumb|left|LSC]]&lt;br /&gt;
|-&lt;br /&gt;
| ResetPossiblePosition&lt;br /&gt;
| When the user click any square Sq1, the square Sq1 setPossiblePosition and the user click any other square Sq2 then the Sq2 resetPossiblePosition of the Sq1.&lt;br /&gt;
| [[Image:ResetPossiblePosition.png|thumb|left|LSC]]&lt;br /&gt;
|-&lt;br /&gt;
| CheckMate&lt;br /&gt;
| When the any square Sq2 emptypiece any square Sq1, then isCheck is assigned whether there is any checkmate, if the checkmate is true then the square show the checkmate otherwise square removecheckmate.&lt;br /&gt;
| [[Image:Checkmate.png|thumb|left|LSC]]&lt;br /&gt;
|-&lt;br /&gt;
| kingposition&lt;br /&gt;
| When the any square Sq2 emptypiece any square Sq1, if the Sq2 piecname is wteking then the Sq1 removecheckMate and the board wtekingposition is set to the Sq2 position else if the Sq2 piecname is blkking then the Sq1 removecheckMate and the board blkkingposition is set to the Sq2 position .&lt;br /&gt;
| [[Image:Kingposition.png|thumb|left|LSC]]&lt;br /&gt;
|-&lt;br /&gt;
| showturn&lt;br /&gt;
| When the board set the Next_turn to any then the NextTurn show the board Next turn.&lt;br /&gt;
| [[Image:Showturn.png|thumb|left|LSC]]&lt;br /&gt;
|-&lt;br /&gt;
| BlackPiecepoint&lt;br /&gt;
| When the any square Sq2 emptypiece any square Sq1, if the board Next_turn is white then the blk_score show the black point.&lt;br /&gt;
| [[Image:Blackpiecepoint.png|thumb|left|LSC]]&lt;br /&gt;
|-&lt;br /&gt;
| WhitePiecepoint&lt;br /&gt;
| When the any square Sq2 emptypiece any square Sq1, if the board Next_turn is black then the wte_score show the white point.&lt;br /&gt;
| [[Image:Whitepiecepoint.png|thumb|left|LSC]]&lt;br /&gt;
|-&lt;br /&gt;
| GameOver&lt;br /&gt;
| When the any square Sq1 movePiece to any square Sq2, if the board black point is 0 then the white won the game otherwise if the board white point is 0 then the black won the game&lt;br /&gt;
| [[Image:GameOver.png|thumb|left|LSC]]&lt;br /&gt;
|-&lt;br /&gt;
| Loadgame&lt;br /&gt;
| when the user click NewGame then the NewGame load new game&lt;br /&gt;
| [[Image:LoadGame.png|thumb|left|LSC]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt; &amp;amp;nbsp; &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Download the ChessGame Example  ===&lt;br /&gt;
&lt;br /&gt;
Below are downloads of the ChessGame final application, as well as the LSC project that can be opened and modified in PlayGo.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== ChessGame final application (runnable jar)  ====&lt;br /&gt;
&lt;br /&gt;
[[Media:ChessGameSwingGUI.zip|Runnable Chess Game with Swing GUI]] &amp;lt;br&amp;gt;&amp;lt;br&amp;gt; To run the ChessGame, simply extract the downloaded zip and double click the jar file.&amp;lt;br&amp;gt; &amp;amp;nbsp;&lt;br /&gt;
&lt;br /&gt;
==== ChessGame LSC project  ====&lt;br /&gt;
&lt;br /&gt;
[[Media:ChessGame.zip|The ChessGame LSC Project (for development purposes)]] &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== Installation Instructions  =====&lt;br /&gt;
&lt;br /&gt;
#Extract the downloaded zip.&lt;br /&gt;
#[[Download PlayGo|Download PlayGo]].&lt;br /&gt;
#Import the downloaded project to your workspace:&lt;br /&gt;
##From the File menu choose Import--&amp;amp;gt;General--&amp;amp;gt;Existing Projects into Workspace.&lt;br /&gt;
##Click the 'Next' button.&lt;br /&gt;
##When prompted, select the directory to which you extracted the downloaded ChessGame example.&lt;br /&gt;
##Click finish.&lt;br /&gt;
#The ChessGame example project is now part of your workspace. You can start playing with it. For details refer to [[How to Play-Out|how to play out]].&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Graph and Connections  ==&lt;br /&gt;
&lt;br /&gt;
'''Example1-ChessProject'''&amp;lt;br&amp;gt;&amp;amp;nbsp;&amp;lt;br&amp;gt;[[Image:SivChessGame.png|SIV Graph]]&amp;lt;br&amp;gt; Dependency graph for example #1. This graph shows clusters (communities). The LSC MovePiece is selected here and the connected LSCs are colored (blue or pink). Green edges indicate unified messages between LSCs. &amp;lt;br&amp;gt;For details, see [[http://www.weizmann.ac.il/mediawiki/harelgroup/index.php/SIV_Plugin | SIV-Plugin]]. &amp;lt;br&amp;gt;&amp;amp;nbsp;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Example2-ChessGame'''&amp;lt;br&amp;gt;&amp;amp;nbsp;&amp;lt;br&amp;gt;[[Image:ChessSIV-example2.png|SIV Graph]]&amp;lt;br&amp;gt; Dependency graph for example #2. This graph shows clusters (communities). The LSC MovePiece is selected here and the connected LSCs are colored (blue or pink). Green edges indicate unified messages between LSCs.&amp;lt;br&amp;gt; Note: messages were unified here regardless of the parameters, since parameters are symbolic, e.g., MovePiece(String piecename). &amp;lt;br&amp;gt;For details, see[[http://www.weizmann.ac.il/mediawiki/harelgroup/index.php/SIV_Plugin | SIV-Plugin]].&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;amp;nbsp;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== SystemModel  ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;amp;nbsp;&amp;lt;br&amp;gt; Example1-ChessProject&amp;lt;br&amp;gt;&amp;amp;nbsp;[[Image:ChessProjectSystemModel.png|SystemModel]] &amp;lt;br&amp;gt;&amp;amp;nbsp;&amp;lt;br&amp;gt; Example2-ChessGame&amp;lt;br&amp;gt;&amp;amp;nbsp;[[Image:ChessGameSystemmodel.png|System Model]] &amp;lt;br&amp;gt;&amp;amp;nbsp;&amp;lt;br&amp;gt;&lt;/div&gt;</summary>
		<author><name>Yaaritn</name></author>	</entry>

	<entry>
		<id>https://wiki.weizmann.ac.il/playgo/index.php?title=PlayGo</id>
		<title>PlayGo</title>
		<link rel="alternate" type="text/html" href="https://wiki.weizmann.ac.il/playgo/index.php?title=PlayGo"/>
				<updated>2012-07-08T21:46:53Z</updated>
		
		<summary type="html">&lt;p&gt;Yaaritn: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Welcome to PlayGo, a comprehensive tool for behavioral, scenario-based, programming, built around the language of [[live sequence charts| ''live sequence charts'' (LSC)]] and its Java derivative, and the play-in/play-out methods for programming and execution.&lt;br /&gt;
&lt;br /&gt;
PlayGo is intended to provide extensive support for the vision of [http://www.wisdom.weizmann.ac.il/~harel/papers/LiberatingProgramming.pdf &amp;quot;liberating programming&amp;quot;]&lt;br /&gt;
&lt;br /&gt;
A description of the LSC language and the basic research underlying PlayGo can&lt;br /&gt;
be found in [http://www.wisdom.weizmann.ac.il/~playbook/Updates/ComeLetsPlay.pdf D. Harel and R. Marelly, ''Come, Let's Play:  Scenario-Based Programming Using LSCs and the Play-Engine''].&lt;br /&gt;
&amp;lt;br&amp;gt;For more information about the principles of behavioral programming, which were originally part of the basis of LSC, and for links to the implementations of behavioral programming in Java and Erlang, see [http://www.b-prog.org www.b-prog.org].&lt;br /&gt;
&lt;br /&gt;
* [[About PlayGo]]&lt;br /&gt;
* [[Language &amp;amp; Concepts]]&lt;br /&gt;
* [[PlayGo Feature List]]&lt;br /&gt;
* [[PlayGo Screenshots]]&lt;br /&gt;
* [[PlayGo Demos]]&lt;br /&gt;
* [[PlayGo Examples]]&lt;br /&gt;
* [[Download PlayGo]]&lt;br /&gt;
* [[Getting Started with PlayGo]]&lt;br /&gt;
* [[PlayGo HowTo | PlayGo HowTo...]]&lt;br /&gt;
&lt;br /&gt;
== Related Tools ==&lt;br /&gt;
* [[The Tracer]], a prototype tool for scenario-based trace visualization and exploration.&lt;br /&gt;
* [[The LSC Compiler]], a compiler for multi-modal UML sequence diagrams.&lt;br /&gt;
&lt;br /&gt;
== Contact Information ==&lt;br /&gt;
E-mail us to: [mailto:playgo@weizmann.ac.il playgo@weizmann.ac.il]&lt;/div&gt;</summary>
		<author><name>Yaaritn</name></author>	</entry>

	</feed>