MSO Eindproject

Download Report

Transcript MSO Eindproject

MSO Eindproject

October 25, 2016 Inleiding

De naam Mankala staat voor een familie van bordspelen die voornamelijk bekend zijn varianten voor, en kent ook veel verschillende namen; voorbeelden zijn Wari, Mankala, Kalah of Awari.

Wat de varianten gemeenschappelijk hebben is: • Er zijn twee spelers, die tegenover elkaar aan het speelbord zitten.

• Het speelbord bestaat uit een aantal kuiltjes. Beide spelers hebben evenveel kuilt jes. De kuiltjes aan de onderzijde van het speelbord uit Figuur 1 zijn van de speler die aan die kant van het bord zit; daarbij komt het kuiltje wat aan de rechterkant van het bord zit. De overige kuiltjes zijn van de speler aan de overkant.

• Kuiltjes bevatten nul of meer speelstenen.

• Een zet wordt gedaan door alle stenen uit een eigen kuiltje te pakken, en ze stuk voor stuk, tegen de klok in, met ´ en tegelijk in de kuiltjes van de speler zelf en van de tegenstander te strooien Hierbij worden de kuiltjes kuil voor kuil doorlopen, zonder er ´ en over te slaan.

Wat varieert is: • Het aantal kuiltjes varieert. Het meest gangbaar is het aantal van zes kuiltjes per speler, maar er zijn zelfs varianten met 32 kuiltjes per speler.

• Het aantal steentjes per kuiltje aan het begin van het spel varieert.

• Er kan al of niet ´ en ‘thuiskuiltje’ per speler zijn. In zo ' n thuiskuiltje worden stenen verzameld. Het thuiskuiltje vormt nooit het begin van een zet (er worden dus nooit stenen opgepakt uit een thuiskuiltje), maar het doet wel mee aan het spel: tijdens het strooien van stenen komen er ook stenen in de thuiskuiltjes terecht.

• • De regels voor het bepalen van het einde van het spel, en voor het bepalen van de 1

Figure 1: Een Mankala spel Figure 2: Startsituatie bij Mankala

Twee varianten

Als voorbeeld geven we de regels voor twee varianten, Mankala en Wari.

