Twee prompts bij deze proef. Met Coach krijg je hulp terwijl je de proef maakt, zonder code. Met Quoteer laat je je afgewerkte code streng verbeteren, volgens de puntenverdeling en het boeteblad.
Let op: de quoteerprompt is recent gemaakt en werd niet gebruikt bij de originele proef. De score die je ermee krijgt, zegt dus niets over de scores van toen. Had de proef geen puntenverdeling, dan is die achteraf toegevoegd.
Introductie

Magic The Gathering is een populair kaart- en verzamelspel. We maken een vereenvoudigde versie waarmee we kunnen nagaan of we een bepaald wezen kunnen maken (casten) met een bepaalde hoeveelheid landkaarten.
Er zijn 2 soorten kaarten:
- CreatureKaarten: zo’n wezen kan je enkel maken als je genoeg land hebt om de casting cost in mana (van een bepaalde kleur) te betalen.
- LandKaarten: elk land produceert 1 mana van een specifiek type (kleur).
Wil je een wezen maken dat 4 water (blauwe) mana vraagt, dan heb je dus 4 Islands nodig (een Island geeft 1 blauwe mana).
Ga ervan uit dat de gebruiker géén foute invoer doet.
Opdracht
Deze opgave bestaat uit 3 grote delen:
- De klasse CreatureKaart maken
- De klasse LandKaart maken
- De applicatie Casting tester maken
CreatureKaart klasse
Een kaart met een wezen bestaat uit volgende zaken (we gebruiken enkel wat de zwarte pijlen aanduiden):

Eigenschappen
- CreatureName: de naam van het wezen.
- Een
string, read-only property.
- Een
- De casting cost: hoeveel mana er nodig is. In het voorbeeld hierboven heb je 2 blauwe en 4 “kleurloze” mana nodig (kleurloos: de speler mag eender welke kleur gebruiken).
- In de klasse stellen we de casting cost voor met 3 aparte read-only properties:
ColoredTypeNeeded: van het typeManaType(een enum, zie verder bij LandKaart). Dat is de hoofdkleur van de kaart (Water in het voorbeeld).AmountColoredTypeNeeded: eenintdie zegt hoeveel mana van het typeColoredTypeNeededer nodig is (2 in het voorbeeld).AmountUncoloredTypeNeeded: ook eenint, die zegt hoeveel kleurloze mana er nodig is (4 in het voorbeeld).
- Heb je OOP al goed in de vingers? Bekijk dan zeker de extra opgave voor dit stuk, achteraan.
- In de klasse stellen we de casting cost voor met 3 aparte read-only properties:
- SpecialAbilities:
- Een
string, read-only property.
- Een
- FlavourText:
- Een
string, read-only property.
- Een
- Attack/Defense:
- Twee
int-propertiesAttackenDefense, met een publieke get en een private set.- Beide properties kunnen nooit lager dan 0 worden (0 mag wel). Een negatieve waarde wordt 0.
- Twee
Constructor
Een CreatureKaart-object kan je enkel aanmaken via een overloaded constructor waaraan je alle voorgaande eigenschappen meegeeft.
Methoden
ChangeAttack: aanvaardt 1boolen geeft niets terug. Is dietrue, dan stijgt deAttackproperty met 1. Is zefalse, dan daalt deAttackproperty met 1.ToonKaart: aanvaardt geen parameters en geeft niets terug. Toont een samenvatting van de kaart op het scherm:
*******************************************************
Mahamoti Djinn (4 kleurloos, 2 Water mana)
*******************************************************
"Of royal blood among the spirits of the air, [enzovoort]"
-------------------------------------------------------
Abilities: Flying
Attack: 5
Defense: 6
-------------------------------------------------------
Bij Attack en Defense toon je de HUIDIGE waarden.
LandKaart klasse
Er zijn 5 soorten land. Elk land geeft 1 mana van de kleur die op de kaart staat.

Eigenschappen
Een landkaart bestaat uit 2 zaken:
- De naam van het land (read-only property,
string): Island, Forest, Plains, Mountain of Swamp. - Het type mana dat het land geeft.
- Een read-only property
ManaTypevan het typeManaType(zie hieronder).
- Een read-only property
Enum ManaType
Er zijn 5 manakleuren. Die stel je voor met een enum ManaType. De kleuren zijn, in deze volgorde:
- Water (Island)
- Bos (Forest)
- Zon (Plains)
- Vuur (Mountain)
- Dood (Swamp)
Constructor
Een LandKaart-object kan je enkel aanmaken via een overloaded constructor waaraan je alle voorgaande eigenschappen meegeeft.
Methoden
ToonKaart: aanvaardt geen parameters en geeft niets terug. Toont een samenvatting van de kaart op het scherm:
*******************************************************
Island (Water mana)
*******************************************************
Maak 3 creature-objecten aan
Maak in je Main 3 CreatureKaart-objecten aan:
- De Mahamoti Djinn van hierboven.
ColoredTypeNeeded: ManaType.Water,AmountColoredTypeNeeded: 2 enAmountUncoloredTypeNeeded: 4
- Een “Kindercatch”. Deze kaart heeft geen
SpecialAbilities: die property is dus een lege tekst (""). Ze heeft 3 bos-mana en 3 kleurloze mana nodig.ColoredTypeNeeded: ManaType.Bos,AmountColoredTypeNeeded: 3 enAmountUncoloredTypeNeeded: 3

