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

Kaart uitleg

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:

  1. De klasse CreatureKaart maken
  2. De klasse LandKaart maken
  3. De applicatie Casting tester maken

CreatureKaart klasse

Een kaart met een wezen bestaat uit volgende zaken (we gebruiken enkel wat de zwarte pijlen aanduiden):

De kaart Mahamoti Djinn met pijlen naar Creature Name, Casting cost (4 en twee blauwe mana), Special Abilities (Flying), Flavour text en Attack/Defence (5/6).

Kaart uitleg

Eigenschappen

  • CreatureName: de naam van het wezen.
    • Een string, read-only property.
  • 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:
      1. ColoredTypeNeeded: van het type ManaType (een enum, zie verder bij LandKaart). Dat is de hoofdkleur van de kaart (Water in het voorbeeld).
      2. AmountColoredTypeNeeded: een int die zegt hoeveel mana van het type ColoredTypeNeeded er nodig is (2 in het voorbeeld).
      3. AmountUncoloredTypeNeeded: ook een int, 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.
  • SpecialAbilities:
    • Een string, read-only property.
  • FlavourText:
    • Een string, read-only property.
  • Attack/Defense:
    • Twee int-properties Attack en Defense, met een publieke get en een private set.
      • Beide properties kunnen nooit lager dan 0 worden (0 mag wel). Een negatieve waarde wordt 0.

Constructor

Een CreatureKaart-object kan je enkel aanmaken via een overloaded constructor waaraan je alle voorgaande eigenschappen meegeeft.

Methoden

  • ChangeAttack: aanvaardt 1 bool en geeft niets terug. Is die true, dan stijgt de Attack property met 1. Is ze false, dan daalt de Attack property 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.

Vijf landkaarten: Island (blauwe druppel), Forest (groene boom), Plains (witte zon), Mountain (rode vlam) en Swamp (zwarte schedel).

Kaart uitleg

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 ManaType van het type ManaType (zie hieronder).

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:

  1. De Mahamoti Djinn van hierboven.
    • ColoredTypeNeeded: ManaType.Water, AmountColoredTypeNeeded: 2 en AmountUncoloredTypeNeeded: 4
  2. 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 en AmountUncoloredTypeNeeded: 3

    De kaart Kindercatch: casting cost 3 en drie groene mana, Creature - Spirit, 6/6.

    Kaart uitleg
  3. Deze schattige “Mountain Goat”, met als SpecialAbilities “Mountainwalk”.
    • ColoredTypeNeeded: ManaType.Vuur, AmountColoredTypeNeeded: 1 en AmountUncoloredTypeNeeded: 0

    De kaart Mountain Goat: één rode mana, Mountainwalk, 1/1.

    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:

  1. Een deck met landkaarten aanmaken op basis van de invoer van de gebruiker
  2. Vragen welk creature de gebruiker wil maken
  3. 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 CreatureKaart met 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.