Mankala Mankala wordt meestal gespeeld met 6 speelkuiltjes per speler (maar dat kan varieert (meestal 4).

Bij het begin van het spel bevatten alle speelkuiltjes dus 4 stenen; de thuiskuiltjes zijn leeg, zoals in figuur 2. Elke speler heeft zijn thuiskuiltje aan zijn rechterhand. In figuur 2 dus, is het rechterthuiskuiltje van de onderste speler.

Aan het eind van een zet, dus wanneer de stenen uit ´ en kuiltje voor een zet zijn uitgestrooid tegen de klok in, waarbij de thuiskuiltjes meedoen, kan ´ en van de volgende situaties ontstaan: • De laatste steen komt terecht in het thuiskuiltje van de speler. De speler mag nu een nieuwe zet doen. Er is geen maximum aan het aantal keer dat een speler achter elkaar aan de beurt is.

• De laatste steen komt in een ander kuiltje dan het thuiskuiltje van de speler, en dat kuiltje is niet leeg. De speler pakt die stenen op, en gaat, met die stenen, verder met de beurt. Er is geen maximum aan het aantal keren dat in een beurt stenen opgepakt kunnen worden.

2

• De laatste steen komt in een leeg kuiltje van de tegenspeler. De zet is over, en de beurt is over: de tegenspeler is aan de beurt.

• De laatste steen komt in een leeg kuiltje van de speler. Het kuiltje van de tegen speler daar tegenover is leeg. De zet is over, de beurt is over: de tegenspeler is aan de beurt.

• De laatste steen komt in een leeg kuiltje van de speler. Het kuiltje van de tegen speler daartegenover is niet leeg. De speler pakt de laatst uitgestrooide steen plus de stenen in het kuiltje van de tegenspeler ertegenover, en voegt ze toe aan zijn thuiskuiltje. De zet is over, de beurt is over, de tegenspeler is aan de beurt. Het spel eindigt op het moment dat een speler niet kan spelen omdat hij geen speelkuiltjes met stenen meer heeft. De speler met de meeste stenen in het thuiskuiltje is de winnaar.

Wari Wari wordt meestal gespeeld met 6 speelkuiltjes per speler (maar dat kan vari eren). Spelers hebben geen thuiskuiltjes. De spelers verzamelen stenen buiten de kuiltjes.

N.B. Ook al hebben spelers geen thuiskuiltjes; het speelbord kan er precies hetzelfde uitzien als het bord dat gebruikt wordt voor de mankalaregels.

Het verschil is dat verzamelkuiltjes, in tegenstelling tot de thuiskuiltjes niet meedoen bij een zet; ze worden alleen maar gebruikt om ‘gevangen’ stenen in te verzamelen!

Er wordt meestal gestart met 4 stenen per kuiltje.

Na een zet, dus wanneer de stenen uit een kuiltje voor een zet zijn uitgestrooid, treedt een van de volgende situaties op: • De laatste steen komt in een kuiltje van de tegenstander dat een of twee stenen bevatte (er liggen nu dus twee of drie stenen). De stenen worden gepakt, en bij de buit van de speler gestopt. De zet is over, de beurt is over: de tegenstander is aan de beurt.

• De laatste steen komt ergens anders terecht. De zet is over, de beurt is over: de tegenstander is aan de beurt.

Wanneer een speler geen zet kan doen doordat hij geen stenen meer heeft, eindigt het spel. De speler die de meeste stenen heeft gevangen is de winnaar.

Opdrachten

1. Begin door een domeinmodel te maken van Mankala en Wari. Stel vervolgens een commonality/variability schema op voor de concepten die een rol spelen in het domein van deze soort spelen, en stel een analysematrix op voor wat varieert. Ga daarbij uit van bovenstaande twee varianten van het spel, en neem een derde kolom verschillende verantwoordelijkheden moeten liggen met behulp van de GRASP patronen.

3

2. Stel een UML Class Diagram op met alle klassen die nodig zijn voor een applicatie waarbij twee gebruikers Mankala en Wari kunnen spelen, met per spelvariant de mogelijkheid om het aantal kuiltjes en het aantal stenen te varieren. Geef van alle klassen een beschrijving van de verantwoordelijkheden, en laat zien hoe de klasse die verantwoordelijkheden uit kan voeren.

Geef aan welke ontwerppatronen u hierbij gebruikt, en geef van elk patroon aan welk deelprobleem het oplost, hoe u het patroon gebruikt (door een vergelijking met het desbetreffende klassendiagram uit het tekstboek). Vergelijk de gekozen oplossing met alternatieven en beargumenteer waarom u voor deze oplossing hebt gekozen.

3. Breid het UML Class Diagram nu uit met alles wat nodig is om de objecten te creeren. Ga er daarbij vanuit dat de gegevens over de voorkeur van de gebruiker voor de spelregels, het aantal stenen en het aantal kuiltjes, bekend zijn. Geef van alle klassen een beschrijving van de verantwoordelijkheden, en laat zien hoe de klasse die verantwoordelijkheden uit kan voeren.

Geef weer aan welke ontwerppatronen je gebruikt, en beantwoord daarbij dezelfde vragen als in de vorige opdracht.

4. Laat zien dat het met uw ontwerp redelijk gemakkelijk is om ´ en en ander zo uit te breiden dat het mogelijk wordt om: • met twee spelers over internet tegen elkaar te spelen; • meerdere soorten spelregels op te nemen.

Inleveren

Lever een pdf in van je oplossing via het submit systeem . De deadline van deze opdracht is 11 November 2016.

Verdere informatie

De opdracht mag zowel in het Engels als Nederlands worden gemaakt.

Op de practicum sessies is er natuurlijk de gelegenheid om vragen te stellen over de opdracht. Deze opdracht is sterk gebaseerd op een opdracht voor een soortgelijke cursus die wordt gegeven aan de Open Universiteit.

4

A. Template verslag Eindverslag MSO Project

Teamgegevens

1. Namen en studentnummers; 2. Wie heeft welke werkzaamheden verricht?

Probleembeschrijving

Er moet een programma ontworpen worden waarmee mankala op de computer kan wor den gespeeld. Het ontwerp moet twee soorten spelregels bevatten, maar moet gemakke lijk uit te brieden zijn met meerdere soorten spelregels.

Wat varieert bij verschillende soorten spelregels is: • Het aantal kuiltjes varieert. Het meest gangbaar is het aantal van zes kuiltjes per speler, maar er zijn zelfs varianten met 32 kuiltjes per speler.

• Het aantal steentjes per kuiltje aan het begin van het spel varieert.

• ...

Voeg hier eventueel andere aannamen toe.

Analyse

Domeinmodel Geef hier een domeinmodel van Mankala en Wari.

CVA en Analysematrix Aantal spelers concept concept Mankala 2 kenmerk kenmerk Wari 2 kenmerk kenmerk Commonality Kenmerk A Kenmerk B . . .

Table 1: Analysematrix Variability Variatie 1 Variatie 2 Variatie 1 Variatie 2 Table 2: Commonality-variability analysis Geef ook hier verdere toelichting over aannamen of ontwerpkeuzes.

5

GRASP Leg uit hoe je met behulp van de GRASP patronen verantwoordelijkheden toe zal kennen in het domeinmodel.

Ontwerp

Klassendiagram • Geef hier een UML diagram dat je ontwerp laat zien; • Geef een korte beschrijving van elke klasse, in termen van verantwoordelijkheden, en laat zien hoe de klasse die verantwoordelijkheden kan uitvoeren

Patterns

Geef een overzicht van de design patterns die je hebt gebruikt in het ontwerp.

Pattern naam Beantwoord voor elk pattern de volgende deelvragen: 1. Welk probleem lost dit probleem op? Is dat probleem in de analysematrix te zien?

2. Hoe heeft u het patroon gebruikt? Geef hierbij de namen van de klassen uit uw klassendiagram, en geef aan hoe ze overeenkomen met klassen uit het klassendiagram van het patroon uit het tekstboek.

3. Geef eventuele alternatieve oplossingen aan, en argumenteer waarom u voor deze oplossing heeft gekozen.

Creatie

UML Class Diagram • Leg uit hoe objecten uit je ontwerp aangemaakt worden; • Geef een korte beschrijving van elke klasse die verantwoordelijk is voor de creatie van andere objecten, in termen van verantwoordelijkheden, en laat zien hoe de klasse die verantwoordelijkheden kan uitvoeren Gebruikte Ontwerppatronen Pattern naam Beantwoord voor elk pattern de volgende deelvragen: 1. Welk probleem lost dit pattern op? Is dat probleem in de analysematrix te zien?

2. Hoe heeft u het patroon gebruikt? Geef hierbij de namen van de klassen uit uw klassendiagram, en geef aan hoe ze overeenkomen met klassen uit het klassendiagram van het patroon uit het tekstboek.

6

3. Geef eventuele alternatieve oplossingen aan, en argumenteer waarom je voor deze oplossing heeft gekozen.

Veranderingen

Internet Beschrijf hier wat er aangepast moet worden om twee spelers tegen elkaar over internet te laten spelen. Je hoeft je niet bezig te houden met netwerkafhandeling.

Nieuwe spelregels Beschrijf hier wat er in welke klassen aangepast moet worden om nieuwe spelregels toe te voegen.

Reflectie

Reflecteer kort op je ontwerp. Waar ben je tevreden over? Wat vond je moeilijk? Wat voor veranderingen zijn misschien moeilijk door te voeren?

7