Kaart uitleg - Deze schattige “Mountain Goat”, met als
SpecialAbilities“Mountainwalk”.ColoredTypeNeeded: ManaType.Vuur,AmountColoredTypeNeeded: 1 enAmountUncoloredTypeNeeded: 0

Kaart uitleg
De flavour text en de attack en defense lees je af van de kaarten.
Casting tester
We maken nu een applicatie in drie stappen:
- Een deck met landkaarten aanmaken op basis van de invoer van de gebruiker
- Vragen welk creature de gebruiker wil maken
- Controleren of dat wezen gemaakt kan worden met de landkaarten in het deck
Stap 1: landen maken
Het programma vraagt per manatype hoeveel landen de gebruiker heeft.
Aantal Water?
>4
Aantal Bos?
>2
Aantal Zon?
>3
...
Maak een List<LandKaart> en zet er het juiste aantal LandKaart-objecten in. In het voorbeeld staan er dus vooraan 4 Islands (Water), gevolgd door 2 Forests (Bos), enzovoort.
Stap 2: welk creature?
Het programma vraagt welk dier de gebruiker wil maken. Het toont daarbij de 3 creatures (de djinn, de kindercatch en de geit), elk met de methode ToonKaart.
De gebruiker antwoordt met 1, 2 of 3 (foute invoer hoef je niet te controleren).
Stap 3: controle
De applicatie bekijkt nu of je het gekozen dier kan maken: zitten er in de List<LandKaart> genoeg landen van het juiste type, en genoeg landen in totaal voor de kleurloze mana?
De methode CastTest
Die controle gebeurt in een static methode CastTest in de klasse LandKaart.
De methode aanvaardt 2 parameters:
- Een
List<LandKaart>met het deck landkaarten - Een
CreatureKaartmet het dier dat je wil maken
De methode geeft een bool terug: kan het dier gemaakt worden of niet?
Een land kan maar één mana tegelijk geven. Een Island die al gebruikt wordt voor de blauwe mana van de djinn, telt dus niet meer mee voor zijn kleurloze mana.
De methode gebruiken
Gebruik CastTest om te controleren of het gekozen dier gemaakt kan worden. Geef de LandKaart-lijst uit stap 1 en het dier uit stap 2 mee.
Toon dan, afhankelijk van het resultaat:
Dier kan gemaakt worden (als de bool true is)
of
Dier kan niet gemaakt worden (als de bool false is)
Voorbeeld uitvoer
Tekst die start met “>” is invoer van de gebruiker. De flavour texts zijn hier ingekort.
Aantal Water?
>4
Aantal Bos?
>2
Aantal Zon?
>3
Aantal Vuur?
>0
Aantal Dood?
>0
Welk dier wil je maken?
1.
*******************************************************
Mahamoti Djinn (4 kleurloos, 2 Water mana)
*******************************************************
"Of royal blood among the spirits of the air, [enzovoort]"
-------------------------------------------------------
Abilities: Flying
Attack: 5
Defense: 6
-------------------------------------------------------
2.
*******************************************************
Kindercatch (3 kleurloos, 3 Bos mana)
*******************************************************
"In the forest villages of Kessig, [enzovoort]"
-------------------------------------------------------
Abilities:
Attack: 6
Defense: 6
-------------------------------------------------------
3.
*******************************************************
Mountain Goat (0 kleurloos, 1 Vuur mana)
*******************************************************
"Folklore has it that to capture a mountain goat [enzovoort]"
-------------------------------------------------------
Abilities: Mountainwalk
Attack: 1
Defense: 1
-------------------------------------------------------
>1
Dier kan gemaakt worden
Extra opgave voor de OO-pro’s
Vervang de 3 properties van de casting cost door 1 property van het type CastingCost, een klasse die je zelf maakt.
Die klasse heeft 3 eigenschappen: ColoredTypeNeeded, AmountColoredTypeNeeded en AmountUncoloredTypeNeeded.
Je kan objecten van deze klasse enkel aanmaken met een constructor die 3 parameters vraagt, voor de 3 eigenschappen.
Deze oplossing is afgeschermd.
Studenten krijgen de sleutel van hun lesgever. Heb je de sleutel al eens op dit toestel
gebruikt, dan verschijnt de oplossing hier vanzelf.