Tag Archives: exercise

Programming Methodologies, SS10
Mancala Spielfeld

Ziel des Spiels
Mancala ist ein besonders in Afrika, Asien und der Karibik weit verbreitetes Spiel. Meist werden Bohnen als Spielsteine verwendet, weshalb das Spiel auch als “Bohnenspiel” bekannt ist.
Ziel des Spiels ist es, möglichst viele Spielsteine in die eigene Sammelgrube zu befördern.

Spielaufbau
Das Spielfeld ist ein längliches Brett mit sechs Spielgruben auf jeder langen Seite. Links und rechts befindet sich je ein Vorratsloch für die gewonnenen Steine, die sog. Kalah. Zu Beginn des Spiels ist diese noch leer. In jeder Spielgrube 4 Steine liegen. Die eigene Kalah befindet sich vom Spieler aus gesehen auf der rechten Seite.

Spielbeginn und Ziehen
Gezogen wird abwechselnd und nach folgenden Regeln:
Der erste Spieler nimmt aus einer Spielgrube auf seiner Seite alle vier Steine und legt jeweils einen in die folgenden Gruben. Dabei geht er gegen den Uhrzeigersinn vor und wird eventuell auch in den Gruben des Gegners Steine ablegen. Die gegnerische Kalah wird ausgelassen. Der Gegner verfährt nun ebenso und verteilt alle Steine aus einer seiner Gruben. Man darf nochmal ziehen, wenn der letzte Stein eines Zuges in der eigenen Kalah landet.

Schlagen
Trifft einer der Spieler mit dem letzten Stein in der eigenen Hälfte auf eine leere Grube, darf er diese Steine und die des Gegners aus der gegenüberliegenden Grube nehmen und in seine Kalah legen. Auf der gegnerischen Seite muss mindestens ein Stein übrigbleiben, damit derjenige Spieler weiterspielen kann. In dem speziellen Fall, dass ein Spieler mit dem letzten Stein in der eigeenen Hälfte auf eine leere Grube trifft UND alle Gruben des Gegners bis auf die gegenüberliegenden Grube leer sind, dürfen keine Steine geklaut werden.

Spielende
Bleibt auf der gegenerischen Seite kein Stein übrig, darf der andere Spieler alle seine Steine in seine Kalah legen. Damit ist das Spiel beendet. Es werden nun die Steine gezählt, und wer die meisten hat, ist der Gewinner.

Online spielen könnt ihr z.B: hier (ACHTUNG: Das Spiel spiegelt nicht notwendigerweise unsere Interpretation der  Regeln wieder!!)

Compiler Construction, WS0910

This homework continues the Xtext exercise from homework #10. This time, you have to generate Java code from EngineeringC code. Add this example model to your EngineeringC project:


EngineeringCDiagram diag {
  ECBlockDecl test {
    ECStore x {
      value : "0"
    }

    ECStore y {
      value : "7"
    }

    ECComputeBlock comp1 {
      expression : "x = 6 * y"
    }
  }

  ECBlockDecl callTest {
    ECStore z {
      value : "0"
    }

    ECBlockAppl callTest {
      instanceof : test
    }

    ECComputeBlock comp2 {
      expression : "z = x + 42"
    }
  }
}

(Remember to first modify your grammar before creating a code generation template!)

The generated Java code should calculate the correct result for all ECComputeBlocks. To ensure this, create a JUnit test in the same package as the generated class. Call the generated methods from the test and ensure that the expected values are computed. To make cross-block variable access possible, you have to modify the Xpand template so that these variables are accessible from the generated methods.

Xtext Workflow from the lecture:

<workflow>
  <property file="workflow.properties"/>
  <component	class="org.eclipse.xtext.MweReader" uri="${modelFile}">
    <register class="de.unikassel.se.compilerbau.ECStandaloneSetup"/>
  </component>

  <component id="generator" class="org.eclipse.xpand2.Generator">
    <metaModel id="mm" class="org.eclipse.xtend.typesystem.emf.EmfMetaModel">
      <metaModelPackage value="de.unikassel.se.compilerbau.eC.ECPackage"/>
    </metaModel>
    <expand value="GenerateEC::Root FOR model"/>
    <outlet path="${srcGenPath}/">
      <postprocessor class="org.eclipse.xpand2.output.JavaBeautifier"/>
    </outlet>
  </component>
</workflow>

Helpful links:

Compiler Construction, WS0910

Please follow the instructions given in the lecture to complete the assignment.

* Download/install Xtext, preferably using a complete Eclipse distribution from http://xtext.itemis.com/xtext/language=en/23947/downloads
* Create a new workspace and a new Xtext project
* Write a grammar corresponding to the simplified EngineeringC model shown in the lecture
* Run the generated workflow and test the parser with some EngineeringC diagrams

To hand in your homework, ZIP the Eclipse workspace which contains the Xtext project and upload the ZIP file to your CVS repository. Deadline is Friday, Feb. 5th.